関連(Association)

関連は,オブジェクトとつながりがあるゆえに何らかの属性を持つ関係にあるが,その属性がオブジェクトを定義づける一部とはならない関係を指す.

Javaのプログラムにおいては,クラスに定義される変数の一部として宣言されることで,関連付けられる.「関連」と「集約」と「合成」の中では,最も弱いつながりである.

クラスが関連することは,クラスを実線でつなぐことで表現できる.
ただし,その関連する方向を矢印で表わすことができる.矢印の方向を「誘導可能性」と呼び,関連の方向を意味する.以下のように,誘導可能性には,種類がある.

「誘導可能性」は,具体的には,フィールドに現れる.フィールドに持っていると,そのフィールドに対して,誘導可能性があるということになる.すなわち,フィールドに持つということは,その関連しているオブジェクトに何らかのアクセスがあるということを意味している.フィールドに持つオブジェクトが持つメソッドを実行することがあることが考えられる.

以下のクラス図では,StudentがBookを持つという関連がある.しかし,BookはStudentを定義づける一部ではない.すなわち,Studentの構成パーツとしてBookがあるほどの結びつきではないが,StudentがBookを持つことができるような関係を指す.

StudentはBookを持つことから「has-a」関係といえる.(Student has-a Book)

public class Student
{
    private Book book;
    public void buyBook(String title)
    {
        book = new Book(title);
    }
    public void printTitle()
    {
        System.out.println("「" + book.getTitle()+ "」を持っています");
    }
}
public class Book
{
    private String title;
    Book(String title)
    {
        this.title = title;
    }
    public String getTitle()
    {
        return title;
    }
}
public class Main
{
    public static void main(String args[])
    {
        Student fujita = new Student();
        fujita.buyBook("ライ麦畑で捕まえて");
        fujita.printTitle();
    }
}

実行すると,以下のような結果となる.

「ライ麦畑で捕まえて」を持っています.