実生活のマーケット分析するとき「オブジェクト指向」「カプセル化」などからインスパイアされることが多々あります。

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

ソフトウェアの構成要素は、拡張に対して開いていて、修正に対して閉じていなければならない。

どういうこと?

  • オープン(開いている)とは?
    モジュールの振る舞いを拡張できる。
  • クローズ(閉じている)とは?
    モジュールの振る舞いを変更しても、そのソースやバイナリはまたく影響を受けない。

なんで?

この原則はオブジェクト指向設計の核心。
なぜなら、この原則に従えば、オブジェクト指向の最大のメリットを享受できる!

  • 柔軟性
  • 再利用性
  • 保守性

たとえば?

具体例として、よくある図形の例 。

switch/caseで図形の種類ごとに処理を行う。
こうすると、図形の種類が追加になるたびにこの処理が変更になる。

ここで大事なのは、switch/caseがおそらく一箇所ではないところ。

至る所に図形の種類ごとの色々な処理があることが考えられる。しかもcaseが場所ごとに微妙に違っていると、もう保守の困難極まりない。説明の為の単純な例を見ると、少数のcaseしか書いてないから重大性が薄れて見えるが、実態としては数多く出てくるため、影響は大きい。

これを見逃すと「硬い」「もろい」「移植性のない」モジュールが出来てしまう!

どうすれば?

オープンとクローズという一見矛盾した属性を実現するには「抽象」を使って表現する。

[amazonjs asin=”4621066048″ locale=”JP” title=”オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)”]

続きは明日

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です