0

集約と保持の違いがわかりません。たとえば、C ++とはどういう意味ですか?
クラスAのオブジェクトがクラスBのオブジェクトを保持(またはインスタンス化)するとき、それを使用していくつかの機能を単独で実行すると思います。
例えば:

class A {
 int state;
 public: 
  A(int s): state(s) {}
  int inc() { return state++; }
};
class B {
  int app;
  string s;
public:
  B(): app(0), s("") {}
  B(int A, const string& str): app(A), s(str) {}
  void f(int p);
  ~B() { app = 0; s = ""; }
};
void B::f(int p)
{
   A mA(p);
   app = mA.inc();
}

そして、クラスAのオブジェクトの集約は次のようになります。

class B{
 A t;
 //...
}

クラス間の関係の正確なそれぞれの種類が何であるかというオブジェクト指向言語の観点から明確な定義を見つけることができるウェブサイトまたは本の場所へのリンクを教えてください。

4

3 に答える 3

1

IMO、私が正しく理解していれば、構成と集約の定義を求めています。集約または保持は、エンティティのコレクションです。コンポジションにはより厳しい制約があります。学生に与えられる平均点について考えてみてください。平均を計算するとき、どの項目も除外することはできません。構成はこれに似ています。どのアイテムも見逃せません。一方、集約はより大まかに定義されています。

興味深い類推は、矢筒と車でいっぱいです。矢筒は矢の集合体であり、矢筒は矢がなくても存在できます。車はコンポジション(部品の合計)です。そして、車輪のない車はまだ車であると主張しないでください:)

参考文献:http ://www.bletchleypark.net/algorithms/software/oop.html

于 2008-12-15T18:13:08.843 に答える
1

別のクラスを保持するということは、クラスが親子関係を通じて別のクラスに関連付けられていることを意味します。たとえば、パスにはポイントのリストがあります。パスは、個々のポイントの親であるポイントのリストの親です。

集約とは、さまざまなクラスを取り、それらをインターフェイスの背後に配置して、1 つのクラスとして表示することを意味します。たとえば、FileDialog には、いくつかのボタン クラス、テキスト入力クラス、リストビュー/ツリービュー クラスなどがあります。しかし、システムの残りの部分には、アクティブ化するメソッド、おそらくデフォルトのファイル名を割り当てて残りを取得するメソッドがありました。

それが他のすべてのクラスで構成されているという事実は、それをファイルダイアログとして使用する他のクラスにとって重要ではありません。ただし、期待される動作を実行するためにすべてのクラスを集約することによって機能します。

于 2008-12-15T15:37:56.427 に答える
0

所有権と可視性が重要です。これらの関係にはさまざまな名前がありますが、次の 2 つの点を考慮する必要があります。

  • 親が死ぬとき、子供も死ぬべきであるなど、親は子供に対して厳密な所有権を持っていますか?

  • 子は親以外のエンティティから見えるか?

これらの質問への回答は、これらの関係を明確にするのに役立ちます。

于 2008-12-15T15:13:17.677 に答える