Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум по объектно-ориентированному программированию..pdf
Скачиваний:
17
Добавлен:
05.02.2023
Размер:
3.39 Mб
Скачать

53

2.2 Агрегация

Агрегация являются частными случаями ассоциации. Это более конкретизированные отношения между объектами.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Отношение между классами типа «содержит» или «состоит

из» называется агрегацией (aggregation) или включением.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Например, «Факультет» входит в состав структуры «Института» (рис. 2.5). При агрегации объекты также имеют свой жизненный цикл, однако ограничены отношением принадлежности «has-a», то есть отношение «часть – целое» между двумя объектами.

Институт

 

 

Факультет

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 2.5 – Пример агрегации

Агрегация изображается линией с ромбиком на стороне того класса, который выступает в качестве владельца, или контейнера. Необязательное название отношения записывается посередине линии.

Число объектов, участвующих в отношении, записывается рядом с именем роли. Запись «0..n» означает «от ноля до бесконечности».

Приняты следующие обозначения:

«1..n» – от единицы до бесконечности;

«0» – ноль;

«1» – один;

«n» – фиксированное количество;

«0..1» – ноль или один.

2.3Композиция

Композиция – еще более «жесткое» отношение, когда объект не только является частью другого объекта, но и вообще не может принадлежат еще кому-то. · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Композиция (Composition) – разновидность жесткой взаимо-

связи между объектами, составляющими класс. Когда объект уничтожается, объекты, составляющие его, также уничтожаются.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

 

 

54

 

 

Пример композиции –

отношения объектов «Институт» и «Здание»

(рис. 2.6).

 

 

 

 

 

 

 

 

 

 

 

 

 

Институт

 

 

 

Здание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 2.6 – Пример композиции

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Разница между композицией и агрегацией заключается в том, что в случае композиции целое явно контролирует время жизни своей составной части (часть не существует без целого), а в случае агрегации целое хоть и содержит свою составную часть, время их жизни не связано (например, составная часть передается через параметры конструктора). Пример агрегации: Студент входит в Группу любителей физики. Пример композиции: Машина и Двигатель. Хотя двигатель может быть и без машины, но он вряд ли сможет быть в двух или трех машинах одновременно, в отличие от студента, который может входить и в другие группы тоже.

·· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

2.4Наследование

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Наследование (inheritance) – это отношение между классами,

при котором класс использует структуру или поведение другого (одиночное наследование) или других (множественное наследование) классов.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

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

(рис. 2.7).

Использование наследования способствует уменьшению количества кода, написанного для описания схожих сущностей, а также способствует написанию более эффективного и гибкого кода.

55

Person

+name : string

+age : int = 0

Student

+ grades : list

Professor

+ listOfStudents : list

Рис. 2.7 – Пример наследования

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Подкласс наследует все переменные и методы из суперкласса, включая своего ближайшего родителя, так же как и всех остальных предков, за исключением переменных и методов с модификатором private. Важно заметить, что подкласс не является подмножеством суперкласса. Наоборот, подкласс является «супермножеством» суперкласса. Это происходит потому, что подкласс наследует все поля и методы суперкласса и, кроме того, расширяет суперкласс, предоставляя дополнительные поля и методы.

·· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

·· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Контрольные вопросы по главе 2

·· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

1.Чем отличается отношение композиции от ассоциации?

2.Что такое ассоциация?

3.Что такое композиция?

4.Что такое агрегация?

5.Как в языке Java поддерживается множественное наследование?