Методичні вказівки до виконання самостійних робіт з дисципліни: «проектний практикум»


Проектування проекту з використанням шаблону Adapter



Сторінка2/5
Дата конвертації16.03.2017
Розмір3.38 Mb.
ТипМетодичні вказівки
1   2   3   4   5
Проектування проекту з використанням шаблону Adapter

Найпростіший спосіб зрозуміти призначення шаблону Adapter - це розглянути його

застосування на прикладі. Припустимо, існують такі вимоги.

• Створити класи для представлення в системі точок, ліній і квадратів, кожен з яких матиме метод display (відобразити).

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

• Необхідно використовувати підпрограму або метод, написаний кимось іншим, оскільки в ньому реалізовані саме ті функції, які нам потрібні.

• При цьому включити готову підпрограму безпосередньо в створювану програму неможливо.

• Інтерфейс підпрограми або спосіб її виклику в коді не відповідають тим умовам, в яких вона буде використовуватися. Інакше кажучи, хоча в системі представлені точки, лінії і квадрати, нам потрібно, щоб все виглядало так, ніби в ній існують лише деякі

абстрактні фігури.

• Це дозволить об'єктам-клієнтам працювати з будь-якими типами об'єктів-даних одним і тим же чином, не беручи до уваги існуючі між ними відмінності (рис. 7.1).



• Крім того, з'являється можливість згодом додавати в систему нові види фігур, не вносячи жодних змін в ті об'єкти, які будуть їх використовувати.


Тут використовується принцип поліморфізму; тобто в системі присутні об'єкти-дані різних типів, але використовують їх об'єкти-клієнти повинні взаємодіяти з ними одним і тим же чином. У результаті об'єкт-клієнт може просто вказати об'єкту-даному (незалежно від того, представляє він точку, лінію або квадрат), що необхідно виконати ту чи іншу дію - наприклад, відобразити себе на екрані або, навпаки, видалити з екрану своє зображення. У цьому випадку кожен об'єкт, що представляє точку, лінію або квадрат, повинен буде нести повну відповідальність за коректне виконання необхідних операцій в повній відповідності зі своїм типом. Для вирішення поставленого завдання створимо клас Shape (фігура), а потім визначимо похідні від нього класи, що представляють точки (Point), лінії (Line) і квадрати

(Square) - як показано на рис. 7.2.



Насамперед необхідно визначити специфічну поведінку, яке повинен демонструвати клас Shape. Для вирішення цього завдання слід описати у ньому інтерфейс виклику методів, відповідальних за поведінку, а потім реалізувати ці методи в кожному з породжених класів. Поведінка, яка має демонструвати клас Shape, передбачає наступні методи (рис. 7.3).

• Отримати дані про становище об'єкта Shape (метод setLocation).

• Повідомити дані про становище об'єкта Shape (метод getLocation).

• Показати представлену об'єктом фігуру на екрані (метод display).

• Зафарбувати зображення фігури вказаним кольором (метод fill).

• Встановити колір зафарбовування фігури (метод setColor).

• Видалити зображення фігури з екрана (метод undisplay).



Припустимо, що в систему необхідно включити новий тип об'єктів класу Shape, призначений для представлення кіл (не забувайте, що вимоги постійно змінюються!). Для цієї мети створимо новий клас, Circle (Коло), який представлятиме в системі окружності. Реалізуємо клас Circle як похідний від класу Shape, що дозволить скористатися перевагами його полиморфного поведінки.

Тепер необхідно написати методи display, fill і Undisplay для класу Circle. Це завдання може виявитися досить складною. На щастя, після недовгих пошуків альтернативних рішень (що завжди повинен робити кожен хороший програміст), з'ясувалося, що один з моїх колег вже описав в системі клас XXCircle, призначений для роботи з колами (рис. 7.4). На жаль, він попередньо не порадився зі мною, як краще назвати методи цього класу, тому вони отримали такі імена:

• displayIt

• fillIt



• undisplayIt

В результаті, безпосередньо використовувати клас XXCircle не можна, оскільки бажано зберегти поліморфну ​​поведінку, реалізоване в класі Shape, але цьому перешкоджають наступні моменти.

• Клас Shape і клас XXCircle включають методи з різними іменами і різними списками параметрів.

• Клас XXCircle повинен не тільки мати співпадаючі імена методів, а й обов'язково бути похідним від класу Shape.




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

• Функції, реалізовані у вже існуючому класі, просто адаптуються за описаною вище схемою.

• Відсутні функції реалізуються заново - безпосередньо в об'єкті-оболонці. Це менш ефективне рішення, але воно все ж дозволяє уникнути реалізації всієї необхідної функціональності. Шаблон Adapter дозволяє в процесі пр оектірованія не брати до уваги можливих відмінностей в інтерфейсах вже існуючих класів. Якщо є клас, що володіє необхідними методами і властивостями, - принаймні, концептуально, то при необхідності завжди можна буде т скористатися шаблоном Adapter для приведення його інтерфейсів до потрібного вигляду. Ця особливо важливо, якщо застосовується відразу кілька шаблонів, оскільки багато шаблони вимагають, щоб використовувані в них класи були породжені від одного і того ж класу. Якщо в проект предст ВІТ включити вже існуючі класи, шаблон Adapter може використовуватися для адаптації їх до необхідного абстрактного класу (подібно до того, як клас ХХCircle був адаптований до абстрактноктного класу Shape за допомогою класу-оболонки Circle). Фактично існує два типи шаблонів Adapter.

• Об'єктний шаблон Adapter. Той варіант шаблону Adapter, який ми обговорювали вище, називають об'єктним шаблоном Adapter, оскільки він реалізується за допомогою приміщення одного об'єкт а (адаптируемого) в інший (адаптирующий).

• Класовий шаблон Adapter. Другий варіант реалізації шаблону Adapter використовує механізм множинного спадкоємства і отримав назву клас ¬ сового шаблону Adapter.

• Як шаблон Facade, так і шаблон Adapter використовують вже існуючі класи.

• Однак для шаблону Facade необхідно самостійно розробити необхідний інтерфейс, а не використовувати вже існуючий, як для шаблону Adapter.

• Реалізація шаблону Facade Не перед вбачає підтримки поліморфізму, тоді як при застосуванні шаблону Adapter це може виявитися необхідним. (Можливі ситуації, при яких потрібна лише підтримка певного API, а значить, при використанні шаблону Adapter поліморфізм нас цікавити не буде - саме тому тут вжито слово "може").

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


Каталог: download -> version
version -> Захист навколишнього середовища від забруднення мийними засобами
version -> «Валеологічне виховання дітей дошкільного віку, як фактор формування здорового способу життя»
version -> Виписка з навчального плану
version -> Методичні рекомендації щодо викладання уроків для стійкого розвитку «Моя щаслива планета» розділ Система уроків-зустрічей для 3 класу курсу за вибором «Моя щаслива планета»
version -> Затверджую директор Зіньківської спеціалізованої школи І-ІІІ ст.№2 Л. В. Литус
version -> Наказ №526 " Про затвердження Науково-методичних рекомендацій щодо оцінювання навчальних досягнень учнів та оформлення сторінок класних журналів загальноосвітніх
version -> Методичні рекомендації Донецьк  2006 ббк 64. 9 (ІІ) 722 ш 30
version -> Вимоги до оформлення посібника
version -> Програма бібліотечно-бібліографічних знань для учнів 1-11 класів


Поділіться з Вашими друзьями:
1   2   3   4   5




База даних захищена авторським правом ©uchika.in.ua 2020
звернутися до адміністрації

    Головна сторінка