Newer
Older
TraceDebuggerExperiment / courseA / JHotDraw_Reverse / problem2 / JHotDraw2_Reverse_Delta.html
  1. <!DOCTYPE HTML>
  2. <html lang = "ja">
  3. <head>
  4. <title>課題A4 (接近過程抽出)</title>
  5. <meta charset = "UTF-8">
  6. <link rel = "stylesheet" type = "text/css" href = "../../../prettify.css">
  7. </head>
  8. <body>
  9. <h1>課題A4 (接近過程抽出)</h1>
  10.  
  11. <hr>
  12. <h2>接近過程抽出</h2>
  13. <p>
  14. </p>
  15.  
  16. <p>
  17. <p class = "explanation">
  18. 課題A4 (機能理解) の終了直後は下図のような状態になっているはずです.<br>
  19. ここでは, 課題A4 (機能理解) では使用しなかった逆方向バージョンのある機能を用いて, 課題A4 (機能理解) と同等の内容を理解していくことを目指します. <br>
  20. まずは, DefaultDrawingView クラスのインスタンス (id = 150367587) のフィールド selectedFigures が参照している LinkedHashSet のインスタンスに<br>
  21. RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を見ていきます.<br>
  22. ここで, 「実行時点の登録」ビュー上で登録している「780行目 DefaultDrawingView.addToSelection(Figure)」をダブルクリックしてください.<br>
  23. すると, 現在の実行時点が DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目に移ります.<br>
  24. <div class = "image"><img src = "./images/images_problem2_delta_pre/JHotDraw_2_delta_01.png" class = "threeQuartersSize"></div>
  25. <div class = "image"><img src = "./images/images_problem2_delta_pre/JHotDraw_2_delta_02.png" class = "threeQuartersSize"></div>
  26. </p>
  27. <p class = "explanation">
  28. 先ほどの操作によって, 現在は DefaultDrawingView クラスの addToSelection(Figure) メソッドの780行目にいます.<br>
  29. ここで, 変数ビュー上の「呼び出し前」のメソッド名が Set.add(Object) であることを確認してください.<br>
  30. それを確認したら, 変数ビュー上の「呼び出し前」を開いて, 引数を右クリックしてください.<br>
  31. 右クリックすると, ポップアップメニューが出てくるので, 上の方の LinkedHashSet のインスタンスと RectangleFigure の<br>
  32. インスタンスを対象とした「オブジェクトの接近過程抽出」をクリックしてください.<br>
  33. <div class = "image"><img src = "./images/images_problem2_delta_pre/JHotDraw_2_delta_04.png" class = "threeQuartersSize"></div>
  34. </p>
  35. <p class = "explanation">
  36. 実際に「オブジェクトの接近過程抽出」を実行すると, 下図のような状態になります.<br>
  37. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_01.png" class = "threeQuartersSize"></div>
  38. </p>
  39. <p class = "explanation">
  40. 「オブジェクトの接近過程」ビュー上の「開始時点」をクリックしてください.<br>
  41. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_02.png" class = "threeQuartersSize"></div>
  42. </p>
  43. <p class = "explanation">
  44. 「オブジェクトの接近過程抽出」ビュー上の「参照先側001」から「参照先側004」までを順番にクリックしてください.<br>
  45. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_03.png" class = "threeQuartersSize"></div>
  46. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_05.png" class = "threeQuartersSize"></div>
  47. </p>
  48. <p class = "explanation">
  49. 「オブジェクトの接近過程抽出」ビュー上の「参照元側001」から「参照元側013」までを順番にクリックしてください.<br>
  50. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_06.png" class = "threeQuartersSize"></div>
  51. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_07.png" class = "threeQuartersSize"></div>
  52. </p>
  53. <p class = "explanation">
  54. 「オブジェクトの接近過程」ビュー上の「参照時点」をクリックしてください.<br>
  55. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_09.png" class = "threeQuartersSize"></div>
  56. </p>
  57. <p class = "explanation">
  58. ここまでで, DefaultDrawingView クラスのインスタンス (id = 150367587) のフィールド selectedFigures が参照している LinkedHashSet のインスタンスに<br>
  59. RectangleFigure クラスのインスタンス (id = 1952912699) が接近する過程を見てきました.<br>
  60. 抽出した結果を見ると, DefaultDragTracker クラスのインスタンス (id = 758826749) のフィールド anchorFigure に代入されていた<br>
  61. RectangleFigure クラスのインスタンスを取得してきていることがわかりましたが, その RectangleFigure クラスのインスタンスの参照が <br>
  62. anchorFigure フィールドに代入されるまでの経緯については, この抽出範囲だけではわかりません.<br>
  63. そこで, ここからは, DefaultDragTracker クラスのインスタンス (id = 758826749) に RectangleFigure クラスのインスタンス (id = 1952912699) が<br>
  64. 接近する過程を抽出して見ていきます.<br>
  65. まずは, 「オブジェクトの接近過程抽出」ビュー上の「参照先側002」をクリックしてください.<br>
  66. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_10.png" class = "threeQuartersSize"></div>
  67. </p>
  68. <p class = "explanation">
  69. 先ほどの操作によって, 現在は DefaultDragTracker クラスの mousePressed(MouseEvent) メソッドの109行目にいます.<br>
  70. ここで, 変数ビュー上の this を開き, フィールド anchorFigure を右クリックしてください.<br>
  71. 右クリックすると, ポップアップメニューが出てくるので, 「値の代入時点に飛ぶ」をクリックしてください.<br>
  72. すると, 現在の実行時点が DefaultDragTracker クラスの setDraggedFigure(Figure) メソッドの218行目に移ります.<br>
  73. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_11.png" class = "threeQuartersSize"></div>
  74. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_12.png" class = "threeQuartersSize"></div>
  75. </p>
  76. <p class = "explanation">
  77. 先ほどの操作によって, 現在は DefaultDragTracker クラスの setDraggedFigure(Figure) メソッドの218行目にいます.<br>
  78. ここで, 変数ビュー上の「フィールド代入前」を開いて, 参照先を右クリックしてください.<br>
  79. 右クリックすると, ポップアップメニューが出てくるので,「オブジェクトの接近過程抽出」をクリックしてください.<br>
  80. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_13.png" class = "threeQuartersSize"></div>
  81. </p>
  82. <p class = "explanation">
  83. 実際に「オブジェクトの接近過程抽出」を実行すると, 下図のような状態になります.<br>
  84. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_14.png" class = "threeQuartersSize"></div>
  85. </p>
  86. <p class = "explanation">
  87. 「オブジェクトの接近過程」ビュー上の「開始時点」をクリックしてください.<br>
  88. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_15.png" class = "threeQuartersSize"></div>
  89. </p>
  90. <p class = "explanation">
  91. 「オブジェクトの接近過程抽出」ビュー上の「参照先側001」から「参照先側036」までを順番にクリックしてください.<br>
  92. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_16.png" class = "threeQuartersSize"></div>
  93. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_17.png" class = "threeQuartersSize"></div>
  94. </p>
  95. <p class = "explanation">
  96. 「オブジェクトの接近過程抽出」ビュー上の「参照元側001」から「参照元側004」までを順番にクリックしてください.<br>
  97. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_18.png" class = "threeQuartersSize"></div>
  98. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_19.png" class = "threeQuartersSize"></div>
  99. </p>
  100. <p class = "explanation">
  101. 「オブジェクトの接近過程」ビュー上の「参照時点」をクリックしてください.<br>
  102. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_20.png" class = "threeQuartersSize"></div>
  103. </p>
  104. <p class = "explanation">
  105. ここまでで, DefaultDragTracker クラスのインスタンス (id = 758826749) に RectangleFigure クラスのインスタンス (id = 1952912699) が接近する過程を見てきました.<br>
  106. 抽出した結果 (「参照先側022」と「参照先側023」) を見ると, QuadTree#findContents(Point2D$Double) のローカル変数 result が参照している<br>
  107. HashSet オブジェクトに追加された RectangleFigure クラスのインスタンスを取得してきていることがわかりましたが, <br>
  108. その RectangleFigure クラスのインスタンスが HashSet オブジェクトに追加されるまでの経緯は, この抽出範囲だけではわかりません.<br>
  109. そこで, ここからは, そのローカル変数 result に RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を見ていきます.<br>
  110. まずは, 「オブジェクトの接近過程抽出」ビュー上の「参照先側028」をクリックしてください.<br>
  111. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_21.png" class = "threeQuartersSize"></div>
  112. </p>
  113. <p class = "explanation">
  114. 先ほどの操作によって, 現在は QuadTreeDrawing クラスの findFigure(Point2D$Double) メソッドの129行目にいます.<br>
  115. ここで, ステップネクストを1回押して130行目にまで進んでください.<br>
  116. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_22.png" class = "threeQuartersSize"></div>
  117. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_23.png" class = "threeQuartersSize"></div>
  118. </p>
  119. <p class = "explanation">
  120. 先ほどの操作によって, 現在は QuadTreeDrawing クラスの findFigure(Point2D$Double) メソッドの130行目にいます.<br>
  121. ここで, 変数ビュー上の「呼び出し後」のメソッド名が Iterator.next() であることを確認してください.<br>
  122. それを確認したら, 変数ビュー上の「呼び出し後」を開いて, 戻り値を右クリックしてください.<br>
  123. 右クリックすると, ポップアップメニューが出てくるので, 「オブジェクトの追加時点に飛ぶ」をクリックしてください.<br>
  124. すると, 現在の実行時点が QuadTree$QuadNode クラスの findContains(Point2D$Double, HashSet) メソッドの226行目に移ります.<br>
  125. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_24.png" class = "threeQuartersSize"></div>
  126. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_25.png" class = "threeQuartersSize"></div>
  127. </p>
  128. <p class = "explanation">
  129. 先ほどの操作によって, 現在は QuadTree$QuadNode クラスの findContains(Point2D$Double, HashSet) メソッドの226行目にいます.<br>
  130. ここで, 変数ビュー上の「呼び出し前」のメソッド名が HashSet.add(Object) であることを確認してください.<br>
  131. それを確認したら, 変数ビュー上の「呼び出し前」を開いて, 引数を右クリックしてください.<br>
  132. 右クリックすると, ポップアップメニューが出てくるので, 上の方の HashSet のインスタンスと RectangleFigure の<br>
  133. インスタンスを対象とした「オブジェクトの接近過程抽出」をクリックしてください.<br>
  134. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_26.png" class = "threeQuartersSize"></div>
  135. </p>
  136. <p class = "explanation">
  137. 実際に「オブジェクトの接近過程抽出」を実行すると, 下図のような状態になります.<br>
  138. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_27.png" class = "threeQuartersSize"></div>
  139. </p>
  140. <p class = "explanation">
  141. 「オブジェクトの接近過程」ビュー上の「開始時点」をクリックしてください.<br>
  142. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_28.png" class = "threeQuartersSize"></div>
  143. </p>
  144. <p class = "explanation">
  145. 「オブジェクトの接近過程抽出」ビュー上の「参照先側001」から「参照先側013」までを順番にクリックしてください.<br>
  146. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_29.png" class = "threeQuartersSize"></div>
  147. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_31.png" class = "threeQuartersSize"></div>
  148. </p>
  149. <p class = "explanation">
  150. 「オブジェクトの接近過程抽出」ビュー上の「参照元側001」から「参照元側004」までを順番にクリックしてください.<br>
  151. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_33.png" class = "threeQuartersSize"></div>
  152. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_35.png" class = "threeQuartersSize"></div>
  153. </p>
  154. <p class = "explanation">
  155. 「オブジェクトの接近過程」ビュー上の「参照時点」をクリックしてください.<br>
  156. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_36.png" class = "threeQuartersSize"></div>
  157. </p>
  158. <p class = "explanation">
  159. ここまでで, QuadTree#findContents(Point2D$Double) のローカル変数 result が参照している HashSet のインスタンスに<br>
  160. RectangleFigure クラスのインスタンス (id = 1952912699) が追加されるまでの過程を見てきました.<br>
  161. ここで, 課題A4の接近過程抽出は終了です.<br>
  162. 「オブジェクトの接近過程」ビューを全て閉じ, そのあとデバッグ実行を終了してください.<br>
  163. <div class = "image"><img src = "./images/images_problem2_delta/JHotDraw_2_delta_38.png" class = "threeQuartersSize"></div>
  164. </p>
  165. </p>
  166. <hr>
  167. <p>
  168. 課題A4の接近過程抽出が終了しましたら, 以下のアンケートにお答えください.
  169. <div><a href = "https://docs.google.com/forms/d/e/1FAIpQLSeXyylQ0nhHBnWwyA8zldve_14ItF6rxd32KyDzq2onnXyhMA/viewform" target = "_blank">アンケート回答</a></div>
  170. </p>
  171. <a href="../../../Closing.html">次へ</a>
  172. </body>
  173. </html>