Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Понятие агрегации и ее разновидности



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

 

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

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

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

 
 

 


- композиция

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

 
 

 

 


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

 
 

 

 


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

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

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

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

 
 

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

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

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

 

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;

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

}

 


Поделиться:



Последнее изменение этой страницы: 2017-04-12; Просмотров: 382; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.015 с.)
Главная | Случайная страница | Обратная связь