diff --git a/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html b/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html new file mode 100644 index 0000000..623a7c7 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/ArgoUML1_Forward.html @@ -0,0 +1,257 @@ + + + + 課題A1 (ArgoUML) + + + + +

課題A1

+

+ 課題A1では, ArgoUMLの図形の削除機能について見ていきます.
+ ArgoUMLはオープンソースのUMLモデリングツールで, Javaで書かれております.
+ また, ArgoUML内部では, グラフ編集用フレームワークであるGEFが使用されています.
+ ワークスペース内のargouml-*が、ArgoUMLを構成するプロジェクトであり, GEF-0.13.7がGEFのプロジェクトです. +

+ +
+

実行手順

+

+

    +
  1. + デスクトップのEclipseを起動し, 指定されたワークスペースを開いてください. +
    +
  2. +
  3. + ワークスペース中にあるGEF-0.13.7プロジェクトを選択し, メニューバーの Search → Java で Fig というタイプの宣言を検索してください. +
    +
    +
  4. +
  5. + Figクラスのソースファイルを開いて743行目 (Fig#removeFromDiagram()) にブレークポイントを入れてください. +
    +
  6. +
  7. + メニューバーの Window → Perspective → Open Perspective → Other... → トレースデバッガ(順方向) でトレースデバッガのパースペクティブを開いてください. +
    +
    +
  8. +
  9. + 開いたトレースデバッガのパースペクティブ右上のブレークポイントビュー上にあるフォルダアイコン(左から1番目)を
    + クリックしてトレースファイル(ArgoUMLBenchMarkWithMoreStandardClasses.trace)を開いてください. +
    +
    +
  10. +
  11. + トレースファイルの読み込みが終わるまで待ってから, ブレークポイントビュー上にある「ブレークポイントをEclipseから取り入れる」アイコン(左から2番目)を
    + クリックしてトレースデバッガ用のブレークポイントを作成してください. +
    +
  12. +
  13. + ブレークポイントビュー上にあるデバッグアイコン(左から3番目)をクリックしてください.
    + トレースデバッガによるデバッグ実行が起動し, ブレークポイントを入れた位置の行が選択された状態で一時停止します. +
    +
  14. +
+

+ +
+

課題A1

+

+ Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
+ また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
+ ブレークポイントを置いた行は、図形を削除するたびに実行されます. +

+ +

+

+ 先ほどの実行手順にしたがって進めていくと, 下図のように Fig クラスの removeFromDiagram() メソッド内の743行目で一時停止している状態になっているはずです.
+ この状態になっていれば, ここから時間計測を開始してください.
+ ここで, 変数ビューを確認すると, このメソッド実行は FigClass クラスのインスタンス (id = 1675174935) に対する呼び出しだとわかります.
+ この FigClass クラスのインスタンス (id = 1675174935) がどこから来たのかを確認していきます.
+ まずは, 呼び出しスタック上で1つ呼び出し元をクリックしてください.
+

+

+

+ 現在は, 呼び出し元である FigNode クラスの removeFromDiagram() メソッドを見ています.
+ ここで, 変数ビューを見ると, このメソッドも同一の FigClass クラスのインスタンス (id = 1675174935) に対して呼び出されていることがわかります.
+ これを確認したら, 呼び出しスタック上でさらに1つ呼び出し元をクリックしてください.
+

+

+

+ 現在は, 呼び出し元である FigNodeModelElement クラスの removeFromDiagramImpl() メソッドを見ています.
+ ここで, 変数ビューを見ると, このメソッドも先ほどと同様に FigClass クラスのインスタンス (id = 1675174935) によって呼び出されていることがわかります.
+ これを確認したら, 呼び出しスタック上でさらに1つ呼び出し元をクリックしてください. +

+

+

+ 現在は, 呼び出し元である FigNodeModelElement クラスの removeFromDiagram() メソッドを見ています.
+ ここで, ソースコードを見ると, ローカル変数 delegate が参照しているインスタンスに対して removeFromDiagramImpl() メソッドが呼び出されていることがわかります.
+ ここでは, ローカル変数 delegate の値がどこから来たのかを見ていきます.
+ FigNodeModelElement クラスの removeFromDiagram() メソッドの1965行目にブレークポイントを入れ,
+ ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください.
+

+

+

+ ここで, いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ すると, FigNodeModelElement クラスの removeFromDiagram() メソッドの1965行目で実行が止まります.
+ ここで, 最初にブレークポイントを入れた地点である Fig クラスの removeFromDiagram() メソッドの743行目に実行が進むかどうかを確認します.
+ 再開ボタンを1回押すと, 実際に Fig クラスの removeFromDiagram() メソッドの743行目に実行時点が進むことが確認できます.
+ +

+

+ 先ほどの確認が終わったら, いったんデバッグ実行を終了して, 再びデバッグ実行してください.
+ FigClassModelElement クラスの removeFromDiagram() メソッドの1965行目に止まります.
+ ここでは, ステップインを2回押して getRemoveDelegate() メソッドの中に入ってください. +

+

+

+ FigNodeModelElement クラスの getRemoveDelegate() メソッドに入りました.
+ ここで, ソースコードを見ると, このメソッドでは return this で自分自身が戻り値として返されていることがわかります.
+ これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください. +

+

+

+ 現在は, 呼び出し元である FigNodeModelElement クラスの removeFromDiagram() メソッドを見ています.
+ ここで, 呼び出しスタック上でさらに1つ呼び出し元をクリックしてください. +

+

+

+ 現在は, 呼び出し元である ActionRemoveFromDiagram() クラスの actionPerformed(ActionEvent) メソッドの89行目を見ています.
+ ここで, 変数ビュー上で 「呼び出し前」を開いて, レシーバのIDを確認してください.
+

+

+

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

+

+

+ いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ すると, まずは ActionRemoveFromDiagram() クラスの actionPerformed(ActionEvent) メソッドの85行目に止まります.
+ ここで, 先ほどブレークポイントを入れていた箇所に実行が進むかどうかを見ていきます.
+ 再開ボタンを1回押すと, FigNodeModelElement クラスの removeFromDiagram() メソッドの1965行目に現在の実行時点が移ることが確認できます.
+ もう一度再開ボタンを押すと, 今度は Fig クラスの removeFromDiagram() メソッドの743行目に現在の実行時点が移ることが確認できます.
+

+

+ いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ ActionRemoveFromDiagram() クラスの actionPerformed(ActionEvent) メソッドの85行目に止まります.
+ ソースコードを見ると, ここでは ローカル変数 ce で参照されているインスタンスに対して getSelectionManager() メソッドが呼び出され,
+ その戻り値に対して getFigs() メソッドが呼び出され, getFigs() メソッドの戻り値として返されたリストが, ローカル変数 figs に代入されていることが確認できます.
+ ここで, まずはステップインを1回押して Editor クラスの getSelectionManager() メソッドの中に入ってください. +

+

+

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

+

+

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

+

+

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

+

+

+ 現在は SelectionManager クラスの getFigs() メソッドの363行目にいます.
+ ソースコードを見ると, フィールド selections から get() メソッドで取り出した要素に対して,
+ さらに getContent() メソッドを呼び出し, その戻り値をローカル変数 figs に追加していることが確認できます.
+

+

+

+ ここで, まずはステップインを3回押してください.
+ すると, selections に対する get() メソッドの実行が終了し, その戻り値に対して getContent() メソッドを呼び出す直前の時点にまで現在の実行時点が進みます.
+ ここで, ステップインを1回押して, SelectionClass クラスの getContent() メソッドの中に入ってください. +

+

+

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

+

+

+ SelectionManager クラスの getFigs() メソッドに戻ってきました.
+ ここで, 変数ビュー上の「呼び出し前」を開いて引数のIDを確認してください.
+ すると, 先ほど取得してきた FigClass クラスのインスタンス (id = 1675174935) をローカル変数 figs に追加することがわかります.
+

+ +

+

+ ここで, ステップオーバーを1回押して, ローカル変数 figs にそれ以上何も追加されずに
+ そのまま366行目の return figs まで進むことを確認してください.
+ これを確認したら, ステップオーバーを1回押して呼び出し元に戻ってください. +

+

+

+ 呼び出し元である ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドに戻ってきました.
+ ここで, ステップオーバーを1回押して, 87行目に進んでください.
+ そのあと, 変数ビュー上の「呼び出し後」を開いて戻り値のIDを確認してください.
+ すると, 先ほどの FigClass クラスのインスタンス (id = 1675174935) を取得していることがわかります.
+ これを確認したら, ステップオーバーを2回押して89行目に進んでください. +

+
+

+

+ 現在は ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドの89行目にいます.
+ ここで, ステップインを1回押すと, 変数ビュー上に「呼び出し前」が新たに表示されます.
+ この「呼び出し前」を開いてレシーバのIDを確認してください.
+ すると, ここでは, 先ほどの FigClass クラスのインスタンス (id = 1675174935) に対して removeFromDiagram() メソッドを呼び出していることがわかります.
+ これを確認したら, ステップインをもう1回押して FigClass クラスの removeFromDiagram() メソッドの中に入ってください. +

+

+

+ FigClass クラスの removeFromDiagram() メソッドに入りました.
+ ここでは, 変数ビューを見て this の ID を確認してください.
+ これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください. +

+

+

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

    +
  1. FigClass クラスのインスタンス (id = 1675174935) は SelectionClass クラスのインスタンス (id = 1672744985) が保持している.
  2. +
  3. SelectionClass クラスのインスタンス (id = 1672744985) は SelectionManager クラスのインスタンス (id = 4310438) が保持している.
  4. +
  5. SelectionManager クラスのインスタンス (id = 4310438) は Editor クラスのインスタンス (id = 371019845) が保持している.
  6. +
+ ここからは, Editor クラスのインスタンス (id = 371019845) について見ていきます.
+ Editor クラスのインスタンスは, 85行目でローカル変数 ce の値として参照されていることがわかっています.
+ したがって, ここでは, ローカル変数 ce の値がどこから来たのかを探していきます.
+ すぐ上の83行目にブレークポイントを入れてから, ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください. +
+

+

+ いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ すると, まずは ActionRemoveFromDiagram クラスの actionPerformed() メソッドの83行目に止まることが確認できます.
+ この状態で再開ボタンを押していくと, 現在の実行時点が 85行目 → 1965行目 → 743行目と移り変わることを確認してください. +

+

+ 先ほどの流れが確認できたら, いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ ActionRemoveFromDiagram クラスの actionPerformed() メソッドの83行目に止まっています.
+ この83行目では, Globals クラスの static メソッドである curEditor() メソッドが呼び出され,
+ その戻り値がローカル変数 ce に代入されていることが確認できます.
+ ここで, ステップインを2回押してこのメソッドの中に入ってください. +

+

+

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

+

+

+ 現在は 呼び出し元である ActionRemoveFromDiagram クラスの actionPerformed() メソッドを見ています.
+ ここで, 課題A1は終了です. 時間計測を終了してください. +

+

+

+ + \ No newline at end of file diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_01.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_01.png new file mode 100644 index 0000000..02f1fd4 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_01.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_02.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_02.png new file mode 100644 index 0000000..3acdc9e --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_02.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_03.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_03.png new file mode 100644 index 0000000..fd35063 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_03.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_04.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_04.png new file mode 100644 index 0000000..c6e09c4 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_04.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_05.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_05.png new file mode 100644 index 0000000..3dbc088 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_05.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_06.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_06.png new file mode 100644 index 0000000..d26c330 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_06.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_07.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_07.png new file mode 100644 index 0000000..0fa7acb --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_07.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_08.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_08.png new file mode 100644 index 0000000..b4f3538 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_08.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_09.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_09.png new file mode 100644 index 0000000..153aeb6 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_09.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_10.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_10.png new file mode 100644 index 0000000..0f9e3f1 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_10.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_11.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_11.png new file mode 100644 index 0000000..7b91361 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_11.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_12.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_12.png new file mode 100644 index 0000000..4f9cedf --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_12.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_13.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_13.png new file mode 100644 index 0000000..12e4df9 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_13.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_14.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_14.png new file mode 100644 index 0000000..5169705 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_14.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_15.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_15.png new file mode 100644 index 0000000..f6198a9 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_15.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_16.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_16.png new file mode 100644 index 0000000..a94a898 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_16.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_17.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_17.png new file mode 100644 index 0000000..2710bd1 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_17.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_18.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_18.png new file mode 100644 index 0000000..6b7365e --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_18.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_19.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_19.png new file mode 100644 index 0000000..8f066e4 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_19.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_20.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_20.png new file mode 100644 index 0000000..1f750fd --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_20.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_21.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_21.png new file mode 100644 index 0000000..21d0bb0 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_21.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_22.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_22.png new file mode 100644 index 0000000..730fa28 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_22.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_23.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_23.png new file mode 100644 index 0000000..82d7459 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_23.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_24.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_24.png new file mode 100644 index 0000000..3e17d3b --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_24.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_25.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_25.png new file mode 100644 index 0000000..d129604 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_25.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_26.png b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_26.png new file mode 100644 index 0000000..d132641 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1/ArgoUML_1_26.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_01.png b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_01.png new file mode 100644 index 0000000..ea96483 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_01.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_02.png b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_02.png new file mode 100644 index 0000000..6ea5526 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_02.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_03.png b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_03.png new file mode 100644 index 0000000..f8441e7 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_03.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_04.png b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_04.png new file mode 100644 index 0000000..a139768 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_04.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_05.png b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_05.png new file mode 100644 index 0000000..8dab940 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_05.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_06.png b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_06.png new file mode 100644 index 0000000..59cc34b --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_06.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_07.png b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_07.png new file mode 100644 index 0000000..274e9c0 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_07.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_08.png b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_08.png new file mode 100644 index 0000000..7b8c544 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_08.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_09.png b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_09.png new file mode 100644 index 0000000..72fb287 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_09.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_10.png b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_10.png new file mode 100644 index 0000000..d7cda8a --- /dev/null +++ b/courseA/ArgoUML_Forward/problem1/images_problem1_pre/ArgoUML_1_pre_10.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/ArgoUML2_Forward.html b/courseA/ArgoUML_Forward/problem2/ArgoUML2_Forward.html new file mode 100644 index 0000000..03c4518 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/ArgoUML2_Forward.html @@ -0,0 +1,283 @@ + + + + 課題A2 (ArgoUML) + + + + +

課題A2

+

+ 課題A2では, ArgoUMLの図形の選択機能について見ていきます.
+ ArgoUMLはオープンソースのUMLモデリングツールで, Javaで書かれております.
+ また, ArgoUML内部では, グラフ編集用フレームワークであるGEFが使用されています.
+ ワークスペース内のargouml-*が、ArgoUMLを構成するプロジェクトであり, GEF-0.13.7がGEFのプロジェクトです. +

+ +
+

前準備

+

+

+ 課題A1(削除機能)が終了した直後は下図のような状態になっているはずです. +

+

+

+ ここで, ステップオーバーを2回押して85行目に進んでください.
+ そのあと, ステップインを4回押して getSelectionManager() に入ってからそのまま抜けて, 次の getFigs() メソッドの中に入ってください.
+

+

+

+ SelectinoManager クラスの getFigs() メソッドに入りました.
+ ここでは, フィールド selections に SelectionClass クラスのインスタンス (id = 1672744985) を実際に追加しているのはどこなのかを見ていきます.
+ ソースコード中の selections にカーソルを入れ, そのフィールドに対してオブジェクトを追加している全ての行にブレークポイントを入れてください.
+ 今回は, SelectionManager クラスの125行目と130行目の二か所が該当します. +

+

+

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

    +
  1. ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッド 83行目
  2. +
+ ここで, 課題A1から続いているデバッグ実行をいったん停止してください. +
+

+

+ デバッグ実行を押すと, SelectionManager クラスの addFig(Fig) メソッドの130行目で止まります.
+ ここで, 再開ボタンを押して, このあと実行がどのように移り変わるかを確認していきます.
+ まずは再開ボタンを1回押すと, 再び130行目に止まることが確認できます.
+ もう一度再開ボタンを押すと 今度は ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドの85行目に止まることが確認できます.
+ そこからさらに再開ボタンを押していくと, 現在の実行時点は FigNodeModelElement クラスの 1965行目 → Fig クラスの743行目に移り変わっていくことが確認できます.
+ これを確認したら, デバッグ実行をいったん終了してから再び実行して, 再開ボタンを1回押して2回目の130行目に進めてください.
+ 下図の状態になれば, ここで課題2の前準備は終了です. +

+

+

+ +
+

課題A2

+

+ Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
+ また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
+ ブレークポイントを置いた行は、図形を選択するたびに実行されます. +

+ +

+

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

+

+

+ SelectionManager クラスの makeSelectionFor(Fig) メソッドに入りました.
+ ここで, 変数ビューを見ると, 仮引数として FigClass クラスのインスタンス (id = 1675174935) が渡されてきていることがわかります.
+ また, ソースコードを見ると, 1129行目では 仮引数 f で渡されてきたこのインスタンスに対して makeSelection() メソッドが呼び出され,
+ その戻り値がローカル変数 customSelection に代入されていることが確認できます.
+ ここでは, ステップインを2回押してこのメソッドの中に入ってください. +

+

+

+ FigClass クラスの makeSelection() メソッドに入りました.
+ ソースコードを見ると, ここで SelectionClass クラスのインスタンスを新たに生成し, その引数として自分自身が渡されていることが確認できます.
+ よって, ここで新たに生成された SelectionClass クラスのインスタンスが FigClass クラスのインスタンス (id = 1675174935) を保持していることがわかります.
+ また, このメソッドでは, この SelectionClass クラスのインスタンスを戻り値として返していることが確認できます.
+ これを確認したら, ステップオーバーを1回押して, 呼び出し元に戻ってください. +

+

+

+ SelectionManager クラスの makeSelectionFor(Fig) メソッドに戻ってきました.
+ ここで, ソースコードを見ると, 先ほど呼び出された FigClass クラスの makeSelection() メソッドの戻り値が,
+ ローカル変数 customSelection に代入されて, それがここでは戻り値として返されていることがわかります.
+ これを確認したら, ステップオーバーで呼び出し元に戻ってください. +

+

+

+ SelectionManager クラスの addFig(Fig) メソッドに戻ってきました.
+ ここで, 変数ビュー上の「呼び出し前」を開くと, 先ほどの SelectionClass クラスのインスタンス (id = 1672744985) が引数として渡されており,
+ これがフィールド selections に追加されることがわかります.
+ また, この引数をさらに開くと, SelectionClass クラスのインスタンス (id = 1672744985) が
+ フィールド content として 実際に FigClass クラスのインスタンス(id = 1675174935) を保持していることを確認できます.
+ ここからは, FigClass クラスのインスタンス(id = 1675174935) について見ていきます.
+ ソースコードと変数ビューを見ると, このインスタンスは 仮引数 f として渡されていることが確認できます.
+ この仮引数 f の値がどこから来たのかを見るために, 呼び出しスタック上で1つ呼び出し元をクリックしてください. +

+

+

+ 現在は SelectionManager クラスの select(Fig) メソッドの180行目を見ています.
+ ここで, ソースコードを見ると, この FigClass クラスのインスタンス (id = 1675174935) は, ここでも仮引数として渡されてきていることが確認できます.
+ これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください. +

+

+

+ 現在は ModeSelect クラスの mousePressed(MouseEvent) メソッドの187行目を見ています.
+ ここで, ソースコードを見ると, ローカル変数 underMouse で参照されているインスタンスが実引数として渡されていることがわかります.
+

+

+

+ ここからは, このローカル変数 underMouse の値がどこから来たのかを見ていきます.
+ ローカル変数 underMouse にカーソルを入れて この underMouse に代入された箇所を探していきます.
+ ローカル変数 underMouse の初期化が160行目にあるので, ここにブレークポイントを入れてください.
+ ブレークポイントを入れたら, ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください.
+ そのあと, ブレークポイントビュー上で130行目と160行目以外のブレークポイントのチェックを外してください. +

+

+

+ いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ すると, まずは SelectionManager クラスの addFig(Fig) メソッドの130行目で止まります.
+ ここで, 再開ボタンを1回押すと, 次は ModeSelect クラスの mousePressed(MouseEvent) メソッドの160行目で止まります.
+ そのあと, 再開ボタンをもう1回押すと, 再び160行目で止まることが確認できます.
+ さらに再開ボタンを押すと, SelectionManager クラスの addFig(Fig) メソッドの130行目に止まることが確認できます.
+ これによって, 2回目の160行目の時点がローカル変数 underMouse に値が代入された直前の実行時点だとわかります.
+

+

+ これを確認したら, いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ そのあと, 再開ボタンを2回押して, 2回目の160行目にまで進んでください.
+ ここで, ステップオーバーを1回押すと, 163行目に止まることが確認できます.
+ 163行目では, ローカル変数 underMouse で参照されているインスタンスに対して deepSelect(Rectangle) メソッドが呼び出され
+ その戻り値がローカル変数 underMouse に再び代入されていることが確認できます.
+

+
+

+

+ ここでは, ステップオーバーを8回押して, このローカル変数がこれ以上更新されずに187行目まで進むことを確認してください.
+ これにより, 187行目で実引数として渡しているローカル変数 underMouse の値は, 163行目で呼び出されたメソッドの戻り値から来ていることがわかります. +

+

+

+ いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ まずは, 再開ボタンを2回押して, 2回目の160行目にまで進んでください.
+ そのあと, ステップオーバーを1回押して163行目に進んでください.
+ ここで, ステップインを2回押して FigGroup クラスの deepSelect(Rectangle) メソッドの中に入ってください.
+

+

+

+ FigGroup クラスの deepSelect(Rectangle) メソッドに入りました.
+ ここで, ソースコードを見ると, return this によって, 自分自身が戻り値として返されていることが確認できます.
+ これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください. +

+

+

+ 現在は, ModeSelect クラスの mousePressed(MouseEvent) メソッドを見ています.
+ 163行目では元々参照されていた値と同じ FigClass クラスのインスタンス (id = 1675174935) が, 再び代入されているだけだということがわかりました.
+ ここで, ソースコードを見ると, 元々の値は160行目で代入されていることが確認できます. +

+

+

+ いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ そのあと, 再開ボタンを2回押して, 2回目の160行目にまで進んでください.
+ ソースコードを見ると, 160行目では Editor クラスの hit(Point) メソッドが呼び出され,
+ その戻り値がローカル変数 underMouse に代入されていることが確認できます.
+ ここで, ステップインを3回押して, このメソッドの中に入ってください. +

+

+

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

+

+

+ Editor クラスの hit(Rectangle) メソッドに入りました.
+ ここで, ソースコードを見ると, getLayerManager() メソッドの戻り値に対して hit() メソッドが呼び出され,
+ その戻り値がローカル変数 f に代入されたあと, 次の行で return f によって戻り値として返されていることが確認できます.
+ まずは, ステップインを2回押して getLayerManager() メソッドの中に入ってください. +

+

+

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

+

+

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

+

+

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

+

+

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

+

+

+ 現在は LayerPerspectiveMutable クラスの hit(Rectangle) メソッドの232行目にいます.
+ ここで, 変数ビュー上の「呼び出し後」を開くと, フィールド contents から戻り値として
+ FigClass クラスのインスタンス (id = 1675174935) を取得していることがわかります.
+ ステップオーバーを1回押して, 実際に233行目の return f で戻り値として返されていることを確認してください.
+ これを確認したら, 呼び出しスタック上で4つ呼び出し元である ModeSelect クラスの mousePressed(MouseEvent) メソッドをクリックしてください.
+

+
+

+

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

+

+

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

    +
  1. SelectionClass クラスのインスタンス (id = 1672744985) は Fig クラスのインスタンス (id = 1675174935) を引数に渡して生成している.
  2. +
  3. FigClass クラスのインスタンス (id = 1675174935) は LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) が保持している.
  4. +
  5. LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) は LayerManager クラスのインスタンス (id = 1975264229) が保持している.
  6. +
  7. LayerManager クラスのインスタンス (id = 1975264229) は Editor クラスのインスタンス (id = 371019845) が保持している.
  8. +
  9. Editor クラスのインスタンス (id = 371019845) は ModeSelect クラスのインスタンス (id = 1807431709) が保持している.
  10. +
