Понятие агрегации и ее разновидности
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

С точки зрения моделирования предметной области, агрегация предназначена для моделирования сложной системы, которая включает в себя более простые подсистемы или неделимые части. Другими словами, агрегация раскрывает организацию системы по принципу «целое à часть» и показывает, из каких частей состоит система и как они взаимосвязаны.

 

Две основных разновидности агрегации:

- собственно агрегация (агрегация)

Части представляют собой самостоятельные объекты, которые создаются независимо от целого и затем объединяются в единую систему. Уничтожение системы не сопровождается уничтожением частей. Они продолжают самостоятельное существование.

 


- композиция

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

 

 


Деление системы на составные части представляет собой иерархию: на верхнем уровне – целое, на нижних – части.

 

 


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

Механизм реализации: полю класса-контейнера назначается тип класса-части.




Агрегация на основе классов

При реализации агрегации на основе классов необходимо исходить из того факта, что класс относится к ссылочным типам, т.е. имя объекта – ссылка на область памяти, где хранится объект. Следовательно типичная схема будет иметь вид:

 

Изменение состояния объекта-части вне рамок объекта-контейнера немедленно изменяет состояние контейнера.

Базовый пример

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

   

class Корпус

{

   private string тип; // тип корпуса

   private double цена;

 

   public string Тип

   {

       set { тип = value; }

       get { return тип; }

   }

 

   private double Цена

   {

       set { цена = value; }

       get { return цена; }

   }

 

}

 

class Лампочка

{

   private double мощность;

   private double цена;

 

   public double Мощность

   {

       set { мощность = value; }

       get { return мощность; }

   }

 

   public double Цена

   {

       set { цена = value; }

       get { return цена; }

   }

}

 

class Прибор

{

   private Корпус кор;

   private Лампочка лам;

   private string состояние; //включено или выключено

 

   //конструктор

   public Прибор(Корпус кор, Лампочка лам, string состояние)

   {

       this.кор = кор;

       this.лам = лам;

       this.состояние = состояние;

   }

 

   //свойство

   public string Состояние

   {

       set { Состояние = value; }

   }

 

   //вывести данные

   public void Показать()

   {

       Console.WriteLine("{0} {1} {2} {3} {4} {5}", состояние, кор.Тип, кор.Цена, лам.Цена, лам.Мощность);

   }

  }

 

В основной программе соберем осветительный прибор из корпуса типа «Тюльпан» ценой 800 рублей и лампочки мощностью 60 Вт, ценой 30 рублей.

class Корпус

{

   private string тип; // тип корпуса

   private double цена;

 

   public string Тип

   {

       set { тип = value; }

       get { return тип; }

   }

 

   public double Цена

   {

       set { цена = value; }

       get { return цена; }

   }

 

}

 

class Лампочка

{

   private double мощность;

   private double цена;

 

   public double Мощность

   {

       set { мощность = value; }

       get { return мощность; }

   }

 

   public double Цена

   {

       set { цена = value; }

       get { return цена; }

   }

}

 

class Прибор

{

   private Корпус кор;

   private Лампочка лам;

   private string состояние; //включено или выключено

 

   //конструктор

   public Прибор(Корпус кор, Лампочка лам, string состояние)

   {

       this.кор = кор;

       this.лам = лам;

       this.состояние = состояние;

   }

 

   //свойство

   public string Состояние

   {

       set { состояние = value; }

   }

 

   //вывести данные

   public void Показать()

   {

       Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}", состояние, кор.Тип, кор.Цена, лам.Цена, лам.Мощность);

   }

}

class Program

{

   static void Main()

   {//1. объявляем ссылки

       Корпус к;

       Лампочка л;

       Прибор п;

 

       //2. создаем объкты

       к = new Корпус();

       к.Тип = "Тюльпан";

       к.Цена = 800.0;

 

       л = new Лампочка();

       л.Мощность = 60.0;

       л.Цена = 30.0;

 

       //3., 4. контейнер

       п = new Прибор(к, л, "Включено");

       п.Показать();

 

       //меняем лампочку

       л.Мощность = 200.0;

       п.Показать();

   }


Дата: 2019-02-02, просмотров: 257.