SSブログ

オープン・クローズドの原則(OCP:The Open-Closed Principle) [ライブラリ、フレームワーク、アーキテクチャ設計]

Bertrand Meyerによるオープン・クローズドの原則(OCP:The Open-Closed Principle)は、クラスや関数を設計するだけでなく、アーキテクチャ(システム設計)においても重要な役割を果たします。1997年に出版されたBertrand Meyerの著書Object-Oriented Software Constructionで紹介されています。
ソフトウェアの構成要素(クラス、モジュール、関数など)は拡張に対して開いて(オープン:Open)いて、修正に対して閉じて(クローズド:Closed)いなければならない。
オープン・クローズドの原則(OCP:The Open-Closed Principle
大規模なシステムにおいて、ある機能を追加しようとする場合に、既存のモジュール群を多数修正しなければならないのであれば、この原則に反していることになります。もし、追加される機能が小さなものであっても、既存のシステムを多数修正しなければならないとなると、システム設計が誤っているのかもしれません。

私自身の経験から言えば、1996年に発売されたFuji Xerox DocuStation IM200では、当時のデジタル複合機(MFP)の基本サービスに加えてペーパーユーザインタフェースと呼ばれるサービスが搭載されていました。この開発においては、様々な工夫を私自身が考え出して組み込みました。特に、サービスを任意に追加できるようにする必要性を強く認識して、以下の2点を実現するように設計しました。
  • 個々のサービスを実装しているモジュールはすべてダイナミックロードされる。
  • システムは、個々のサービスがどのような機能を提供するのか一切知らない。
レイヤ構成の最上位層に位置するサービス層は、すべてがダイナミックロードされて機能を実現していました。これも一種のオープン・クローズドの原則に基づく設計だと思っています。サービスを追加するという機能拡張を行うのに、下位層のシステムを修正する必要がないということです。

こう説明すると当たり前のことにように思えるかもしれませんが、下手に設計すると、すべてのモジュールを静的にリンクして、たとえば、ユーザが指示をしたコピー操作をどのサービスモジュールが行うのかをシステム側がハードコードするような設計をしないとも限りません。私自身はそのようなシステムを多く見てきました。

IM 200の開発では、製品ではないサービスモジュールを色々と作成して、私も含めて開発者が遊んでいました。私自身は、デジタル時計サービス(操作パネル上にデジタル時計を大きく表示)やメッセージ表示サービス(自分のPC上で動作するMessagingToolから送ったメッセージが操作パネル上に表示される)など作成したりしました。

Fuji Xerox DocuStation IM 200を含むブログ