ЛАБОРАТОРНА РОБОТА № 5
ШАБЛОНИ ПОВЕДІНКИ.
ШАБЛОНИ ITERATOR, MEDIATOR, OBSERVER

 

Мета: Вивчення шаблонів поведінки. Отримання базових навичок з застосування шаблонів Iterator, Mediator та Observer.

 

Довідка

Iterator

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

Рішення. Створюється клас "Iterator", який визначає інтерфейс для доступу і перебору елементів, "Concretelterator" реалізує інтерфейс класу "Iterator" і стежить за поточною позицією при обході "Aggregate"."Aggregate" визначає інтерфейс для створення об’єкту - ітератора. "ConcreteAggregate" реалізує інтерфейс створення ітератора і повертає екземпляр класу "Concretelterator", "Concretelterator" відстежує поточний об’єкт в агрегаті і може обчислити наступний об’єкт при переборі.

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

Mediator

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

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

 

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

 

"Mediator" визначає інтерфейс для обміну інформацією з об’єктами "Colleague", "ConcreteMediator" координує дії об’єктів "Colleague". Кожен клас "Colleague" знає про свій об’єкт "Mediator", всі "Colleague" обмінюються інформацією тільки з посередником, при його відсутності їм довелося б обмінюватися інформацією безпосередньо. "Col league" посилають запити посередникові та отримують запити від нього. "Mediator" реалізує кооперативну поведінку, пересилаючи кожен запит одному або декільком "Colleague".

 

Рис. 2. Структура шаблону Mediator

 

Шаблон усуває зв’язаність між "Colleague", централізуючи управління.

Observer

Проблема. Один об’єкт ("Observer") повинен знати про зміну станів або деякі події іншого об’єкта. При цьому необхідно підтримувати низький рівень зв’язування з об’єктом - "Observer".

Рішення. Визначити інтерфейс "Observer". Об’єкти "ConcreteObserver" − передплатники реалізують цей інтерфейс та динамічно реєструються для отримання інформації про деяку подію в "Subject". Потім при реалізації обумовленої події в "ConcreteSubject" сповіщаються всі об’єкти-передплатники.

 

Рис. 3. Структура шаблону Observer

 

Порядок виконання роботи

1.    Вивчити шаблони поведінки для проектування ПЗ. Знати загальну характеристику шаблонів поведінки та призначення кожного з них.

2.    Детально вивчити шаблони поведінки для проектування ПЗ - Iterator, Mediator та Observer. Для кожного з них:

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

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

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

-   вміти розпізнавати Шаблон в UML діаграмі класів та будувати сирцеві коди Іауа-класів, що реалізують шаблон.

3.    В підготованому проекті (ЛР1) створити програмний пакет соm.lab111.labwork5. В пакеті розробити інтерфейси і класи, що реалізують завдання (згідно варіанту) з застосуванням одного чи декількох шаблонів (п.2). В розроблюваних класах повністю реалізувати методи, пов’язані з функціюванням Шаблону. Методи, що реалізують бізнес-логіку закрити заглушками з виводом на консоль інформації про викликаний метод та його аргументи.

4.    За допомогою автоматизованих засобів виконати повне документування розроблених класів (також методів і полів), при цьому документація має в достатній мірі висвітлювати роль певного класу в загальній структурі Шаблону та особливості конкретної реалізації.

 

Варіанти завдання

Номер варіанту завдання обчислюється як залишок від ділення номеру залікової книжки на 9.

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

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

2.    Визначити специфікації класів які інкапсулюють лінійний список символьних рядків та реалізують можливість звичайного послідовного обходу та обходу з додатковою фільтрацію агрегату (Наприклад фільтрація по довжині рядка, по його першій літері, тощо).

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

4.    Визначити специфікації класів для елементу ігрового поля (комірки) та самого простору. Забезпечити слабку зв’язаність елементів. Реалізувати централізований механізм сумісної зміни стану елементів.

5.    Визначити специфікацію класу, який інкапсулює структуру пов’язаних графічних елементів та реалізацію методів взаємодії цих елементів під час сумісної зміни властивостей (колір). Забезпечити слабку зв’язаність елементів.

6.    Визначити специфікації класів для подання реляційної таблиці та обмеження зовнішнього ключа з можливістю його перевірки під час зміни значень полів. Забезпечити слабку зв’язаність елементів.

7.    Визначити специфікації класів для подання елементів графічного інтерфейсу користувача − GUI (вікна, кнопки, текстові області). Реалізувати механізм реакції на події в будь-якому з елементів.

8.    Визначити специфікації класів для подання реляційної таблиці. Реалізувати механізм тригерів − виконання додаткових дій при зміні елемента.

 

Питання для самостійної перевірки

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

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

3.    Коротка характеристика кожного шаблону поведінки.

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

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

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

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

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

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

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

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

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

13.    Шаблони, які використовуються сумісно з Iterator, Mediator та Observer.

 

Протокол

Протокол має містити титульну сторінку (з номером залікової книжки), завдання, роздруківку діаграми класів, розроблений програмний код та згенеровану документацію в форматі JavaDoc.

 

Список рекомендованих інформаційних джерел

Шаблони проектування програмного забезпечення

-    Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно- ориентированного проектирования. Паттерны проектирования = Design Patterns: Elements of Reusable Object-Oriented Software. − СПб: «Питер», 2007. − С. 366. − ISBN 978-5-469-01136-1 (также ISBN 5-272-00355-1)

-    Марк Гранд. Шаблоны проектирования в JAVA. Каталог популярных шаблонов проектирования, проиллюстрированных при помощи UML = Patterns in Java, Volume 1. A Catalog of Reusable Design Patterns Illustrated with UML. − М.: «Новое знание», 2004. − С. 560. − ISBN 5-94735-047-5

-    Шаблони проектування програмного забезпечення − http://uk.wikipedia.org/wiki/ Шаблони проектування програмного забезпечення

-    Обзор паттернов проектирования - http://citforum.ru/SE/project/pattern/

-    Объектно-ориентированное проектирование, паттерны проектирования (Шаблоны) − http://www.javenue.info/themes/ood/

-    David Gallardo. Шаблоны проектирования Java − http://khpi‑iip.mipk.kharkiv.edu/ library/extent/prog/jdpl01/index.html

Шаблони поведінки

-    Шаблони поведінки − http://uk.wikiреdia.оrg/wiki/Шаблони поведінки

-    Behavioral pattern − http://en.wikipedia.org/wiki/Behavioral_pattem

-    Шаблоны поведения − http://khpi‑iip.mipk.kharkiv.edu/library/extent/prog/jdpl01/ part6.html