質問

前提

この方法はありますので客観的に定義"良い"、"悪い"オブジェクト指向設計技術として地域を明確化していきまれます。これは学問です。場での真剣さ、解決できることだと思い大するだけでなく、地域全体として地域ることにより、利益を得られる場所までのすべてのポイントは、"この技術は"良い"とか"悪い"、または利用するべきではありませんのでない限り、特別な事情"

プラン

この取り組みに焦点を置くべきだと考オブジェクト指向の原理と機能設定、またはその他の型ます。

私は計画を承る一つの答えではなく私の回答に貢献する最後のコレクションや合理的討論の課題です。

ここが問題ない鉄のものです。ある例外はほとんどのルールだと思いこが違います。この宣言として注関連する例外やらかであったにもかかわらずdissenters.

ベース

このような、刺しで定義"良い"、"悪い":

  • "良い"-この技術を初めとする永続的な解決策です。ですることを目的とするものである変更後の支払いは時間の投資を実施する。可能で一貫して応用資産の取得完了に関するお知らせによる保守プログラマー。全体に貢献する良い機能を低コストに生命の製品です。

  • "悪玉"-この技術による場合には、短期的には、まもなくなり責任を負う。すぐですが変更がより困難になることが予想されます。初期投資が小さい、またはかかりますが、これとは異なり、高コストとなって沈んだコストの撤去しなければならないは活躍しています。で主体的に適用上、内容的にも一貫性に欠けが必要な場合はこれらの驚きや容易に認識できないよう保守プログラマー。全体に貢献する究極のコストを抑えつつ営する製品を抑制または防止の製品です。により抑制または防止に変更となり、直接的コスト、機会費用の大幅な責任を負う。

スターター

一例として、思いも寄与ようになるので、そういった提案の"原理

分離の懸念

[短い説明]

[コードまたはその他のタイプの例】

目標

【解説のう問題この原則を防ぐ]

適用可能性

[なぜ、、のような場合その結果が、先ほど任天堂さんの原理なんですか?]

例外

【はなしこの原理を利用して、か実際に大きな影響を与えるだけでな?]

異議申立

【注意の反対の意見照会、修正または削除、コミュニティからはこちら】

役に立ちましたか?

解決

関心事の分離

ミックスイン・スタイルの継承

への集約を好みます

機能がユーティリティクラスから継承することによって得ることができるが、多くの場合、それはすべての前記クラスのメンバーを使用して得ることができる。

実施例(Boost.Noncopyable)

Boost.Noncopyableは、コピーコンストラクタまたは代入演算子を欠いているC ++クラスです。 (これは一般的な現象である)コピーまたは割り当てられるからサブクラスを防止するために、ベースクラスとして使用することができます。また直接のメンバーとして使用することができます。

これを変換します。

class Foo : private boost::noncopyable { ... };

この宛先:

class Foo {
    ...
private:
    boost::noncopyable noncopyable_;
};

実施例(ロック可能オブジェクト):

Javaは任意のオブジェクトは、スレッドセーフな方法で使用できるようにするイディオムとしてsynchronizedキーワードを導入しました。これは、任意のオブジェクトにミューテックスを提供するために、他の言語に反映することができます。一般的な例は、データ構造です。

class ThreadsafeVector<T> : public Vector<T>, public Mutex { ... };

の代わりに、2つのクラスが一緒に集約することができた。

struct ThreadsafeVector<T> {
    Vector<T> vector;
    Mutex mutex;
}

目標

の継承は、しばしば、コード再利用機構として悪用されています。継承がある関係以外に何のために使用されている場合、全体的なコードの明瞭度が低下します。

より深くチェーンでは、ミックスインベースクラスが大幅サブクラスはミックスインクラスの複数のコピーを継承終わるここ、「ダイヤモンド死の」シナリオの可能性を増大ます。

上の利用可能

多重継承をサポートしています。

任意の言語ます。

例外

ミックスインクラスが提供または過負荷部材を必要とする場合。この場合、継承は通常、実装・イン・利用規約-との関係を意味し、集計は十分ではありません。

異議

この変換の結果(例えばMyThreadSafeDataStructure成分として公的にアクセス可能Mutexを有していてもよい)公衆のメンバーにつながる可能性がある。

他のヒント

あるとの原則が形成を進めていくうえで良い出発点:

でも良いアイデアの研究は既存のデザインパターンの原則にしたがって、最も重要なのは(一般に)好成分以上継承関係を示します。

私は短い答えは、任意の要件の変更のための少なくともコードの破損で、「良い」OO設計が変更の下に強固であるということだと思います。あなたはすべての通常の規則を考慮した場合、それらはすべて同じ結論に傾向があります。

難易度はあなたが文脈のないデザインの「良さ」を評価することができないということです。それは、私は信じて、任意のモジュール化のために、すべてのクラスがそれぞれの方法に触れたことが原因、破損を最大化する要件の変化が存在する定理です。

あなたはそれについて厳格になりたい場合は、

、あなたは「変更の例」のコレクションを開発することができますし、最も高い確率の変更のための破損を最小限に抑えるように、確率の順序でそれらを注文します。

算術、たとえば、の実装は、非常に稀にしか変化しない一方で、物事がビジネスルールとビジネス・プロセスを変更する傾向がある、変更する傾向があり、デバイス固有またはプラットフォーム固有:

は、ほとんどのケースでは、しかし、いくつかのよく発達した直感は多くのことができます。 (ない、ご想像の通り、決して。例えば、またはプラットフォームでサポートされているBCD演算を利用することができない場合があり、業務システムを考えてみましょう。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top