4

私は少し混乱していAssociation, Aggregation and Compositionます。たくさんのウェブサイトやフォーラムがこのトピックについて議論していますが、それらのいくつかを読んだ後、私はもっと混乱しました。

以下が正しいかどうか知りたい:

1.)集約-全体が破壊された場合に存在します。たとえば、は、のEngine有無にかかわらず存在する可能性がありCarます。

2.)構成-オブジェクトが破壊された場合は存在しません。たとえば、Roomはなしでは存在できませんHouse

3.)関連付け-どのような場合にこれを使用すべきかわかりません。誰かがこれについてコメントできますか?

Aggregation、COmposition、Association用のJavaコードの記述に関しては

4.)集約

Class Car {

    private Engine engine;

    public void setEngine(Engine engine){
     this.engine=engine;
    }  

    public Engine getEngine(){
     return engine;
    }
}

アグリゲーションアソシエーションの場合は、accessors and mutators定義する必要があると思います。これは正しいです ?

私のアグリゲーションの定義によると、Carオブジェクトが破壊された場合、Engineにアクセスできると述べました。しかし、私は上記のコードでそのハプニングを見ていません。Carオブジェクトが破壊された場合、のようなエンジンにアクセスする方法はありませんcar.getEngine()。では、これはどのように起こりますか?

構成

Public House {
   private Room room;
   Public House (){
      room = new Room (int noRooms, String nameOfHouse);

   }
}

C0mpositionもしそうなら、機能はないはずだと思いaccessor mutatorます。オブジェクトRoomはコンストラクター内でのみ作成する必要があります。roomオブジェクトを保持するインスタンスメソッドはPrivate?私は正しいですか?

注:もう一度、私はグーグルで疑問を解消するために多くのWebサイト/フォーラムにアクセスしました。同様の質問が多くのフォーラムに投稿されましたが、それでも私はこれについてもっと混乱しました。誰かが私の疑問を解決するのを手伝ってくれませんか。ありがとうございました!

4

4 に答える 4

2

アソシエーションのタイプは、それを実装する方法にほとんど影響を与えません。それが集合体または構成であるという事実は、意味上の違いにすぎません。

オブジェクトが一部のデータベースに永続化されている場合、違いが現れます。この場合、コンテナオブジェクトがデータベースから削除されると、関連付けのタイプに応じて、含まれているオブジェクトも削除されるかどうかが決まります。

于 2012-11-26T18:53:44.670 に答える
1

アグリゲーションの関連付けを定義するために、別の例を取り上げます... 個人と会社...

人も会社も別の存在ですが、人は会社で働くことができ、従業員と呼ばれます。だから会社は滅びても人は滅びない…

    public class Example {

    public static void main(String[] args) {
        Person p1 = new Person("Vishal");
        Company abc = new Company(p1);
    }


}

class Person{
    String name;
    public Person(String name) {
        this.name = name;
    }
}

class Company{
    Person employee;
    public Company(Person p1) {
        employee = p1;
    }
}

会社と人の実際の定義には踏み込みませんでしたが、今ならわかると思います。

一方、構成の関連付けは、会社と部門の間の関連付けです。会社が滅びるやいなや、その部門は意味をなさないので、滅びなければならない...

構成の関連付けの別の例は、注文と注文のさまざまなアイテムです。オンライン ストアから数冊の本 (3 冊) を注文します。この場合、注文をキャンセルする場合、3 つの注文明細 (アイテム) をキャンセルする必要があります。したがって、注文明細の存在は注文のみに依存します。

マネージャーは、スワイプ カードを使用して XYZ 施設に入る。マネージャー オブジェクトとスワイプ カード オブジェクトは相互に使用されますが、それぞれのオブジェクトの有効期間があります。言い換えれば、それらは互いに存在しなくても存在できます。この関係で最も重要な点は、所有者が 1 人ではないということです。

集約では、あるオブジェクトが別のオブジェクトを所有しています...

これは、これら 3 つの概念に関する素晴らしいリンクです...関連付けについては、2 番目の要件を確認できます... http://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit

于 2012-11-26T19:28:59.680 に答える
0

アソシエーションに使用できるすべての Java コードを網羅するのは難しい問題です。Java の一種である EclipseUML Omondo を UML バイブルにダウンロードすることをお勧めします。このツールは、UML から Java へのマッピング専用です。MDD はありませんが、ライブ同期です。Yoiu は、クラス図から取得したコードを確認できます。

コードはグラフィカル クラス ダイアグラムからライブ同期されるため、可能なすべての Java コードをカバーするために、何度でも再生およびやり直すことができます。

30 日間の評価コピーがまだあり、最新のリリースが有料の顧客のみに予約されている場合でも、Java コードがどうあるべきかを確認するのに十分な時間を与えてくれます。

于 2012-11-27T10:32:12.587 に答える