+ 課題A2では, オブジェクトの追加に関わっている SelectionManager クラスのインスタンスと SelectionClass クラスのインスタンスについて見ていくのでした.
+ ここからは, SelectionManager クラスのインスタンスの方がどこから来たかを見ていきます.
+

+

+ ソースコードをスクロールして187行目を見ると, SelectionManager クラスのインスタンスはローカル変数 sm で参照されていることが確認できます.
+ ここでは, このローカル変数 sm の値がどこから来たかを見るために, ローカル変数 sm にカーソルを入れて, 代入された箇所を探していきます.
+ ローカル変数 sm の初期化が156行目にあるので, ここにブレークポイントを入れてください.
+ ブレークポイントを入れたら, ブレークポイントビュー上の「ブレークポイントを取り入れる」ボタンを押してください.
+ そのあと, ブレークポイントビュー上で130行目と156行目以外のブレークポイントのチェックを外してください. +

+

+

+ いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ すると, まずは SelectionManager クラスの addFig(Fig) メソッドの130行目で止まります.
+ ここで, 再開ボタンを1回押すと, 次は ModeSelect クラスの mousePressed(MouseEvent) メソッドの156行目で止まります.
+ そのあと, 再開ボタンをもう1回押すと, 再び160行目で止まることが確認できます.
+ さらに再開ボタンを押すと, SelectionManager クラスの addFig(Fig) メソッドの130行目に止まることが確認できます.
+ これによって, 2回目の156行目の時点がローカル変数 sm に値が代入された直前の実行時点だとわかります. +

