diff --git a/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html b/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html index 0fc1f25..9366797 100644 --- a/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html +++ b/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html @@ -41,7 +41,7 @@



呼び出し元である ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドに戻ってきました.
- ここでは, ステップイン1回押して, getSelectionManager クラスの getFigs() メソッドの中に入ってください.
+ ここでは, ステップインを1回押して, SelectionManager クラスの getFigs() メソッドの中に入ってください.

SelectionManager クラスの getFigs() メソッドに入りました.
- ソースコードを見ると, 360行目ではローカル変数 figs を生成し, それが366行目では return figs で戻り値として返されていることが確認できます.
+ ソースコードを見ると, 360行目では新たに生成された Vector クラスのインスタンスがローカル変数 figs に代入され,
+ それが366行目では return figs で戻り値として返されていることが確認できます.
ここで, ステップオーバーを2回押して363行目に進んでください.


- SelectionClass クラスの getContent() メソッドの中に入りました.
+ Selection クラスの getContent() メソッドの中に入りました.
ここで, 変数ビュー上の this を開くと SelectionClass クラスのインスタンス (id = 1672744985) が
フィールド content として FigClass クラスのインスタンス (id = 1675174935) を参照していることがわかります.
これを確認したら, ステップリターンを1回押して呼び出し元に戻ってください.
@@ -188,7 +189,6 @@
ここで, 変数ビュー上の「呼び出し前」を開いて引数のIDを確認してください.
すると, 先ほど取得してきた FigClass クラスのインスタンス (id = 1675174935) をローカル変数 figs に追加することがわかります.

ここで, ステップオーバーを1回押して, ローカル変数 figs にそれ以上何も追加されずに
@@ -253,8 +253,10 @@
現在は 呼び出し元である ActionRemoveFromDiagram クラスの actionPerformed() メソッドを見ています.
- ここで, 課題A1は終了です. 時間計測を終了してください.
+ ここで, 課題A1は終了です. 時間計測を終了してください.
+ また, 終了アイコンを押して, デバッグ実行を終了しておいてください.


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

diff --git a/courseA/ArgoUML_Forward/problem1/images/images_problem1/ArgoUML_1_27.png b/courseA/ArgoUML_Forward/problem1/images/images_problem1/ArgoUML_1_27.png new file mode 100644 index 0000000..19cda7c --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images/images_problem1/ArgoUML_1_27.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/ArgoUML2_Forward.html b/courseA/ArgoUML_Forward/problem2/ArgoUML2_Forward.html index 02658ab..8f04b97 100644 --- a/courseA/ArgoUML_Forward/problem2/ArgoUML2_Forward.html +++ b/courseA/ArgoUML_Forward/problem2/ArgoUML2_Forward.html @@ -22,7 +22,7 @@
- 課題A1と同様に「トレースデバッガ(順方向)」のパースペクティブを開いてください.
+ 課題A1 (機能理解) のときと同様に「トレースデバッガ(順方向)」のパースペクティブを開いてください.

@@ -65,10 +65,12 @@
先ほどの実行手順にしたがって進めていくと, 下図のように SelectionManager クラスの addFig(Fig) メソッド内の130行目で一時停止している状態になっているはずです.
この状態になっていれば, ここから時間計測を開始してください. 時間計測はできる限り,1分以内の単位での計測をお願いします.
+
ここで, ソースコードと変数ビューを見ると, SelectionManager クラスのインスタンス (id = 4310438) が参照するフィールド selections へは
- makeSelectionFor(Fig) メソッドの戻り値である SelectionClass クラスのインスタンス (id = 1672744985) が追加されていることがわかります.
+ makeSelectionFor(Fig) メソッドの戻り値 (SelectionClass クラスのインスタンス) が追加されていることがわかります.
課題A2では, このオブジェクトの追加に関わっている SelectionManager クラスのインスタンスと SelectionClass クラスのインスタンスについて見ていきます.
- まずは, ステップインを3回押してこのメソッドの中に入ってください.
+ まずは, ステップインを3回押して, この makeSelectionFor(Fig) メソッドの中に入ってください.

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

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

