Page 90 - 4190
P. 90

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

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

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

            підкласів. Оскільки підкласу доступні деталі реалізації батьківського
            класу, то часто говорять, що успадкування порушує інкапсуляцію. Ре-
            алізації підкласу і батьківського класу настільки тісно пов’язані, що

            будь-які зміни останнього вимагають зміни і реалізацію підкласу.  За-
            лежність від реалізації може привести до виникнення проблеми при
            спробі повторного використання підкласу. Якщо хоча б один аспект

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

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

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

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

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

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

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

                                                              90
   85   86   87   88   89   90   91   92   93   94   95