diff --git a/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html b/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html index 0f9bb78..64ebdfa 100644 --- a/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html +++ b/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html @@ -1,12 +1,12 @@
-
課題A1では, ArgoUMLの図形の削除機能について見ていきます.
ArgoUMLはオープンソースのUMLモデリングツールで, Javaで書かれております.
@@ -38,7 +38,7 @@


Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
@@ -89,7 +89,7 @@
ここで, ソースコードを見ると, ローカル変数 delegate が参照しているインスタンスに対して removeFromDiagramImpl() メソッドが呼び出されていることがわかります.
ここでは, ローカル変数 delegate の値がどこから来たのかを見ていきます.
FigNodeModelElement クラスの removeFromDiagram() メソッドの1965行目にブレークポイントを入れ,
- ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください.
+ ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.

@@ -124,7 +124,7 @@
ソースコードを見ると, ローカル変数 f の値は, 86行目の拡張for文で ローカル変数 figs から取得した要素を代入していることが確認できます.
ここからは, ローカル変数 figs の値がどこから来たのかを見ていきます.
- すぐ上にある85行目にブレークポイントを入れてから, ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください.
+ すぐ上にある85行目にブレークポイントを入れてから, ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.

@@ -145,7 +145,7 @@
Editor クラスの getSelectionManager() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, Editor クラスのインスタンス (id = 371019845) が
- フィールド _selectionManager として SelectionManager クラスのインスタンス (id = 4310438) を保持していることがわかります.
+ フィールド _selectionManager として SelectionManager クラスのインスタンス (id = 4310438) を参照していることがわかります.
これを確認したら, ステップリターンを1回押して呼び出し元に戻ってください.

SelectionClass クラスの getContent() メソッドの中に入りました.
ここで, 変数ビュー上の this を開くと SelectionClass クラスのインスタンス (id = 1672744985) が
- フィールド content として FigClass クラスのインスタンス (id = 1675174935) を保持していることがわかります.
+ フィールド content として FigClass クラスのインスタンス (id = 1675174935) を参照していることがわかります.
これを確認したら, ステップリターンを1回押して呼び出し元に戻ってください.

今までの結果から, FigClass クラスのインスタンス (id = 1675174935) に関連するオブジェクトについて, 以下のことがわかりました.

@@ -243,7 +243,7 @@
Globals クラスの static メソッドである curEditor() メソッドに入りました.
- ここで, ソースコードを見ると, Globals クラスが static フィールド _curEditor として Editor クラスのインスタンスを保持していることがわかります.
+ ここで, ソースコードを見ると, Globals クラスが static フィールド _curEditor として Editor クラスのインスタンスを参照していることがわかります.
これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください.

Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
@@ -32,6 +32,7 @@
現在は, ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドの83行目にいます.
+ まずは, ActionRemoveFromDiagram クラスのインスタンスに FigClass クラスのインスタンス (id = 1675174935) が接近する過程を抽出して見ていきます.
ここで, ステップオーバーを6回押して, 89行目にまで進んでください.
そのあと, ステップネクストを1回押してください.


- 「オブジェクトの接近過程抽出」ビュー上の「参照先側012」をクリックしてください.
+ ここまでで, ActionRemoveFromDiagram クラスのインスタンスに FigClass クラスのインスタンス (id = 1675174935) が接近する過程を見てきました.
+ 抽出した結果を見ると, SelectionManager クラスのインスタンス (id = 4310438) のローカル変数 figs が参照している Vector に追加されていた FigClass クラスのインスタンスを
+ 取得してきていることがわかりましたが, その FigClass クラスのインスタンスがどうやって追加されたのかについては, この抽出範囲だけではわかりません.
+ そこで, ここからは, そのローカル変数 figs に FigClass クラスのインスタンス (id = 1675174935) が追加されるまでの過程を見ていきます.
+ まずは, 「オブジェクトの接近過程抽出」ビュー上の「参照先側012」をクリックしてください.

@@ -99,7 +104,9 @@

- ここで課題A1の接近過程抽出は終了です.
+ ここまでで, SelectionManager クラスのインスタンス (id = 4310438) のローカル変数 figs が参照している Vector に
+ FigClass クラスのインスタンス (id = 1675174935) が追加されるまでの過程を見てきました.
+ ここで, 課題A1の接近過程抽出は終了です.
「オブジェクトの接近過程」ビューを全て閉じ, そのあとデバッグ実行を終了してください.
デバッグ実行を終了したら, この「トレースデバッガ(逆方向)」のパースペクティブを閉じてください.

課題A2では, ArgoUMLの図形の選択機能について見ていきます.
ArgoUMLはオープンソースのUMLモデリングツールで, Javaで書かれております.
@@ -29,11 +29,11 @@
SelectinoManager クラスの125行目と130行目にブレークポイントを入れた状態で,
- ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください.
+ ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.
すると, 実際にトレース上に実行された記録が残っている130行目にだけブレークポイントが新規追加されます.
そのあと, ブレークポイントビュー上で下記のブレークポイントのチェックを外してください.

Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
@@ -61,7 +61,7 @@
先ほどの実行手順にしたがって進めていくと, 下図のように SelectionManager クラスの addFig(Fig) メソッド内の130行目で一時停止している状態になっているはずです.
この状態になっていれば, ここから時間計測を開始してください.
- ここで, ソースコードと変数ビューを見ると, SelectionManager クラスのインスタンス (id = 4310438) が保持するフィールド selections へは
+ ここで, ソースコードと変数ビューを見ると, SelectionManager クラスのインスタンス (id = 4310438) が参照するフィールド selections へは
makeSelectionFor(Fig) メソッドの戻り値である SelectionClass クラスのインスタンス (id = 1672744985) が追加されていることがわかります.
課題A2では, このオブジェクトの追加に関わっている SelectionManager クラスのインスタンスと SelectionClass クラスのインスタンスについて見ていきます.
まずは, ステップインを3回押してこのメソッドの中に入ってください.
@@ -78,7 +78,7 @@
FigClass クラスの makeSelection() メソッドに入りました.
ソースコードを見ると, ここで SelectionClass クラスのインスタンスを新たに生成し, その引数として自分自身が渡されていることが確認できます.
- よって, ここで新たに生成された SelectionClass クラスのインスタンスが FigClass クラスのインスタンス (id = 1675174935) を保持していることがわかります.
+ よって, ここで新たに生成された SelectionClass クラスのインスタンスが FigClass クラスのインスタンス (id = 1675174935) を参照していることがわかります.
また, このメソッドでは, この SelectionClass クラスのインスタンスを戻り値として返していることが確認できます.
これを確認したら, ステップオーバーを1回押して, 呼び出し元に戻ってください.


Editor クラスの getLayerManager() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, Editor クラスのインスタンス (id = 371019845) が
- フィールド _layerManager として LayerManager クラスのインスタンス (id = 1975264299) を保持していることがわかります.
+ フィールド _layerManager として LayerManager クラスのインスタンス (id = 1975264299) を参照していることがわかります.
これを確認したら, ステップオーバーを1回押して呼び出し元に戻ってください.

LayerManager クラスの hit(Rectangle) メソッドに入りました.
ここで, 変数ビュー上の this を開くと LayerManager クラスのインスタンス (id = 1975264299) が
- フィールド _activeLayer として LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) を保持していることがわかります.
+ フィールド _activeLayer として LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) を参照していることがわかります.
これを確認したら, ステップインを4回押して LayerPerspectiveMutable クラスの hit(Rectangle) メソッドの中に入ってください.

LayerPerspectiveMutable クラスの hit(Rectangle) メソッドに入りました.
ここで, 変数ビュー上の this を開くと, LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) が
- フィールド contents として ArrayList を保持していることがわかります.
+ フィールド contents として ArrayList を参照していることがわかります.
また, ソースコードを見ると, 231行目でこの ArrayList から取り出してきた要素を, 233行目の return f で戻り値として返されていることが確認できます.
ここでは, ステップオーバーを2回押して232行目にまで進んでください.

現在は ModeSelect クラスの mousePressed(MouseEvent) メソッドの160行目を見ています.
ここで, 変数ビュー上の this を開くと, ModeSelect クラスのインスタンス (id = 1807431709) が
- フィールド editor として Editor クラスのインスタンス (id = 371019845) を保持していることがわかります.
+ フィールド editor として Editor クラスのインスタンス (id = 371019845) を参照していることがわかります.

ここまでの結果から, SelectionClass クラスのインスタンスに関わる各オブジェクトの関係について, 以下のことがわかりました.

Editor クラスの getSelectionManager() メソッドに入りました.
ここで, 変数ビュー上の this を開くと Editor クラスのインスタンス (id = 371019845) が
- フィールド _selectionManager として SelectionManager クラスのインスタンス (id = 4310438) を保持していることがわかります.
+ フィールド _selectionManager として SelectionManager クラスのインスタンス (id = 4310438) を参照していることがわかります.
これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください.


Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
@@ -28,7 +28,9 @@
その状態のままで, ブレークポイントビュー上にある「ブレークポイントを取り入れる」をクリックしてください.
ブレークポイントを取り入れたら, デバッグ実行してください.
- そのあと, 再開ボタンを2回押してください.
+ まずは, SelectionManager クラスのインスタンス (id = 4310438) のフィールド selections が参照している ArrayList に
+ SelectionClass クラスのインスタンス (id = 1672744985) が追加されるまでの過程を見ていきます.
+ デバッグ実行したら, そのまま再開ボタンを2回押してください.
すると, 現在の実行時点が2回目の SelectionManager クラスの addFig(Fig) メソッドの130行目に移ります.


- ここで課題A2の接近過程抽出は終了です.
+ ここまでで, SelectionManager クラスのインスタンス (id = 4310438) のフィールド selections が参照している ArrayList に
+ SelectionClass クラスのインスタンス (id = 1672744985) が追加されるまでの過程を見てきました.
+ ここで, 課題A2の接近過程抽出は終了です.
「オブジェクトの接近過程」ビューを全て閉じ, そのあとデバッグ実行を終了してください.

課題A3では, JHotDrawの図形の移動機能について見ていきます.
JHotDrawはオープンソースの図形描画ツールで, Javaで書かれております.
@@ -39,7 +39,7 @@


- ブレークポイントを置いた行は、図形を移動するたびに実行されます.
@@ -88,7 +84,7 @@
ソースコードを見ると, RectangleFigure クラスのインスタンス (id = 1952912699) は DefaultDragTracker クラスのインスタンス (id = 758826749) が
- フィールド transFormedFigures の要素として保持していることがわかります.
+ フィールド transFormedFigures の要素として参照していることがわかります.
次は, この transFormedFigures に RectangleFigure クラスのインスタンスがどの実行時点で追加されたのかを見ていきます.
変数ビュー上で開いている「呼び出し後」の中にある戻り値を右クリックして「オブジェクトの追加時点に飛ぶ」を選択してください.
実行すると, オブジェクトの追加時点である DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの118行目にまで現在の実行時点が遡ります.
@@ -113,13 +109,13 @@
ここで, ソースコードを見ると, Collections クラスの static メソッドである unmodifiableSet(Set) が呼び出されており,
その引数として フィールド getSelectedFigures が渡されていることが確認できます.
また, 変数ビュー上の「呼び出し後」および this を開くと, このフィールド getSelectedFigures は
- DefaultDrawingView クラスのインスタンス (id = 150367587) が保持していることがわかります.
+ DefaultDrawingView クラスのインスタンス (id = 150367587) が参照していることがわかります.
これを確認したら, ステップバックリターンを1回押して呼び出し元に戻ってください.