現在は ModeSelect クラスの mousePressed(MouseEvent) メソッドを見ています.
- ここで, 課題A2は終了です. 時間計測を終了してください.
+ ここで, 課題A2は終了です. 時間計測を終了してください.
+ また, 終了アイコンを押して, デバッグ実行を終了しておいてください.


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

@@ -30,7 +30,7 @@
ブレークポイントを取り入れたら, デバッグ実行してください.
まずは, SelectionManager クラスのインスタンス (id = 4310438) のフィールド selections が参照している ArrayList に
SelectionClass クラスのインスタンス (id = 1672744985) が追加されるまでの過程を見ていきます.
- デバッグ実行したら, そのまま再開ボタンを2回押してください.
+ デバッグ実行したら, そのまま再開ボタンを3回押してください.
すると, 現在の実行時点が2回目の SelectionManager クラスの addFig(Fig) メソッドの130行目に移ります.


- この f の値がどこから来たのかを見るために, ステップバックオーバーを1回押して116行目の拡張for文に戻ってください.
- ここで, ソースコードを見ると, この116行目の拡張for文では, ローカル変数 view が参照しているインスタンスに対して getSelectedFigures() メソッドが呼び出され,
- 戻り値として返された Collections$UnmodifiableSet クラスのインスタンスから先ほどのローカル変数 f の値を取得していることが確認できます.
- これを確認したら, この戻り値がどうなっているのかを見るために, ステップバックインを4回押して getSelectedFigures() メソッドの中に後ろから入ってください.
+ この f の値がどこから来たのかを見るために, ステップバックオーバーを2回押して116行目の拡張for文に戻ってください.
+ ここで, ソースコードを見ると, この116行目の拡張for文ではローカル変数 view が参照しているインスタンスに対して getSelectedFigures() メソッドが呼び出され,
+ その戻り値として返されたコレクションから先ほどのローカル変数 f の値を取得していることが確認できます.
+ これを確認したら, この戻り値がどうなっているのかを見るために, ステップバックインを3回押して getSelectedFigures() メソッドの中に後ろから入ってください.

DefaultDrawingView クラスの getSelectedFigures() メソッドに入りました.
ここで, ソースコードを見ると, Collections クラスの static メソッドである unmodifiableSet(Set) が呼び出されており,
- その引数として フィールド getSelectedFigures が渡されていることが確認できます.
- また, 変数ビュー上の「呼び出し後」および this を開くと, このフィールド getSelectedFigures は
+ その引数として フィールド selectedFigures が渡されていることが確認できます.
+ また, 変数ビュー上の「呼び出し後」および this を開くと, このフィールド selectedFigures は
DefaultDrawingView クラスのインスタンス (id = 150367587) が参照していることがわかります.
これを確認したら, ステップバックリターンを1回押して呼び出し元に戻ってください.

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

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

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

- 課題A3終了直後は下図のような状態になっているはずです.
+ 課題A3 (機能理解) の終了直後は下図のような状態になっているはずです.
まずは, DefaultDragTracker クラスのインスタンス (id = 758826749) のフィールド transformedFigures が参照している HashSet に
RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を抽出して見ていきます.
ここで, 「実行時点の登録」ビュー上で登録している「118行目 DefaultDragTracker.mousePressed(MouseEvent)」をダブルクリックしてください.
diff --git a/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse.html b/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse.html
index f06c7a9..b3e14f5 100644
--- a/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse.html
+++ b/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse.html
@@ -21,7 +21,7 @@
- 課題A3が終了した直後は下図のような状態になっているはずです. + 課題A3 (接近過程抽出) の終了直後は下図のような状態になっているはずです.

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

@@ -131,7 +131,7 @@
DefaultDrawingView クラスの findFigure(Point) メソッドに入りました.
ここで, ソースコードを見ると, このメソッドでは getDrawing() メソッドで取得してきたインスタンスに対して,
- findFigure(Double) メソッドが呼び出され, その戻り値を返していることが確認できます.
+ findFigure(Point2D$Double) メソッドが呼び出され, その戻り値を返していることが確認できます.
これを確認したら, ステップインを2回押して, getDrawing() メソッドの中に前から入ってください.


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

