この記事の内容は、PHP のオブジェクト指向の 5 つの原則のうち、オープン/クローズの原則を詳細に説明するものです。必要な友人は参考にしてください。
ソフトウェア システムの規模が拡大し続けるにつれて、ソフトウェア システムの保守と変更の複雑さは増大し続けています。このジレンマをきっかけに、フランスの工学学者ベルトラン マイヤーは 1998 年に「オープンクローズ原則、OCP」原則を提案しました。この原則の基本的な考え方は次のとおりです:
Close (変更のためクローズ) モジュールの機能を拡張する場合、既存のモジュールに大規模な影響を与えたり、影響を与えたりしてはなりません。
言い換えれば、開発者は、システム内の既存のコード(ソースコードまたはバイナリコード)を変更することなく、アプリケーションシステムのソフトウェア機能を拡張する必要があります。一言でまとめると、モジュールは拡張性の観点から開発され、変更可能性の観点から閉じられるべきです。
人生で考える最も簡単な例はコンピューターです。インターフェースを介してさまざまなデバイスを接続するだけで、コンピューターの機能を簡単に拡張できます。
オープン/クローズによりシステムの拡張性と保守性が向上しますが、これも相対的なものであり、メンテナンスの困難を軽減するために一部の機器と機能を安定した状態に保つ必要があります。新しい機能を実装するには、ハードウェアをアップグレードするか、より高性能なコンピューターに変更する必要があります。コンピュータのマルチメディア再生ソフトウェアを例に挙げると、プレーヤーとしては、マルチメディア ファイルを開く、再生を停止する、早送り、音量調整など、いくつかの基本的かつ汎用的な機能が必要です。しかし、どのようなプレーヤーであっても、どのような再生プラットフォームであっても、この原則に従って設計されたプレーヤーは、統一されたスタイルと操作習慣を持っている必要があり、どのプレーヤーを使用しても、作成者はすぐに使い始めることができるはずです。
プレーヤーを例として、まず抽象インターフェイスを定義します。コードは次のとおりです。
interface process { public function process(); }
次に、以下に示すように、このインターフェイスを拡張してデコード機能と出力機能を実装します
class playerencode implements process { public function process() { echo "encode",PHP_EOL; } } class playeroutput implements process { public function process() { echo "ouput",PHP_EOL; } }
プレーヤーのさまざまな機能については、規約に従って実装している限り、これはオープンですプロセス インターフェイスを使用すると、プレーヤーに新しい機能モジュールを追加できます。ここではデコードおよび出力モジュールのみが実装されており、必要に応じてさらに新しいモジュールを追加できます。
次に、プレーヤーのスレッド高スケジューリング マネージャーを定義します。プレーヤーが通知を受信すると (外部クリック動作または内部通知動作の場合があります)、実際のスレッド処理をコールバックします。コードは次のとおりです。
class playProcess { private $message = null; public function __construct() {} public function callback(event $event) { $this->message = $event->click(); if($this->message instanceof process) { $this->message->process(); } } }
class mp4 { public function work() { $playProcess = new playProcess(); $playProcess->callback(new event('encode')); $playProcess->callback(new event('output')); } }
オープン-クローズド原則に従う方法
オープン-クローズドを実現するための核心は、抽象化が比較的安定しているため、具体的ではなく抽象的にプログラムすることです。クラスを固定の抽象化に依存させることで、そのような変更は閉じられ、オブジェクト指向の継承とポリモーフィズムのメカニズムを通じて、抽象本体を継承し、そのメソッドをオーバーライドして固有の動作を変更し、新しい拡張メソッドを実装できます。拡張に開かれています。
1) 「抽象化」と「カプセル化」のアイデアをデザインに適用します。
一方では、ソフトウェアシステム内で考えられるさまざまな「変動要因」を見つけて、それらをカプセル化することです。
一方、可変要素は複数の異なるコードモジュールに分散すべきではなく、オブジェクトにカプセル化される必要があります。
2) システム関数プログラミングの実装にインターフェース指向プログラミングを適用します。
要件が変更された場合、変更に適応するためにこのインターフェースの新しい実装クラスを提供できます。
インターフェイス指向プログラミングでは、インターフェイスを実装する関数クラスと、インターフェイス型として宣言されるオブジェクトが必要です。デザインモードでは、装飾モードでは明らかに OCP が使用されます。
以上がPHP のオブジェクト指向 5 つの原則の詳細な説明: オープンクローズ原則の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。