先ほどの結果から, RectangleFigure クラスのインスタンス (id = 1952912699) は
- DefaultDrawingView クラスのインスタンス (id = 150367587) が セットの要素として保持していることがわかりました.
+ DefaultDrawingView クラスのインスタンス (id = 150367587) が セットの要素として参照していることがわかりました.
次は, この DefaultDrawingView クラスのインスタンスがどこから来たのかを見ていきます.
ここでは, ステップバックオーバーを5回押して98行目に戻ってください.
ソースコードを見ると, getView() メソッドの戻り値を ローカル変数 view に代入していることが確認できます.
@@ -129,19 +125,19 @@
AbstractTool クラスの getView() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DefaultDragTracker クラスのインスタンス (id = 758826749) が
- DefaultDraingEditor クラスのインスタンス (id = 1859859960) を保持していることがわかります.
+ DefaultDraingEditor クラスのインスタンス (id = 1859859960) を参照していることがわかります.
これを確認したら, ステップインを3回押して DefaultDrawingEditor クラスの getAcitiveView() メソッドの中に前から入ってください.

DefaultDrawingEditor クラスの getAcitiveView() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が
- DefaultDrawingView クラスのインスタンス (id = 150367587) を保持していることがわかります.
+ DefaultDrawingView クラスのインスタンス (id = 150367587) を参照していることがわかります.

先ほどの結果から, DefaultDrawingView クラスのインスタンス (id = 150367587) は
- DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が保持していることがわかりました.
+ DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が参照していることがわかりました.
呼び出しスタック上で2つ呼び出し元である DefaultDragTrackerクラスの mousePressed(MouseEvent) メソッドをクリックしてください.
ここで, 課題A3は終了です. 時間計測を終了してください.

@@ -17,6 +17,8 @@
課題A3終了直後は下図のような状態になっているはずです.
+ まずは, DefaultDragTracker クラスのインスタンス (id = 758826749) のフィールド transformedFigures が参照している HashSet に
+ RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を抽出して見ていきます.
ここで, 「実行時点の登録」ビュー上で登録している「118行目 DefaultDragTracker.mousePressed(MouseEvent)」をダブルクリックしてください.
すると, 現在の実行時点が DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの118行目に移ります.


- ここで課題A3の接近過程抽出は終了です.
+ ここまでで, DefaultDragTracker クラスのインスタンス (id = 758826749) のフィールド transformedFigures が参照している HashSet に
+ RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を見てきました.
+ ここで, 課題A3の接近過程抽出は終了です.
「オブジェクトの接近過程」ビューを全て閉じてください.
なお, デバッグ実行は終了せずにそのままの状態にしておいてください.

課題A4では, JHotDrawの図形の選択機能について見ていきます.
JHotDrawはオープンソースの図形描画ツールで, Javaで書かれております.
@@ -35,13 +35,9 @@
- - ブレークポイントを置いた行は、図形を選択するたびに実行されます. + 現在の実行時点の行は、図形を選択するたびに実行されます.
@@ -53,7 +49,7 @@
まずは,「実行時点の登録」ビューの追加ボタンをクリックして実行時点の登録を行ってください.
- ここで, ソースコードと変数ビューを見ると, DefaultDrawingView クラスのインスタンス (id = 150367587) が保持するフィールド selectedFigures へは
+ ここで, ソースコードと変数ビューを見ると, DefaultDrawingView クラスのインスタンス (id = 150367587) が参照するフィールド selectedFigures へは
RectangleFigure クラスのインスタンス (id = 1952912699) が追加されていることがわかります.
課題A4では, このオブジェクトの追加に関わっている DefaultDrawingView クラスのインスタンスと RectangleFigure クラスのインスタンスについて見ていきます.


@@ -75,19 +71,19 @@
AbstractTool クラスの getView() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DefaultDragTracker クラスのインスタンス (id = 758826749) が
- DefaultDraingEditor クラスのインスタンス (id = 1859859960) を保持していることがわかります.
+ DefaultDraingEditor クラスのインスタンス (id = 1859859960) を参照していることがわかります.
これを確認したら, ステップインを3回押して DefaultDrawingEditor クラスの getAcitiveView() メソッドの中に前から入ってください.

DefaultDrawingEditor クラスの getAcitiveView() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が
- DefaultDrawingView クラスのインスタンス (id = 150367587) を保持していることがわかります.
+ DefaultDrawingView クラスのインスタンス (id = 150367587) を参照していることがわかります.

先ほどの結果から, DefaultDrawingView クラスのインスタンス (id = 150367587) は
- DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が保持していることがわかりました.
+ DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が参照していることがわかりました.
呼び出しスタック上で2つ呼び出し元である DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドをクリックしてください.

現在は, 呼び出し元である SelectionTool クラスの getDragTracker() メソッド見ています.
ここで 変数ビュー上の 「呼び出し前」および this を開くと, 先ほどの setDraggedFigure (Figure) メソッドが呼び出されている
- DefaultDragTracker クラスのインスタンス (id = 758826749) は DelegationSelectionTool クラスのインスタンス (id = 5999587451) が保持していることがわかります.
+ DefaultDragTracker クラスのインスタンス (id = 758826749) は DelegationSelectionTool クラスのインスタンス (id = 5999587451) が参照していることがわかります.
引き続き, 仮引数 f の値がどこから来ているのかを見るために, 呼び出しスタック上でさらに1つ呼び出し元をクリックしてください.

DefaultDrawingView クラスの getDrawing() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingView クラスのインスタンス (id = 150367587) が
- フィールド drawing として QuadTreeDrawing クラスのインスタンス (id = 1583174451) を保持していることがわかります.
+ フィールド drawing として QuadTreeDrawing クラスのインスタンス (id = 1583174451) を参照していることがわかります.
これを確認したら, ステップリターンを1回押して呼び出し元に戻ってください.

QuadTree クラスの findContains(Point2D$Double) メソッドに入りました.
ここで, 変数ビュー上の this を開くとQuadTree クラスのインスタンス (id = 808853315) がフィールド root として
- QuadTree の内部クラス QuadNode クラスのインスタンス (id = 2120356010) を保持していることがわかります.
+ QuadTree の内部クラス QuadNode クラスのインスタンス (id = 2120356010) を参照していることがわかります.
ここでは, ステップオーバーを1回押して83行目に進んだあと, ステップインを2回押して,
QuadTree$QuadNode クラスの findContains(Point2D$Double) メソッドの中に前から入ってください.