呼び出し元である QuadTree クラスの findContains(Point2D$Double) メソッドの84行目に戻ってきました.
- ここでは, ステップオーバーを1回実行し, このメソッド内ではローカル変数 result に何もオブジェクトが追加されず,
+ ここでは, ステップオーバーを1回押して, このメソッド内ではローカル変数 result に何もオブジェクトが追加されず,
89行目の return result に現在の実行時点が移ることを確認してください.
これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください.


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

diff --git a/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse_Delta.html b/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse_Delta.html index d297d53..a92bd0d 100644 --- a/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse_Delta.html +++ b/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse_Delta.html @@ -16,7 +16,7 @@
- 課題A4終了直後は下図のような状態になっているはずです.
+ 課題A4 (機能理解) の終了直後は下図のような状態になっているはずです.
まずは, DefaultDrawingView クラスのインスタンス (id = 150367587) のフィールド selectedFigures が参照している LinkedHashSet に
RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を見ていきます.
ここで, 「実行時点の登録」ビュー上で登録している「780行目 DefaultDrawingView.addToSelection(Figure)」をダブルクリックしてください.
@@ -66,7 +66,7 @@
先ほどの操作によって, 現在は DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの109行目にいます.
ここで, 変数ビュー上の this を開き, フィールド anchorFigure を右クリックしてください.
- 右クリックすると, ポップアップメニューが出てくるので, 上の方の「オブジェクトの接近過程抽出」をクリックしてください.
+ 右クリックすると, ポップアップメニューが出てくるので, 「値の代入時点に飛ぶ」をクリックしてください.
すると, 現在の実行時点が DefaultDragTracker クラスの setDraggedFigure(Figure) メソッドの218行目に移ります.



- 呼び出し元である ActionRemoveFromDiagram クラスの actionPerformed() メソッドの89行目に戻ってきました.
+ 呼び出し元である ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドの89行目に戻ってきました.
ここで, 「トレースデバッガ」パースペクティブの右下にある「実行時点の登録」ビューの追加ボタンをクリックしてください.
そうすると, 現在の実行時点がこのビュー上に登録されます.

- 89行目では, FigClass クラスのインスタンス (id = 1675174935) のメソッドを呼び出していることがわかります.
+ 89行目では, FigClass クラスのインスタンス (id = 1675174935) のメソッドが呼び出されていることがわかります.
この FigClass クラスのインスタンスがどこから来たのかを確認するために, ステップバックオーバーを3回押して, 86行目の拡張for文まで戻ってください.
ここで FigClass クラスのインスタンスは Figクラスを参照するリストであるローカル変数 figs から拡張for文で取得されてきたことがわかります.
ここからは, FigClass クラスのインスタンスを参照していた figs がどこから来たのかと, figs にそのインスタンスがどこで追加されたのかを見ていきます.
@@ -162,7 +162,7 @@
Editor クラスの getSelectionManager() メソッドに入りました.
- ここで, 変数ビュー上の this を開くと, この Editor クラスがフィールド _selectionManager として
+ ここで, 変数ビュー上の this を開くと, この Editor クラスのインスタンスがフィールド _selectionManager として
SelectionManager クラスのインスタンス (id = 4310438) を参照していることがわかります.

現在は, ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドの85行目を見ています.
- ここで, ソースコードを見ると, この Editor はローカル変数 ce に代入されている値だとわかります.
+ ここで, ソースコードを見ると, この Editor クラスのインスタンスはローカル変数 ce に代入されている値だとわかります.
ここでは, このローカル変数 ce の値がどこから来たのかを見ていきます.
ステップバックオーバーを2回押して83行目まで戻ってください.
83行目ではローカル変数 ce に Globals クラスの curEditor() メソッドの戻り値が代入されています.
@@ -191,7 +191,8 @@
先ほどの結果から, Editor クラスのインスタンス (id = 371019845) は Globals クラスの static フィールド _curEditor から取得していることがわかりました.
呼び出しスタック上で呼び出し元をクリックしてください.
- ここで, 課題B3は終了です. 時間計測を終了してください.
+ ここで, 課題B3は終了です. 時間計測を終了してください.
+ なお, デバッグ実行は終了せずにそのままの状態にしておいてください.

