The Open-Closed Principle (OCP) - OO設計のOCP開放/閉鎖原則
2008/06/24 22:41Update
ソフトウェアエンティティ(クラス、モジュール、関数など)は拡張に対して開放であり、修正に対して閉鎖すべきである。
概要
開放/閉鎖原則(The Open-Closed Principle:OCP)は「オブジェクト指向」設計において、クラスなどのモジュールは:
◇ 拡張に対して開放(open)でなければなりません。
◇ 修正に対して閉鎖(close)でなければなりません。
というルールを従わなければなりません。
即ち、モジュールが目指すべき設計とは、それに基づいたソフトウェアに
◇ 機能追加ができること(open)
◇ 機能を追加するのに、既存機能が変更の影響を受けないために、元のコードを修正しないこと(コードの追加による機能追加)(close)
開放/閉鎖原則(OCP)はオブジェクト指向設計原則の最も基本的な原則です。これから紹介していくオブジェクト指向設計のクラス設計原則やパッケージ設計原則、及びデザインパターンなどは開放/閉鎖原則(OCP)を根底にしています。
メリット
◇ 優れた拡張性。開放/閉鎖原則(OCP)の「open for extension:拡張に開放」はソフトウェア(モジュール)の拡張性を求めています。
◇ 安定性、保守性の向上。開放/閉鎖原則(OCP)の「closed for modification:修正に閉鎖」は、新しい機能を追加するのに、コードの修正をしなくても、コードの追加による実現することによって、既存の機能への影響を最小限に抑えられ、優れた安定性を保つことができます。また、コードの修正をしないことは保守性の向上にもつながります。
◇ 再利用性。開放/閉鎖原則(OCP)に従えるソフトウェアを構築するために、一般的に再利用可能な抽象インタフェースに基づいた設計を求めています。
手法
開放/閉鎖原則(OCP)に実現するために、いろんな手法があると考えられます。現在、オブジェクト指向設計では、一般的に、相対的に安定である(closed for modification)インタフェースを定義し、それに派生するクラスによって拡張(open for extension)という手法が多く用いられています。
1、機能を分析する
2、後からほぼ修正をしない再利用可能なインタフェースを定義する
3、インタフェースの継承クラスによって機能拡張する
しかし、ソフトウェアの不確定性などで、100%の開放/閉鎖原則(OCP)に従ったオブジェクト指向設計はあまりにも難しいであり、できるだけ開放/閉鎖原則(OCP)に従っていればいいでしょう。
参考資料
Martin, Robert C. (1996 January). “The Open-Closed Principle”
「PDF。英語」
Sponsored Link
- Relative Articles
- Single Responsibility Principle (SRP) - OO設計のSRP単一責任原則 - (2008/06/08 01:34)
- Interface Segregation Principle (ISP) - OO設計のISPインターフェイス分離原則 - (2008/06/08 22:18)
- Liskov Substitution Principle (LSP) - OO設計のLSP リスコフ置換原則 - (2008/06/09 13:18)
- Dependency Inversion Principle (DIP) - OO設計のDIP依存逆転原則 - (2008/06/09 14:56)
- The Stable Dependencies Principle (SDP) - OO設計のSDP安定依存原則 - (2008/06/09 16:53)
- The Acyclic Dependencies Principle (ADP) - OO設計のADP非循環依存原則 - (2008/06/09 17:33)
- The Stable Abstractions Principle (SAP) - OO設計のSAP安定度・抽象度等価原則 - (2008/06/09 17:48)
- The Common Closure Principle (CCP) - OO設計のCCP閉鎖性共通原則 - (2008/06/09 18:04)
- Release Reuse Equivalency Principle (REP) - OO設計のREP再利用・リリース等価原則 - (2008/06/09 18:15)
- The Common Reuse Principle (CRP) - OO設計のCRP全再利用原則 - (2008/06/09 18:24)