QuadTree$QuadNode クラスの findContains(Point2D$Double) メソッドに入りました.
ここで, 変数ビュー上の this を開くと, QuadTree$QuadNode クラスのインスタンスは
- フィールド objects として HashMap を保持していることがわかります.
+ フィールド objects として HashMap を参照していることがわかります.

@@ -201,10 +197,10 @@
ここまでの結果から RectangleFigure クラスのインスタンスに関わる各オブジェクトの関係について, 以下のことがわかりました.
AbstractTool クラスの getView() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DelegationSelectionTool クラスのインスタンス (id = 599587451) が
- DefaultDraingEditor クラスのインスタンス (id = 1859859960) を保持していることがわかります.
+ DefaultDraingEditor クラスのインスタンス (id = 1859859960) を参照していることがわかります.
これを確認したら, ステップインを3回押して DefaultDrawingEditor クラスの getAcitiveView() メソッドの中に前から入ってください.

DefaultDrawingEditor クラスの getAcitiveView() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が
- DefaultDrawingView クラスのインスタンス (id = 150367587) を保持していることがわかります.
+ DefaultDrawingView クラスのインスタンス (id = 150367587) を参照していることがわかります.

先ほどの結果から, DefaultDrawingView クラスのインスタンス (id = 150367587) は
- DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が保持していることがわかりました.
+ DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が参照していることがわかりました.
呼び出しスタック上で2つ呼び出し元をクリックしてください.
ここで, 課題A4は終了です. 時間計測を終了してください.

@@ -17,6 +17,8 @@
課題A4終了直後は下図のような状態になっているはずです.
+ まずは, DefaultDrawingView クラスのインスタンス (id = 150367587) のフィールド selectedFigures が参照している LinkedHashSet に
+ RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を見ていきます.
ここで, 「実行時点の登録」ビュー上で登録している「780行目 DefaultDrawingView.addToSelection(Figure)」をダブルクリックしてください.
すると, 現在の実行時点が DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目に移ります.


- 「オブジェクトの接近過程抽出」ビュー上の「参照先側002」をクリックしてください.
+ ここまでで, DefaultDrawingView クラスのインスタンス (id = 150367587) のフィールド selectedFigures が参照している LinkedHashSet に
+ RectangleFigure クラスのインスタンス (id = 1952912699) が接近する過程を見てきました.
+ 抽出した結果を見ると, DefaultDragTracker クラスのインスタンス (id = 758826749) のフィールド anchorFigure に代入されていた RectangleFigure クラスのインスタンスを
+ 取得してきていることがわかりましたが, その RectangleFigure クラスのインスタンスがどうやって代入されたのかについては, この抽出範囲だけではわかりません.
+ そこで, ここからは, DefaultDragTracker クラスのインスタンス (id = 758826749) に RectangleFigure クラスのインスタンス (id = 1952912699) が
+ 接近する過程を抽出して見ていきます.
+ まずは, 「オブジェクトの接近過程抽出」ビュー上の「参照先側002」をクリックしてください.

@@ -91,7 +99,11 @@

- 「オブジェクトの接近過程抽出」ビュー上の「参照先側028」をクリックしてください.
+ ここまでで, DefaultDragTracker クラスのインスタンス (id = 758826749) に RectangleFigure クラスのインスタンス (id = 1952912699) が接近する過程を見てきました.
+ 抽出した結果を見ると, QuadTree クラスのインスタンス (id = 808853315) のローカル変数 result に追加されていた RectangleFigure クラスのインスタンスを
+ 取得してきていることがわかりましたが, その RectangleFigure クラスのインスタンスがどうやって追加されたのかについては, この抽出範囲だけではわかりません.
+ そこで, ここからは, そのローカル変数 result に RectangleFigure クラスのインスタンス (id = 1952912699) が追加される過程を見ていきます.
+ まずは, 「オブジェクトの接近過程抽出」ビュー上の「参照先側028」をクリックしてください.

@@ -137,7 +149,9 @@

- ここで課題A4の接近過程抽出は終了です.
+ ここまでで, QuadTree クラスのインスタンス (id = 808853315) のローカル変数 result に
+ RectangleFigure クラスのインスタンス (id = 1952912699) が追加される過程を見てきました.
+ ここで, 課題A4の接近過程抽出は終了です.
「オブジェクトの接近過程」ビューを全て閉じ, そのあとデバッグ実行を終了してください.

課題B3では, ArgoUMLの図形の削除機能について見ていきます.
ArgoUMLはオープンソースのUMLモデリングツールで, Javaで書かれております.
@@ -38,7 +38,7 @@


Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
@@ -116,8 +116,8 @@
89行目では, FigClass クラスのインスタンス (id = 1675174935) のメソッドを呼び出していることがわかります.
この FigClass クラスのインスタンスがどこから来たのかを確認するために, ステップバックオーバーを3回押して, 86行目の拡張for文まで戻ってください.
- ここで FigClass クラスのインスタンスは Figクラスを保持するリストであるローカル変数 figs から拡張for文で取得されてきたことがわかります.
- ここからは, FigClass クラスのインスタンスを保持していた figs がどこから来たのかと, figs にそのインスタンスがどこで追加されたのかを見ていきます.
+ ここで FigClass クラスのインスタンスは Figクラスを参照するリストであるローカル変数 figs から拡張for文で取得されてきたことがわかります.
+ ここからは, FigClass クラスのインスタンスを参照していた figs がどこから来たのかと, figs にそのインスタンスがどこで追加されたのかを見ていきます.
まずは, ステップバックインを3回押して, 85行目の getFigs() メソッドの中に後ろから入ってください.

Selection クラスの getContent() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, Selection クラスの子孫クラスである SelectionClass クラスのインスタンスが
- フィールド content として FigClass クラスのインスタンス (id = 1675174935) を保持していることがわかります.
+ フィールド content として FigClass クラスのインスタンス (id = 1675174935) を参照していることがわかります.

