ホームページ >バックエンド開発 >PHPチュートリアル >開閉原理とはどういう意味ですか?

開閉原理とはどういう意味ですか?

藏色散人
藏色散人転載
2019-04-15 10:29:067682ブラウズ

開閉原則

開閉原則 (OCP) は、オブジェクト指向設計における「再利用可能な設計」の基礎であり、オブジェクト指向設計における最も重要な原則の 1 つです。他の多くの設計原則は、オープンクローズの原則を実現する手段です。

1988 年、Bertrand Meyer は著書『オブジェクト指向ソフトウェア構築』の中で、「ソフトウェア エンティティは拡張に対してはオープンであるべきですが、変更に対してはクローズドであるべきである」というオープニングとクローズの原則を提案しました。翻訳すると、「ソフトウェアエンティティは拡張に対してオープンであり、変更に対してクローズドでなければなりません。」この文は少し専門的ですが、もっとカジュアルに表現しましょう。つまり、ソフトウェア システムに含まれるモジュール (Modules)、クラス (Classes)、関数 (Functions) などのさまざまなコンポーネントは、既存のものを変更する必要があります。コードを作成し、新しい機能を導入します。オープンクローズ原則の「オープン」は、コンポーネントの機能拡張がオープンで機能拡張が許可されていることを意味し、オープンクローズ原則の「クローズ」は、元のコードの修正がクローズされていること、つまり、元のコードを変更する必要があります。

開閉原理に従って設計されたモジュールには、2 つの主な特徴があります:

(1) 拡張用にオープン。これは、モジュールの動作が拡張可能であることを意味します。アプリケーションのニーズが変化した場合、モジュールを拡張して、それらの変化に合わせた新しい動作を実現できます。つまり、モジュールの機能を変更できます。

(2) 変更のため閉鎖されました。モジュールの動作を拡張する場合、モジュールのソース コードやバイナリ コードを変更する必要はありません。モジュールのバイナリ実行可能バージョンは、リンク可能なライブラリ、DLL、.EXE ファイルのいずれであっても、変更する必要はありません。

実装方法

開閉原則を実現する鍵は「抽象化」にあります。システムの考えられるすべての動作を抽象的な最下層に抽象化し、特定の実装で提供する必要があるすべてのメソッドの特性を指定します。システム設計の抽象化層として、あらゆる拡張の場合にシステムの抽象的な最下位層を変更する必要がないように、すべての可能な拡張を予測する必要があります。同時に、1 つ以上の新しい具体的な実装が必要になるため、抽象的な最下層から派生させることができ、システムの動作を変更できるため、システム設計を拡張することができます。

私たちは、ソフトウェア開発のプロセスにおいて常に需要指向を提唱してきました。そのためには、設計時にユーザーのニーズを明確に理解し、そのニーズに含まれる可能性のある変更を判断し、どのような状況で開閉原則を使用するかを明確にする必要があります。

システムの可変部分に関しては、より具体的な変動のカプセル化の原則 (EVP) もあり、ソフトウェア エンジニアリングの実装の観点から開始と終了の原則をさらに説明しています。 EVP では、システムを設計するときに、変更される可能性のあるシステムのすべての部分を評価および分類し、各変動要因を個別にカプセル化する必要があります。

実際の開発プロセスの初期設計段階では、システムの考えられる動作をすべてリストアップし、それらの動作を抽象的な最下層に追加する必要がありますが、これはまったく不可能であり、不経済でもあります。したがって、コードが拡張に対してオープンであり、変更に対してクローズであるように、現実的に変更を受け入れ、変更を受け入れる必要があります。

#利点

ソフトウェア システムが開閉原則に準拠している場合、ソフトウェア エンジニアリングの観点からは、少なくとも次の利点があります:

優れた再利用性。

ソフトウェアが完成した後も、ソフトウェアを拡張したり、新しい機能を追加したりすることができ、非常に柔軟です。したがって、このソフトウェア システムは、新しいコンポーネントを継続的に追加することで、変化するニーズに対応できます。

メンテナンス性に優れています。

既存のソフトウェア システムのコンポーネント、特にその抽象的な最下層は変更されないため、ソフトウェア システム内の元のコンポーネントの安定性について心配する必要はありません。ソフトウェアの変更 システムには一定の安定性と継続性があります。

以上が開閉原理とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はhcoder.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。