![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Понятие агрегации и ее разновидности ⇐ ПредыдущаяСтр 3 из 3
С точки зрения моделирования предметной области, агрегация предназначена для моделирования сложной системы, которая включает в себя более простые подсистемы или неделимые части. Другими словами, агрегация раскрывает организацию системы по принципу «целое à часть» и показывает, из каких частей состоит система и как они взаимосвязаны.
Две основных разновидности агрегации: - собственно агрегация (агрегация) Части представляют собой самостоятельные объекты, которые создаются независимо от целого и затем объединяются в единую систему. Уничтожение системы не сопровождается уничтожением частей. Они продолжают самостоятельное существование.
- композиция Части представляют собой объекты, которые создаются при создании системы. Вне рамок целого части самостоятельно не существуют, при уничтожении системы, части уничтожаются.
Деление системы на составные части представляет собой иерархию: на верхнем уровне – целое, на нижних – части.
С точки зрения технологии программирования, агрегация представляет собой реализацию идеи повторного использования кода. Код, реализующий класс-часть, в готовом виде, без изменений, может быть использован в классе-контейнере. Механизм реализации: полю класса-контейнера назначается тип класса-части. Агрегация на основе классов При реализации агрегации на основе классов необходимо исходить из того факта, что класс относится к ссылочным типам, т.е. имя объекта – ссылка на область памяти, где хранится объект. Следовательно типичная схема будет иметь вид:
Изменение состояния объекта-части вне рамок объекта-контейнера немедленно изменяет состояние контейнера.
Базовый пример Определить сущность «осветительный прибор», частями которого являются «корпус» и «лампочки». Осветительный прибор собирается из отдельно купленных частей и должен допускать их замену.
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; Просмотров: 407; Нарушение авторского права страницы