Лабораторная работа №4


ЛАБОРАТОРНАЯ РАБОТА №4.
Создание веб-приложения с использованием шаблонов проектирования.
1. Цель работы
Получить навыки реализации JSP-страниц с использованием шаблонов проектирования.
2. Методические указания
Лабораторная работа направлена на приобретение навыка написания веб-приложений на языке J2ЕЕ.
Требования к результатам выполнения лабораторного практикума:
- изучить теоретический материал и примеры к нему;
- выполнить индивидуальное задание. При выполнении задания необходимо сопровождать текст программы комментариями;
- по завершении выполнения задания составить отчет о проделанной работе.
3. Теоретический материал
Шаблоны проектирования GoF — это многократно используемые решения широко распространенных проблем, возникающих при разработке программного обеспечения. Многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме.
В общем случае шаблон состоит из четырех основных элементов:
1) имя. Точное имя предоставляет возможность сразу понять проблему и определить решение. Уровень абстракции при проектировании повышается;
2) задача. Область применения в рамках решения конкретной проблемы;
3) решение. Абстрактное описание элементов дизайна задачи проектирования и способа ее решения с помощью обобщенного набора классов;
4) результаты.
Шаблоны классифицируются по разным критериям, наиболее распространенным из которых является назначение шаблона. Вследствие этого выделяются порождающие шаблоны, структурные шаблоны и шаблоны поведения.
Несмотря на все различия, шаблоны взаимосвязаны, и нередко небольшое изменение ответственности или связи того или иного класса может привести к тому, что применение одного шаблона приводит к замене исходного шаблона на другой, часто даже неродственный.
Порождающие шаблоны предназначаются для организации процесса создания объектов и все до единого соответствуют шаблону Creator из GRASP.
К порождающим шаблонам относятся:
Abstract Factory (Абстрактная Фабрика) — предоставляет интерфейс для создания связанных между собой объектов семейств классов без указания их конкретных реализаций (families of product objects);
Factory Method (Фабричный метод) — определяет интерфейс для создания объектов из иерархического семейства классов на основе передаваемых данных (subclass of object that is instantiated);
Builder (Строитель) — создает объект конкретного класса различными способами (how a composite object gets created);
Singleton (Одиночка) — гарантирует существование только одного или конечного числа экземпляров класса (the sole instance of a class);
Prototype (Прототип) — применяется при создании сложных объектов.
На основе прототипа объекты сохраняются и воссоздаются, например, путем копирования (class of object that is instantiated).
Структурные шаблоны GoF отвечают за композицию объектов и классов, и не только за объединение частей приложения, но и за их разделение.
К структурным шаблонам относятся:
Adapter (Адаптер) — применяется при необходимости использовать классы вместе с несвязанными интерфейсами. Поведение адаптируемого класса при этом изменяется на необходимое (interface to an object);
Bridge (Мост) — разделяет представление класса и его реализацию, позволяя независимо изменять то и другое (implementation of an object);
Composite (Компоновщик) — группирует объекты в иерархические древовидные структуры и позволяет работать с единичным объектом так же, как с группой объектов (structure and composition of an object);
Decorator (Декоратор) — представляет способ изменения поведения объекта без создания подклассов. Позволяет использовать поведение одного объекта в другом (responsibilities of an object without subclassing);
Facade (Фасад) — создает класс с общим интерфейсом высокого уровня к некоторому числу интерфейсов в подсистеме (interface to a subsystem);
Flyweight (Легковес) — разделяет свойства класса для оптимальной поддержки большого числа мелких объектов (storage costs of objects);
Proxy (Заместитель) — подменяет сложный объект более простым и осуществляет контроль доступа к нему (how an object is accessed... its location).
Шаблоны поведения GoF характеризуют способы взаимодействия классов или объектов между собой.
К шаблонам поведения относятся:
Chain of Responsibility (Цепочка Обязанностей) — организует независимую от объекта-отправителя цепочку не знающих возможностей друг друга объектов-получателей, которые передают запрос друг другу (object that can fulfill a request);
Command (Команда) — используется для определения по некоторому признаку объекта конкретного класса, которому будет передан запрос для обработки (when and how a request is fulfilled);
Iterator (Итератор) — позволяет последовательно обойти все элементы коллекции или другого составного объекта, не зная деталей внутреннего представления данных (how an aggregate’s elements are accessed, traversed);
Mediator (Посредник) — позволяет снизить число связей между классами при большом их количестве, выделяя один класс, знающий все о методах других классов (how and which objects interact with each other);
Memento (Хранитель) — сохраняет текущее состояние объекта для дальнейшего восстановления (what private information is stored outside an object, and when);
Observer (Наблюдатель) — позволяет при зависимости между объектами типа «один ко многим» отслеживать изменения объекта (number of objects that depend on another object; how the dependent objects stay up to date);
State (Состояние) — позволяет объекту изменять свое поведение за счет изменения внутреннего объекта состояния (states of an object);
Strategy (Стратегия) — задает набор алгоритмов с возможностью выбора одного из классов для выполнения конкретной задачи во время создания объекта (an algorithm);
Template Method (Шаблонный Метод) — создает родительский класс, использующий несколько методов, реализация которых возложена на производные классы (steps of an algorithm);
Visitor (Посетитель) — представляет операцию в одном или нескольких связанных классах некоторой структуры, которую вызывает специфичный для каждого такого класса метод в другом классе (operations that can be applied to object(s) without changing their class(es));
Interpreter (Интерпретатор) — для определенного способа представления информации определяет правила (grammar and interpretation of a language).
Рассмотрим подробнее некоторые из них:
Шаблон Factory Method.
Необходимо определить механизм создания объектов по заданному признаку для классов, находящихся в иерархической структуре. Классу-фабрике и его подклассам разрешается создавать экземпляры с помощью общего для всех интерфейса, причем именно подклассы решают, какой экземпляр следует создавать. Этот интерфейс может содержаться в абстрактном классе, интерфейсе или даже в обычном классе. Фабричный метод не должен владеть информацией о конкретном типе создаваемого объекта, но знает о классе-вершине иерархии создаваемых объектов. Фабричный метод (Factory Method) — основа для функционирования абстрактной фабрики (Abstract Factory).

