На этом шаге рассмотрим пример агрегации.
Если иерархии "общее/частное" определяют отношение "обобщение/специализация", то иерархии "целое/часть" описывают отношения агрегации. Рассмотрим, например, абстракцию огорода. Можно утверждать, что огород — это совокупность растений и план их выращивания. Иначе говоря, растения и план выращивания — это части огорода. Это отношение "является частью" называется агрегацией. Агрегация есть во всех объектно-ориентированных проектах и языках программирования. Действительно, любой язык программирования, имеющий структуры, подобные записям, поддерживает агрегацию. Однако в сочетании с наследованием агрегация создает мощный инструмент: она позволяет физически объединить логически связанные структуры, а наследование — без труда повторно использовать эти общие группы в разных абстракциях.
Анализируя иерархии, подобные рассмотренным ранее, часто говорят об уровнях абстракции, концепцию которых впервые предложил Дейкстра. В терминах иерархии "общее/частное" абстракция верхнего уровня является обобщенной, а абстракция нижнего уровня — специализированной.
Следовательно, можно сказать, что класс ЦВЕТОК (Flower) относится к более высокому уровню абстракций, чем класс РАСТЕНИЕ (Plant). В терминах иерархии "целое/часть" класс относится к более высокому уровню абстракции по сравнению с любыми классами, входящими в его реализацию. Таким образом, класс ОГОРОД (Garden) относится к более высокому уровню абстракции, чем класс РАСТЕНИЕ (Plant), на основе которого он создается.
Кроме того, агрегация поднимает проблему владения. Абстракция огорода допускает, что на огороде одновременно растет много растений, но вследствие замены одного растения другим огород не становится другим огородом, а уничтожение огорода не обязательно означает уничтожение всех растений (ведь их можно пересадить в другое место). Иначе говоря, жизненные циклы огорода и растений не зависят друг от друга. И наоборот, проектное решение предусматривает, что объект ПЛАН ВЫРАЩИВАНИЯ_РАСТЕНИЙ (GrowingPlan) неразрывно связан с объектом ОГОРОД (Garden) и не существует независимо от него. Следовательно, план выращивания может храниться в каждом экземпляре класса ОГОРОД (Garden) и уничтожается вместе с ним.
На следующем шаге рассмотрим контроль типов.