UMLのクラス図に出てくる「集約」の意味がこれまでよくわからなかったのですが、Java言語で学ぶデザインパターン入門の中で書かれている集約の説明がわかりやすかったのでメモしておきます。
集約とは
インスタンスを持っていれば、個数に関わらずその関係は集約です。配列を使っていても、java.util.Vectorクラスを使っていても、どのような実装であっても、インスタンスを持っていればその関係は集約です。
文字だけだとイメージしづらいかと思うので、クラス図とJavaのコードを用いて説明してみます。ちなみに、クラス図の白抜きのひし形付きの線が集約を表しています。
上の図は、カテゴリ(Category)、本(Book)、本棚(BookShelf)という3つのクラスの関係を表したものです。BookShelfクラスのbooksフィールドは、Bookクラスの配列になっています。つまり、BookShelfクラスのインスタンスはBookクラスのインスタンスを複数個持ちます。Bookクラスのcategoryフィールドは、Categoryクラス型になっているため、BookクラスのインスタンスはCategoryクラスのインスタンスを1個持ちます。
もっと噛み砕いていうと、本棚には本がいくつか入っていて、各本はカテゴリを1つ持っているという関係です。ここで改めて集約の説明を見てみると、集約の意味がしっくりくるかと思います。
インスタンスを持っていれば、個数に関わらずその関係は集約です。配列を使っていても、java.util.Vectorクラスを使っていても、どのような実装であっても、インスタンスを持っていればその関係は集約です。
まとめ
クラス図の集約をJavaで説明してみました。難しい概念は文字だけでなく図やコードを使って説明してもらえると理解が深まりますね。