Введение
1 Назначение шаблонов проектирования
1.1 Поведенческие шаблоны проектирования
1.1.1 Шаблон «Стратегия» (Strategy)
1.1.2 Шаблон «Шаблонный метод» (Template Method)
1.1.3 Шаблон «Посетитель» (Visitor)
1.2 Порождающие шаблоны проектирования
1.2.1 Шаблон «Одиночка» (Singleton)
1.2.2 Шаблон «Абстрактная фабрика» (Abstract Factory)
1.2.3 Шаблон «Фабричный метод» (Factory Method)
1.3 Структурные шаблоны проектирования
1.3.1 Шаблон «Адаптер» (Adapter)
1.3.2 Шаблон «Фасад» (Facade)
1.3.3 Шаблон «Декоратор» (Decorator)
2 Практические исследования
2.1 Постановка задачи
2.2 Описание сущностей
2.3 Реализация шаблонов проектирования
2.4 Тестирование приложения
Заключение
Список источников
Введение
Проектирование объектно-ориентированных программ – непростая задача, а если их нужно использовать повторно, то все становится еще сложнее. Необходимо подобрать подходящие объекты, отнести их к различным классам, соблюдая разумную степень детализации, определить интерфейсы классов и иерархию наследования и установить существенные отношения между классами. Дизайн должен, с одной стороны, соответствовать решаемой задаче, с другой – быть общим, чтобы удалось учесть все требования, которые могут возникнуть в будущем. Хотелось бы также избежать вовсе или, по крайней мере, свести к минимуму необходимость перепроектирования. Поднаторевшие в объектно-ориентированном проектировании разработчики скажут, что обеспечить «правильный», то есть в достаточной мере гибкий и пригодный для повторного использования дизайн, с первого раза очень трудно, если вообще возможно. Прежде чем считать цель достигнутой, они обычно пытаются опробовать найденное решение на нескольких задачах, и каждый раз модифицируют его [1].
Паттерны проектирования упрощают повторное использование удачных проектных и архитектурных решений. Представление прошедших проверку временем методик в виде паттернов проектирования облегчает доступ к ним со стороны разработчиков новых систем. С помощью паттернов можно улучшить качество сопровождения существующих систем, позволяя явно описать взаимодействия классов и объектов, а также причины, по которым система была построена так, а не иначе. Проще говоря, паттерны проектирования дают разработчику возможность быстрее найти «правильный» путь.
Целью данной работы является описание наиболее простых и часто используемых шаблонов проектирования, а также выполнение технического задания с использованием некоторых из них.
1 Назначение шаблонов проектирования
Концепцию шаблонов впервые описал Кристофер Александер в книге «Язык шаблонов. Города. Здания. Строительство». Идея показалась привлекательной авторам Эриху Гамму, Ричарду Хелму, Ральфу Джонсону и Джону Влиссидесу, их принято называть «бандой четырёх» (Gang of Four). В 1995 году они написали книгу «Design Patterns: Elements of Reusable Object-Oriented Software», в которой применили концепцию типовых шаблонов в программировании. В книгу вошли 23 шаблона, решающие различные проблемы объектно-ориентированного дизайна [2].
Шаблоны проектирования можно разделить на три группы: порождающие шаблоны проектирования (Creational Patterns), структурные шаблоны проектирования классов/объектов (Structural Patterns) и шаблоны проектирования поведения классов/объектов (Behavioral Patterns).
Ниже, в этой главе будут рассмотрены некоторые представители всех трех групп.
1 Поведенческие шаблоны проектирования
Шаблоны поведения связаны с алгоритмами и распределением обязанностей между объектами. Речь в них идет не только о самих объектах и классах, но и о типичных способах взаимодействия [3]. Шаблоны поведения характеризуют сложный поток управления, который трудно проследить во время выполнения программы. Внимание акцентировано не на потоке управления как таковом, а на связях между объектами.
В шаблонах поведения уровня класса используется наследование – чтобы распределить поведение между разными классами. В этой главе описано два таких шаблона. Из них более простым и широко распространенным является шаблонный метод, который представляет собой абстрактное определение алгоритма. Алгоритм здесь определяется пошагово. На каждом шаге вызывается либо примитивная, либо абстрактная операция. Алгоритм «обрастает мясом» за счет подклассов, где определены абстрактные операции. Другой шаблон поведения уровня класса – интерпретатор, который представляет грамматику языка в виде иерархии классов и реализует интерпретатор как последовательность операций над экземплярами этих классов.
2 Практические исследования
2.1 Постановка задачи
Цель данного курсового проекта – создать демонстрационное java приложение по теме «Разработка системы конвертации валют, по наиболее низкому курсу» в котором используются шаблоны проектирования.
Приложение будет использоваться пользователями для выбора наилучшего пути обмена валюты из текущей в новую валюту. Проводить операции с данными может любой пользователь
Разработанное приложение реализует следующий функционал:
- Просмотр данных о валюте;
- Добавление данных о валюте;
- Редактирование данных о валюте;
- Удаление данных о валюте;
- Просмотр курса валют;
- Добавление курса валют;
- Редактирование курса валют;
- Удаление курса валют;
- Просмотр записи об обмене валюты;
- Добавление записи об обмене валюты;
- Удаление записи об обмене валюты;
2.2 Описание сущностей
В этом подразделе будут описаны сущности и классы приложения.
Первой сущностью является абстрактная сущность AbstractEntity с единственным полем id типа Long, от которой наследуются все остальные сущности. После это используется для идентификации каждой сущности.
Первая из наследуемых сущностей представляет собой валюту. Название этой сущности – Currency. Она имеет следующее поле name типа String. В этом поле хранится название валюты (будь то доллар, рубль, евро иди др.).
Вторая наследуемая сущность представляет из себя курс валюты по отношению к доллару. Наименование сущности Course. Она включает в себя следующие поля:
− Поле currency типа Currency, которое отвечает за выбранную валюту, которой будет назначен курс;
Заключение
В результате выполнения курсовой работы было разработано приложение, предназначенное для системы конвертации валют, по наиболее никому курсу. Разработка приложения осуществлялась в среде программирования Eclipse на языке Java на платформе Java EE с использованием Swing.
Одним из главных назначений разработанного приложения является осуществление быстрого и удобного доступа к необходимой информации, что позволит пользователю эффективно использовать свое время. Для реализации этого назначения в приложении предусмотрена такая функциональность, как добавление, редактирование и удаление данных используемых таблиц.
1 Механизмы повторного использования [Электронный ресурс]. – Режим доступа: https://zdamsam.ru/a62657.html.
2 Шаблоны проектирования "банды четырёх (GoF)" [Электронный ресурс]. – Режим доступа: https://bool.dev/blog/detail/gof-design-patterns.
3 Паттерны поведения [Электронный ресурс]. – Режим доступа: https://present5.com/patterny-povedeniya-patterny-povedeniya-svyazany-s-algoritmami/.
4 Паттерн Strategy [Электронный ресурс]. – Режим доступа: https://studref.com/329513/informatika/pattern_strategy.
5 Паттерн Шаблонный Метод [Электронный ресурс]. – Режим доступа: http://sergeyteplyakov.blogspot.com/2014/03/template-method-design-pattern.html.
6 Посетитель (Visitor) [Электронный ресурс]. – Режим доступа: https://metanit.com/sharp/patterns/3.11.php.
7 Лекция 7: Порождающие шаблоны проектирования [Электронный ресурс]. – Режим доступа: https://intuit.ru/studies/courses/3611/853/lecture/32057.
8 Лекция 5: Структурные шаблоны проектирования [Электронный ресурс]. – Режим доступа: https://intuit.ru/studies/courses/3611/853/lecture/32053.
9 Шаблон проектирования MVC [Электронный ресурс]. – Режим доступа: https://webformyself.com/shablon-proektirovaniya-mvc/.
10 Pattern Observer — «Наблюдатель» [Электронный ресурс]. – Режим доступа: http://omurashov.ru/pattern-observer/.