オブジェクト指向の考え方

オブジェクト指向とは、操作手順より操作対象 (オブジェクト) に重点を置き、システムを設計する手法です。ここでは、その考え方について解説します。

オブジェクト指向設計の原則

単一責任の原則 (Single Responsibility Principle : SRP)

クラスを変更する理由は、1つ以上存在してはならない。

オープン・クローズドの原則 (OCP : Open-Closed Principle)

ソフトウェアの構成要素 (クラス、モジュール、関数など) は、拡張に対して開いて (オープン) いて、修正に対して閉じて (クローズド) いなければならない。

リスコフの置換原則 (Liskov Substitution Principle : LSP)

派生型はその基本型と置換可能でなければならない。

依存関係逆転の原則 (Dependency Inversion Principle : DIP)

抽象化した部分が、実装の詳細に依存してはならない。実装の詳細が、抽象化した部分に依存するべきである。

インターフェイス分離の原則 (Interface Segregation Principle : ISP)

クライアントに、利用しないメソッドへの依存を強制してはならない。

インターフェイスはクライアント側に属するものであり、階層構造側に属するものではない。

再利用・リリース等価の原則 (REP : Release-Reuse Equivalency Principle)

再利用の単位とリリースの単位は等価になる。

閉鎖性共通の原則 (CCP : Common Closure Principle)

パッケージに含まれるクラスは、みな同じ種類の変更に対して閉じているべきである。

パッケージに影響する変更はパッケージ内のすべてのクラスに影響を及ぼすが、他のパッケージには影響しない。

全再利用の原則 (CRP : Common Reuse Principle)

パッケージに含まれるクラスは、すべて一緒に再利用される。つまり、パッケージに含まれるいずれかのクラスを再利用するということは、その他のクラスもすべて再利用することを意味する。

非循環依存関係の原則 (ADP : Acyclic Dependencies Principle)

パッケージ依存グラフに循環を持ち込んではならない。

安定依存の原則 (SDP : Stable Dependencies Principle)

安定する方向に依存せよ。

安定度・抽象度等価の原則 (SAP : Stable Abstractions Principle)

パッケージの抽象度と安定度は、同程度でなければならない。

アジャイルソフトウェア開発の奥義 付録E「オブジェクト指向設計の原則」

契約による設計

契約による設計とは、信頼性の高いソフトウェアを構築するための技法です。

  • 表明 (assertion)
  • 事後条件 (post condition)
  • 事前条件 (pre condition)
  • 例外 (exception)
  • 不変表明 (invariant)