目的
「オブジェクト指向」そのものに対する視点と知識量を増やす。
オブジェクト指向とは
無駄を省いて整理整頓するもの
理解が難しくなる理由
「汎用の整理術(システム設計上の共通理解)としての表現」なのか、「オブジェクト指向プログラミングとしての表現」なのかを意識して読み取る必要がある
- 混乱したまま理解しようとする為
- どう混乱しているかを上手く整理できない、もしくは説明者もどう混乱しがちかを把握していない為
- 現実世界と共通点ばかりにフォーカスしてしまう
- プログラミング言語的理解が先行すると、言葉が同じであるがゆえに概念的な説明に対して技術的な仕様レベルの話を持ち込んでしまう
混乱要因
-
用語の洪水
オブジェクト指向を説明する対象とする分野の広さから、特殊用語のオンパレードすぎる -
比喩の乱用
比喩だけが強烈な印象としてのこってしまい、聞く側がそれぞれ解釈し、誤解を生みがち -
なんでもオブジェクト症候群
「オブジェクト思考を使えば、現実世界をそのままプログラムに表現できる」という考え方を鵜呑みにしてしまい、オブジェクト指向という技術を説明する1側面である事を認識できない
上記3点が一度にきてしまう
混乱要因を排除する方法
- 紹介する用語や概念は最小限にする。
- 比喩による説明は最小限に抑える。比喩を使う場合にはその旨を明示する。
- プログラミングの仕組みと、「モノ中心」で汎用的に物事をとらえる考え方は別物として、分けて説明する。
オブジェクト指向の三大要素
- クラス(カプセル化)
- ポリモーフィズム
- 継承
概念とプログラミング技術の2軸で理解する
初学時はプログラミングにおけるオブジェクト指向技術を指す部分(コード)をはっきり認識できていないケースがある為、抽象表現との紐付けが上手くできずに混乱する
共通点
オブジェクト指向は現実世界をそのまま反映したものである
- 現実世界に存在する固有の物体を全てオブジェクトと考えること
- これがプログラミング技術におけるインスタンス化した実体と通じる
相違点
オブジェクト指向は現実世界と似て非なる部分がある
- 現実世界の人やモノはクラスから作らない(概念先行ではない)
- 現実世界の人やモノはメッセージだけでは行動しない(自立した行動もする)
プログラミングのための仕組みという事を割り切って抽象表現とは別軸でも理解する
- クラスは変数と関数をひとまとめにして独立性の高い部品を作る仕組み
- ポリモーフィズムと継承はコードの重複を排除して汎用性の高い部品を作る仕組み
プログラミングは現実世界全てではなく、一部が実現された世界であることを認識する
人間の仕事の一部の世界を実現している
- 覚える仕事
- 決まり切った仕事
プログラミング技術の側面からみたオブジェクト指向の三大要素の利用
- クラス(カプセル化)
- クラスからインスタンスを作成して、メソッドと変数定義をまとめて利用する
- ポリモーフィズム
- 親クラスのインスタンス生成時のメッセージの変更によって、呼び出される側のロジックをアプリケーション固有の処理で置き換える
- 継承
- クラス定義の共通部分を親クラスにまとめて、コードの重複を排除する
関連記事
雑感
この本では「クラス」という言葉で他の2要素と並べているけど言葉の種類を揃えると「カプセル化」の方がしっくり自分はしてしまう