Рисунок 1- Базовая реализация шаблона Factory Method
Шаблон Builder.
Шаблон Builder заранее знает тип объекта, в то время, как его основной задачей является определение способа создания объекта на основе значений передаваемых параметров. Необходимо реализовать процесс инициализации сложного объекта или объекта со сложным процессом конструирования, определяя для него только тип и свойства. Детали построения объекта или его частей остаются скрытыми и определяются в подклассах. Базовая реализация выглядит следующим образом:

Рисунок 2 - Базовая реализации шаблона Builder
Шаблон Chain of Responsibility.
Позволяет принять решение по обработке объекта на том уровне, на котором оно получено, или передаваться дальше по цепочке обработчиков. Применение шаблона связывает объекты составных частей приложения между собой по цепочке для передачи запроса на обработку от более низких, детализированных слоев системы к более высоким базовым.
Пусть существует базовая задача:
Задача. Сдать экзамен.
• Подзадача. Сдать тест по предмету;
• Подзадача. Сдать задание (одно или несколько).
Следует организовать делегирование решения одной задачи одному классу, другой — другому и т д. Инициатор сообщения не будет иметь никакой явной функциональной связи с его обработчиком.
Для решения проблемы в класс вводится поле, идентифицирующее задачу. Остается только реализовать последовательность связей или вызовов между задачами.
Для решения вводится класс или интерфейс Handler, определяющий метод, передающий сообщение следующему обработчику. Причем реализация процесса передачи зависит от поставленной задачи.

