2012-03-25 4 views
5

Javaの合成と集約コードを特定する方法を知りたい。私はC++のコードを持っていますが、Javaで書く方法は分かりません。ポインタJavaで合成と集計を書く方法

class A {}; 
class B 
{ 
A* pointer_to_A; 
B(A anA){ 
pointer_to_A = &anA; 
} 

経由

作曲

class A {}; 
class B { A composited_A; }; 

集約は、誰もが、両方がJAVAで作業しているかを教えてくださいすることができます。 (私は組成と集計の意味を知っています) };

答えて

8

のJava自体は、単に組成と集合の区別がありません。所有権を明示的に指定する必要がある場合は、他の手段(通常は単にクラスのインスタンスに格納される新しいオブジェクトを作成するだけです)で指定する必要があります。

JavaにはGCがあるので、メモリの所有権はまったく表現する必要はありません。メモリはGCだけが所有し、管理します。もちろん、他のリソースについても同じことは当てはまりません。ここでもあなたはオーナーシップを表現したいかもしれません。

1

Javaでは、オブジェクトはポインタによってのみ参照されます。これは、タイプAのフィールドが実際にAオブジェクトへの参照であることを意味します。また、そのフィールドは常にNULLポインタとして開始され、明示的にそれをnew A()などに割り当てる必要があります。

編集:

class B { 
    A a; 

    B(A a) { 
     this.a = a; 
    } 

    B() { 
     this(new A()); 
    } 
} 
+0

ありがとうございます。しかし、あなたはJavaコードの例を提供することができます。 – Mifas

+0

ありがとうございます。この集合体ですか? – Mifas

+0

これは 'a'の使い方によって異なります。通常、意図が構図の場合は、 'a'を' final'にして変更しないようにしてから、コンストラクタでnull以外の値が割り当てられていることを確認します。意図が集約の場合は、 'a 'を変更する' setA() 'メソッドを提供することができます。 –

-1

これは、Javaコードで作曲と集約を表現する最善の方法だと思います。

作曲

public class Person 
{ 
    private final Name name; 

    public Person (String fName, String lName) 
    { 
     name = new Name(fName, lName); 
    } 

    //... 
} 

集約

public class Person 
{ 
    private Costume currentClothes; 

    public void setClothes(Costume clothes) 
    { 
     currentClothes = clothes; 
    } 

    //... 
} 

Source

関連する問題