合成(Composition)

合成は強い集約関係を表す.部分のオブジェクトが全体のオブジェクトに依存するので,全体がなくなると,部分のオブジェクトもなくなってしまう.

「合成」の関係は,Javaのコードにおいては,クラスのフィールドとして宣言されることで関係づけられる.「関連」と「集約」と「合成」の中では,「集約」よりも結びつきが強く,全体のクラスがなくなると,部分のクラスも存在しないつながりを持つ.「合成」は「集約」クラスのサブクラスとなる. すなわち,部分の一部を構成することを示す「集約」クラスの中の一部として,より結びつきの強いサブクラスとして「合成」クラスを成している.

オブジェクトの合成をオブジェクトコンポジションと呼ぶことがある.

public class NotePC
{
    LCD lcd;
    TouchPad touchpad;
    KeyboardParts keyboardparts;
    NotePC()
    {
        lcd = new LCD();
        touchpad = new TouchPad();
        keyboardparts = new KeyboardParts();
    }
    public void initialize()
    {
        lcd.check();
        touchpad.check();
        keyboardparts.check();
    }
}
public class LCD
{
    private boolean status;
    LCD()
    {
        status = true;
    }
    public void check()
    {
        if(status)
        {
            System.out.println("LCD status Success");
        }
        else
        {
            System.out.println("LCD status Fail");
        }
    }
}
public class TouchPad
{
    private boolean status;
    public TouchPad()
    {
        status = true;
    }
    public void check()
    {
        if(status)
        {
            System.out.println("TouchPad status Success");
        }
        else
        {
            System.out.println("TouchPad status Fail");
        }
    }
}
public class KeyboardParts
{
    private boolean status;
    KeyboardParts()
    {
        status = true;
    }
    public void check()
    {
        if(status)
        {
            System.out.println("KeybordParts status Success");
        }
        else
        {
            System.out.println("KeybordParts status Fail");
        }
    }
}
public class Main
{
    public static void main(String args[])
    {
        System.out.println("ノートPCを使うよ");
        NotePC dynobook = new NotePC();
        System.out.println("立ち上げるよ");//
        dynobook.initialize();
    }
}

実行した結果は以下のようになる.

ノートPCを使うよ
立ち上げるよ
LCD status Success
TouchPad status Success
KeybordParts status Success