Page 92 - 4190
P. 92
мість екземпляра класу Rectangle екземпляр - класу Circle; передбача-
ється, що обидва ці класи мають однаковий тип.
У делегуванні є і недолік, властивий і іншим підходам, що засто-
совуються для підвищення гнучкості завдяки композиції об’єктів.
Полягає він в тому, що динамічну, у більшій мірі параметризовану
програму важче зрозуміти, ніж статистичну. При цьому, звичайно є і
деяка втрата машинної продуктивності, але ефективність роботи про-
граміста є більш суттєвою. Делегування можна вважати добрим ви-
бором тільки тоді, коли воно дозволяє досягнути спрощення, а не
ускладнення дизайну. Важко сформулювати правила, якими необ-
хідно користуватися при делегуванні, оскільки ефективність його ви-
користання залежить від контексту та особистого досвіду. Краще
всього делегування використовувати при стандартних патернах.
Делегування використовується в деяких патернах проектування:
стану, стратегія, відвідувач. У першому користувач делегує запит
об’єкта, що представляє його поточний стан. У патерні стратегія
обробка запиту делегується об’єкту, який представляє стратегію його
виконання. У об’єкта може бути тільки один стан, але багато страте-
гій для виконання запитів. Призначення обох патернів – змінити по-
ведінку об’єкта завдяки об’єктам, яким делегуються запити. У патер-
ні відвідувач операція, яка повинна бути виконана над кожним еле-
ментом складового об’єкта, завжди делегується відвідувачу.
В інших патернах делегування використовується не так інтенсив-
но. Патерн посередник вводить об’єкт, здійснює посередництво при
взаємодії інших об’єктів. Інколи об’єкт посередник здійснює опера-
ції, переадресовуючи їх іншим об’єктам, в інших випадках він пере-
дає посилання на самого себе, використовуючи тим самим делегу-
вання.
Патерн ланцюжок обов’язків обробляє запити, переправляючи іх
від одного об’єкта до іншого по ланцюжку. Інколи разом з запитом
передається посилання на початковий об’єкт, що отримав запит, і в
даному випадку знову маємо справу з делегуванням.
Патерн міст визначає абстракцію від її реалізації. Якщо між абс-
тракцією і її конкретною реалізацією є суттєва подібність, то абстра-
кція може просто делегувати операції своєї реалізації. Делегування
показує, що успадкування як механізм повторного завжди може замі-
нити композицією.
Успадкування і параметризовані типи. Ще один (хоча і не точно
об’єктно-орієнтований) метод повторного використання, що має фун-
92