- 先ほどの結果から, FigClass クラスのインスタンス (id = 1675174935) は SelectionClass クラスのインスタンス (id = 1672744985) が保持していることがわかりました.
+ 先ほどの結果から, FigClass クラスのインスタンス (id = 1675174935) は SelectionClass クラスのインスタンス (id = 1672744985) が参照していることがわかりました.
次は, この SelectionClass クラスのインスタンスがどこから来たのかを見ていきます.
呼び出しスタック上で呼び出し元である SelectionManger クラスの getFigs() メソッドをクリックしてください.
ここで, ソースコードを見ると, SelectionClass クラスのインスタンスは selections から取得していることが確認でき,
- それは SelectionManager クラスのインスタンス (id = 4310438) がフィールドとして保持していることがわかります.
+ それは SelectionManager クラスのインスタンス (id = 4310438) がフィールドとして参照していることがわかります.

先ほどの結果から, SelectionClass クラスのインスタンス (id = 1672744985) は
- SelectionManager クラスのインスタンス (id = 4310438) が保持していることがわかりました.
+ SelectionManager クラスのインスタンス (id = 4310438) が参照していることがわかりました.
次は, この SelectionManager クラスのインスタンスがどこから来たのかを見ていきます.
呼び出しスタック上でさらに呼び出し元である ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドをクリックしてください.
ここでは, ステップバックインを1回押して Editor クラスの getSelectionManager() メソッドの中に後ろから入ってください.
@@ -157,12 +157,12 @@
Editor クラスの getSelectionManager() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, この Editor クラスがフィールド _selectionManager として
- SelectionManager クラスのインスタンス (id = 4310438) を保持していることがわかります.
+ SelectionManager クラスのインスタンス (id = 4310438) を参照していることがわかります.

先ほどの結果から, SelectionManager クラスのインスタンス (id = 431048) は
- Editor クラスのインスタンス (id = 371019845) が保持していることがわかりました.
+ Editor クラスのインスタンス (id = 371019845) が参照していることがわかりました.
次は, この Editor クラスのインスタンスがどこから来たのかを見ていきます.
呼び出しスタック上で呼び出し元をクリックしてください.

Globals クラスの curEditor() メソッドに入りました.
ここで, ソースコードを見ると, Globalsクラスが static フィールド _curEditor として
- Editor クラスのインスタンス (id = 371019845) を保持していることがわかります.
+ Editor クラスのインスタンス (id = 371019845) を参照していることがわかります.

diff --git a/courseB/ArgoUML_Reverse/problem1/ArgoUML1_Reverse_Delta.html b/courseB/ArgoUML_Reverse/problem1/ArgoUML1_Reverse_Delta.html index d3b4586..1e4085b 100644 --- a/courseB/ArgoUML_Reverse/problem1/ArgoUML1_Reverse_Delta.html +++ b/courseB/ArgoUML_Reverse/problem1/ArgoUML1_Reverse_Delta.html @@ -6,10 +6,10 @@
-
Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
@@ -18,6 +18,7 @@
課題B3終了直後は下図のような状態になっているはずです.
+ まずは, ActionRemoveFromDiagram クラスのインスタンスに FigClass クラスのインスタンス (id = 1675174935) が接近する過程を抽出して見ていきます.
ここで, 「実行時点の登録」ビュー上で登録している「89行目 ActionRemoveFromDiagram.actionPerformed(ActionEvent)」をダブルクリックしてください.
すると, 現在の実行時点が ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドの89行目に移ります.


- 「オブジェクトの接近過程抽出」ビュー上の「参照先側012」をクリックしてください.
+ ここまでで, ActionRemoveFromDiagram クラスのインスタンスに FigClass クラスのインスタンス (id = 1675174935) が接近する過程を見てきました.
+ 抽出した結果を見ると, SelectionManager クラスのインスタンス (id = 4310438) のローカル変数 figs が参照している Vector に追加されていた FigClass クラスのインスタンスを
+ 取得してきていることがわかりましたが, その FigClass クラスのインスタンスがどうやって追加されたのかについては, この抽出範囲だけではわかりません.
+ そこで, ここからは, そのローカル変数 figs に FigClass クラスのインスタンス (id = 1675174935) が追加されるまでの過程を見ていきます.
+ まずは, 「オブジェクトの接近過程抽出」ビュー上の「参照先側012」をクリックしてください.

@@ -85,7 +90,9 @@

- ここで課題B3の接近過程抽出は終了です.
+ ここまでで, SelectionManager クラスのインスタンス (id = 4310438) のローカル変数 figs が参照している Vector に
+ FigClass クラスのインスタンス (id = 1675174935) が追加されるまでの過程を見てきました.
+ ここで, 課題B3の接近過程抽出は終了です.
「オブジェクトの接近過程」ビューを全て閉じてください.
なお, デバッグ実行は終了せずにそのままの状態にしておいてください.

課題B4では, ArgoUMLの図形の選択機能について見ていきます.
ArgoUMLはオープンソースのUMLモデリングツールで, Javaで書かれております.
@@ -41,14 +41,13 @@
Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
現在の実行時点の行は、図形を選択するたびに実行されます.
先ほどの前準備にしたがって進めていくと, 下図のように SelectionManager クラスの addFig(Fig) メソッド内の130行目で一時停止している状態になっているはずです.
@@ -57,7 +56,7 @@

