Агрегация на основе классов
При реализации агрегации на основе классов необходимо исходить из того факта, что класс относится к ссылочным типам, т.е. имя объекта – ссылка на область памяти, где хранится объект. Следовательно типичная схема будет иметь вид:
Изменение состояния объекта-части вне рамок объекта-контейнера немедленно изменяет состояние контейнера.
Базовый пример
Определить сущность «осветительный прибор», частями которого являются «корпус» и «лампочки». Осветительный прибор собирается из отдельно купленных частей и должен допускать их замену.
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-08; просмотров: 644;