C ++デザインパターン(2):8つのオブジェクト指向のデザイン原則

変化は再利用の天敵です!
オブジェクト指向の設計の最大の利点は次のとおりです。変化への抵抗!
 

オブジェクト指向の認識

分離の変更を理解する

マクロの観点から、オブジェクト指向の構築方法は、ソフトウェアの変更により適応性があり 、変更の影響を最小限に抑えることができます。 

彼らの義務を遂行する

ミクロレベルから、オブジェクト指向のアプローチは、各カテゴリの「責任」を強調します
需要の変化による新しいタイプは、元のタイプの実現に影響を与えるべきではありません-それ はいわゆる責任です

オブジェクトは何ですか?

言語実装の観点から、オブジェクトはコードとデータをカプセル化します。
仕様レベルでは、オブジェクトは使用できる一連のパブリックインターフェイスです。
概念レベルから見ると、オブジェクトは責任を伴う抽象化です。

8つのオブジェクト指向の設計原則

依存関係反転原理(DIP)

高レベルのモジュール(安定)は低レベルのモジュール(変更)に依存するべきではなく、両方とも 抽象化(安定)に依存する必要があります
抽象化(安定性)は実装の詳細(変更)に依存するべきではなく、実装の詳細は 抽象化(安定性)に依存する必要があります
 
「変化」に対抗するために、安定したトップレベルの設計と不安定なボトムレベルの設計はどちらも(安定した)抽象化に依存し、同時に緩い結合の要件も満たします。
 

オープンおよびクローズドプリンシパル(OCP)

拡張に対してオープンで、変更に対してクローズ。
クラスモジュールは拡張可能である必要がありますが、変更することはできません。
 
安定性と互換性のために、任意に拡張することはできませんが、元々拡張することはできます。
 

単一責任原則(SRP)

クラスには、変更の理由が1つだけある必要があります。
変化の方向は、クラスの責任を意味します。
 
タスクを切り離してみてください。1つは再利用を容易にすることであり、もう1つは管理を容易にすることです。
 

Liskov Substitution Principle(LSP)

サブクラスは、基本クラス(IS-A)を置き換えることができる必要があります。
継承式タイプの抽象化。
 
サブクラスは、基本クラスの抽象化を実装する必要があります
 

インターフェイス分離原理(ISP)

クライアントプログラムは、使用しないメソッドに依存するように強制されるべきではありません。
インターフェイスは小さく、完全である必要があります。
 
クライアントプログラムに必要なインターフェイスのみを提供する
 

クラス継承ではなくオブジェクト構成を優先する

クラスの継承は通常「ホワイトボックスの再利用」であり、オブジェクトの構成は通常「ブラックボックスの再利用」です。
継承はカプセル化をある程度破壊し、サブクラスと親クラスの間の結合は高くなります。
オブジェクトの組み合わせには、明確に定義されたインターフェイスと 結合のみが必要 です。
 
基本クラスは、クラスが継承するときにサブクラスに露出しすぎ、サブクラスは親クラスに依存するため、結合度の低いオブジェクトの組み合わせを使用するようにしてください。これは不利です。
 

パッケージ変更点

パッケージを使用してオブジェクト間に境界レイヤーを作成します。これにより、設計者は境界レイヤーで 一方の側を変更 でき、もう一方の側は悪影響を及ぼさず、時間間のレイヤーの緩い結合を実現でき ます。
 
変化点をカプセル化し、さらに分離します。
 

実装ではなく、インターフェースのプログラミング

変数タイプを特定の具象クラスとしてではなく、インターフェースとして宣言します。
クライアントプログラムは、オブジェクトの特定のタイプを知る必要はなく、オブジェクトが持つ インターフェイスのみを知る必要があります
システムの各部分の依存性を減らし、「高凝集性と緩い結合」 タイプの設計スキームを実現し ます。
 
インターフェースの標準化はこの業界の繁栄を表しているので、すべてがインターフェースを第一に考えています。
 
 

3つのレベルの設計

1.デザインイディオム
デザインイディオムは、特定のプログラミング言語に関連する低レベルのパターン、テクニック、およびイディオムを記述します
2.デザインパターン
デザインパターンは、主にグループ内のオブジェクトを使用して説明されます。「相互の 織り交ぜられた関係のタイプコミュニケーション 。その役割、責任、協調的アプローチの側面を含みます。
3.アーキテクチャパターン
Architectural Patternsは、 細分化、責任、および 通常のシステム間での編成方法を含む、組織のクローズハイレベルモデルの基本構造を使用してシステムを記述し ます。
 

 

おすすめ

転載: blog.csdn.net/fan1102958151/article/details/107622541