オープンクローズド原理は、Javaの世界で最も基本的な設計原則です。安定した柔軟なシステムを構築する方法を案内します。
意味:
クラス、モジュール、関数などのソフトウェアエンティティは、拡張機能に開放され、修正に閉鎖される必要があります。
クラス、モジュール、関数などのソフトウェアエンティティは、拡張機能のために開かれている必要がありますが、変更のために閉じている必要があります。
開会と閉鎖の原則の意味は、既存のコードを変更するのではなく、ソフトウェアエンティティが拡張機能を通じて変更を達成する必要があるということです。
ソフトウェアエンティティには、次の部分が含まれています。
開閉の原則は、ソフトウェアエンティティの将来のもののために定式化された現在の開発設計の制約の原則です。
注:開閉の原則は、拡張機能と閉鎖の変更に対して開かれています。変更が行われないという意味ではありません。低レベルのモジュールの変更は、高レベルのモジュールと結合する必要があります。そうしないと、孤立した意味のないコードスニペットになります。
変更の種類:
プロジェクトの基本的なパスは次のとおりです。プロジェクトの開発、再建、テスト、生産、運用、およびメンテナンス。再構成により、元の設計とコードを変更でき、操作とメンテナンスは元のコードの変更を最小限に抑え、履歴コードの純度を維持し、システムの安定性を改善できます。
開閉の原則の重要性:
1。テストに対する開口部と閉会の原則の影響。オープニングとクロージングの原則は、元のテストコードをまだ正常に実行し続けることです。拡張コードをテストするだけです。
2。開閉の原則は、再利用性を改善することができます。オブジェクト指向の設計では、すべての論理は、クラスで独立してビジネスロジックを実装するのではなく、アトミックロジックで構成されています。この方法でのみ、コードを再利用できます。粒度が小さいほど、再利用される可能性が高くなります。
3。開閉の原則は、メンテナビリティオブジェクト指向の開発の要件を改善することができます。
オープニングとクロージングの原則の使用方法:
1.抽象制約まず、インターフェイスまたは抽象クラスの制約を介して拡張を拡張し、インターフェイスまたは抽象クラスに存在しないパブリックメソッドを許可しません。
次に、実装クラスではなく、パラメータータイプと参照オブジェクトにインターフェイスまたは抽象クラスを使用してみてください。
第三に、可能な限り安定したままで、一度決定されたら、変更は許可されていません。
2。メタデータ制御モジュールの動作メタデータは、環境とデータを説明するために使用されるデータです。素人の用語では、構成パラメーターです。パラメーターは、ファイルまたはデータベースから取得できます。
スプリングコンテナは、メタデータ制御モジュールの動作の典型的な例であり、究極は制御の反転です
3。プロジェクトチャーターの策定。チームでは、チャーターがすべての担当者が従わなければならない契約を指定するため、プロジェクト憲章を確立することが非常に重要です。プロジェクトの場合、契約は構成よりも優れています。
4.パッケージの変更には2つの意味があります。
まず、同じ変更をインターフェイスまたは抽象クラスにカプセル化します。
第二に、異なる変化を異なるインターフェイスまたは抽象クラスにカプセル化し、同じインターフェイスまたは抽象クラスに2つの異なる変更があるはずです。
例
これが例です。まず第一に、悪い例です。
class graphiceditor {public void drawshape(shape s){if(s.m_type == 1)drawrectangle(s); else if(s.m_type == 2)drawcircle(s); } public void drawcircle(circle r){....} public void drawrectangle(rectangle r){....}} class shape {int m_type; } class rectangleはshape {rectangle(){super.m_type = 1; }} class Circleはshape {circle(){super.m_type = 2; }}形状を拡張したい場合は、最初にグラフセイタークラスを理解し、次にドローシェイプに新しいタイプを追加してから関数を追加する必要があります。これが改善されたコードです:
class graphiceditor {public void drawshape(shape s){s.draw(); }} class shape {abstract void draw(); } class rectangleはshapeを拡張します{public void draw(){//長方形を描画}}}
描画ロジックを理解し、特定の実装をサブクラスに入れる必要はありません。
要約:
1。開閉原則を遵守すると、ソフトウェアのスケーラビリティとメンテナンスが向上する可能性があります。
2.ほとんどの設計パターンとデザインの原則は、開閉の原則を実現することです。