Page 92 - 4190
P. 92

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

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

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

            користання  залежить  від  контексту  та  особистого  досвіду.  Краще
            всього делегування використовувати при стандартних патернах.
                  Делегування використовується в деяких патернах проектування:

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

            виконання. У об’єкта може бути тільки один стан, але багато страте-
            гій для виконання запитів. Призначення обох патернів – змінити по-
            ведінку об’єкта завдяки об’єктам, яким делегуються запити. У патер-

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

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

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

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

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

                  Успадкування і параметризовані типи. Ще один (хоча і не точно
            об’єктно-орієнтований) метод повторного використання, що має фун-

                                                              92
   87   88   89   90   91   92   93   94   95   96   97