ここでは, 課題A2 (機能理解) では使用しなかった逆方向バージョンのある機能を用いて, 課題A2 (機能理解) と同様,
「配置された図形がArgoUMLのシステム内部でどのように管理され,選択機能の実行によってどのように取り出されて,どのように選択図形として登録されるか?」を理解することを目指します.
Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
課題A2 (機能理解) の終了直後は下図のような状態でデバッグ実行が終了しているはずです.
デバッグ実行が終了していることを確認したら, 右上にあるパースペクティブを右クリックし, いったん「トレースデバッガ(順方向)」のパースペクティブを閉じてください.
ここで, 「トレースデバッガ(逆方向)」のパースペクティブを開いてください.
その状態のままで, ブレークポイントビュー上にある「ブレークポイントを取り入れる」をクリックしてください.
SelectionManager.addFig(Fig) メソッドの130行目と, ModeSelect.mousePressed(MouseEvent) メソッドの156行目の
2つにチェックが入っているはずです. ブレークポイントを確認したら, デバッグ実行してください.
デバッグ実行したら, そのまま再開ボタンを3回押してください.
すると, SelectionManager クラスの addFig(Fig) メソッドの130行目の2回目の実行で一時停止します.
現在は, SelectionManager クラスの addFig(Fig) メソッドの130行目にいます.
このメソッドの仮引数 f に渡された FigClass クラスのインスタンス (id = 1675174935) が, この機能によって選択されるクラス図上の1つの「クラス」に当たり,
この行の実行によってその「クラス」が選択状態になります.
まずは, SelectionManager クラスのインスタンス (id = 4310438) のフィールド selections が参照している ArrayList のインスタンスに
SelectionClass クラスのインスタンス (id = 1672744985) が, この行で追加されるようになるまでの経緯を見ていきます.
ここで, ステップネクストを3回押してください.
ここで, 変数ビュー上の「呼び出し前」のメソッド名が List.add(Object) であることを確認してください.
それを確認したら, 変数ビュー上の「呼び出し前」を開いて, 引数を右クリックしてください.
右クリックすると, ポップアップメニューが出てくるので, 上の方の ArrayList クラスのインスタンスと
SelectionClass のインスタンスを対象とした「オブジェクトの接近過程抽出」をクリックしてください.
実際に「オブジェクトの接近過程抽出」を実行すると, 下図のような状態になります.
「オブジェクトの接近過程」ビュー上の「開始時点」をクリックしてください.
「オブジェクトの接近過程」ビュー上の「参照先側001」から「参照先側040」までを順番にクリックしてください.
「オブジェクトの接近過程」ビュー上の「参照元側001」から「参照元側011」までを順番にクリックしてください.
「オブジェクトの接近過程」ビュー上の「参照時点」をクリックしてください.
ここまでで, SelectionManager クラスのインスタンス (id = 4310438) のフィールド selections が参照している ArrayList に
SelectionClass クラスのインスタンス (id = 1672744985) が追加されるまでの過程を見てきました.
ここで, 課題A2の接近過程抽出は終了です.
「オブジェクトの接近過程」ビューを全て閉じ, そのあとデバッグ実行を終了してください.
課題A2の接近過程抽出が終了しましたら, 以下のアンケートにお答えください.
次へ