Урок №158. Залежність

  Юрій  | 

  Оновл. 26 Вер 2021  | 

 148

Ми вже встигли розглянути 3 типи відносин в мові C++: композицію, агрегацію та асоціацію. Найпростіший тип відносин — залежність, ми приберегли наостанок.

У повсякденному житті ми використовуємо термін «залежність», щоб вказати, що один об’єкт залежить від іншого об’єкта для виконання певного завдання. Наприклад, якщо ви зламаєте ногу, то залежатимете від милиць, щоб мати можливість пересуватися (але не навпаки). Квіткові рослини залежать від бджіл, які запилюють їх, щоб ті мали можливість розмножуватися (але не навпаки).

Залежність виникає, коли один об’єкт звертається до функціоналу іншого об’єкта для виконання певного завдання. Ці відносини є слабкішими за відносини в асоціації, але все ж будь-яка зміна об’єкту, який надає свій функціонал залежному об’єкту, може стати причиною збою роботи залежного об’єкта. Залежність завжди є односпрямованою.

Хорошим прикладом залежності, яку ви вже бачили багато разів, є відносини класів і std::cout (типу std::ostream). Класи використовують std::cout для виведення будь-чого в консоль, але не навпаки. Наприклад:

Результат виконання програми:

Point(5, 6, 7)

Тут клас Point не має прямого відношення до std::cout, але має залежність від std::cout, тому що функція перевантаження оператора << використовує std::cout для виводу об’єктів класу Point на екран.

Залежність vs. Асоціація

Дуже часто виникає плутанина: “А чим залежність відрізняється від асоціації?”.

У мові C++ асоціація — це відносини між двома класами на рівні класів. Тобто, перший клас зберігає прямий або опосередкований зв’язок з другим класом через змінну-член. Наприклад, в класі Лікар є масив вказівників на об’єкти класу Пацієнт у вигляді змінної-члена. Ви завжди можете запитати у Лікаря, хто його Пацієнти. Клас Водій містить Ідентифікатор Автомобіля у вигляді цілочисельної змінної-члена. Водій завжди знає до чого прив’язаний Автомобіль, і як отримати до нього доступ.

Залежності зазвичай не представлені на рівні класів, тобто залежний об’єкт не пов’язаний з другим об’єктом через змінну-член. Залежний об’єкт зазвичай створюється при необхідності (наприклад, відкриття файлу для запису даних) або передається в функцію в якості параметру (наприклад, як std::ostream, який бере участь в перевантаженні оператора <<, у вищенаведеній програмі).

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

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

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

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