- ここで, ソースコードと変数ビューを見ると, SelectionManager クラスのインスタンス (id = 4310438) が保持するフィールド selections へは
+ ここで, ソースコードと変数ビューを見ると, SelectionManager クラスのインスタンス (id = 4310438) が参照するフィールド selections へは
makeSelectionFor(Fig) メソッドの戻り値である SelectionClass クラスのインスタンス (id = 1672744985) が追加されていることがわかります.
課題B4では, このオブジェクトの追加に関わっている SelectionManager クラスのインスタンスと SelectionClass クラスのインスタンスについて見ていきます.
まずは, SelectioClass クラスのインスタンスの方がどこから来たのかを見ていくために,
@@ -79,7 +78,7 @@
FigClass クラスの makeSelection() メソッドに入りました.
ここでは new SelectionClass(this) で 自分自身を引数に渡して SelectionClass クラスが生成されており,
- 生成された SelectionClass クラスのインスタンスは 引数で渡された FigClass クラスのインスタンス (id = 1675174935) を保持していることがわかります.
+ 生成された SelectionClass クラスのインスタンスは 引数で渡された FigClass クラスのインスタンス (id = 1675174935) を参照していることがわかります.
これを確認したら, 呼び出しスタック上で2つ呼び出し元である SelectionManager クラスの addFig(Fig) メソッドをクリックしてください.


LayerManager クラスの hit(Rectangle) メソッドの中に入りました.
ここで, 変数ビューを確認すると, この LayerManager クラスのインスタンス (id = 1975264229) は,
- フィールド _activeLayer として LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) を保持していることがわかります.
+ フィールド _activeLayer として LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) を参照していることがわかります.
また, ソースコードを見ると, このフィールド _activeLayer が参照しているインスタンスに対して hit(Rectangle) メソッドが呼び出されていることが確認できます.
ここでは, ステップインを4回押してこのメソッドの中に前から入ってください.

取得している値を確認するために, ステップオーバーを2回押して232行目まで進んでください.
232行目まで進んだら, 変数ビュー上の「呼び出し後」を開くと, 戻り値として FigClass クラスのインスタンス (id = 1675174935) が返されていることが確認でき,
- したがって, このインスタンスは LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) がリスト内の要素として保持していることがわかります.
+ したがって, このインスタンスは LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) がリスト内の要素として参照していることがわかります.

先ほどの結果から, FigClass クラスのインスタンス (id = 1675174935) は
- LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) が保持していることがわかりました.
+ LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) が参照していることがわかりました.
ここで, ステップオーバーを1回押して, 実行時点が return f に止まることを確認してください.
これを確認したら, 呼び出しスタック上で4つ呼び出し元である ModeSelect クラスの mousePressed(MouseEvent) メソッドをクリックしてください.

現在は, ModeSelect クラスの mousePressed(MouseEvent) メソッドを見ています.
ここで, 変数ビュー上で this を開くと, Editor クラスのインスタンス (id = 371019845) は
- ModeSelect クラスのインスタンス (id = 1807431709) が フィールド editor として保持していることがわかります.
+ ModeSelect クラスのインスタンス (id = 1807431709) が フィールド editor として参照していることがわかります.

ここまでの結果から, SelectionClass クラスのインスタンスに関わる各オブジェクトの関係について, 以下のことがわかりました.
Editor クラスの getSelectionManager() メソッドに入りました.
ここで, 変数ビュー上の thisを開くと, Editor クラスのインスタンス (id = 371019845) が フィールド _selectionManager として
- SelectionManager クラスのインスタンス (id = 4310438) を保持していることがわかります.
+ SelectionManager クラスのインスタンス (id = 4310438) を参照していることがわかります.

先ほどの結果から, SelectionManager クラスのインスタンス (id = 4310438) は
- Editor クラスのインスタンス (id = 371019845) が保持していることがわかりました.
+ Editor クラスのインスタンス (id = 371019845) が参照していることがわかりました.
呼び出しスタック上で1つ呼び出し元である ModeSelect クラスの mousePressed(MouseEvent) メソッドをクリックしてください.
ここで, 課題B4は終了です. 時間計測を終了してください.

Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
@@ -18,6 +18,8 @@
課題B4終了直後は下図のような状態になっているはずです.
+ まずは, SelectionManager クラスのインスタンス (id = 4310438) のフィールド selections が参照している ArrayList に
+ SelectionClass クラスのインスタンス (id = 1672744985) が追加されるまでの過程を見ていきます.
ここで, 「実行時点の登録」ビュー上で登録している「130行目 SelectionManager.addFig(Fig)」をダブルクリックしてください.
すると, 現在の実行時点が SelectionManager クラスの addFig(Fig) メソッドの130行目に移ります.


- ここで課題B4の接近過程抽出は終了です.
+ ここまでで, SelectionManager クラスのインスタンス (id = 4310438) のフィールド selections が参照している ArrayList に
+ SelectionClass クラスのインスタンス (id = 1672744985) が追加されるまでの過程を見てきました.
+ ここで, 課題B4の接近過程抽出は終了です.
「オブジェクトの接近過程」ビューを全て閉じ, そのあとデバッグ実行を終了してください.

課題B1では, JHotDrawの図形の移動機能について見ていきます.
JHotDrawはオープンソースの図形描画ツールで, Javaで書かれております.
@@ -37,7 +37,7 @@


- ブレークポイントを置いた行は、図形を移動するたびに実行されます.
@@ -85,7 +81,7 @@
- ここで, いったんデバッグ実行を終了してから, ブレークポイントビュー上にある「ブレークポイントを取り入れる」ボタンを押してください.
+ ここで, いったんデバッグ実行を終了してから, ブレークポイントビュー上にある「ブレークポイントをEclipseから取り入れる」アイコンを押してください.
そのあと, 再びデバッグ実行すると今度は118行目に止まります.
ステップインを2回押してから変数ビュー上の「呼び出し前」を開いて引数のオブジェクトのIDを確認してください.
すると, 先ほど確認した RectangleFigure クラスのインスタンス (id = 1952912699) がここで追加されていることがわかります.
@@ -109,7 +105,7 @@
ソースコードを見ると, 116行目の拡張for文で DrawingView クラスの getSelectedFigures() を呼び出し,
その戻り値のコレクションから取得してきた RectangleFigure クラスのインスタンスを, 118行目で selectedFigures に追加していることがわかります.
そこで, 次はこの view がどこから来たのかと, getSelectedFigures() メソッドの戻り値がどうなっているのかを見ていきます.
- 98行目と116行目にブレークポイントを入れ, ブレークポイントビュー上にある「ブレークポイントを取り入れる」ボタンを押してください.
+ 98行目と116行目にブレークポイントを入れ, ブレークポイントビュー上にある「ブレークポイントをEclipseから取り入れる」アイコンを押してください.
そのあと, 再びデバッグ実行すると, まずは98行目で止まることをを確認してください.

