Page 90 - 4190
P. 90
І в успадкування, і в композиції є переваги і недоліки. Успадку-
вання класу визначається статично на етапі компіляції, його простіше
використовувати, оскільки воно напряму підтримується мовою про-
грамування. У випадку успадкування класів спрощується також зада-
ча модифікації існуючої реалізації. Якщо підклас замінює лише деякі
операції, то можуть виявитися зачепленими й інші успадковані опе-
рації, оскільки не виключено, що вони викликають заміщення.
Але в успадкування класу є і недоліки. По-перше, змінити успад-
ковану у батьків реалізацію під час виконання програми, тому що ус-
падкування зафіксоване на етапі компіляції. По-друге, батьківський
клас нерідко хоча б частково визначає фізичне представлення свої
підкласів. Оскільки підкласу доступні деталі реалізації батьківського
класу, то часто говорять, що успадкування порушує інкапсуляцію. Ре-
алізації підкласу і батьківського класу настільки тісно пов’язані, що
будь-які зміни останнього вимагають зміни і реалізацію підкласу. За-
лежність від реалізації може привести до виникнення проблеми при
спробі повторного використання підкласу. Якщо хоча б один аспект
успадкованої реалізації не придатний для нової предметної області,
то прийдеться переписувати батьківський клас або замінювати його
чимось більше підходящим. Така залежність обмежує гнучкість і мо-
жливість повторного використання. Проблему можна вирішити, якщо
успадковувати тільки абстрактні класи, оскільки в них немає реалі-
зації або вона мінімальна.
Композиція об’єктів визначається динамічністю під час виконан-
ня задачі завдяки тому, що об’єкти отримують посилання на інші
об’єкти. Композицію можна застосовувати, якщо об’єкти дотриму-
ються інтерфейсів один одного. Для цього, в свою чергу, необхідно
детально проектувати інтерфейси, так щоб один об’єкт можна було
використовувати з широким спектром інших. Але і виграш великий.
Оскільки доступ до об’єктів здійснюється тільки через їх інтерфейси і
при цьому не порушується інкапсуляція. Під час виконання програми
будь-який об’єкт можна замінити іншим, тільки щоб він мав той са-
мий тип. Більше того, оскільки при реалізації об’єкта кодується перш
за все його інтерфейс, то залежність від реалізації різко понижується.
Композиція об’єктів впливає на дизайн системи і ще в одному ас-
пекті. Віддаючи перевагу композиції об’єктів, а не успадкуванню
класів, інкапсулюється кожний клас і йому дається можливість вико-
нувати тільки свою задачу. Класи та їх ієрархія залишаються невели-
кими, і ймовірність їх розростання до некерованих розмірів досить
90