ゴミ捨て場

命を大事にしな

デザインパターンとともに学ぶ オブジェクト指向のこころ 1

第1部 オブジェクト指向ソフトウェア開発入門

第1章 オブジェクト指向パラダイム

機能分解

  • プログラムの実装を考える時、大まかな手順を考え、手順ごとに更に細かい手順にブレークダウンしていき、それらの単位で機能を実装する。これを機能分解という。
  • 機能分解には弱点がある。それは分解された各機能を責任持って制御するメインプログラムが必要になることである。そのような事情によりメインプログラムは複雑化しやすくなる。

要求における問題

  • プログラムの要求は常に変化し続ける。要求の変更に答え続ける(=プログラムを変更する)必要がある。
  • 顧客の要求は不完全で、あいまいで混乱を招き、大抵の場合間違っている。
  • 何をどう変更するのが正しいのかはわからないが、要求の変更に対応できるプログラムを書かなければならないということは言える。

結合度、凝集度

  • 凝集度とは「ルーチン内の演算がどれだけ密接に関係しているのか」を表す尺度。
  • 結合度とは「2つのルーチン感の関連の強さ」を表す尺度。
  • 凝集度は高ければ高いほどよい。一つのルーチンでやることは明確に定まっていることが望ましい(あれもやるこれもやるというのは良くないということ)。凝集度のことを明快度と呼ぶこともある。
  • 結合度は低ければ低いほどよい。ルーチンごとに責任を分離し、お互いの影響が少ないほうが保守性が高くなるため。

オブジェクトへの責任の移行

  • メインプログラムにすべての責任が委ねられた状態(=機能分解)から、メインプログラムから指示を受ける登場人物(=オブジェクト)達に責任を移行させる。
  • オブジェクトごとに3つの観点「概念」「仕様」「実装」が存在する。
  • 「概念」は「私は何に対して責任があるのか?」を答える。
  • 「仕様」は「私はどのように使用されるのか?」を答える(インターフェースの定義)。
  • 「実装」は「私はどのようにして責任を全うするのか?」を答える。
  • 呼び出す側は具体的にどう処理するのかをすべて命令するのではなく、「概念」レベルで何をしてほしいかだけを伝えるだけでよい(メインプログラムの責任がオブジェクトへ移行される=メインプログラムの結合度が低くなる)。

クラス

  • クラスとはオブジェクトの振る舞いを定義したものである。
  • 該当オブジェクトが保持するデータ項目、実行できるメソッド、これらのアクセスする方法、などの情報が含まれる。
  • オブジェクトを作成するには特定の型(=クラス)の新規オブジェクトが必要であることを記述してやる必要があり、この新規オブジェクトのことをインスタンスと呼ぶ。クラスのインスタンスを生成することを実体化と呼ぶ。