Рисунок 3 - Базовая диаграмма шаблона Chain of Responsibility
Ход работы:Задание: В лабораторной работе №3 внести изменения:
1. На основании шаблона Factory реализовать логирование в консоль или в файл основных событий приложения (например, таких как вход в приложение, проверку пароля и т.д).
2. На основании шаблона Builder реализовать заполнение данных о пользователях.
3. В SessionFilter изменить метод doFilter таким образом, что бы проверка была реализована с помощью шаблона Chain of Responsibility.
4. Порядок выполнения работы
- изучить теоретический материал;
- выполнить задания из теоретической части лабораторной работы;
- выполнить индивидуальные задания (вариант необходимо уточнить у преподавателя);
- ответить на контрольные вопросы;
- оформить отчет в соответствии с требованиями.
5. Содержание отчета
В отчете следует указать:
1. тему и цель работы;
2. индивидуальное задание;
3. основную часть (описание самой работы), выполненную согласно требованиям;
5. заключение (описание результатов и выводы);
6. ответы на контрольные вопросы.
6. Индивидуальные задания
В любой задаче обязательно создание иерархии классов сущностей создаваемой системы. В любой задаче кроме предложенного шаблона можно использовать при необходимости и другие шаблоны.
1. Паттерн Builder. Разработать модель системы Автомобиль. Написать код приложения, который будет позволять порождать как серийные автомобили, так и автомобили по специальному заказу. Использовать шаблон.
2. Паттерн Builder. Разработать модель системы Музыкальный коллектив. Написать код приложения, позволяющий создавать певческие, танцевальные и смешанные коллективы.
3. Паттерн Builder. Разработать модель системы Комплексный обед. Написать код приложения, позволяющий создавать как стандартные комплексные обеды, так и обеды, в которые включены дополнительные блюда из меню.
4. Паттерн Builder. Имеется текст статьи в формате TXT. Статья состоит из заголовка, фамилий авторов, самого текста статьи и хеш-кода текста статьи. Написать приложение, позволяющее конвертировать документ в формате TXT в документ формата XML, необходимо также проверять корректность хэш-кода статьи.
5. Паттерн Abstract Factory. Написать код приложения, позволяющий универсально записывать данные о совершенном телефонном звонке в базу данных и xml-файл, а также считывать эту информацию. Использовать также шаблон DAO.
6. Паттерн Abstract Factory. Написать код приложения, позволяющий сохранять регистрационные данные пользователя в базе данных. Состав регистрационных данных у каждого пользователя может быть различен. Использовать также шаблон DAO.
7. Паттерн Abstract Factory. Разработать систему Кинопрокат. Пользователь может выбрать определенную киноленту, при заказе киноленты указывается язык звуковой дорожки, который совпадает с языком файла субтитров. Система должна поставлять фильм с требуемыми характеристиками, причем при смене языка звуковой дорожки должен меняться и язык файла субтитров и наоборот.
8. Паттерн Prototype. Существует набор статей в википедии. Реализовать процесс раздачи статей по требованию для изменения, сохраняя исходный вариант для возможного восстановления статьи в исходном виде.
9. Паттерн Factory Method. Фигуры игры «тетрис». Реализовать процесс случайного выбора фигуры из конечного набора фигур. Предусмотреть появление супер-фигур с большим числом клеток, чем обычные.
10. Паттерн Interpreter. Реализовать арифметические и логические операции для комплексных чисел.
11. Паттерн Interpreter. Изменить действие логических операторов на действие битовых операторов.
12. Паттерн Strategy. Разработать модель игровой системы. Предусмотреть наличие фентезийных персонажей: орки, тролли, пегасы, эльфы, вампиры, гарпии и др. Учесть, что некоторые персонажи ходят, другие — летают, третьи — и ходят и летают. Летать также может группа персонажей с помощью магии.
13. Паттерн Observer. Разработать систему Почтовое отделение. Из издательства в почтовое отделение поступают издаваемые газеты и журналы. Почтовое отделение отправляет полученные печатные издания соответствующим подписчикам.
14. Паттерн Strategy. Разработать модель выбора способов сортировки и поиска максимального/минимального значения массива числовых объектов.
15. Паттерн State. Заказ на получение гранта для обучения может находиться в нескольких состояниях: создан, рассматривается, отложен, отклонен, подтвержден, отозван и т. д. Определить логику изменения состояний и разработать модель системы.
16. Паттерн State. Учебное задание, выполняемое студентом, может находиться в состояниях: выдано, выполнено, сдано на проверку, проверено, пересдано на проверку, не выполнено. Определить логику изменения состояний и разработать модель системы.
17. Паттерн Composite. Разработать структуру данных для хранения информации о государствах, их административных частях и городах.
18. Паттерн Composite. Разработать структуру хранения текста, который может состоять из абзацев, предложений, листингов, заголовков, слов, знаков препинания и проч.
19. Паттерн Composite. Разработать структуру организации армии в игре фэнтези. Армия может состоять из отрядов эльфов, орков, минотавров, кентавров, циклопов, драконов, гидр, рыцарей. Армия может содержать как отряды, так и одиночных воинов, отряд может состоять из других отрядов и одиночных воинов.
20. Паттерн Composite. Разработать структуру организации дискового пространства, где каталоги содержат другие каталоги и файлы
21. Паттерн Flyweight. Разработать систему учета процессов размножения колонии бактерий.
22. Существует модель системы Рецепт. Модель позволяет в неизменяемом виде хранить назначения врача и срок действия рецепта. Написать код приложения, позволяющий продлевать срок действия уже существующего рецепта. Выберите подходящий паттерн для реализации этого задания.
23. Существует модель системы Магазин цветов. Напишите код, позволяющий добавлять к букету новый атрибут (например, ленту с фирменным названием), используя при этом существующую модель порождения букетов. Выберите подходящий паттерн для реализации этого задания.
7. Контрольные вопросы
1. Что такое шаблоны проектирования?
2. Из каких элементов состоит шаблон?
3. Какие есть типы шаблонов?
4. Назовите порождающие шаблоны и кратко опишите их.
5. Назовите шаблоны поведения и кратко опишите их.
6. Назовите структурные шаблоны и кратко опишите их.
7. Какие антишаблоны вы знаете?
17145005683250003085465522351000

Приложенные файлы

  • docx 10762899
    Размер файла: 161 kB Загрузок: 8

Добавить комментарий