+

+ これを確認したら, いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ そのあと, 再開ボタンを2回押して, 2回目の156行目にまで進んでください.
+ 156行目では, Editor クラスの getSelectionManager() メソッドが呼び出され, その戻り値がローカル変数 sm に代入されていることが確認できます.
+ ここで, ステップインを2回押して, このメソッドの中に入ってください. +

+

+

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

+

+

+ 現在は ModeSelect クラスの mousePressed(MouseEvent) メソッドを見ています.
+ ここで, 課題A2は終了です. 時間計測を終了してください. +

+

+

+ + + \ No newline at end of file diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_01.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_01.png new file mode 100644 index 0000000..fbc13ae --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_01.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_02.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_02.png new file mode 100644 index 0000000..9ab6ad1 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_02.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_03.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_03.png new file mode 100644 index 0000000..0925fd9 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_03.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_04.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_04.png new file mode 100644 index 0000000..1e7f494 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_04.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_05.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_05.png new file mode 100644 index 0000000..cc29ae4 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_05.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_06.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_06.png new file mode 100644 index 0000000..1c060cb --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_06.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_07.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_07.png new file mode 100644 index 0000000..9cc32ab --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_07.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_08.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_08.png new file mode 100644 index 0000000..cc098f4 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_08.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_09.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_09.png new file mode 100644 index 0000000..2156331 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_09.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_10.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_10.png new file mode 100644 index 0000000..91e036c --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_10.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_11.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_11.png new file mode 100644 index 0000000..3522541 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_11.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_12.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_12.png new file mode 100644 index 0000000..239a377 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_12.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_13.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_13.png new file mode 100644 index 0000000..6da4158 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_13.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_14.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_14.png new file mode 100644 index 0000000..6126af0 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_14.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_15.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_15.png new file mode 100644 index 0000000..56b2549 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_15.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_16.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_16.png new file mode 100644 index 0000000..69c88f0 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_16.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_17.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_17.png new file mode 100644 index 0000000..fd315f5 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_17.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_18.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_18.png new file mode 100644 index 0000000..90eee34 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_18.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_19.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_19.png new file mode 100644 index 0000000..a0ba144 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_19.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_20.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_20.png new file mode 100644 index 0000000..a1e206e --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_20.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_21.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_21.png new file mode 100644 index 0000000..103debd --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_21.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_22.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_22.png new file mode 100644 index 0000000..2df4ae2 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_22.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_23.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_23.png new file mode 100644 index 0000000..7aea444 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_23.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_24.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_24.png new file mode 100644 index 0000000..d06fa85 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_24.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_25.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_25.png new file mode 100644 index 0000000..2f52ee1 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_25.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_26.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_26.png new file mode 100644 index 0000000..baa441b --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_26.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_27.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_27.png new file mode 100644 index 0000000..8e233f5 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_27.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_28.png b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_28.png new file mode 100644 index 0000000..9bcd216 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2/ArgoUML_2_28.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_01.png b/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_01.png new file mode 100644 index 0000000..d132641 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_01.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_02.png b/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_02.png new file mode 100644 index 0000000..ca1d5a0 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_02.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_03.png b/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_03.png new file mode 100644 index 0000000..b4ef1e0 --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_03.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_04.png b/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_04.png new file mode 100644 index 0000000..248a76d --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_04.png Binary files differ diff --git a/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_05.png b/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_05.png new file mode 100644 index 0000000..fbc13ae --- /dev/null +++ b/courseA/ArgoUML_Forward/problem2/images_problem2_pre/ArgoUML_2_pre_05.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/JHotDraw1_Reverse.html b/courseA/JHotDraw_Reverse/problem1/JHotDraw1_Reverse.html new file mode 100644 index 0000000..81d02e7 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/JHotDraw1_Reverse.html @@ -0,0 +1,149 @@ + + + + 課題B1 (JHotDraw) + + + + +

課題B1

+

+ 課題B1では, JHotDrawの図形の移動機能について見ていきます.
+ JHotDrawはオープンソースの図形描画ツールで, Javaで書かれております.
+ ワークスペース内のjhotdraw7が、JHotDrawを構成するプロジェクトです。 +

+ +
+

実行手順

+