AbstractTool クラスの getView() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DefaultDragTracker クラスのインスタンス(id = 758826749) が
- フィールド editor として DefaultDrawingEditor クラスのインスタンス (id = 1859859960) を保持していることがわかります.
+ フィールド editor として DefaultDrawingEditor クラスのインスタンス (id = 1859859960) を参照していることがわかります.
これを確認したら, ステップインを3回押して getActiveView() メソッドの中に入ってください.

DefaultDrawingView クラスの getActiveView() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が
- フィールド activeView として DefaultDrawingView クラスのインスタンス (id = 150367587) を保持していることがわかります.
+ フィールド activeView として DefaultDrawingView クラスのインスタンス (id = 150367587) を参照していることがわかります.
これを確認したら, ステップリターンを1回押して呼び出し元に戻ってください.
(このとき, 2つ呼び出し元である DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドまで戻ることに注意してください)

DefaultDrawingView クラスの getSelectedFigures() メソッドの中に入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingView クラスのインスタンス (id = 150367587) が
- フィールド selectedFigures として LinkedHashSet を保持していることがわかります.
+ フィールド selectedFigures として LinkedHashSet を参照していることがわかります.
また, ソースコードを見ると, Collections クラスの static メソッドである unmodifiableSet(Set) が呼び出されており,
その引数として フィールド getSelectedFigures が渡されていることが確認できます.
これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください.
diff --git a/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward_Delta.html b/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward_Delta.html
index c193818..3b01f96 100644
--- a/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward_Delta.html
+++ b/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward_Delta.html
@@ -6,10 +6,10 @@
@@ -28,14 +28,16 @@ その状態のままで, ブレークポイントビュー上にある「ブレークポイントを取り入れる」をクリックしてください.

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


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

課題B2では, JHotDrawの図形の選択機能について見ていきます.
JHotDrawはオープンソースの図形描画ツールで, Javaで書かれております.
@@ -21,7 +21,7 @@

- ブレークポイントビュー上の「ブレークポイントを取り入れる」を押してください.
+ ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.
ブレークポイントを入れたら, 全てのブレークポイントにチェックが入った状態にしてください.

DefaultDrawingView クラスの780行目と815行目と889行目にブレークポイントを入れた状態で,
- ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください.
+ ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.
すると, 実際にトレース上に実行された記録が残っている780行目にだけブレークポイントが新規追加されます.
そのあと, ブレークポイントビュー上で下記3つのブレークポイントのチェックを外してください.

- ブレークポイントを置いた行は、図形を選択するたびに実行されます.
@@ -90,12 +86,11 @@ ソースコードを見ると, ここではローカル変数 view で参照されているインスタンスに対して先ほどの addToSelection(Figure) メソッドが呼び出されていることがわかります.
ここでは, 先にローカル変数 view の値がどこから来たのかを見ていきます.
-
ブレークポイントビュー上の DefaultDragTracekr クラスの mousePressed(MouseEvent) メソッドの98行目のブレークポイントにチェックを入れてください.
ブレークポイントを入れたら, デバッグ実行をいったん終了してから, もう一度デバッグ実行してください.
すると, まずは DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目に止まります.
@@ -110,14 +105,14 @@
AbstractTool クラスの getView() メソッドの中に入りました.
ここで, 変数ビュー上の this を開くと, DefaultDragTracker クラスのインスタンス(id = 758826749) が
- フィールド editor として DefaultDrawingEditor クラスのインスタンス (id = 1859859960) を保持していることがわかります.
+ フィールド editor として DefaultDrawingEditor クラスのインスタンス (id = 1859859960) を参照していることがわかります.
これを確認したら, ステップインを3回押して getActiveView() メソッドの中に入ってください.

DefaultDrawingView クラスの getActiveView() メソッドの中に入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が
- フィールド activeView として DefaultDrawingView クラスのインスタンス (id = 150367587) を保持していることがわかります.
+ フィールド activeView として DefaultDrawingView クラスのインスタンス (id = 150367587) を参照していることがわかります.
これを確認したら, 呼び出しスタック上で2つ呼び出し元をクリックしてください.


@@ -136,7 +131,7 @@

- DefaultDragTracker クラスの84行目と218行目にブレークポイントを入れたら, ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください.
+ DefaultDragTracker クラスの84行目と218行目にブレークポイントを入れたら, ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.
すると, 実際にトレース上に実行された記録が残っている218行目にだけブレークポイントが新規追加されます.
そのあと, ブレークポイントビュー上で780行目と218行目以外のブレークポイントのチェックを外してください.


@@ -200,7 +195,7 @@
ここからはローカル変数 figure の値がどこから来たのかを見ていきます.
ローカル変数 figure にカーソルを入れ, この figure に代入された箇所を探していきます.
ローカル変数 figure の宣言は234行目にあるため, ここではその次の行である235行目にブレークポイントを入れてください.
- 235行目にブレークポイントを入れたら, ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください.
+ 235行目にブレークポイントを入れたら, ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.


DefaultDrawingView クラスの getDrawing() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingView クラスのインスタンス (id = 150367587) が
- フィールド drawing として QuadTreeDrawing クラスのインスタンス (id = 1583174451) のインスタンスを保持していることがわかります.
+ フィールド drawing として QuadTreeDrawing クラスのインスタンス (id = 1583174451) のインスタンスを参照していることがわかります.
これを確認したら, ステップリターンを1回押して呼び出し元に戻ってください.