- 課題B3終了直後は下図のような状態になっているはずです.
+ 課題B3 (機能理解) の終了直後は下図のような状態になっているはずです.
まずは, ActionRemoveFromDiagram クラスのインスタンスに FigClass クラスのインスタンス (id = 1675174935) が接近する過程を抽出して見ていきます.
ここで, 「実行時点の登録」ビュー上で登録している「89行目 ActionRemoveFromDiagram.actionPerformed(ActionEvent)」をダブルクリックしてください.
すると, 現在の実行時点が ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドの89行目に移ります.
diff --git a/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse.html b/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse.html
index 3f699bf..86acb63 100644
--- a/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse.html
+++ b/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse.html
@@ -22,7 +22,7 @@
- 課題B3が終了した直後は下図のような状態になっているはずです.
+ 課題B3 (接近過程抽出) の終了直後は下図のような状態になっているはずです.

@@ -89,9 +89,9 @@
現在は SelectionManager クラスの addFig(Fig) メソッドの130行目を見ています.
- ここで, ソースコードを見ると, 先ほどの makeSelectionFor(Fig) メソッドには, 仮引数 f で参照されている
- FigClass クラスのインスタンス (id = 1675174935) が渡されていることが確認できます.
- ここからは, この FigClass クラスのインスタンス (id = 1675174935) がどこから来たのかを見ていきます.
+ ここで, ソースコードを見ると, 先ほどの makeSelectionFor(Fig) メソッドに実引数として渡されていた FigClass クラスのインスタンス (id = 1675174935) は,
+ この SelectionManager クラスの addFig(Fig) メソッド内において, 仮引数 f で参照されている値であることがわかります
+ ここからは, この 仮引数 f で参照されている FigClass クラスのインスタンス (id = 1675174935) がどこから来たのかを見ていきます.
呼び出しスタック上で1つ呼び出し元である SelectionManager クラスの select(Fig) メソッドをクリックしてください.


@@ -129,7 +129,7 @@
Editor クラスの hit(Point) メソッドに入りました.
- ここでは, ステップオーバーを1回実行したあとに, ステップインを2回押して hit(Rectangle) メソッドの中に前から入ってください.
+ ここでは, ステップオーバーを1回押したあとに, ステップインを2回押して hit(Rectangle) メソッドの中に前から入ってください.

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

Editor クラスの hit(Rectangle) メソッドに戻ってきました.
- 次は, ステップインで LayerManager クラスの hit(Rectangle) メソッドの中に前から入ってください.
+ 次は, ステップインを1回押して, LayerManager クラスの hit(Rectangle) メソッドの中に前から入ってください.

@@ -161,7 +160,7 @@
LayerPerspectiveMutable クラスの hit(Rectangle) メソッドに入りました.
ここで, ソースコードを見ると, 231行目で LayerPerspectiveMutable クラスのインスタンスの
- フィールド contents から get() メソッドで Fig クラスのインスタンスを取得していることが確認できます.
+ フィールド contents から get(int) メソッドで Fig クラスのインスタンスを取得していることが確認できます.

diff --git a/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse_Delta.html b/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse_Delta.html index 9f3089c..fae67a3 100644 --- a/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse_Delta.html +++ b/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse_Delta.html @@ -17,7 +17,7 @@
- 課題B4終了直後は下図のような状態になっているはずです.
+ 課題B4 (機能理解) の終了直後は下図のような状態になっているはずです.
まずは, SelectionManager クラスのインスタンス (id = 4310438) のフィールド selections が参照している ArrayList に
SelectionClass クラスのインスタンス (id = 1672744985) が追加されるまでの過程を見ていきます.
ここで, 「実行時点の登録」ビュー上で登録している「130行目 SelectionManager.addFig(Fig)」をダブルクリックしてください.
diff --git a/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward.html b/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward.html
index 09f4e35..fd75b49 100644
--- a/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward.html
+++ b/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward.html
@@ -40,7 +40,7 @@



