Similar presentations:
Отношения между классами в С++: композиция и агрегация. (Лекция 6)
1.
Лекция 6Отношения между
классами: композиция и
агрегация
2.
Отношения между классамиНекоторые понятия предметной области могут
находиться между собой в отношениях, которые
можно назвать отношениями «принадлежности».
Например
● автомобиль – кузов, колеса и двигатель
● человек – голова, руки, ноги и тело
● институт – кафедры
Этот вид отношений также иногда называют
отношением «целое – часть».
3.
Композиция классовКомпозиция (включение) – механизм создания
новых классов путем объединения нескольких
существующих классов в единое целое
Механизм композиции
В С++ композиция реализуется через включение
(вложение) объектов существующих классов
внутрь нового класса в качестве полей.
Новый класс называют агрегатом или
контейнером. Для обеспечения целостности
всех составляющих агрегата его компоненты
часто объявляются закрытыми (private).
4.
Пример: точка и треугольникclass point
{
private:
double x, y;
public:
point(double ax, double ay);
double get_x();
double get_y();
void display();
};
КОНТЕЙНЕР
class triangle
{
private:
КОМПОЗИЦИЯ
point v1, v2, v3;
public:
triangle(point p1, point p2, point p3);
point get_v(unsigned index);
void display();
};
5.
Использование класса-контейнера1) создаем объект класса
triangle t1;
// конструктор по умолчанию
point p1(1,3), p2(3,0), p3(8,2);
triangle t2(p1, p2, p3); // с параметрами
triangle t3(point(3,5), point(7,0), point(2,-1);
6.
2) вызываем методы и/или обращаемся к полямt1.display();
t2.get_v(1).display();
std::cout << t3.get_v(3).get_x();
7.
Unified Modeling Language (UML):изображение класса
Пример изображения класса с двумя полями и двумя методами
8.
Композиция на диаграмме классовДля изображения
композиции
используют
прямую линию с
закрашенным
ромбом на конце.
Ромб направлен в
сторону
контейнера.
9.
АгрегацияНаряду с композицией классов, в ООП часто
используется агрегация. Эти два понятия близки
друг к другу, различия связаны со способом
объединения существующих классов внутри
контейнера.
Для композиции характерно включение объектов
по значению, а для агрегации – по адресу или
class triangle
ссылке.
{
private:
point *v1, *v2, *v3;
public:
triangle(point *p1, point *p2, point *p3);
};
10.
Время жизни компонентов1) Композиция:
время жизни компонентов совпадает с временем
жизни контейнера
2) Агрегация:
время жизни компонентов может быть больше
времени жизни контейнера
triangle tp = new triangle;
...
...
delete tp;
11.
Агрегация на диаграмме классовДля изображения агрегации используют прямую линию
с полым ромбом на конце.
12.
Пример: точки и треугольники наплоскости (разбор исходного кода
приложения)