実生活のマーケット分析するとき「オブジェクト指向」「カプセル化」などからインスパイアされることが多々あります。
オープン・クローズドの原則(OCP:the Open-Closed Principle)(開放-閉鎖原則)
ソフトウェアの構成要素は、拡張に対して開いていて、修正に対して閉じていなければならない。
どういうこと?
- オープン(開いている)とは?
モジュールの振る舞いを拡張できる。 - クローズ(閉じている)とは?
モジュールの振る舞いを変更しても、そのソースやバイナリはまたく影響を受けない。
なんで?
この原則はオブジェクト指向設計の核心。
なぜなら、この原則に従えば、オブジェクト指向の最大のメリットを享受できる!
- 柔軟性
- 再利用性
- 保守性
たとえば?
具体例として、よくある図形の例 。
switch/caseで図形の種類ごとに処理を行う。
こうすると、図形の種類が追加になるたびにこの処理が変更になる。
ここで大事なのは、switch/caseがおそらく一箇所ではないところ。
至る所に図形の種類ごとの色々な処理があることが考えられる。しかもcaseが場所ごとに微妙に違っていると、もう保守の困難極まりない。説明の為の単純な例を見ると、少数のcaseしか書いてないから重大性が薄れて見えるが、実態としては数多く出てくるため、影響は大きい。
これを見逃すと「硬い」「もろい」「移植性のない」モジュールが出来てしまう!
どうすれば?
オープンとクローズという一見矛盾した属性を実現するには「抽象」を使って表現する。
[amazonjs asin=”4621066048″ locale=”JP” title=”オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)”]
続きは明日