+

    +
  1. + デスクトップのEclipseを起動し, 指定されたワークスペースを開いてください. +
    +
  2. +
  3. + ワークスペース中にあるjhotdraw7プロジェクトを選択し, メニューバーの Search → Java で DefaultDragTracker という型の宣言を検索してください. +
    +
    +
  4. +
  5. + DefaultDragTrackerクラスのソースファイルを開いて159行目 (DefaultDragTracker#mouseDragged(MouseEvent)) にブレークポイントを入れてください. +
    +
  6. +
  7. + メニューバーの Window → Perspective → Open Perspective → Other... → トレースデバッガ(逆方向) でトレースデバッガのパースペクティブを開いてください. +
    +
    +
  8. +
  9. + 開いたトレースデバッガのパースペクティブ右上のブレークポイントビュー上にあるフォルダアイコン(左から1番目)を
    + クリックしてトレースファイル(jHotDrawBenchMarkWithMoreStandardClasses.trace)を開いてください. +
    +
    +
  10. +
  11. + トレースファイルの読み込みが終わるまで待ってから, ブレークポイントビュー上にある「ブレークポイントをEclipseから取り入れる」アイコン(左から2番目)を
    + クリックしてトレースデバッガ用のブレークポイントを作成してください. +
    +
  12. +
  13. + ブレークポイントビュー上にあるデバッグアイコン(左から3番目)をクリックしてください.
    + トレースデバッガによるデバッグ実行が起動し, ブレークポイントを入れた位置の行が選択された状態で一時停止します. +
    +
  14. +
+

+ +
+

課題B1

+

+ + ブレークポイントを置いた行は、図形を移動するたびに実行されます. +

+ +

+

+ 先ほどの実行手順にしたがって進めていくと, 下図のように DefaultDragTracker クラスの
+ mouseDragged(MouseEvent) メソッド内の159行目で一時停止している状態になっているはずです.
+ この状態になっていれば, ここから時間計測を開始してください.
+

+

+

+ DefaultDragTracker クラスの mouseDragged(MouseEvent) メソッドの159行では,
+ ローカル変数 f で参照されている RectangleFigure クラスのインスタンスに対してメソッドが呼び出されていることが確認できます.
+ まずは, この f の値がどこから来たのかを見るために, ステップバックオーバーを2回押して157行目の拡張for文まで戻ってください. +

+

+

+ 先ほどのステップバックオーバーの実行によって157行目まで戻ってきました.
+ ここでは, まずステップネクストを1回押してください.
+ そのあと, 変数ビュー上にある「呼び出し後」を開くと,
+ 戻り値として RectangleFigure クラスのインスタンス (id = 1952912699) が返されていることがわかります. +

+

+

+ ソースコードを見ると, RectangleFigure クラスのインスタンス (id = 1952912699) は DefaultDragTracker クラスのインスタンス (id = 758826749) が
+ フィールド transFormedFigures の要素として保持していることがわかります.
+ 次は, この transFormedFigures に RectangleFigure クラスのインスタンスがどの実行時点で追加されたのかを見ていきます.
+ 変数ビュー上で開いている「呼び出し後」の中にある戻り値を右クリックして「オブジェクトの追加時点に飛ぶ」を選択してください.
+ 実行すると, オブジェクトの追加時点である DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの118行目にまで現在の実行時点が遡ります. +

+

+

+ 先ほどの操作によって, DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの118行目に現在の実行時点が移りました.
+ この118行目では, ローカル変数 f の値が フィールド transFormedFigures に追加されていることが確認できます.
+ ここで, 「トレースデバッガ」パースペクティブの右下にある「実行時点の登録」ビューの追加ボタンをクリックしてください.
+ そうすると, 現在の実行時点がこのビュー上に登録されます. +

+

+

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

+

+

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

+

+

+ 先ほどの結果から, RectangleFigure クラスのインスタンス (id = 1952912699) は
+ DefaultDrawingView クラスのインスタンス (id = 150367587) が セットの要素として保持していることがわかりました.
+ 次は, この DefaultDrawingView クラスのインスタンスがどこから来たのかを見ていきます.
+ ここでは, ステップバックオーバーを5回押して98行目に戻ってください.
+ ソースコードを見ると, getView() メソッドの戻り値を ローカル変数 view に代入していることが確認できます.
+ ここで, この戻り値がどうなっているのかを確認するために, ステップインを1回押してこのメソッドの中に前から入ってください.
+

+

+

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

+

+

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

+

+

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

+

+

+ + \ No newline at end of file diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_01.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_01.png new file mode 100644 index 0000000..b8bcdb6 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_01.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_02.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_02.png new file mode 100644 index 0000000..f7ea61a --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_02.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_03.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_03.png new file mode 100644 index 0000000..6d8be67 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_03.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_04.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_04.png new file mode 100644 index 0000000..bdf1412 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_04.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_05.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_05.png new file mode 100644 index 0000000..b28fd53 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_05.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_06.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_06.png new file mode 100644 index 0000000..4aa1165 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_06.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_07.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_07.png new file mode 100644 index 0000000..5ce76fb --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_07.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_08.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_08.png new file mode 100644 index 0000000..3a7e27a --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_08.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_09.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_09.png new file mode 100644 index 0000000..cc2afe0 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_09.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_10.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_10.png new file mode 100644 index 0000000..f26d045 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_10.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_11.png b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_11.png new file mode 100644 index 0000000..c72d5f2 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1/JHotDraw_1_11.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_01.png b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_01.png new file mode 100644 index 0000000..f0e6c51 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_01.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_02.png b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_02.png new file mode 100644 index 0000000..13a341c --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_02.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_03.png b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_03.png new file mode 100644 index 0000000..c4f5274 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_03.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_04.png b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_04.png new file mode 100644 index 0000000..edebae3 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_04.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_05.png b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_05.png new file mode 100644 index 0000000..a3ed54c --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_05.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_06.png b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_06.png new file mode 100644 index 0000000..57ada6b --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_06.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_07.png b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_07.png new file mode 100644 index 0000000..31cc164 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_07.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_08.png b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_08.png new file mode 100644 index 0000000..cda9eb8 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_08.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_09.png b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_09.png new file mode 100644 index 0000000..fa10c98 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_09.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_10.png b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_10.png new file mode 100644 index 0000000..b8bcdb6 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem1/images_problem1_pre/JHotDraw_1_pre_10.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse.html b/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse.html new file mode 100644 index 0000000..866ab27 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/JHotDraw2_Reverse.html @@ -0,0 +1,246 @@ + + + + 課題B2 (JHotDraw) + + + + +

課題B2

+

+ 課題B2では, JHotDrawの図形の選択機能について見ていきます.
+ JHotDrawはオープンソースの図形描画ツールで, Javaで書かれております.
+ ワークスペース内のjhotdraw7が、JHotDrawを構成するプロジェクトです。 +

+ +
+

前準備

+

+

+ 課題B1(移動機能)が終了した直後は下図のような状態になっているはずです. +

+

+

+ まずは, 課題B1の途中で「実行時点の登録」ビューに登録しておいた DefaultDragTracker.mousePressed(MouseEvent) 118行目 の実行時点をダブルクリックしてください.
+ ダブルクリックすることで, 現在の実行時点が登録した実行時点へと移ります. +

+

+

+ ここで, ステップバックオーバーを2回押してから, ステップネクストを1回押してください.
+ そのあと, 変数ビュー上で「呼び出し後」を開いて, 戻り値を右クリックしてください.
+ 右クリックするとポップアップメニューが現れるので, 「オブジェクトの追加時点に飛ぶ」を選択してください. +

+

+

+ 「オブジェクトの追加時点に飛ぶ」を選択すると, selectedFigures に この RectangleFigure クラスのインスタンス (id = 1952912699) が追加された時点である
+ DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目にまで現在の実行時点が遡ります.
+ 下図の状態になっていれば前準備は終了です. +

+

+

+ +
+

課題B2

+

+ + ブレークポイントを置いた行は、図形を選択するたびに実行されます. +

+ +

+

+ 先ほどの前準備にしたがって進めていくと, 下図のように DefaultDrawingView クラスの
+ addToSelection(Figure) メソッド内の780行目で一時停止している状態になっているはずです.
+ この状態になっていれば, ここから時間計測を開始してください.
+

+

+

+ まずは,「実行時点の登録」ビューの追加ボタンをクリックして実行時点の登録を行ってください.
+ ここで, ソースコードと変数ビューを見ると, DefaultDrawingView クラスのインスタンス (id = 150367587) が保持するフィールド selectedFigures へは
+ RectangleFigure クラスのインスタンス (id = 1952912699) が追加されていることがわかります.
+ 課題B2では, このオブジェクトの追加に関わっている DefaultDrawingView クラスのインスタンスと RectangleFigure クラスのインスタンスについて見ていきます.
+

+

+

+ まずは RectangleFigure がどこから来たのかを見るために, 呼び出しスタック上で1つ呼び出し元をクリックしてください.
+ ここで, ソースコードを見ると, 先ほど呼び出されていた addToSelection(Figure) メソッドは, ローカル変数 view で参照されているインスタンスに対する呼び出しであり,
+ その実引数としてフィールド anchorFigure の値が渡されていることがわかります.
+ また, 変数ビュー上の this を開くと, このフィールドは DefaultDragTracker クラスのインスタンス (id = 758826749) が保持していることがわかります. +

+

+

+ ここでは, いったんローカル変数 view の値がどこから来たのかを見ていきます.
+ ステップバックオーバーを4回押して98行目に戻ってください.
+ ソースコードを見ると, getView() メソッドの戻り値を ローカル変数 view に代入していることが確認できます.
+ ここで, この戻り値がどうなっているのかを確認するために, ステップインを1回押して getView() メソッドの中に前から入ってください.
+

+

+

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

+

+

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

+

+

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

+

+

+ 現在は, 呼び出し元である DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの98行目を見ています.
+ 今までの結果から, DefaultDrawingView クラスのインスタンス (id = 150367587) がどのようにして来たのかがわかりました.
+ ここからは, RectangleFigure クラスのインスタンス (id = 1952912699) がどこから来たのかを見ていきます.
+ ここで, 変数ビュー上の this を開き, その中にある anchorFigure を右クリックしてください.
+ 右クリックするとポップアップメニューが現れるので, 「値の代時点に飛ぶ」を選択してください.
+

+

+

+ 「値の追加時点に飛ぶ」を選択すると, DefaulatDragTracker クラスのインスタンス (id = 758826749) に
+ この RectangleFigure クラスのインスタンス (id = 1952912699) が追加された時点である
+ DefaultDragTracker クラスの setDraggedFigure(Figure) メソッドの218行目にまで現在の実行時点が遡ります.
+ まずは, 「実行時点の登録」ビューの追加ボタンをクリックして実行時点の登録を行ってください.
+ ここでは, DefaultDragTracker クラスのフィールド anchorFigure に仮引数 f の値を代入していることが確認できます.
+ 仮引数 f の値がどこから来たのかを見るために, 呼び出しスタック上で1つ呼び出し元をクリックしてください.
+

+

+

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

+

+

+ 現在は, 呼び出し元である DelegationSelectionTool クラスの mousePressed(MouseEvent) メソッドを見ています.
+ ここで, ソースコードを見ると, ここではローカル変数 figure の値が実引数として渡されていることが確認できます.
+

+

+

+ 今度はこのローカル変数 figure の値がどこから来ているのかを見るために, ステップバックオーバーを3回押して270行目に戻ってください.
+ 270行目では, ローカル変数 view で参照されるインスタンスに対して findFigure(Point) メソッドが呼び出され,
+ その戻り値がローカル変数 figure に代入されていることが確認できます.
+ この戻り値がどうなっているのかを確認するために, ステップインでこのメソッドの中に前から入ってください.
+

+

+

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

+

+

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

+

+

+ DefaultDrawingView クラスの findFigure(Point) メソッドに戻ってきました.
+ ここでは, まずステップネクストを1回押して viewToDrawingPoint(Point) メソッドを飛ばし,
+ それから, ステップインを1回押して QuadTreeDrawing クラスの findFigure(Point2D$Double) メソッドの中に前から入ってください.
+

+
+

+

+ QuadTreeDrawing クラスの findFigure(Point2D$Double) メソッドに入りました.
+ ここでは, ステップインを3回押して QuadTree クラスの findContains(Point2D$Double) メソッドの中に前から入ってください.
+

+

+

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

+

+

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

+

+

+ ここでは, ステップオーバーを3回押して226行目まで進んだあと, ステップネクストを2回押してください.
+ ソースコードを見ると, 224行目の拡張for文で 先ほど確認した HashMap から取得してきた要素を用いて,
+ 226行目ではそのうちのキー要素だけを取り出して, それを仮引数 result で参照されているセットに追加していることが確認できます.
+ ここで, 変数ビュー上の「呼び出し後」および「呼び出し前」を開くと,
+ 実際に RectangleFigure クラスのインスタンス (id = 1952912699) を取得してから追加していることを確認できます.
+ これを確認したら, ステップオーバーを4回押して呼び出し元に戻ってください. +

+

+

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

+
+

+

+ 現在は QuadTreeDrawing クラスの findFigure(Point2D$Double) メソッドを見ています.
+ ここでは, まずステップオーバーを2回押して129行目まで進んでください.
+ 129行目で「実行時点の登録」ビューの追加ボタンをクリックして実行時点の登録を行ってください.
+

+
+

+

+ 現在は QuadTreeDrawing クラスの findFigure(Point2D$Double) メソッドの129行目にいます.
+ そのあと, ステップネクストを3回実行すると, 現在の実行時点が130行目に移ります.
+ ここで, 変数ビュー上の「呼び出し後」を開き, 戻り値として RectangleFigure クラスのインスタンス (id = 1952912699) があることを確認してください.
+ これを確認したら, 呼び出しスタック上で2つ呼び出し元をクリックしてください.
+

+

+

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

    +
  1. RectangleFigure クラスのインスタンス (id = 1952912699) は QuadTree の内部クラス QuadNode クラスのインスタンス (id = 2120356010) が保持している.
  2. +
  3. QuadTree の内部クラス QuadNode クラスのインスタンス (id = 2120356010) は QuadTree クラスのインスタンス (id = 808853315) が保持している.
  4. +
  5. QuadTree クラスのインスタンス (id = 808853315) は QuadTreeDrawing クラスのインスタンス (id = 1583174451) が保持している.
  6. +
  7. QuadTreeDrawing クラスのインスタンス (id = 1583174451) は DefaultDrawingView クラスのインスタンス (id = 150367587) が保持している.
  8. +
+ ここからは, DefaultDrawingView クラスのインスタンス (id = 150367587) がどこから来たのかを見ていきます.
+ 現在は, 呼び出し元である SelectionTool クラスの mousePressed(MouseEvent) メソッドの270行目を見ています.
+ ここで, ソースコードを見ると, このDefaultDrawingView クラスのインスタンスはローカル変数 view で参照されていることが確認できます. +
+

+

+ このローカル変数 view の値がどこから来たのかを見るために, ステップバックオーバーを10回押して228行目にまで戻ってください.
+ 228行目では, ローカル変数 view に getView() メソッドの戻り値を代入していることが確認できます.
+ ここで, この戻り値がどうなっているのかを確認するために, ステップインを1回押して getView() メソッドの中に前から入ってください.
+

+

+

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

+

+

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

+

+

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

+

+ + \ No newline at end of file diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_01.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_01.png new file mode 100644 index 0000000..18d573b --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_01.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_02.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_02.png new file mode 100644 index 0000000..f0f6bc5 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_02.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_03.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_03.png new file mode 100644 index 0000000..7c605ed --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_03.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_04.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_04.png new file mode 100644 index 0000000..fe8091e --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_04.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_05.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_05.png new file mode 100644 index 0000000..cc9d224 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_05.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_06.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_06.png new file mode 100644 index 0000000..b363c17 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_06.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_07.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_07.png new file mode 100644 index 0000000..82bc717 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_07.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_08.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_08.png new file mode 100644 index 0000000..f306f5e --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_08.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_09.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_09.png new file mode 100644 index 0000000..163003c --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_09.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_10.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_10.png new file mode 100644 index 0000000..ac03727 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_10.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_11.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_11.png new file mode 100644 index 0000000..7c526a0 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_11.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_12.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_12.png new file mode 100644 index 0000000..8a7ec06 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_12.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_13.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_13.png new file mode 100644 index 0000000..ca67e25 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_13.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_14.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_14.png new file mode 100644 index 0000000..3edc987 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_14.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_15.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_15.png new file mode 100644 index 0000000..92a3238 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_15.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_16.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_16.png new file mode 100644 index 0000000..cd931dd --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_16.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_17.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_17.png new file mode 100644 index 0000000..cbae41c --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_17.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_18.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_18.png new file mode 100644 index 0000000..9129687 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_18.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_19.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_19.png new file mode 100644 index 0000000..ddadc08 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_19.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_20.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_20.png new file mode 100644 index 0000000..4ca4458 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_20.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_21.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_21.png new file mode 100644 index 0000000..f69746f --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_21.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_22.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_22.png new file mode 100644 index 0000000..d762fb4 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_22.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_23.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_23.png new file mode 100644 index 0000000..903bc64 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_23.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_24.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_24.png new file mode 100644 index 0000000..e260170 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_24.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_25.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_25.png new file mode 100644 index 0000000..b8a6a30 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_25.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_26.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_26.png new file mode 100644 index 0000000..4cca698 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_26.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_27.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_27.png new file mode 100644 index 0000000..befeddd --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_27.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_28.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_28.png new file mode 100644 index 0000000..f3deaaf --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_28.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_29.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_29.png new file mode 100644 index 0000000..5e471df --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_29.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_30.png b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_30.png new file mode 100644 index 0000000..91294db --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2/JHotDraw_2_30.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_01.png b/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_01.png new file mode 100644 index 0000000..c72d5f2 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_01.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_02.png b/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_02.png new file mode 100644 index 0000000..b0a7569 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_02.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_03.png b/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_03.png new file mode 100644 index 0000000..c0c31e2 --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_03.png Binary files differ diff --git a/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_04.png b/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_04.png new file mode 100644 index 0000000..d3f6d5e --- /dev/null +++ b/courseA/JHotDraw_Reverse/problem2/images_problem2_pre/JHotDraw_2_pre_04.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/ArgoUML1_Reverse.html b/courseB/ArgoUML_Reverse/problem1/ArgoUML1_Reverse.html new file mode 100644 index 0000000..d0f561a --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/ArgoUML1_Reverse.html @@ -0,0 +1,193 @@ + + + + 課題B1 (ArgoUML) + + + + +

課題B1

+

+ 課題B1では, ArgoUMLの図形の削除機能について見ていきます.
+ ArgoUMLはオープンソースのUMLモデリングツールで, Javaで書かれております.
+ また, ArgoUML内部では, グラフ編集用フレームワークであるGEFが使用されています.
+ ワークスペース内のargouml-*が、ArgoUMLを構成するプロジェクトであり, GEF-0.13.7がGEFのプロジェクトです. +

+ +
+

実行手順

+

+

    +
  1. + デスクトップのEclipseを起動し, 指定されたワークスペースを開いてください. +
    +
  2. +
  3. + ワークスペース中にあるGEF-0.13.7プロジェクトを選択し, メニューバーの Search → Java で Fig という型の宣言を検索してください. +
    +
    +
  4. +
  5. + Figクラスのソースファイルを開いて743行目 (Fig#removeFromDiagram()) にブレークポイントを入れてください. +
    +
  6. +
  7. + メニューバーの Window → Perspective → Open Perspective → Other... → トレースデバッガ(逆方向) でトレースデバッガのパースペクティブを開いてください. +
    +
    +
  8. +
  9. + 開いたトレースデバッガのパースペクティブ右上のブレークポイントビュー上にあるフォルダアイコン(左から1番目)を
    + クリックしてトレースファイル(ArgoUMLBenchMarkWithMoreStandardClasses.trace)を開いてください. +
    +
    +
  10. +
  11. + トレースファイルの読み込みが終わるまで待ってから, ブレークポイントビュー上にある「ブレークポイントをEclipseから取り入れる」アイコン(左から2番目)を
    + クリックしてトレースデバッガ用のブレークポイントを作成してください. +
    +
  12. +
  13. + ブレークポイントビュー上にあるデバッグアイコン(左から3番目)をクリックしてください.
    + トレースデバッガによるデバッグ実行が起動し, ブレークポイントを入れた位置の行が選択された状態で一時停止します. +
    +
  14. +
+

+ +
+

課題B1

+

+ Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
+ また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
+ ブレークポイントを置いた行は、図形を削除するたびに実行されます. +

+ +

+

+ 先ほどの実行手順にしたがって進めていくと, 下図のように Fig クラスの removeFromDiagram() メソッド内の743行目で一時停止している状態になっているはずです.
+ この状態になっていれば, ここから時間計測を開始してください.
+ ここで, 変数ビューを確認すると, このメソッド実行は FigClass クラスのインスタンス (id = 1675174935) に対する呼び出しだとわかります.
+ この FigClass クラスのインスタンス (id = 1675174935) がどこから来たのかを確認していきます.
+ まずは呼び出しスタック上で1つ呼び出し元をクリックしてください. +

+

+

+ 現在は, 呼び出し元である FigNode クラスの removeFromDiagram() メソッドを見ています.
+ ここで, 変数ビューを見ると, このメソッドも同一の FigClass クラスのインスタンス (id = 1675174935) に対して呼び出されていることがわかります.
+ これを確認したら, 呼び出しスタック上でさらに1つ呼び出し元をクリックしてください.
+

+

+

+ 現在は, 呼び出し元である FigNodeModelElement クラスの removeFromDiagramImpl() メソッドを見ています.
+ ここで, 変数ビューを見ると, このメソッドも先ほどと同様に FigClass クラスのインスタンス (id = 1675174935) によって呼び出されていることがわかります.
+ これを確認したら, 呼び出しスタック上でさらに1つ呼び出し元をクリックしてください. +

+

+

+ 現在は, 呼び出し元である FigNodeModelElement クラスの removeFromDiagram() メソッドを見ています.
+ ここで, ソースコードを見ると, ローカル変数 delegate が参照しているインスタンスに対して removeFromDiagramImpl() メソッドが呼び出されていることがわかります.
+

+

+

+ このローカル変数 delegate で参照されるインスタンスはどこから来たのかを確認します.
+ ソースコードを見ると, 1965行目に delegate への代入文があることがわかるので,
+ ステップバックオーバーを1回押して, その代入文の実行直前の時点まで戻ってください.
+ 1965行目の delegate への代入文の時点まで戻ったら, ステップインを1回押して getRemoveDelegate() メソッドの中に前から入ってください.
+

+

+

+ FigNodeModelElement クラスの getRemoveDelegate() メソッドに入りました.
+ ここで, ソースコードを見ると, このメソッドでは return this で自分自身を戻り値として返していることが確認できます.
+ これを確認したら, ステップバックリターンを1回押して呼び出し元へと戻ってください. +

+

+

+ 呼び出し元に戻ると, 先ほどの return this の値が delegate に代入されていることがわかります.
+ ここで, 再びステップバックリターンを1回押してさらに呼び出し元に戻ってください. +

+

+

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

+

+

+ 89行目では, FigClass クラスのインスタンス (id = 1675174935) のメソッドを呼び出していることがわかります.
+ この FigClass クラスのインスタンスがどこから来たのかを確認するために, ステップバックオーバーを3回押して, 86行目の拡張for文まで戻ってください.
+ ここで FigClass クラスのインスタンスは Figクラスを保持するリストであるローカル変数 figs から拡張for文で取得されてきたことがわかります.
+ ここからは, FigClass クラスのインスタンスを保持していた figs がどこから来たのかと, figs にそのインスタンスがどこで追加されたのかを見ていきます.
+ まずは, ステップバックインを3回押して, 85行目の getFigs() メソッドの中に後ろから入ってください. +

+

+

+ SelectionManager クラスの getFigs() メソッドに後ろから入りました.
+ ここではステップバックオーバーを1回押してください.
+ すると, 363行目にある Vector クラスの addElement(Object) メソッドの呼び出し前の時点に来ます.
+ ここで, 変数ビュー上にある「呼び出し前」を開くと, 引数として FigClass クラスのインスタンスが渡されていることがわかります.
+ また, この時点で「実行時点の登録」ビューの追加ボタンをクリックして実行時点の登録を行ってください.
+ Vector クラスの addElement(Object) メソッドの引数には Selection クラスの getContent() メソッドの戻り値が渡されています.
+ getContent() メソッドの戻り値を確認するために, ステップバックインを1回押して, このメソッドの中に後ろから入ってください.
+

+
+

+

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

+

+

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

+

+

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

+

+

+ Editor クラスの getSelectionManager() メソッドに入りました.
+ ここで, 変数ビュー上の this を開くと, この Editor クラスがフィールド _selectionManager として
+ SelectionManager クラスのインスタンス (id = 4310438) を保持していることがわかります. +

+

+

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

+

+

+ 現在は, ActionRemoveFromDiagram クラスの actionPerformed(ActionEvent) メソッドの85行目を見ています.
+ ここで, ソースコードを見ると, この Editor はローカル変数 ce に代入されている値だとわかります.
+ ここでは, このローカル変数 ce の値がどこから来たのかを見ていきます.
+ ステップバックオーバーを2回押して83行目まで戻ってください.
+ 83行目ではローカル変数 ce に Globals クラスの curEditor() メソッドの戻り値が代入されています.
+ ステップインを1回押してこのメソッドの中に前から入ってください.
+

+

+

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

+

+

+ 先ほどの結果から, Editor クラスのインスタンス (id = 371019845) は Globals クラスの static フィールド _curEditor から取得していることがわかりました.
+ 呼び出しスタック上で呼び出し元をクリックしてください.
+ ここで, 課題B1は終了です. 時間計測を終了してください. +

+

+

+ + \ No newline at end of file diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_01.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_01.png new file mode 100644 index 0000000..45ef735 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_01.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_02.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_02.png new file mode 100644 index 0000000..48b625d --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_02.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_03.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_03.png new file mode 100644 index 0000000..6e1c943 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_03.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_04.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_04.png new file mode 100644 index 0000000..439d680 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_04.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_05.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_05.png new file mode 100644 index 0000000..3ea19f0 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_05.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_06.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_06.png new file mode 100644 index 0000000..de676fb --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_06.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_07.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_07.png new file mode 100644 index 0000000..e78a994 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_07.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_08.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_08.png new file mode 100644 index 0000000..cae32d7 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_08.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_09.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_09.png new file mode 100644 index 0000000..c6f6713 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_09.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_10.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_10.png new file mode 100644 index 0000000..22915db --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_10.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_11.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_11.png new file mode 100644 index 0000000..a52e13f --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_11.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_12.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_12.png new file mode 100644 index 0000000..407a7de --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_12.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_13.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_13.png new file mode 100644 index 0000000..a9f4530 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_13.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_14.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_14.png new file mode 100644 index 0000000..ee9fbac --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_14.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_15.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_15.png new file mode 100644 index 0000000..8b7859f --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_15.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_16.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_16.png new file mode 100644 index 0000000..fe88de9 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_16.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_17.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_17.png new file mode 100644 index 0000000..88304fc --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_17.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_18.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_18.png new file mode 100644 index 0000000..a101566 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_18.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_19.png b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_19.png new file mode 100644 index 0000000..ae1a767 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1/ArgoUML_1_19.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_01.png b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_01.png new file mode 100644 index 0000000..ea96483 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_01.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_02.png b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_02.png new file mode 100644 index 0000000..6ea5526 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_02.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_03.png b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_03.png new file mode 100644 index 0000000..f8441e7 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_03.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_04.png b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_04.png new file mode 100644 index 0000000..a139768 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_04.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_05.png b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_05.png new file mode 100644 index 0000000..8dab940 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_05.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_06.png b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_06.png new file mode 100644 index 0000000..3aeee97 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_06.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_07.png b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_07.png new file mode 100644 index 0000000..624d3e3 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_07.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_08.png b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_08.png new file mode 100644 index 0000000..9739e30 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_08.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_09.png b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_09.png new file mode 100644 index 0000000..453cbc2 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_09.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_10.png b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_10.png new file mode 100644 index 0000000..c8a142d --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem1/images_problem1_pre/ArgoUML_1_pre_10.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse.html b/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse.html new file mode 100644 index 0000000..45e4866 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/ArgoUML2_Reverse.html @@ -0,0 +1,220 @@ + + + + 課題B2 (ArgoUML) + + + + +

課題B2

+

+ 課題B2では, ArgoUMLの図形の選択機能について見ていきます.
+ ArgoUMLはオープンソースのUMLモデリングツールで, Javaで書かれております.
+ また, ArgoUML内部では, グラフ編集用フレームワークであるGEFが使用されています.
+ ワークスペース内のargouml-*が、ArgoUMLを構成するプロジェクトであり, GEF-0.13.7がGEFのプロジェクトです。 +

+ +
+

前準備

+

+

+ 課題1(削除機能)が終了した直後は下図のような状態になっているはずです. +

+

+

+ まずは, 課題1の途中で「実行時点の登録」ビューに登録しておいた SelectionManager.getFigs() 363行目 の実行時点をダブルクリックしてください.
+ ダブルクリックすることで, 現在の実行時点が登録した実行時点へと移ります. +

+

+

+ SelectionManager クラスの getFigs() メソッドの 363行目に現在の実行時点が移りました.
+ ここで, ステップバックオーバーを1回押してから, ステップオーバーを1回押してください.
+ すると, 下図のように363行目に入った直後の状態になるので, そこから続けてステップネクストを3回押してください. +

+

+

+ ステップネクストを3回実行すると, selections の get() メソッドの呼び出し直後に実行時点が変わっているはずです.
+ ここで, 変数ビュー上にある「呼び出し後」を開き, 戻り値を右クリックしてください.
+ 右クリックするとポップアップメニューが現れるので, 「オブジェクトの追加時点に飛ぶ」を選択してください. +

+

+

+ 「オブジェクトの追加時点に飛ぶ」を選択すると, selections に この SelectionClass クラスが追加された時点である
+ SelectionManager クラスの addFig(Fig) メソッドの130行目にまで現在の実行時点が遡ります.
+ 下図の状態になっていれば前準備は終了です. +

+

+ +

+ +
+

課題B2

+

+ Fig クラスはグラフィックエディタ上の図形を表すGEFの内部のクラスです.
+ また, FigClass クラスはクラス図上に配置された「クラス」を表す ArgoUML のクラスで, Fig クラスの子孫クラスにあたります.
+ 現在の実行時点の行は、図形を選択するたびに実行されます. +

+ + +

+

+ 先ほどの前準備にしたがって進めていくと, 下図のように SelectionManager クラスの addFig(Fig) メソッド内の130行目で一時停止している状態になっているはずです.
+ この状態になっていれば, ここから時間計測を開始してください.
+ まずは,「実行時点の登録」ビューの追加ボタンをクリックして実行時点の登録を行ってください.
+

+

+

+ ここで, ソースコードと変数ビューを見ると, SelectionManager クラスのインスタンス (id = 4310438) が保持するフィールド selections へは
+ makeSelectionFor(Fig) メソッドの戻り値である SelectionClass クラスのインスタンス (id = 1672744985) が追加されていることがわかります.
+ 課題B2では, このオブジェクトの追加に関わっている SelectionManager クラスのインスタンスと SelectionClass クラスのインスタンスについて見ていきます.
+ まずは, SelectioClass クラスのインスタンスの方がどこから来たのかを見ていくために,
+ ステップバックインを1回押して SelectionManager クラスの makeSelectionFor(Fig) メソッドの中に後ろから入ってください. +

+

+

+ SelectionManager クラスの makeSelectionFor(Fig) メソッドの1131行目に入ってきました.
+ ソースコードを見ると, return customSelection でローカル変数 customSelection が参照する値が返されていることがわかります.
+

+

+

+ この値がどこから来ているのかを見るために, ステップバックオーバーを1回押して1129行目に戻ってください.
+ 1129行目では 仮引数 f で参照されているインスタンスに対して makeSelection() メソッドが呼び出され,
+ その戻り値がローカル変数 customSelection に代入されていることが確認できます.
+ ここで, ステップインを1回押してこのメソッドの中に前から入ってください.
+

+

+

+ FigClass クラスの makeSelection() メソッドに入りました.
+ ここでは new SelectionClass(this) で 自分自身を引数に渡して SelectionClass クラスが生成されており,
+ 生成された SelectionClass クラスのインスタンスは 引数で渡された FigClass クラスのインスタンス (id = 1675174935) を保持していることがわかります.
+ これを確認したら, 呼び出しスタック上で2つ呼び出し元である SelectionManager クラスの addFig(Fig) メソッドをクリックしてください. +

+

+

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

+

+

+ 現在は 呼び出し元である SelectionManager クラスの select(Fig) メソッドの180行目を見ています.
+ ここで, ソースコードを見ると, 呼び出し先の addFig(Fig) メソッドには 仮引数 f の値が実引数として渡されていることが確認できます.
+ これを確認したら, 呼び出しスタック上でさらに1つ呼び出し元である ModeSelect クラスの mousePressed(MouseEvent) メソッドをクリックしてください. +

+

+

+ 呼び出し元である ModeSelect クラスの mousePressed(MouseEvent) メソッドの187行に戻ってきました.
+ ここで, ソースコードを見ると, 呼び出し先である SelectinoManager クラスの select(Fig) メソッドには
+ ローカル変数 underMouse の値が実引数として渡されていたことがわかります.
+

+

+

+ この underMouse の値がどこから来たのかを見るために, ステップバックオーバーを8回押して163行目まで戻ってください.
+ 163行目では, ローカル変数 underMouse が参照するインスタンスが FigGroup にキャストされたあと,
+ それに対して deepSelect(Rectangle) メソッドが呼び出され, その戻り値が改めて underMouse に代入されていることがわかります.
+ ここで, 戻り値がどのようになっているのかを確認するために, FigGroup クラスの deepSelect(Rectangle) メソッドの中に前から入ってください.
+

+

+

+ FigGroup クラスの deepSelect(Rectangle) メソッドに入りました.
+ すると, deepSelect(Rectangle) メソッドの中では return this で自分自身を戻り値として返していることがわかります.
+ これを確認したら, ステップバックリターンを1回押して呼び出し元に戻ってください. +

+

+

+ ModeSelect クラスの mousePressed(MouseEvent) メソッドの163行目に戻ってきました.
+ underMouse の値がどこから来ているのかを見るために, ステップバックオーバーを1回押して160行目に戻ってください.
+ 160行目では Editor クラスの hit(Point) メソッドが呼び出され, その戻り値がローカル変数 underMouse に代入されていることが確認できます.
+ ここで, ステップインを1回押してこのメソッドの中に前から入ってください. +

+

+

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

+

+

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

+

+

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

+

+

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

+

+

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

+

+

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

+

+

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

+

+

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

+

+

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

+

+

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

    +
  1. SelectionClass クラスのインスタンス (id = 1672744985) は Fig クラスのインスタンス (id = 1675174935) を引数に渡して生成している.
  2. +
  3. FigClass クラスのインスタンス (id = 1675174935) は LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) が保持している.
  4. +
  5. LayerPerspectiveMutable クラスのインスタンス (id = 1248750852) は LayerManager クラスのインスタンス (id = 1975264229) が保持している.
  6. +
  7. LayerManager クラスのインスタンス (id = 1975264229) は Editor クラスのインスタンス (id = 371019845) が保持している.
  8. +
  9. Editor クラスのインスタンス (id = 371019845) は ModeSelect クラスのインスタンス (id = 1807431709) が保持している.
  10. +
+ 課題B2では, オブジェクトの追加に関わっている SelectionManager クラスのインスタンスと SelectionClass クラスのインスタンスについて見ていくのでした.
+ ここからは, SelectionManager クラスのインスタンスの方がどこから来たかを見ていきます.
+ まずは, ステップバックオーバーを1回押して156行目に戻ってください.
+ ソースコードを見ると, Editor クラスの getSelectionManager() メソッドの戻り値がローカル変数 sm に代入されていることがわかります.
+ ここで, ステップインを1回押して このメソッドの中に前から入ってください.
+
+

+

+ Editor クラスの getSelectionManager() メソッドに入りました.
+ ここで, 変数ビュー上の thisを開くと, Editor クラスのインスタンス (id = 371019845) が フィールド _selectionManager として
+ SelectionManager クラスのインスタンス (id = 4310438) を保持していることがわかります. +

+

+

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

+

+

+ + \ No newline at end of file diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_01.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_01.png new file mode 100644 index 0000000..0e67ef0 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_01.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_02.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_02.png new file mode 100644 index 0000000..31ccb5f --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_02.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_03.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_03.png new file mode 100644 index 0000000..b08b058 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_03.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_04.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_04.png new file mode 100644 index 0000000..e10413a --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_04.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_05.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_05.png new file mode 100644 index 0000000..e215abc --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_05.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_06.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_06.png new file mode 100644 index 0000000..04f6bf7 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_06.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_07.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_07.png new file mode 100644 index 0000000..18a2e47 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_07.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_08.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_08.png new file mode 100644 index 0000000..be7472e --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_08.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_09.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_09.png new file mode 100644 index 0000000..3763d65 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_09.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_10.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_10.png new file mode 100644 index 0000000..393e242 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_10.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_11.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_11.png new file mode 100644 index 0000000..0f6c07a --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_11.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_12.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_12.png new file mode 100644 index 0000000..83f7d7d --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_12.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_13.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_13.png new file mode 100644 index 0000000..d2acaa5 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_13.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_14.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_14.png new file mode 100644 index 0000000..bb879cf --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_14.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_15.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_15.png new file mode 100644 index 0000000..ffd7c92 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_15.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_16.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_16.png new file mode 100644 index 0000000..97c99e8 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_16.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_17.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_17.png new file mode 100644 index 0000000..fb009b2 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_17.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_18.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_18.png new file mode 100644 index 0000000..56dea89 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_18.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_19.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_19.png new file mode 100644 index 0000000..409fb86 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_19.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_20.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_20.png new file mode 100644 index 0000000..f7049d8 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_20.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_21.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_21.png new file mode 100644 index 0000000..a9f3495 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_21.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_22.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_22.png new file mode 100644 index 0000000..05391cd --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_22.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_23.png b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_23.png new file mode 100644 index 0000000..c346b64 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2/ArgoUML_2_23.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_01.png b/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_01.png new file mode 100644 index 0000000..220a06e --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_01.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_02.png b/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_02.png new file mode 100644 index 0000000..c483a08 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_02.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_03.png b/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_03.png new file mode 100644 index 0000000..aeaca9e --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_03.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_04.png b/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_04.png new file mode 100644 index 0000000..6a2fce6 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_04.png Binary files differ diff --git a/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_05.png b/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_05.png new file mode 100644 index 0000000..e104861 --- /dev/null +++ b/courseB/ArgoUML_Reverse/problem2/images_problem2_pre/ArgoUML_2_pre_05.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward.html b/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward.html new file mode 100644 index 0000000..4800561 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/JHotDraw1_Forward.html @@ -0,0 +1,167 @@ + + + + 課題A1 (JHotDraw) + + + + +

課題A1

+

+ 課題A1では, JHotDrawの図形の移動機能について見ていきます.
+ JHotDrawはオープンソースの図形描画ツールで, Javaで書かれております.
+ ワークスペース内のjhotdraw7が、JHotDrawを構成するプロジェクトです。 +

+ +
+

実行手順

+

+

    +
  1. + デスクトップのEclipseを起動し, 指定されたワークスペースを開いてください. +
    +
  2. +
  3. + ワークスペース中にあるjhotdraw7プロジェクトを選択し, メニューバーの Search → Java で DefaultDragTracker というタイプの宣言を検索してください. +
    +
    +
  4. +
  5. + DefaultDragTrackerクラスのソースファイルを開いて159行目 (DefaultDragTracker#mouseDragged(MouseEvent)) にブレークポイントを入れてください. +
    +
  6. +
  7. + メニューバーの Window → Perspective → Open Perspective → Other... → トレースデバッガ(順方向) でトレースデバッガのパースペクティブを開いてください. +
    +
    +
  8. +
  9. + 開いたトレースデバッガのパースペクティブ右上のブレークポイントビュー上にあるフォルダアイコン(左から1番目)を
    + クリックしてトレースファイル(jHotDrawBenchMarkWithMoreStandardClasses.trace)を開いてください. +
    +
    +
  10. +
  11. + トレースファイルの読み込みが終わるまで待ってから, ブレークポイントビュー上にある「ブレークポイントをEclipseから取り入れる」アイコン(左から2番目)を
    + クリックしてトレースデバッガ用のブレークポイントを作成してください. +
    +
  12. +
  13. + ブレークポイントビュー上にあるデバッグアイコン(左から3番目)をクリックしてください.
    + トレースデバッガによるデバッグ実行が起動し, ブレークポイントを入れた位置の行が選択された状態で一時停止します. +
    +
  14. +
+

+ +
+

課題A1

+

+ + ブレークポイントを置いた行は、図形を移動するたびに実行されます. +

+ +

+

+ 先ほどの実行手順にしたがって進めていくと, 下図のように DefaultDragTracker クラスの
+ mouseDragged(MouseEvent) メソッド内の159行目で一時停止している状態になっているはずです.
+ この状態になっていれば, ここから時間計測を開始してください.
+

+

+

+ DefaultDragTracker クラスの mouseDragged(MouseEvent) メソッドの159行では,
+ ローカル変数 f で参照されているインスタンスに対してメソッドが呼び出されていることが確認できます.
+ ここで, 変数ビュー上の「呼び出し前」を開いてレシーバのIDを見ると, これは RectangleFigure クラスのインスタンス (id = 1952912699) であることがわかります.
+ また, ソースコードを見ると, このローカル変数 f の値は, 157行目の拡張for文でフィールド transformedFigures が取得してきたものだと確認できます. +

+

+

+ 次は, フィールド transformedFigures に RectangleFigure クラスのインスタンス (id = 1952912699) を実際に追加しているのはどこなのかを見ていきます.
+ ソースコード中の157行目の transformedFigures にカーソルを入れ, そのフィールドに対してオブジェクトを追加している全ての行にブレークポイントを入れてください.
+ 今回は DefaultDragTracker クラスの118行目のみです。 +

+

+

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

+

+

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

+

+

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

+

+

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

+

+

+ 先ほどの実行によって, 現在は98行目に止まっているはずです.
+ この状態で再開ボタンを押していくと, 現在の実行時点が 116行目 → 118行目 → 98行目 → 116行目 → 118行目と移り変わることを確認してください.
+ この操作によって, 98行目と116行目と118行目はそれぞれ2回ずつ実行されていることが確認でき, したがって, 2回目に止まった方が直前に実行されたものだとわかります.
+ ここでいったんデバッグ実行を終了して下さい. +

+

+ そのままの状態で再びデバッグ実行し, 再開ボタンを3回押して2回目の98行目に止まって下さい.
+ ここで, ステップインを1回押して getView() メソッドの中に入ってください. +

+

+

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

+

+

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

+

+

+ 先ほどの操作によって, 現在の実行時点は DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの106行目になっているはずです.
+ ここでは, ステップオーバーを4回押して116行目まで進んでください.
+ 116行目まで進んだら, 変数ビュー上の「呼び出し前」を開いて, レシーバのオブジェクトのIDを見ると,
+ 先ほど取得してきた DefaultDrawingView クラスのインスタンス (id = 150367587) に対して getSelectedFigures() メソッドが呼び出されていることがわかります.
+ これを確認したら, ステップインを1回押して, このメソッドの中に入ってください. +

+
+

+

+ DefaultDrawingView クラスの getSelectedFigures() メソッドの中に入りました.
+ ここで, 変数ビュー上の this を開くと, DefaultDrawingView クラスのインスタンス (id = 150367587) が
+ フィールド selectedFigures として LinkedHashSet を保持していることがわかります.
+ また, ソースコードを見ると, Collections クラスの static メソッドである unmodifiableSet(Set) が呼び出されており,
+ その引数として フィールド getSelectedFigures が渡されていることが確認できます.
+ これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください. +

+

+

+ 現在は DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの116行目を見ています.
+ ここで課題A1は終了です. 時間計測を終了してください. +

+

+

+ + \ No newline at end of file diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_01.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_01.png new file mode 100644 index 0000000..f1b4725 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_01.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_02.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_02.png new file mode 100644 index 0000000..9df5518 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_02.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_03.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_03.png new file mode 100644 index 0000000..2ec13f0 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_03.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_05.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_05.png new file mode 100644 index 0000000..e776b23 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_05.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_06.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_06.png new file mode 100644 index 0000000..ff44c70 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_06.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_07.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_07.png new file mode 100644 index 0000000..441a057 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_07.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_08.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_08.png new file mode 100644 index 0000000..18d79c1 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_08.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_09.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_09.png new file mode 100644 index 0000000..d69a777 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_09.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_10.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_10.png new file mode 100644 index 0000000..2f1e2a0 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_10.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_11.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_11.png new file mode 100644 index 0000000..ba0291f --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_11.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_12.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_12.png new file mode 100644 index 0000000..1a73c79 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_12.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_13.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_13.png new file mode 100644 index 0000000..30559f7 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_13.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_14.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_14.png new file mode 100644 index 0000000..979ff00 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_14.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_15.png b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_15.png new file mode 100644 index 0000000..c6db1a9 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1/JHotDraw_1_15.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_01.png b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_01.png new file mode 100644 index 0000000..f0e6c51 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_01.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_02.png b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_02.png new file mode 100644 index 0000000..13a341c --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_02.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_03.png b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_03.png new file mode 100644 index 0000000..c4f5274 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_03.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_04.png b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_04.png new file mode 100644 index 0000000..edebae3 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_04.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_05.png b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_05.png new file mode 100644 index 0000000..a3ed54c --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_05.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_06.png b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_06.png new file mode 100644 index 0000000..764fdbc --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_06.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_07.png b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_07.png new file mode 100644 index 0000000..5499142 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_07.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_08.png b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_08.png new file mode 100644 index 0000000..bc5d3ac --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_08.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_09.png b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_09.png new file mode 100644 index 0000000..ed48dc7 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_09.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_10.png b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_10.png new file mode 100644 index 0000000..cc2a995 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem1/images_problem1_pre/JHotDraw_1_pre_10.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/JHotDraw2_Forward.html b/courseB/JHotDraw_Forward/problem2/JHotDraw2_Forward.html new file mode 100644 index 0000000..2f43cf3 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/JHotDraw2_Forward.html @@ -0,0 +1,346 @@ + + + + 課題A2 (JHotDraw) + + + + +

課題A2

+

+ 課題A2では, JHotDrawの図形の選択機能について見ていきます.
+ JHotDrawはオープンソースの図形描画ツールで, Javaで書かれております.
+ ワークスペース内のjhotdraw7が、JHotDrawを構成するプロジェクトです。 +

+ +
+

前準備

+

+

+ 課題B1(移動機能)が終了した直後は下図のような状態になっているはずです. +

+

+

+ まずは, 呼び出しスタック上でもう一度呼び出し先である DefaultDrawingView クラスの getSelectedFigures() メソッドに移ってください.
+ フィールド selectedFigures に RectangleFigure クラスのインスタンス (id = 1952912699) を実際に追加しているのはどこなのかを見ていきます.
+ ソースコード中の selectedFigures にカーソルを入れ, そのフィールドに対してオブジェクトを追加している全ての行にブレークポイントを入れてください.
+ 今回は, DefaultDrawingView クラスの780行目と815行目と889行目の三か所が該当します.
+

+
+
+

+

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

    +
  1. DefaultDragTracker クラスの mouseDragged(MouseEvent) メソッド 159行目
  2. +
  3. DefaultDragTracker クラスの mousePressed(MouseEvent) メソッド    98行目
  4. +
  5. DefaultDragTracker クラスの mousePressed(MouseEvent) メソッド  116行目
  6. +
+ ここで, 課題B1から続いているデバッグ実行をいったん停止してください.
+
+

+

+ デバッグ実行を押すと, DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目で止まります.
+ ここで, 再開ボタンを押して, このあと実行がどのように移り変わるかを確認していきます.
+ まずは再開ボタンを1回押すと, 再び780行目に止まることが確認できます.
+ そこからさらに再開ボタンを押していくと, 現在の実行時点は118行目に2回止まることが確認できます.
+ これを確認したら, デバッグ実行をいったん終了してから再び実行して, 再開ボタンを1回押して2回目の780行目に進めてください.
+ 下図の状態になれば, ここで課題2の前準備は終了です. +

+

+

+ +
+

課題A2

+

+ + ブレークポイントを置いた行は、図形を選択するたびに実行されます. +

+ +

+

+ 先ほどの前準備にしたがって進めていくと, 下図のように DefaultDrawingView クラスの
+ addToSelection(Figure) メソッド内の780行目で一時停止している状態になっているはずです.
+ この状態になっていれば, ここから時間計測を開始してください.
+ DefaultDrawingView クラスの addToSelection(Figures) メソッドの780行目では, フィールド selectedFigures に
+ 仮引数 f で参照される RectangleFigure クラスのインスタンス (id = 1952912699) を追加していることが確認できます.
+

+

+

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

+

+

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

+

+ 再びデバッグ実行してから, 再開ボタンを1回押して DefaultDragTracekr クラスの mousePressed(MouseEvent) メソッドの98行目にまで進めてください.
+ ここで, ステップインを1回押して, getView() メソッドの中に入ってください. +

+

+

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

+

+

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

+

+

+ 現在は DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの98行目を見ています.
+ ここで, 変数ビュー上で this を開いて, フィールド anchorFigure と this 自体のIDを確認してください.
+ DefaultDragTracker クラスのインスタンス (id = 758826749) が anchorFigure として
+ RectangleFigure クラスのインスタンス (id = 1952912699) を保持していることが確認できます.
+

+

+

+ ここからは, このフィールド anchorFigure に RectangleFigure クラスのインスタンスが代入された時点を見ていきます.
+ ソースコード中の anchorFigure にカーソルを入れて, ソースコード中で代入しているところ全てにブレークポイントを入れてください.
+ 今回は, DefaultDragTracker クラスの84行目と218行目の二か所が該当します. +

+
+

+

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

+

+

+ デバッグ実行をいったん終了してから, 再びデバッグ実行してください.
+ すると, まずは DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目に止まります.
+ ここで, 再開ボタンを1回押すと, 今度は DefaultDragTracker クラスの setDraggedFigure(Figure) メソッドの218行目に止まることが確認できます.
+ さらに再開ボタンを1回押すと, DefaultDragTracker クラスの addToSelection(Figure) メソッドの780行目に止まることが確認できます.
+ これにより, setDraggedFigure(Figure) メソッドの218行目で フィールド anchorFigure に代入された値があとで取得され, それが780行目で追加されていることがわかります.
+

+

+ デバッグ実行をいったん終了してから, 再びデバッグ実行してください.
+ そのあと, 再開ボタンを1回押して DefaultDragTracker クラスの setDraggedFigure(Figure) メソッドの218行目にまで進んでください.
+ ここで, 変数ビューを見て this と 引数の f のIDをそれぞれ確認してください.
+ これを確認したら, 呼び出しスタック上で1つ呼び出し元をクリックしてください.
+

+

+

+ 現在は, 呼び出し元である SelectionTool クラスの getDragTracker(Figure) メソッドを見ています.
+ ここで, ソースコードを見ると, DefaultDragTracker クラスのインスタンス (id = 758826749) が
+ フィールド dragTracker に代入されており, それが戻り値としても返されることがわかります.
+ これを確認したら, 呼び出しスタック上でさらに1つ呼び出し元をクリックしてください.
+

+

+

+ 現在は, 呼び出し元である SelectionTool クラスの mousePressed(MouseEvent) メソッドを見ています.
+ ここで, 変数ビュー上で「呼び出し前」を開いて引数と, this を開いてフィールド dragTracker のIDをそれぞれ確認してください.
+ すると, 先ほどの DefaultDragTracker クラスのインスタンス (id = 758826749) を フィールド dragTracker として
+ DelegationSelectionTool クラスのインスタンス (id = 599587451) が保持していることが確認できます.
+

+

+

+ ソースコードを見ると, 278行目で呼び出されている getDragTracker() メソッドの戻り値をいったんローカル変数 newTracker に代入しておいてから,
+ 289行目で setTracker(Tool) メソッドに引数として渡していることが確認できます.
+ ここで, ステップオーバーを2回押して, 実際に289行目に止まることを確認し, ステップインを2回押して, setTracker() メソッドの中に入ってください. +

+

+

+ SelectionTool クラスの setTracker(Tool) メソッドに入りました.
+ ここでは, ステップオーバーを4回押して301行目まで進めてください.
+ そのあと, 変数ビュー上で this を開くと, フィールド tracekr の値が 仮引数 newTracker と同じ値に更新されていることがわかります.
+ これを確認したら, ステップリターンを1回押して呼び出し元に戻ってください. +

+
+

+

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

+

+

+ DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドに入りました.
+ ここで, 変数ビュー上で this を開いて, フィールド anchorFigure と this 自体のIDを確認してください.
+

+

+

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

+
+

+

+ いったんデバッグ実行を終了してから, もう一度デバッグ実行してください.
+ すると, まずは DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目に止まります.
+ ここで, 再開ボタンを1回押すと, 235行目に止まることが確認できます.
+ このあと, 実際に実行時点がどのように移り変わっていくのかを確認していきます.
+ 再開ボタンを1回押すと, 再び235行目に止まることが確認でき, それからもう一度再開ボタンを押すと今度は2回目の780行目に止まることが確認できます.
+

+

+ いったんデバッグ実行を終了してから, もう一度デバッグ実行してください.
+ そのあと, 再開ボタンを2回押して, 2回目の235行目にまで進んでください.
+

+

+

+ ローカル変数 figure に値が代入された時点がどこなのかを見ていきます.
+ ここでは, ステップオーバーを8回押して, 270行目にまで進んでください.
+ 270行目では, ローカル変数 view が参照しているインスタンスに対して findFigure(Point) メソッドが呼び出され,
+ その戻り値がローカル変数 figure に代入されていることがわかります.
+ ここで, いったんステップオーバーを3回実行して, この戻り値の代入のあとに別の時点で figure が更新されることなく,
+ 278行目で getDragTracker(Figure) メソッドの引数として渡されることを確認してください.
+

+

+

+ 先ほどの操作によって, ローカル変数 figure に値を代入した箇所がわかりました.
+ ここで, いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ まずは DefaultDrawingViewクラスの addToSelection(Figure) メソッドの780行目で止まるので, 再開ボタンを2回押して2回目の235行目にまで進んでください.
+ そのあと, ステップオーバーを8回押して270行目にまで進み, ステップインを3回押して findFigure(Point) メソッドの中に入ってください. +

+

+

+ DefaultDrawingView クラスの findFigure(Point) メソッドに入りました.
+ ここでは, ステップインを2回押して, getDrawing() メソッドの中に入ってください. +

+

+

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

+

+

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

+

+

+ DefaultDrawingView クラスの viewToDrawing(Point) メソッドに入りました.
+ そのままステップリターンを1回押して呼び出し元に戻ってください.
+

+

+

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

+

+

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

+

+

+ QuadNode クラスの findContains(Point2D#Double, HashSet) メソッドに入りました.
+ ここで, 変数ビュー上の this を開くと, QuadNode クラスのインスタンス (id = 2120356010) が
+ フィールド objects として HashMap を保持していることがわかります.
+ また, ソースコードを見ると, 224行目の拡張for文でこの HashMap から取り出してきた要素を, 226行目で仮引数 result に追加していることが確認できます.
+ ここでは, ステップオーバーを3回押して226行目にまで進んでください. +

+

+

+ 先ほどの操作によって, 現在は226行目にいます.
+ ここでは, ステップインを2回押してください.
+ そのあと, 変数ビュー上の「呼び出し前」を開き, 引数のIDを確認してください.
+ すると, RectangleFigure クラスのインスタンス (id = 1952912699) が引数として渡されており,
+ それが 仮引数 result に対して追加されることがわかります.
+ これを確認したら, ステップオーバーを4回押して呼び出し元に戻ってください. +

+

+

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

+
+

+

+ 呼び出し元である QuadTreeDrawing クラスの findContains(Double) メソッドに戻ってきました.
+ ここでは, ステップオーバーを2回押して130行目にまで進めてください
+ ここで, 変数ビュー上の「呼び出し後」を開いて戻り値のIDを確認してください.
+ すると, 先ほどの RectangleFigure クラスのインスタンス (id = 1952912699) を取得していることがわかります.
+ これを確認したら, 呼び出しスタック上で2つ呼び出し元をクリックしてください. +

+

+

+ 現在は, 呼び出し元である SelectionTool クラスの mousePressed(MouseEvent) メソッドの270行目を見ています.
+ ここで, ステップオーバーを1回押して271行目に進んでください.
+ そのあと, 変数ビュー上の「呼び出し後」を開いて戻り値のIDを確認してください.
+ すると, 実際に戻り値として先ほどの RectangleFigure クラスのインスタンス (id = 1952912699) が返されていることが確認でき,
+ したがって, その値がローカル変数 figure に代入されていることがわかります. +

+

+

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

+

+

+ いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ まずは, DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目に止まります.
+ ここで, 再開ボタンを1回押すと, 今度は SelectionToolクラスの mousePressed(MouseEvent) メソッドの228行目に止まります.
+ さらに, 現在の実行時点がどのように移り変わっていくかを確認するために再開ボタンを押していくと,
+ 現在の実行が235行目 → 228行目 → 235行目と移っていくことが確認できます.
+

+

+ いったんデバッグ実行を終了してから, 再びデバッグ実行してください.
+ そのあと, 再開ボタンを3回押して, 2回目の228行目にまで進んでください.
+ ここで, ステップインを1回押して, getView() メソッドの中に入ってください. +

+

+

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

+

+

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

+

+

+ 呼び出し元である SelectionTool クラスの mousePressed(MouseEvent) メソッドに戻ってきました.
+ ここで課題A2は終了です. 時間計測を終了してください. +

+

+ + \ No newline at end of file diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_01.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_01.png new file mode 100644 index 0000000..bf567e1 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_01.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_02.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_02.png new file mode 100644 index 0000000..4915d54 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_02.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_03.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_03.png new file mode 100644 index 0000000..ef630a1 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_03.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_04.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_04.png new file mode 100644 index 0000000..03b4722 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_04.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_05.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_05.png new file mode 100644 index 0000000..c23c54b --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_05.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_06.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_06.png new file mode 100644 index 0000000..fc42145 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_06.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_07.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_07.png new file mode 100644 index 0000000..8f6b3a0 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_07.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_08.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_08.png new file mode 100644 index 0000000..00bad40 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_08.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_09.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_09.png new file mode 100644 index 0000000..3d133d3 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_09.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_10.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_10.png new file mode 100644 index 0000000..06d5d2c --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_10.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_11.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_11.png new file mode 100644 index 0000000..a51864b --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_11.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_12.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_12.png new file mode 100644 index 0000000..b4addba --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_12.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_13.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_13.png new file mode 100644 index 0000000..4d55ac0 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_13.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_14.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_14.png new file mode 100644 index 0000000..eae13eb --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_14.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_15.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_15.png new file mode 100644 index 0000000..86364a4 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_15.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_16.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_16.png new file mode 100644 index 0000000..761d79a --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_16.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_17.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_17.png new file mode 100644 index 0000000..e26a460 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_17.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_18.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_18.png new file mode 100644 index 0000000..3274c16 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_18.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_19.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_19.png new file mode 100644 index 0000000..bdae041 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_19.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_20.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_20.png new file mode 100644 index 0000000..997013a --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_20.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_21.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_21.png new file mode 100644 index 0000000..cfed717 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_21.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_22.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_22.png new file mode 100644 index 0000000..15c3dab --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_22.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_23.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_23.png new file mode 100644 index 0000000..d5d392e --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_23.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_24.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_24.png new file mode 100644 index 0000000..a09826c --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_24.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_25.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_25.png new file mode 100644 index 0000000..4d95132 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_25.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_26.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_26.png new file mode 100644 index 0000000..a643a57 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_26.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_27.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_27.png new file mode 100644 index 0000000..f7aa417 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_27.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_28.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_28.png new file mode 100644 index 0000000..3e2a144 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_28.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_29.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_29.png new file mode 100644 index 0000000..3cf4a3f --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_29.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_30.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_30.png new file mode 100644 index 0000000..d414eb1 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_30.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_31.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_31.png new file mode 100644 index 0000000..094d1e7 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_31.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_32.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_32.png new file mode 100644 index 0000000..3458b08 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_32.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_33.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_33.png new file mode 100644 index 0000000..c94213a --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_33.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_34.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_34.png new file mode 100644 index 0000000..e0f272d --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_34.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_35.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_35.png new file mode 100644 index 0000000..9224181 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_35.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_36.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_36.png new file mode 100644 index 0000000..700c30d --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_36.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_37.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_37.png new file mode 100644 index 0000000..b3bd275 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_37.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_38.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_38.png new file mode 100644 index 0000000..38747b1 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_38.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_39.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_39.png new file mode 100644 index 0000000..1e9eedf --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_39.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_40.png b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_40.png new file mode 100644 index 0000000..0d3cf48 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2/JHotDraw_2_40.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_01.png b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_01.png new file mode 100644 index 0000000..c6db1a9 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_01.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_02.png b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_02.png new file mode 100644 index 0000000..1805653 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_02.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_03.png b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_03.png new file mode 100644 index 0000000..43a8f81 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_03.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_04.png b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_04.png new file mode 100644 index 0000000..74ad2a0 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_04.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_05.png b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_05.png new file mode 100644 index 0000000..698f291 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_05.png Binary files differ diff --git a/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_06.png b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_06.png new file mode 100644 index 0000000..28d06d1 --- /dev/null +++ b/courseB/JHotDraw_Forward/problem2/images_problem2_pre/JHotDraw_2_pre_06.png Binary files differ diff --git a/prettify.css b/prettify.css new file mode 100644 index 0000000..0760996 --- /dev/null +++ b/prettify.css @@ -0,0 +1,21 @@ +p.explanation { + margin-top: 50px; +} +li.explanation { + margin-top: 50px; +} +img.quarterSize { + width: 25%; + height: 25%; +} +img.halfSize { + width: 50%; + height: 50%; +} +img.threeQuartersSize { + width: 75%; + height: 75%; +} +div.image { + margin-top: 20px; +} \ No newline at end of file