QuadTreeDrawing クラスの findContains(Double) メソッドに入りました.
ここで, 変数ビュー上の this を開くと, QuadTreeDrawing クラスのインスタンス (id = 1583174451) が,
- フィールド quadTree として QuadTree クラスのインスタンス (id = 808853315) を保持していることがわかります.
+ フィールド quadTree として QuadTree クラスのインスタンス (id = 808853315) を参照していることがわかります.
これを確認したら, ステップインを3回押して, QuadTree クラスの findContains(Point2D#Double) メソッドの中に入ってください.

QuadTree クラスの findContains(Point2D#Double) メソッドに入りました.
ここで, 変数ビュー上の this を開くと, QuadTree クラスのインスタンス (id = 808853315) がフィールド root として
- QuadTree クラスの内部クラスである QuadNode クラスのインスタンス (id = 2120356010) を保持していることがわかります.
+ QuadTree クラスの内部クラスである QuadNode クラスのインスタンス (id = 2120356010) を参照していることがわかります.
また, ソースコードを見ると, 82行目で生成された HashSet がローカル変数 result に代入されたあと,
83行目ではいったん呼び出し先に引数として渡され, 最終的には89行目で戻り値として返されていることが確認できます.
ここでは, ステップオーバーを1回押したあと, ステップインを2回押して QuadNode クラスの findContains(Point2D#Double, HashSet) メソッドの中に入ってください.
@@ -280,7 +275,7 @@
QuadNode クラスの findContains(Point2D#Double, HashSet) メソッドに入りました.
ここで, 変数ビュー上の this を開くと, QuadNode クラスのインスタンス (id = 2120356010) が
- フィールド objects として HashMap を保持していることがわかります.
+ フィールド objects として HashMap を参照していることがわかります.
また, ソースコードを見ると, 224行目の拡張for文でこの HashMap から取り出してきた要素を, 226行目で仮引数 result に追加していることが確認できます.
ここでは, ステップオーバーを3回押して226行目にまで進んでください.

ここからは, ローカル変数 view の値がどこから来たのかを見ていきます.
ソースコード中のローカル変数 view にカーソルを入れて view に代入している箇所を探していきます.
- 今回は, 228行目に該当するのでブレークポイントを入れ, ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください.
+ 今回は, 228行目に該当するのでブレークポイントを入れ, ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.

@@ -340,14 +335,14 @@
AbstractTool クラスの getView() メソッドの中に入りました.
ここで, 変数ビュー上の this を開くと, DelegationSelectionTool クラスのインスタンス(id = 599587451) が
- フィールド editor として DefaultDrawingEditor クラスのインスタンス (id = 1859859960) を保持していることがわかります.
+ フィールド editor として DefaultDrawingEditor クラスのインスタンス (id = 1859859960) を参照していることがわかります.
これを確認したら, ステップインを3回押して getActiveView() メソッドの中に入ってください.

DefaultDrawingView クラスの getActiveView() メソッドの中に入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が
- フィールド activeView として DefaultDrawingView クラスのインスタンス (id = 150367587) を保持していることがわかります.
+ フィールド activeView として DefaultDrawingView クラスのインスタンス (id = 150367587) を参照していることがわかります.
これを確認したら, 呼び出しスタック上で2つ呼び出し元をクリックして戻ってください.


@@ -27,7 +27,10 @@
その状態のままで, ブレークポイントビュー上にある「ブレークポイントを取り入れる」をクリックしてください.
ブレークポイントを取り入れたら, DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目以外のブレークポイントのチェックを外してください.
- チェックを外したら, デバッグ実行し, そのあと再開ボタンを1回押してください.
+ チェックを外したら, デバッグ実行してください.
+ まずは, DefaultDrawingView クラスのインスタンス (id = 150367587) のフィールド selectedFigures が参照している LinkedHashSet に
+ RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を見ていきます.
+ デバッグ実行したら, 再開ボタンを1回押してください.
すると, 現在の実行時点が, 2回目の DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目に移ります.
ここで, ステップネクストを1回押してください.


- 「オブジェクトの接近過程抽出」ビュー上の「参照先側002」をクリックしてください.
+ ここまでで, DefaultDrawingView クラスのインスタンス (id = 150367587) のフィールド selectedFigures が参照している LinkedHashSet に
+ RectangleFigure クラスのインスタンス (id = 1952912699) が接近する過程を見てきました.
+ 抽出した結果を見ると, DefaultDragTracker クラスのインスタンス (id = 758826749) のフィールド anchorFigure に代入されていた RectangleFigure クラスのインスタンスを
+ 取得してきていることがわかりましたが, その RectangleFigure クラスのインスタンスがどうやって代入されたのかについては, この抽出範囲だけではわかりません.
+ そこで, ここからは, DefaultDragTracker クラスのインスタンス (id = 758826749) に RectangleFigure クラスのインスタンス (id = 1952912699) が
+ 接近する過程を抽出して見ていきます.
+ まずは, 「オブジェクトの接近過程抽出」ビュー上の「参照先側002」をクリックしてください.

@@ -101,7 +110,11 @@

- 「オブジェクトの接近過程抽出」ビュー上の「参照先側028」をクリックしてください.
+ ここまでで, DefaultDragTracker クラスのインスタンス (id = 758826749) に RectangleFigure クラスのインスタンス (id = 1952912699) が接近する過程を見てきました.
+ 抽出した結果を見ると, QuadTree クラスのインスタンス (id = 808853315) のローカル変数 result に追加されていた RectangleFigure クラスのインスタンスを
+ 取得してきていることがわかりましたが, RectangleFigure クラスのインスタンスがどうやって追加されたのかについては, この抽出範囲だけではわかりません.
+ そこで, ここからは, そのローカル変数 result に RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を見ていきます.
+ まずは, 「オブジェクトの接近過程抽出」ビュー上の「参照先側028」をクリックしてください.

@@ -147,7 +160,9 @@

- ここで課題B2の接近過程抽出は終了です.
+ ここまでで, QuadTree クラスのインスタンス (id = 808853315) のローカル変数 result に
+ RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を見てきました.
+ ここで, 課題B2の接近過程抽出は終了です.
「オブジェクトの接近過程」ビューを全て閉じ, そのあとデバッグ実行を終了してください.
