オブジェクト指向のこころ 第2章の練習問題の解答をまとめてみる。
基礎
is-a関係とhas-a関係の違いは何でしょうか?has-a関係を細分化するとどうなるのでしょうか?
is-a関係とは、あるクラスが他のクラスの「一種」である関係のこと。
たとえば、野球はスポーツの一種であり、スポーツは運動の一種である。
has-a関係とは、あるクラスが他のクラスを「保持」しているときの関係のこと。 たとえば、車はタイヤを保持する。
ちなみに関連には二種類ある。
- 保持(has-a関係)
- 使用(uses-a関係)
(p29)
クラス図におけるクラスの表現は3つの部分に別れています。これら3つの内容を説明してください。
- クラスの名称。これは必須。
- クラスのデータメンバ。
- クラスのメソッド(機能)
(p.29)
カーディナリティを定義してください。
カーディナリティは、他のオブジェクトがいくつオブジェクトを保持するかを表現する。
(p.34)
シーケンス図の目的とは何でしょうか。
シーケンス図はUMLの相互作用図の一種であり、オブジェクト間のやり取りを表現する。
操作の順を表すためシーケンス図と呼ばれる。
(p.37)
応用
is-a関係、および、has-a関係における2つの関係の例を挙げてください。次に、その例を用いて以下の設問に答えてください。
- クラス図を作成してください。
- そのクラス図にカーディナリティを記入してください。
is-a関係の例:野球はスポーツの一種。
has-a関係の例:車はタイヤを保持する。
uses-a関係の例:人はナイフを使う。
図2.8のシーケンス図には、いくつの手順が記述されているでしょうか?オブジェクトの数はいくつあるか、そしてそれらは何でしょうか?
手順は13コ。
オブジェクトは6コ(Main、ShapeDB、Collection、形状1:Square、形状2:Circle、Display)
(p.38)
オブジェクトが互いに通信する際、「処理を起動する」と表現するよりも「メッセージを送信する」と表現したほうが適切であるのはなぜでしょうか?
オブジェクト指向の考え方では、(何か具体的な)処理をするように他のオブジェクトに伝えるよりも、やりたいことを伝える。 他のオブジェクトに対して(具体的に)何をするかの責任を与える、「責任の委譲」はオブジェクト指向の基礎的な原理である。 そこが、他のオブジェクトの振る舞いまで制御する手続き型プログラミングと全く違うところである。 手続き型言語では、他のオブジェクトの「処理を起動する」とか「操作を呼ぶ」とか表現する。
あなたの意見
シーケンス図には、どれだけ細かい手順を記述すべきでしょうか。
コミュニケーションが明快にできる程度。