📗

オブジェクト指向のこころ 第2章の振り返り

2024/03/01に公開

はじめに

みなさんこんにちは、やすのりです。

現在『オブジェクト指向のこころ』という書籍を読んでいますが、
その上で自身の理解度や考えをまとめるために各章のまとめ問題に対する回答を残しておこうと思います。
※『それは違うよ!』ということがあれば遠慮なくご指摘いただければ幸いです🙇

第2章 UML--統一モデリング言語

基礎問題

Q1. is-a関係とhas-a関係の違い、さらにhas-a関係を細分化するとどうなる?

A:違いは下記

  • is-a関係:クラスAがクラスBを継承(派生)して作成されたクラスであることを示す。
  • has-a関係:クラスAの中にクラスBを内包していることを示す。

またhas-a関係は下記2つの関係に細分化される。

  • 集約:クラスAがクラスBを保持し扱える。
  • コンポジション:クラスBがクラスAを構成するための1要素になっている。

Q2. クラス図におけるクラスの表現は3つの部分に分かれているが、この3つの内容とは?

A:3つの内容とは下記になる。

  • 名称
  • データメンバ
  • メソッド

またデータメンバやメソッドには+や-等の記号を記述できるが、
これはクラス内のデータメンバやメソッドのアクセス可能性を視覚化するための記号となる。

  • +:public。
    • 外部のオブジェクトからでも参照できる。
  • -:private。
    • そのプロパティが定義されているクラスからのみ参照できる。
  • #:protected。
    • そのプロパティが定義されているクラスとそのクラスを継承したクラスからのみ参照できる。

Q3. カーディナリティとは?

A:クラス図で定義したクラス同士が何個のクラスと紐付くのか?を定義したもの。

Q4. シーケンス図の目的とは?

A:実体化したオブジェクト同士の具体的なやり取り順序を視覚化し、処理フローを明確にするため。

応用問題

Q. オブジェクトが互いに通信する際、『処理を起動する』とは表現せず『メッセージを送信する』と表現したほうが適切と言われている理由は?

A:オブジェクトAがオブジェクトBに対して動作実行を依頼するとき、動作の具体的な実行方法はオブジェクトBだけが知っており、オブジェクトAは『〜〜の動作実行してね』とお願いをするだけのため。

自身の考え

Q. シーケンス図には、どれだけ細かい手順を記述するべき?

A:処理フローの流れを正確に把握するために、インスタンス化やコレクション追加等の動作はもちろん各クラス内で定義・実行されるメソッド処理の動作も記述しておくべき。

まとめ

今回は第2章についてだけまとめましたが、今後も順次第3章以降もまとめていこうと思います。

GitHubで編集を提案

Discussion