99.14K
Категория: ПрограммированиеПрограммирование

Отношения между классами в С++: композиция и агрегация. (Лекция 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.

Пример: точки и треугольники на
плоскости (разбор исходного кода
приложения)
English     Русский Правила