# 課題B1 (接近過程抽出)

## 接近過程抽出

課題B1 (機能理解) の終了直後は下図のような状態でデバッグ実行が終了しているはずです.
デバッグ実行が終了していることを確認したら, 右上にあるパースペクティブを右クリックし, いったん「トレースデバッガ(順方向)」のパースペクティブを閉じてください.
ここでは, 課題B1 (機能理解) では使用しなかった逆方向バージョンのある機能を用いて, 課題B1 (機能理解) と同様,

> 「選択された図形がJHotDrawのシステム内部でどのように管理され，図形移動機能の実行によってどのように取り出されて，移動していくか?」

を理解することを目指します.

ここで, 「トレースデバッガ(逆方向)」のパースペクティブを開いてください.

その状態のままで, ブレークポイントビュー上にある「ブレークポイントを取り入れる」をクリックしてください.
ブレークポイントを取り入れたら, ブレークポイントビュー上で下記2つのブレークポイントのチェックを外してください.

1. 98行目 DefaultDragTracker.mousePressed(MouseEvent)
2. 116行目 DefaultDragTracker.mousePressed(MouseEvent)

そのあと, デバッグ実行してください.
デバッグ実行したら, 再開を1回押して118行目の2回目の実行にまで進んでください.

現在は, DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの118行目にいます.
まずは, DefaultDragTracker クラスのインスタンス (id = 758826749) のフィールド transformedFigures が参照している HashSet のインスタンスに
RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を抽出して見ていきます.
ここで, ステップネクストを2回押してください.

ここで, 変数ビュー上の「呼び出し前」のメソッド名が HashSet.add(Object) であることを確認してください.
それを確認したら, 変数ビュー上の「呼び出し前」を開いて, 引数を右クリックしてください.
右クリックすると, ポップアップメニューが出てくるので, 上の方の HashSet のインスタンスと RectangleFigure のインスタンスを
対象とした「オブジェクトの接近過程抽出」をクリックしてください.

実際に「オブジェクトの接近過程抽出」を実行すると, 下図のような状態になります.

「オブジェクトの接近過程」ビュー上の「開始時点」をクリックしてください.

「オブジェクトの接近過程抽出」ビュー上の「参照先側001」から「参照先側020」までを順番にクリックしてください.

「オブジェクトの接近過程抽出」ビュー上の「参照元側001」から「参照元側002」までを順番にクリックしてください.

「オブジェクトの接近過程」ビュー上の「参照時点」をクリックしてください.

ここまでで, DefaultDragTracker クラスのインスタンス (id = 758826749) のフィールド transformedFigures が参照している
HashSet のインスタンスに, RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を見てきました.
ここで, 課題B1の接近過程抽出は終了です.
「オブジェクトの接近過程」ビューを全て閉じ, そのあとデバッグ実行を終了してください.
デバッグ実行を終了したら, この「トレースデバッガ(逆方向)」のパースペクティブを閉じてください.

課題B1の接近過程抽出が終了しましたら, 以下のアンケートにお答えください.

アンケート回答
次へ