Розділ №10. Підсумковий тест

  Юрій  | 

  Оновл. 21 Лют 2021  | 

 98

У цьому розділі ми розглянули типи відносин між двома об’єктами в мові C++.

Теорія

Процес побудови складних об’єктів з простих називається композицією об’єкта. Існує два підтипи композиції об’єктів: композиція і агрегація.

У композиції типом відносин між членом і класом є “частина чогось” (член є “частиною” класу). У композиції клас керує існуванням членів. Для реалізації композиції частини і об’єкт повинні відповідати наступним правилам:

   Частина (член) є частиною об’єкту (класу).

   Частина (член) може належати тільки одному об’єкту (класу) за раз.

   Існування частини (члена) керується об’єктом (класом).

   Частина (член) не знає про існування об’єкту (класу).

Реалізація композиції зазвичай відбувається через змінні-члени або через вказівники, коли клас управляє пам’яттю самостійно (виділення/звільнення). Якщо ви можете реалізувати композицію в своєму класі, то ви повинні реалізувати композицію в своєму класі.

В агрегації типом відносин між членом і класом є “має” (клас “має” члени). У відносинах агрегації клас не керує існуванням членів. Для реалізації агрегації частини і об’єкт повинні відповідати наступним правилам:

   Частина (член) є частиною об’єкту (класу).

   Частина (член) може належати більше ніж одному об’єкту (класу) за раз.

   Існування частини (члену) не керується об’єктом (класом).

   Частина (член) не знає про існування об’єкту (класу).

Агрегації зазвичай реалізуються за допомогою вказівників або посилань.

В асоціації об’єкти не пов’язані між собою, немає відносин типу «частин-цілого». Для реалізації асоціації об’єкти повинні відповідати наступним правилам:

   Перший об’єкт (член) не зв’язаний з другим об’єктом (класом).

   Перший об’єкт (член) може належати відразу кільком об’єктам (класам) за раз.

   Існування першого об’єкту (члену) не керується другим об’єктом (класом).

   Перший об’єкт (член) може знати або не знати про існування другого об’єкта (класа).

Асоціації можуть бути реалізовані як через вказівники, так і через посилання.

В залежності один клас використовує інший клас для виконання певного завдання. Використовуваний клас зазвичай не є членом головного класу, а тимчасово створюється, використовується, а потім знищується або передається в метод головного класу ззовні.

Контейнерні класи — це класи, призначені для зберігання і організації декількох об’єктів певного типу даних. Контейнер-значення — це композиція, в якій зберігаються копії об’єктів контейнера. Контейнер-посилання — це агрегація, в якій зберігаються вказівники або посилання на об’єкти, які знаходяться поза тілом контейнера.

Список ініціалізації std::initializer_list може використовуватися для реалізації конструкторів, перевантаження оператора присвоювання і інших функцій, які приймають список ініціалізації в якості параметра. std::initailizer_list знаходиться в заголовку initializer_list.

Властивості Композиція Агрегація Асоціація Залежність
Відносини “Частин-Ціле” “Частин-Ціле” Об’єкти не зв’язані між собою Об’єкти не зв’язані між собою
Члени можуть належати відразу кільком класам? Ні Так Так Так
Клас керує існуванням членів? Так Ні Ні Так
Вид відносин Односпрямовані Односпрямовані Односпрямовані/Двонаправлені Односпрямовані
Тип відносин “Частина чогось” “Має” “Використовує” “Залежить від”

Тест

Цей розділ простіший і абстрактніший за попередні розділи, тому тест буде лаконічним.

Завдання №1

Які типи відносин (композиція, агрегація, асоціація або залежність) описуються нижче?

a) Клас Тварина, який містить Тип Тварини і Ім’я.

Відповідь №1.a)

Композиція. Тип Тварини и Ім’я не використовуються поза класом Тварина.

b) Клас TextEditor з методом Save(), який приймає об’єкт file. Метод Save() записує вміст редактора на диск.

Відповідь №1.b)

Залежність. Клас TextEditor використовує об’єкт file для виконання певного завдання — збереження об’єкту на диск.

c) Клас Авантюрист, який може зберігати різні Предмети: мечі, списи, зілля або книги заклинань. Ці Предмети можуть бути відкинуті і підняті іншими Авантюристами.

Відповідь №1.c)

Агрегація. Коли Предмети пов’язані з Авантюристом, то Авантюрист «має» ці предмети. Меч, який використовується Авантюристом, не може одночасно бути використаний іншим Авантюристом. Але Авантюрист не керує існуванням самих Предметів.

d) Програміст використовує Комп’ютер для перегляду відео з котами в Інтернеті.

Відповідь №1.d)

Асоціація. Програміст і Комп’ютер не пов’язані між собою, за винятком випадків, коли Програміст використовує Комп’ютер для перегляду відео з котами.

e) Клас Комп’ютер, який містить клас Процесор. Процесор можна вийняти з Комп’ютера і подивитися.

Відповідь №1.e)

Агрегація. Комп’ютер має Процесор, але не керує його існуванням.

Завдання №2

Якщо ви можете створити клас, використовуючи композицію, агрегацію, асоціацію або залежність, то що ви оберете?

Відповідь №2

Композицію.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (1 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *