ЛАБОРАТОРНА РОБОТА № 9
ПОРОДЖУВАЛЬНІ ШАБЛОНИ. ШАБЛОНИ ABSTRACT FACTORY, BUILDER

 

Мета: Вивчення породжувальних шаблонів. Отримання базових навичок з застосування шаблонів Abstract Factory та Builder.

 

Довідка

Abstract Factory

Проблема. Створити сімейство взаємопов’язаних або взаємозалежних об’єктів (не специфікуючи їх конкретних класів).

Рішення. Створити абстрактний клас, в якому оголошено інтерфейс для створення конкретних класів.

Шаблон ізолює конкретні класи. Оскільки "AbstractFactory" інкапсулює відповідальність за створення класів і сам процес їх створення, то вона ізолює клієнта від деталей реалізації класів. Спрощено заміну’ "AbstractFactory", оскільки вона використовується в додатку тільки один раз при інстанціюванні.

Слід зазначити, що інтерфейс "AbstractFactory" фіксує набір об’єктів, які можна створити. Це в певній мірі ускладнює розширення "AbstractFactory" для виготовлення нових об’єктів.

Builder

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

 

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

 

Рішення. "Client" створює об’єкт - розпорядник "Director" і конфігурує його об’єктом - "Builder". "Director" повідомляє "Builder" про те, що потрібно побудувати чергову частину "Product"."Builder" обробляє запити "Director" і додає нові частини до "Product", потім "Client" забирає "Product" у "Builder".

Об’єкт "Builder" надає об’єкту "Director" абстрактний інтерфейс для конструювання "Product", за яким може приховати подання та внутрішню структуру продукту, та, крім того, процес складання "Product". Для зміни внутрішнього представлення "Product" досить визначити новий вид "Builder". Даний шаблон ізолює код, що реалізує створення об’єкта та його подання.

 

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

 

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

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

2.    Детально вивчити породжувальні шаблони - Abstract Factory та Builder. Для кожного з них:

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

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

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

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

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

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

 

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

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

0.    Визначити специфікації класів для подання сімейства віджетів графічного інтерфейсу користувача з реалізацією на різних АРІ (WinAPI, GTK). Забезпечити можливість прозорого для клієнта розширення реалізацією для інших API (Qt, OSX).

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

2.    Визначити специфікації класів для подання сімейства інструментів універсального інтерактивного середовища розробки (Validator, Compiler, Debugger) з їх реалізацією для різних мов (Java, C++). Забезпечити можливість прозорого для клієнта розширення реалізацією для мов (ObjectPascal).

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

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

 

Рис. 3. Семантична діаграма блок-схем алгоритмів

 

5.    Визначити специфікації класів для будівника дерева розбору складного виразу (у відповідності до БНФ) на основі його символьного подання.

 

<вираз>::=<простий вираз> | <складний вираз>

<простий вираз>::=<константа> | <змінна>

<константа>::=(<число>)

<змінна>::=(<ім’я>)

<складний вираз>::=(<вираз><знак операції><вираз>)

<знак операції>::=+|-|*|/

 

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

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

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

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

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

 

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

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

2.    Призначення породжувальних шаблонів.

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

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

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

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

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

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

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

10.    Шаблони, які використовуються сумісно з Abstract Factory та Builder.

 

Протокол

Протокол має містити титульну сторінку (з номером залікової книжки), завдання, роздруківку діаграми класів, розроблений програмний код та згенеровану документацію в форматі 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:/7uk.wikipedia.org/wiki/Шаблони проектування програмного забезпечення

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

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

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

Породжувальні шаблони

-   Твірні шаблони − http://uk.wikipedia.org/wiki/твірні шаблони

-   Creational pattern http://en.wikipedia.org/wiki/Creational_pattem

-   Шаблоны создания − http://khpiiip.mipk.kharkiv.edu/library/extent/prog/jdp 101 /part4.html