3

「クラスは、引数として受け取るクラスのコントラクト、または使用する内部コントラクトについてのみ知っておくべきである」という行に沿って何かを述べているオブジェクト指向エンジニアリングの原則があります。

C++ での反例は次のとおりです。

Foo::bar( Baz* baz)
{
  baz()->blargh()->pants()->soil();  // this is bad, Foo knows about blarghs and pants
}

この原則に名前はありますか?また、上記の私の言い換えではなく、実際の原則が見られるとよいでしょう。

4

4 に答える 4

8

ジム・バーガーのおかげでデメテルの法則は次の ように述べています。

デメテルの法則 (LoD)、または最小知識の原則は、ソフトウェア、特にオブジェクト指向プログラムを開発するための設計ガイドラインです。このガイドラインは、1987 年末にノースイースタン大学で考案されたもので、「身近な友人とだけ話してください」と簡潔に要約できます。基本的な概念は、特定のオブジェクトが他のもの (サブコンポーネントを含む) の構造またはプロパティについて可能な限り想定しないようにすることです。
于 2008-11-18T01:42:15.217 に答える
0

それは(bazポインターの後の括弧のために)コンパイルされる場合とされない場合がありますが、あなたの例は私が考えることができる少なくとも1つの原則を破っています。それはデメテルの法則(倹約の法則とも呼ばれていると思います)を破っています。主な原則はここにあります: SOLID 原則

これらを除いて、あなたが説明しているものに特定の名前があるかどうかはわかりません. ウィキペディアでデメテルの法則を調べることができます。

于 2008-11-18T01:43:13.530 に答える
0

Robert Martin の SOLID の原則を見てください。具体的には、単一責任の原則を見てください。あなたの例の依存関係の複雑なチェーンは、SRP を壊しているように見えます。

カプセル化 -- それ自体 -- は原則ではありません。それは、さまざまな原則を達成するための一部です。継承、ポリモーフィズム、およびその他のよりあいまいな OO 機能に加えて。

于 2008-11-18T01:51:10.970 に答える
0

ここで、適切なカプセル化はカップリングを減らすのに役立つと言えます。これは、明白なものを除いて、まともなカプセル化の良い目標です。

于 2008-11-27T09:25:15.497 に答える