Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПП_методичка(1).doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
440.32 Кб
Скачать

2.2.7 Шаблон проектування Фасад (Facade)

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

Застосування. Використовується коли:

  • спростити доступ до складної системи;

  • створити рівні доступу до системи;

  • додати стійкість до змін підсистем;

  • зменшити кількість сильних зв'язків між клієнтом та підсистемою, але залишити доступ до повної функціональності.

Структура шаблона наведена на рис. 2.7.

В цьому шаблоні визначається одна точка взаємодії з підсистемами – фасадний об'єкт. Фасад

  • визначає певним підсистемам інтерфейс, отже знає кому адресувати запити;

  • делегує запити клієнтів потрібним об'єктам підсистеми;

  • створює нові методи, котрі об'єднують виклики об'єктів системи і\або додають свою логіку;

  • приховує підсистеми;

  • зменшує кількість параметрів методів, шляхом попередньої підстановки визначених значень

Реалізація інших компонентів підсистеми закрита і не доступна для зовнішніх компонентів. Фасадний об'єкт забезпечує реалізацію шаблону "Стійкий до змін" з точки зору захисту від змін у реалізації підсистеми.

Рис.2.7. Структура шаблону Facade

2.3 Завдання на лабораторну роботу

3.1.1 Вивчити структурні шаблони проектування, їхню загальну характеристику та призначення. Для кожного з цих шаблонів:

  • вивчити призначення шаблону, альтернативні назви, призначення, випадки коли його застосування є доцільним та результати такого застосування;

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

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

3.1.2 За допомогою джерел зі списку рекомендованих для виконання лабораторної роботи, виконати програмну реалізацію твірних шаблонів.

2.4 Зміст звіту

4.1.1 Тема та мета роботи.

4.1.2 Короткі теоретичні відомості.

4.1.3 Результати роботи.

4.1.4 Висновки, що містять відповіді на контрольні запитання, а також відображують результати виконання роботи та їх критичний аналіз.

2.5 Контрольні запитання

5.1.1 Шаблони проектування програмного забезпечення. Призначення. Коротка історія створення.

5.1.2 Класифікація шаблонів проектування ПЗ.

5.1.3 Призначення структурних шаблонів проектування ПЗ.

5.1.4 Коротка характеристика кожного структурного шаблону.

5.1.5 Назви, призначення та мотивація шаблону Composite.

5.1.6 Структура шаблону Composite та його учасники.

5.1.7 Особливості реалізації шаблону Composite. Результат використання шаблону.

5.1.8 Назви, призначення та мотивація шаблону Decorator.

5.1.9 Структура шаблону Decorator та його учасники.

5.1.10 Особливості реалізації шаблону Decorator. Результат використання шаблону.

5.1.11 Назви, призначення та мотивація шаблону Proxy.

5.1.12 Структура шаблону Proxy та його учасники.

5.1.13 Особливості реалізації шаблону Proxy. Результат використання шаблону.

5.1.14 Види шаблону Proxy.

5.1.15 Шаблони, які використовуються сумісно з Composite, Decorator та Proxy.

5.1.16 Відмінність Decorator та Proxy в специфікації конструктора.

5.1.17 Назви, призначення та мотивація шаблону Flyweight.

5.1.18 Структура шаблону Flyweight та його учасники.

5.1.19 Особливості реалізації шаблону Flyweight. Результат використання шаблону.

5.1.20 Назви, призначення та мотивація шаблону Adapter.

5.1.21 Структура шаблону Adapter та його учасники.

5.1.22 Особливості реалізації шаблону Adapter. Результат використання шаблону.

5.1.23 Назви, призначення та мотивація шаблону Bridge.

5.1.24 Структура шаблону Bridge та його учасники.

5.1.25 Особливості реалізації шаблону Bridge. Результат використання шаблону.

5.1.26 Назви, призначення та мотивація шаблону Facade.

5.1.27 Структура шаблону Facade та його учасники.

5.1.28 Особливості реалізації шаблону Facade. Результат використання шаблону.

5.1.29 Відмінність Adapter, Decorator та Proxy в специфікації конструктора.

5.1.30 Види адаптерів. Двосторонній та динамічний (pluggable) адаптери.

5.1.31 Шаблони, які використовуються сумісно з Flyweight, Adapter, Bridge, Facade.

Лабораторна робота № 3 Шаблони поведінки. Частина 1

3.1 Мета роботи

Вивчити шаблони поведінки та отримати базові навички із застосування шаблонів Ітератор (Iterator), Посередник (Mediator), Спостерігач (Observer), Стратегія (Strategy), Ланцюг обов'язків (Chain of Responsibility), Відвідувач (Visitor).

3.2 Основні теоретичні відомості

3.2.1 Шаблон проектування Ітератор (Iterator)

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

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

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

Застосування. Використовується коли:

  • для доступу до змісту агрегованих об'єктів не розкриваючи їхнє внутрішнє улаштування;

  • для підтримки декількох активних обходів одного й того ж агрегованого об'єкта;

  • для подання уніфікованого інтерфейсу з метою обходу різноманітних агрегованих структур (тобто для підтримки поліморфної ітерації).

Структура шаблона наведена на рис. 3.1, де:

  • Iterator – ітератор:

    • визначає інтерфейс для доступу та обходу елементів

  • ConcreteIterator:

    • реалізує інтерфейс класу Iterator;

    • слідкує за поточною позицією під час обходу агрегату;

  • Aggregate:

    • визначає інтерфейс для створення об'єкта-ітератора;

  • ConcreteAggregate :

    • реалізує інтерфейс створення ітератора та повертає екземпляр відповідного класу ConcreteIterator

ConcreteIterator відслідковує поточний об'єкт у агрегаті та може вирахувати наступний.

Рис.3.1. Структура шаблону Iterator

Шаблон підтримує різні способи перебору агрегату, одночасно можуть бути активні кілька переборів.