オープン・クローズドの原則(OCP:The Open-Closed Principle) [ライブラリ、フレームワーク、アーキテクチャ設計]
Bertrand Meyerによるオープン・クローズドの原則(OCP:The Open-Closed Principle)は、クラスや関数を設計するだけでなく、アーキテクチャ(システム設計)においても重要な役割を果たします。1997年に出版されたBertrand Meyerの著書Object-Oriented Software Constructionで紹介されています。
私自身の経験から言えば、1996年に発売されたFuji Xerox DocuStation IM200では、当時のデジタル複合機(MFP)の基本サービスに加えてペーパーユーザインタフェースと呼ばれるサービスが搭載されていました。この開発においては、様々な工夫を私自身が考え出して組み込みました。特に、サービスを任意に追加できるようにする必要性を強く認識して、以下の2点を実現するように設計しました。
こう説明すると当たり前のことにように思えるかもしれませんが、下手に設計すると、すべてのモジュールを静的にリンクして、たとえば、ユーザが指示をしたコピー操作をどのサービスモジュールが行うのかをシステム側がハードコードするような設計をしないとも限りません。私自身はそのようなシステムを多く見てきました。
IM 200の開発では、製品ではないサービスモジュールを色々と作成して、私も含めて開発者が遊んでいました。私自身は、デジタル時計サービス(操作パネル上にデジタル時計を大きく表示)やメッセージ表示サービス(自分のPC上で動作するMessagingToolから送ったメッセージが操作パネル上に表示される)など作成したりしました。
Fuji Xerox DocuStation IM 200を含むブログ
ソフトウェアの構成要素(クラス、モジュール、関数など)は拡張に対して開いて(オープン:Open)いて、修正に対して閉じて(クローズド:Closed)いなければならない。大規模なシステムにおいて、ある機能を追加しようとする場合に、既存のモジュール群を多数修正しなければならないのであれば、この原則に反していることになります。もし、追加される機能が小さなものであっても、既存のシステムを多数修正しなければならないとなると、システム設計が誤っているのかもしれません。
オープン・クローズドの原則(OCP:The Open-Closed Principle)
私自身の経験から言えば、1996年に発売されたFuji Xerox DocuStation IM200では、当時のデジタル複合機(MFP)の基本サービスに加えてペーパーユーザインタフェースと呼ばれるサービスが搭載されていました。この開発においては、様々な工夫を私自身が考え出して組み込みました。特に、サービスを任意に追加できるようにする必要性を強く認識して、以下の2点を実現するように設計しました。
- 個々のサービスを実装しているモジュールはすべてダイナミックロードされる。
- システムは、個々のサービスがどのような機能を提供するのか一切知らない。
こう説明すると当たり前のことにように思えるかもしれませんが、下手に設計すると、すべてのモジュールを静的にリンクして、たとえば、ユーザが指示をしたコピー操作をどのサービスモジュールが行うのかをシステム側がハードコードするような設計をしないとも限りません。私自身はそのようなシステムを多く見てきました。
IM 200の開発では、製品ではないサービスモジュールを色々と作成して、私も含めて開発者が遊んでいました。私自身は、デジタル時計サービス(操作パネル上にデジタル時計を大きく表示)やメッセージ表示サービス(自分のPC上で動作するMessagingToolから送ったメッセージが操作パネル上に表示される)など作成したりしました。
Fuji Xerox DocuStation IM 200を含むブログ