ここで, 最初にブレークポイントを入れた地点である159行目に実行が進むかどうかを確認します.
- 再開ボタンを1回押すと, すぐには159行目に移らず, 同じ118行目に再び止まります.
- 先ほどと同様に変数ビューを開いて引数のオブジェクトのIDを確認してください.
+ 再開を1回押すと, すぐには159行目に移らず, 同じ118行目に再び止まります.
+ 先ほどと同様に, ステップインを2回押してから, 変数ビュー上の「呼び出し前」を開いて引数のオブジェクトのIDを確認してください.
すると, ここでも同じ RectangleFigure クラスのインスタンス (id = 1952912699) が追加されていることがわかります.

再び再開ボタンを押すと, 今度は159行目に止まります.
ここで, 変数ビューの「呼び出し前」を開いてレシーバのIDを見ると, 先ほどの RectangleFigure クラスのインスタンス (id = 1952912699) と同一であることが確認できます.
- したがって, ここでは直前に止まっていた2回目の118行目で追加した RectangleFigure を取得していることがわかります.
+ したがって, ここでは直前に止まっていた2回目の118行目で追加した RectangleFigure クラスのインスタンスを取得していることがわかります.
それを確認したら, ここでいったんデバッグ実行を終了してください.

- ソースコードを見ると, 116行目の拡張for文で DrawingView クラスの getSelectedFigures() を呼び出し,
+ ソースコードを見ると, 116行目の拡張for文で DrawingView クラスの getSelectedFigures() メソッドを呼び出し,
その戻り値のコレクションから取得してきた RectangleFigure クラスのインスタンスを, 118行目で selectedFigures に追加していることがわかります.
そこで, 次はこの view がどこから来たのかと, getSelectedFigures() メソッドの戻り値がどうなっているのかを見ていきます.
98行目と116行目にブレークポイントを入れ, ブレークポイントビュー上にある「ブレークポイントをEclipseから取り入れる」アイコンを押してください.
- そのあと, 再びデバッグ実行すると, まずは98行目で止まることをを確認してください.
+ そのあと, 再びデバッグ実行すると, まずは98行目で止まることを確認してください.

@@ -132,7 +132,7 @@

- DefaultDrawingView クラスの getActiveView() メソッドに入りました.
+ DefaultDrawingEditor クラスの getActiveView() メソッドに入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が
フィールド activeView として DefaultDrawingView クラスのインスタンス (id = 150367587) を参照していることがわかります.
これを確認したら, ステップリターンを1回押して呼び出し元に戻ってください.
@@ -153,14 +153,16 @@
ここで, 変数ビュー上の this を開くと, DefaultDrawingView クラスのインスタンス (id = 150367587) が
フィールド selectedFigures として LinkedHashSet を参照していることがわかります.
また, ソースコードを見ると, Collections クラスの static メソッドである unmodifiableSet(Set) が呼び出されており,
- その引数として フィールド getSelectedFigures が渡されていることが確認できます.
+ その引数として フィールド selectedFigures が渡されていることが確認できます.
これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください.

現在は DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの116行目を見ています.
- ここで課題B1は終了です. 時間計測を終了してください.
+ ここで課題B1は終了です. 時間計測を終了してください.
+ また, 終了アイコンを押して, デバッグ実行を終了しておいてください.


diff --git a/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward_Delta.html b/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward_Delta.html index 8222b9d..f56cd2f 100644 --- a/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward_Delta.html +++ b/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward_Delta.html @@ -16,8 +16,8 @@
- 課題B1終了直後は下図のような状態になっているはずです.
- 右上にあるパースペクティブを右クリックし, いったん「トレースデバッガ(順方向)」のパースペクティブを閉じてください.
+ 課題B1 (機能理解) の終了直後は下図のような状態でデバッグ実行が終了しているはずです.
+ デバッグ実行が終了していることを確認したら, 右上にあるパースペクティブを右クリックし, いったん「トレースデバッガ(順方向)」のパースペクティブを閉じてください.

@@ -32,6 +32,7 @@

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

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

- 課題B1と同様に「トレースデバッガ(順方向)」のパースペクティブを開いてください.
+ 課題B1 (機能理解) のときと同様に「トレースデバッガ(順方向)」のパースペクティブを開いてください.

@@ -89,14 +89,16 @@
まずは, この仮引数 figure の値がどこから来たのかを見るために, 呼び出しスタック上で1つ呼び出し元をクリックして戻ってください.
ソースコードを見ると, ここではローカル変数 view で参照されているインスタンスに対して先ほどの addToSelection(Figure) メソッドが呼び出されていることがわかります.
ここで, 変数ビュー上で「呼び出し前」および this を開いてオブジェクトのIDを確認してください.
- すると, view の値は DefaultDrawingView クラスのインスタンス (id = 150367587) であり, その引数には DefaultDragTracker クラスのインスタンス (id = 758826749) が
- フィールド anchorFigure として参照している RectangleFigure クラスのインスタンス (id = 1952912699) が渡されていることがわかります.
+ すると, view の値は DefaultDrawingView クラスのインスタンス (id = 150367587) であり,
+ addToSelection(Figure) メソッドの引数には RectangleFigure クラスのインスタンス (id = 1952912699) が渡されていることが確認できます.
+ また, この RectangleFigure クラスのインスタンス (id = 1952912699) は DefaultDragTracker クラスのインスタンス (id = 758826749) が
+ フィールド anchorFigure として参照しているものだとわかります.

ここでは, 先にローカル変数 view の値がどこから来たのかを見ていきます.
- ブレークポイントビュー上の DefaultDragTracekr クラスの mousePressed(MouseEvent) メソッドの98行目のブレークポイントにチェックを入れてください.
- ブレークポイントを入れたら, デバッグ実行をいったん終了してから, もう一度デバッグ実行してください.
+ ブレークポイントビュー上の 「98行目 DefaultDragTracker.mousePressed(MouseEvent)」のブレークポイントにチェックを入れてください.
+ ブレークポイントにチェックを入れたら, デバッグ実行をいったん終了してから, もう一度デバッグ実行してください.
すると, まずは DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目に止まります.
続けて, 現在の実行時点がどのように移り変わっていくかを確認するために再開ボタンを押していくと, 現在の実行が98行目 → 780行目 と移っていくことが確認できます.
これを確認したら, デバッグ実行をいったん終了してください.
@@ -114,7 +116,7 @@

- DefaultDrawingView クラスの getActiveView() メソッドの中に入りました.
+ DefaultDrawingEditor クラスの getActiveView() メソッドの中に入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が
フィールド activeView として DefaultDrawingView クラスのインスタンス (id = 150367587) を参照していることがわかります.
これを確認したら, 呼び出しスタック上で2つ呼び出し元をクリックしてください.
@@ -123,7 +125,7 @@
現在は DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの98行目を見ています.
ここで, 変数ビュー上で this を開いて, フィールド anchorFigure と this 自体のIDを確認してください.
- DefaultDragTracker クラスのインスタンス (id = 758826749) が anchorFigure として
+ DefaultDragTracker クラスのインスタンス (id = 758826749) が フィールド anchorFigure として
RectangleFigure クラスのインスタンス (id = 1952912699) を参照していることが確認できます.


- 先ほどの呼び出し先から戻ってきたことで, 現在は SelectionTool クラスの mousePressed() メソッドの291行目にいます.
- ここでは, ステップインを4回押して, DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの中に入ってください.
+ 先ほどの呼び出し先から戻ってきたことで, 現在は SelectionTool クラスの mousePressed(MouseEvent) メソッドの291行目にいます.
+ ここでは, ステップインを3回押して, DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの中に入ってください.

