オブジェクト指向設計


The Open-Closed Principle (OCP) - OO設計のOCP開放/閉鎖原則

2008/06/24 22:41Update
TAGS: OCP | OO | オブジェクト設計 | 開放/閉鎖原則

ソフトウェアエンティティ(クラス、モジュール、関数など)は拡張に対して開放であり、修正に対して閉鎖すべきである。

概要


開放/閉鎖原則(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。英語」

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments