📗

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

2024/03/18に公開

はじめに

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

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

第8章 視野を広げる

基礎問題

Q1. カプセル化について正しい認識とはどういったものでしょうか?

A:カプセル化はデータだけを隠蔽するのではなく、『型・挙動(メソッド)やその他のオブジェクト』も隠蔽できる。

Q2. 問題領域を見る際の3つの観点とはなんでしょうか?

A:『概念・仕様・実装』の3つである。

応用

Q1. オブジェクトの理解として『メソッドを伴ったデータ』と『責務を伴ったものごと』という2つの考え方があります。

  • 2つ目の考え方が1つ目のものよりも優れているのは、どういった点においてでしょうか?
  • これによって、どういった見識が追加されるのでしょうか?
A:
  • そのオブジェクトが『どう実装されるのか?』ではなく『どういった用途で使用されるのか?』に注目できるようになる。
  • 実装の詳細をすべて考慮することなく、予備的な設計をしたのちに実際の設計をできるようになる。

Q2. オブジェクトは他のオブジェクトを保持することができるのか?これはオブジェクトがデータメンバを保持することと違っているのか?

A:オブジェクトは『他のオブジェクト』を保持できる。

オブジェクトはデータメンバを保持できるが、データメンバも本質的には『オブジェクト』になるので、
オブジェクトが『他のオブジェクトを持つこと』と『データメンバを持つこと』は同じことである。


Q3. 『流動的要素を見つけ出し、それをカプセル化する』という言葉には、どういった意味があるのでしょうか?例を挙げて説明してください。

A:同じ共通点を持った物事の可変性の部分(流動的要素)を抜き出し、隠蔽することで使用者は可変性の部分を意識せずにオブジェクトを使用できるようになる。

例) 出刃包丁や刺身包丁などはどれも『食材を切るための包丁』という共通点があるが、魚や肉特化や切り身特化などの違いがある。
ただ使用者からすれば『食材を切る』以上のことを意識しなくても使用できるようになる。


Q4. 共通性/可変性分析と問題領域を見る際の3つの観点の関係を説明してください。

A:3つの観点とは『概念上の観点・仕様上の観点・実装上の観点』である。
  • 概念と仕様上の観点:仕様上の観点によって、概念の中にあるケースをすべて取り扱えるインタフェースを定義できるようになる。
  • 仕様と実装上の観点:仕様が与えられた際に、特定ケースを実現するための実装方法が明確化できるようになる。

Q5. 抽象クラスは『中央集権の概念』と対応付けられます。これはどういった意味を持っているのでしょうか?

A:抽象クラスを継承して作成される具象クラス群の核となる概念に当たるクラスになるので、そのように対応付けられている。

Q6. 『可変性分析によって、ファミリ構成員がどのように違っているのかが明らかになります。可変性は特定の共通性においてのみ意味を持ちます。』

  • これはどういった意味を持っているのでしょうか?
  • 共通概念を表現するためには、どういった種類のオブジェクトが使用されるのでしょうか?
  • 流動的要素を表現するためには、どういった種類のオブジェクトが使用されるでしょうか?
A:
  • 出刃包丁や刺身包丁などの包丁はそれぞれ形状や薄さなどなどが違っておりこれを『ファミリ構成員』と呼んでいる。
    しかし、これは『包丁』という共通の道具だからこそ比較できる違いである。
  • 共通概念は、『抽象クラス』を使用することで表現できる。
  • 流動的要素は、『具象クラス』を使用することで表現できる。
GitHubで編集を提案

Discussion