Агрегирование (программирование)

Поделись знанием:
Перейти к: навигация, поиск
К:Википедия:Статьи без источников (тип: не указан)

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

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

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



Пример

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

Агрегация

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

class Professor;
 
class Department
{
  private:
    Professor* members[5];  // Aggregation, т.к. нет оператора delete 
};
class Ehe // Пример агрегации
{
private:
    Person& _partner1; // Enthaltener Teil.  // Aggregation
    Person& _partner2; // Enthaltener Teil.  // Aggregation
 
public:
    // Конструктор
    Ehe (Person& partner1, Person& partner2)
        : _partner1(partner1), _partner2(partner2)
    { }
};

Композиция

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

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

class Automobile
{
  private:
    Carburetor* itsCarb;  
  public:   
    Automobile() {itsCarb=new Carburetor();}
    virtual ~Automobile() {delete itsCarb;} // Composition, т.к. объект  itsCarb  будет удалён 
};


Напишите отзыв о статье "Агрегирование (программирование)"

Отрывок, характеризующий Агрегирование (программирование)

– Лепешки французские, – сказал Жерков.
– Этим то бьют, значит? – спросил аудитор. – Страсть то какая!
И он, казалось, распускался весь от удовольствия. Едва он договорил, как опять раздался неожиданно страшный свист, вдруг прекратившийся ударом во что то жидкое, и ш ш ш шлеп – казак, ехавший несколько правее и сзади аудитора, с лошадью рухнулся на землю. Жерков и дежурный штаб офицер пригнулись к седлам и прочь поворотили лошадей. Аудитор остановился против казака, со внимательным любопытством рассматривая его. Казак был мертв, лошадь еще билась.
Князь Багратион, прищурившись, оглянулся и, увидав причину происшедшего замешательства, равнодушно отвернулся, как будто говоря: стоит ли глупостями заниматься! Он остановил лошадь, с приемом хорошего ездока, несколько перегнулся и выправил зацепившуюся за бурку шпагу. Шпага была старинная, не такая, какие носились теперь. Князь Андрей вспомнил рассказ о том, как Суворов в Италии подарил свою шпагу Багратиону, и ему в эту минуту особенно приятно было это воспоминание. Они подъехали к той самой батарее, у которой стоял Болконский, когда рассматривал поле сражения.
– Чья рота? – спросил князь Багратион у фейерверкера, стоявшего у ящиков.
Он спрашивал: чья рота? а в сущности он спрашивал: уж не робеете ли вы тут? И фейерверкер понял это.
– Капитана Тушина, ваше превосходительство, – вытягиваясь, закричал веселым голосом рыжий, с покрытым веснушками лицом, фейерверкер.
– Так, так, – проговорил Багратион, что то соображая, и мимо передков проехал к крайнему орудию.
В то время как он подъезжал, из орудия этого, оглушая его и свиту, зазвенел выстрел, и в дыму, вдруг окружившем орудие, видны были артиллеристы, подхватившие пушку и, торопливо напрягаясь, накатывавшие ее на прежнее место. Широкоплечий, огромный солдат 1 й с банником, широко расставив ноги, отскочил к колесу. 2 й трясущейся рукой клал заряд в дуло. Небольшой сутуловатый человек, офицер Тушин, спотыкнувшись на хобот, выбежал вперед, не замечая генерала и выглядывая из под маленькой ручки.
– Еще две линии прибавь, как раз так будет, – закричал он тоненьким голоском, которому он старался придать молодцоватость, не шедшую к его фигуре. – Второе! – пропищал он. – Круши, Медведев!
Багратион окликнул офицера, и Тушин, робким и неловким движением, совсем не так, как салютуют военные, а так, как благословляют священники, приложив три пальца к козырьку, подошел к генералу. Хотя орудия Тушина были назначены для того, чтоб обстреливать лощину, он стрелял брандскугелями по видневшейся впереди деревне Шенграбен, перед которой выдвигались большие массы французов.