Агрегирование (программирование) | это... Что такое Агрегирование (программирование)? (original) (raw)

Question book-4.svg В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.Эта отметка установлена 21 ноября 2011.

У этого термина существуют и другие значения, см. Агрегация.

В объектно-ориентированном программировании под агрегированием (также называемом композицией или включением) подразумевают методику создания нового класса из уже существующих классов путём включения, называемого также делегированием. Об агрегировании также часто говорят как об «отношении принадлежности» по принципу «у машины есть корпус, колёса и двигатель».

Вложенные объекты нового класса обычно объявляются закрытыми, что делает их недоступными для прикладных программистов, работающих с классом. С другой стороны, создатель класса может изменять эти объекты, не нарушая при этом работы существующего клиентского кода. Кроме того, замена вложенных объектов на стадии выполнения программы позволяет динамически изменять её поведение. Механизм наследования такой гибкостью не обладает, поскольку для производных классов устанавливаются ограничения, проверяемые на стадии компиляции.

На базе агрегирования реализуется методика делегирования, когда поставленная перед внешним объектом задача перепоручается внутреннему объекту, специализирующемуся на решении задач такого рода.

Пример

Aggregation-Composition3.png

В отличие от отношения композиции, здесь профессора остаются жить после разрушения университета, тогда как факультеты без университета погибают.

Агрегация

Агрегация (агрегация по ссылке) — отношение «часть-целое» между двумя равноправными объектами, когда один объект (контейнер) имеет ссылку на другой объект. Оба объекта могут существовать независимо: если контейнер будет уничтожен, то его содержимое — нет.

class Professor;

class Department { private: Professor* members[5]; };

Композиция

Композиция (агрегация по значению) — более строгий вариант агрегации, когда включаемый объект может существовать только как часть контейнера. Если контейнер будет уничтожен, то и включённый объект тоже будет уничтожен.

class Department;

class University { private: Department faculty[20]; };

// Composition class Automobile { private: Carburetor* itsCarb; public:
Automobile() {itsCarb=new Carburetor();} virtual ~Automobile() {delete itsCarb;} };