@@ -195,11 +197,12 @@
呼び出しスタック上で呼び出し元をクリックして戻ってください.
なお, 呼び出しスタック上では呼び出し元の行番号が0になっていますが, 実際には291行目にいることに注意してください.
- ソースコード上で291行目が見えるようにスクロールしてください.
+ ソースコード上で270行目~291行目が見えるようにスクロールしてください.
ここからはローカル変数 figure の値がどこから来たのかを見ていきます.
ローカル変数 figure にカーソルを入れ, この figure に代入された箇所を探していきます.
ローカル変数 figure の宣言は234行目にあるため, ここではその次の行である235行目にブレークポイントを入れてください.
235行目にブレークポイントを入れたら, ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.
+ そのあと, ブレークポイントビュー上で 「218行目 DefaultDragTracekr.setDraggedFigure(Figure)」のブレークポイントのチェックを外してください.


DefaultDrawingView クラスの findFigure(Point) メソッドに戻ってきました.
- ソースコードを見ると, 先ほどの getDrawing() メソッドで取得してきた QuadTreeDrawing クラスのインスタンスに対して findFigure(Point2D#Double) メソッドが呼び出され,
+ ソースコードを見ると, 先ほどの getDrawing() メソッドで取得してきた QuadTreeDrawing クラスのインスタンスに対して findFigure(Point2D$Double) メソッドが呼び出され,
その引数として, DefaultDrawingView クラスの viewToDrawing(Point) メソッドの戻り値が渡されていることが確認できます.
次は, ステップインを1回押して, viewToDrawing(Point) メソッドの中に入ってください.

DefaultDrawingView クラスの findFigure(Point) メソッドに戻ってきました.
- ステップインを1回押して QuadTreeDrawing クラスの findContains(Point2D#Double) メソッドの中に入ってください.
+ ステップインを1回押して QuadTreeDrawing クラスの findContains(Point2D$Double) メソッドの中に入ってください.

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

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

- QuadNode クラスの findContains(Point2D#Double, HashSet) メソッドに入りました.
+ QuadNode クラスの findContains(Point2D$Double, HashSet) メソッドに入りました.
ここで, 変数ビュー上の this を開くと, QuadNode クラスのインスタンス (id = 2120356010) が
フィールド objects として HashMap を参照していることがわかります.
また, ソースコードを見ると, 224行目の拡張for文でこの HashMap から取り出してきた要素を, 226行目で仮引数 result に追加していることが確認できます.
@@ -294,7 +297,7 @@

- 呼び出し元である QuadTree クラスの findContains(Point2D#Double) メソッドに戻ってきました.
+ 呼び出し元である QuadTree クラスの findContains(Point2D$Double) メソッドに戻ってきました.
ここで, ステップオーバーを1回押して, ローカル変数 result にそれ以上何も追加されずに
そのまま89行目の return result まで進むことを確認してください.
これを確認したら, ステップオーバーを1回押して呼び出し元に戻ってください.
@@ -302,7 +305,7 @@

- 呼び出し元である QuadTreeDrawing クラスの findContains(Double) メソッドに戻ってきました.
+ 呼び出し元である QuadTreeDrawing クラスの findContains(Point2D$Double) メソッドに戻ってきました.
ここでは, ステップオーバーを2回押して130行目にまで進めてください
ここで, 変数ビュー上の「呼び出し後」を開いて戻り値のIDを確認してください.
すると, 先ほどの RectangleFigure クラスのインスタンス (id = 1952912699) を取得していることがわかります.
@@ -320,7 +323,7 @@
ここからは, ローカル変数 view の値がどこから来たのかを見ていきます.
ソースコード中のローカル変数 view にカーソルを入れて view に代入している箇所を探していきます.
- 今回は, 228行目に該当するのでブレークポイントを入れ, ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.
+ 今回は, 228行目が該当するのでブレークポイントを入れ, ブレークポイントビュー上の「ブレークポイントをEclipseから取り入れる」アイコンを押してください.

@@ -344,7 +347,7 @@

- DefaultDrawingView クラスの getActiveView() メソッドの中に入りました.
+ DefaultDrawingEditor クラスの getActiveView() メソッドの中に入りました.
ここで, 変数ビュー上の this を開くと, DefaultDrawingEditor クラスのインスタンス (id = 1859859960) が
フィールド activeView として DefaultDrawingView クラスのインスタンス (id = 150367587) を参照していることがわかります.
これを確認したら, 呼び出しスタック上で2つ呼び出し元をクリックして戻ってください.
@@ -352,8 +355,10 @@
呼び出し元である SelectionTool クラスの mousePressed(MouseEvent) メソッドに戻ってきました.
- ここで課題B2は終了です. 時間計測を終了してください.
+ ここで課題B2は終了です. 時間計測を終了してください.
+ また, 終了アイコンを押して, デバッグ実行を終了しておいてください.


diff --git a/courseB/JHotDraw_Forward/problem2/JHotDraw2_Forward_Delta.html b/courseB/JHotDraw_Forward/problem2/JHotDraw2_Forward_Delta.html index 2920d02..39186e3 100644 --- a/courseB/JHotDraw_Forward/problem2/JHotDraw2_Forward_Delta.html +++ b/courseB/JHotDraw_Forward/problem2/JHotDraw2_Forward_Delta.html @@ -16,8 +16,8 @@
- 課題B2終了直後は下図のような状態になっているはずです.
- 右上にあるパースペクティブを右クリックし, いったんパースペクティブを閉じてください.
+ 課題B2 (機能理解) の終了直後は下図のような状態でデバッグ実行が終了しているはずです.
+ デバッグ実行が終了していることを確認したら, 右上にあるパースペクティブを右クリックし, いったんパースペクティブを閉じてください.

@@ -25,7 +25,7 @@

- その状態のままで, ブレークポイントビュー上にある「ブレークポイントを取り入れる」をクリックしてください.
+ その状態のままで, ブレークポイントビュー上にある「ブレークポイントをEclipseから取り入れる」をクリックしてください.
ブレークポイントを取り入れたら, DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目以外のブレークポイントのチェックを外してください.
チェックを外したら, デバッグ実行してください.
まずは, DefaultDrawingView クラスのインスタンス (id = 150367587) のフィールド selectedFigures が参照している LinkedHashSet に
@@ -77,7 +77,7 @@
先ほどの操作によって, 現在は DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの109行目にいます.
ここで, 変数ビュー上の this を開き, フィールド anchorFigure を右クリックしてください.
- 右クリックすると, ポップアップメニューが出てくるので, 上の方の「オブジェクトの接近過程抽出」をクリックしてください.
+ 右クリックすると, ポップアップメニューが出てくるので, 「値の代入時点に飛ぶ」をクリックしてください.
すると, 現在の実行時点が DefaultDragTracker クラスの setDraggedFigure(Figure) メソッドの218行目に移ります.


+ まずは, ワークスペース上の TraceDebuggerTest プロジェクトを開き, D.java の6行目と E.java の7行目にブレークポイントを入れてください.
+


メニューバーの ウィンドウ → パースペクティブ → パースペクティブを開く → その他... → トレースデバッガ(順方向) でトレースデバッガのパースペクティブを開いてください.


トレースファイルを読み込んだら, 次はこのデバッガ上でデバッグ実行するために必要なブレークポイントを設定します.
- まずは, デバッグ実行を一時停止したい行に対して, 普通のデバッガを利用する際と同様の手順で Eclipse 標準のブレークポイントを入れていきます.
- ここでは, TraceDebuggerTest プロジェクトの中の D.java の6行目と, E.java の7行目にブレークポイントを入れてください.
- それらのブレークポイントを入れ終わったら, 右下にあるブレークポイントビューの「ブレークポイントをEclipseから取り入れる」アイコンをクリックします.
+
+
+
+ D.java の6行目と E.java の7行目にブレークポイントが入ってることを確認したら,
+ ブレークポイントを右下にあるブレークポイントビューの「ブレークポイントをEclipseから取り入れる」アイコンをクリックします.
すると, ブレークポイントビュー上に, このデバッガ専用のブレークポイントが生成されます.
ただし, 実際に読み込んだトレースファイルに記録されていない行については, このブレークポイントは生成されません.



+ これで, 順方向トレースデバッガの説明は終了です.
+ 終了アイコンをクリックしてデバッグ実行を終了した状態にしてください.
+ デバッグ実行が終了していることを確認したら, 右上にあるパースペクティブを右クリックし, 「トレースデバッガ(順方向)」のパースペクティブを閉じてください.
+