Страница курса Паттерны проектирования
Материалы к курсу
Темы докладов и рефератов
По книге Гранд М. "Шаблоны проектирования в Java"
- Cache Management
- Dynamic Linkage
- Single Threaded Execution
- Lock Object
- Guarded Suspension
- Balking
- Sheduler
- Read/Write Lock
- Producer/Consumer
- Two-Phase Termination
- Double Buffering
- Asynchronous Processing
- Future
По книге Мартин Фаулер "Архитектура корпоративных программных приложений"
- Сценарий транзакции (Transaction Script) 98
- Модель предметной области (Domain Model) 103
- Модуль таблицы (Table Module) 109
- Слой служб (Service Layer) 115
- Шлюз таблицы данных (Table Data Gateway) 122
- Шлюз записи данных (Row Data Gateway) 127
- Активная запись (Active Record) 133
- Преобразователь данных (Data Mapper) 137
- Единица работы (Unit of Work) 152
- Коллекция объектов (Identity Map) 160
- Загрузка по требованию (Lazy Load) 164
- Поле идентификации (Identity Field) 176
- Отображение внешних ключей (Foreign Key Mapping) 191
- Отображение с помощью таблицы ассоциаций (Association Table Mapping) 200
- Отображение зависимых объектов (Dependent Mapping) 211
- Внедренное значение (Embedded Value) 215
- Сериализованный крупный объект (Serialized LOB) 218
- Наследование с одной таблицей (Single Table Inheritance) 222
- Наследование с таблицами для каждого класса (Class Table Inheritance) 228
- Наследование с таблицами для каждого конкретного класса (Concrete Table Inheritance) 234
- Преобразователи наследования (Inheritance Mappers) 241
- Отображение метаданных (Metadata Mapping) 244
- Объект запроса (Query Object) 252
- Хранилище (Repository) 257
- Модель-представление-контроллер (Model View Controller) 262
- Контроллер страниц (Page Controller) 264
- Контроллер запросов (Front Controller) 273
- Представление по шаблону (Template View) 278
- Представление с преобразованием (Transform View) 286
- Двухэтапное представление (Two Step View) 289
- Контроллер приложения (Application Controller) 300
- Интерфейс удаленного доступа (Remote Facade) 307
- Объект переноса данных (Data Transfer Object) 317
- Оптимистическая автономная блокировка (Optimistic Offline Lock) 327
- Пессимистическая автономная блокировка (Pessimistic Offline Lock) 335
- Блокировка с низкой степенью детализации (Coarse-Grained Lock) 344
- Неявная блокировка (Implicit Lock) 353
- Сохранение состояния сеанса на стороне клиента (Client Session State) 358
- Сохранение состояния сеанса на стороне сервера (Server Session State) 360
- Сохранение состояния сеанса в базе данных (Database Session State) 363
- Шлюз (Gateway) 366
- Преобразователь (Mapper) 371
- Супертип слоя (Layer Supertype) 372
- Отделенный интерфейс (Separated Interface) 373
- Реестр (Registry) 376
- Объект-значение (Value Object) 381
- Деньги (Money) 383
- Частный случай (Special Case) 389
- Дополнительный модуль (Plugin) 392
Фиктивная служба (Service Stub) 396 Множество записей (Record Set) 399
Раздаточные материалы
Литература
- Д. Влиссидес, Э.Гамма, Р. Хелм, Р. Джонсон. Приёмы объектно ориентированного проектирования.Паттерны проектирования. Основная книга
- Стелтинг С., Массен О. Применение шаблонов Java Хорошая книга с несколькими новыми паттернами
- Гранд М. - Шаблоны проектирования в Java.
- Фримен Р., Фримен Л., Сьерра К., Бейтс Б. - Паттерны проектирования. Слишком популярная книга. Может служить источником нескольких примеров
- Смит Д. Элементарные шаблоны проектирования (2013). Попытка выделить в стандартных шаблонах элементарные и формализовать описание шаблонов.
- Мартин Фаулер. Архитектура корпоративных программных приложений. Паттерны в корпоративных приложениях
Софт
- UMLet - Редактор диаграмм UML с простым интерфейсом.
- Microsoft Visio (по подписке MSDN)
Интернет-источники
- Обзор паттернов проектирования на citforum.ru
- Шпаргалка по шаблонам проектирования на Хабрахабре
- Шпаргалка по шаблонам проектирования на itdumka.com.ua
- Design Patterns with C# examples
- Шаблоны проектирования (статья в Википедии)
Типы заданий
- По системе классов нарисовать UML-диаграмму
- По UML-диаграмме создать систему классов
- Реализовать задачу с применением данного паттерна и сдать отчет в указанном виде (вид отчета на паттерны разработать)
- В коде увидеть паттерн
- Переделать код без паттерна в код с паттерном
- Расширить работающий код с паттерном новой функциональностью (связь с ООП)
На лекциях:
- Доклады по конкретным реализациям паттернов в промышленных системах.
- Доклады по паттернам в параллельном программировании (везде они выносятся как отдельная тема)
Для дополнительных баллов рейтинга:
- Пополнение коллекции удачных простых хорошо запоминающихся примеров реализации паттернов
Необходимые факты из ООП
- Нотация UML-диаграмм классов и диаграмм последовательности
- Защита доступа в C#
- Свойства в C#, их особенности
- Делегаты C# (Указатели на функции, процедурные переменные). Multicast-делегаты
- События C# (events) - при необходимости
- Делегирование (один класс делегирует действия другому классу)
- Наследование и принцип Открыт-Закрыт
- Полиморфизм и принцип подстановки
- Интерфейсы
- Абстрактные классы, определение виртуальных методов для них
Введение в паттерны проектирования
Что такое паттерн проектирования
Паттерн проектирования - описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте.
Паттерн проектирования состоит из четырех элементов.
- Имя.Обращаясь к паттерну по имени, можно вести обсуждение с коллегами, упоминать паттерны в документации.
- Задача. Описание того, когда следует применять паттерн. Может описываться конкретная проблема, при решении которой уместно использовать паттерн.
- Решение.Описание классов и объектов, связей между ними.
- Результаты. Преимущества и недостатки данного паттерна. Влияние на степень гибкости, расширяемости и переносимости всей системы.
Описание паттернов проектирования
- Название и классификация паттерна
- Назначение
- Известен также под именем
- Мотивация (описание)
Какие недостатки есть у существующих решений и как паттерн помогает их решать.
- Использование
Ситуации, в которых уместно использовать данный паттерн.
- Структура
Диаграмма классов паттерна. Возможно, диаграмма последовательности.
- Участники
Классы и объекты и их методы
- Отношения
Взаимодействие классов и объектов
- Результаты (достоинства и недостатки)
Результаты применения, компромиссы. Какие аспекты поведения системы можно независимо изменять, используя данный паттерн.
- Реализация
Сложности реализации, зависимость от используемых языков программирования
- Пример кода
- Известные применения
- Родственные паттерны
Ранее известные паттерны
- Упаковка параметров
- Делегирование
- Итератор
- Выполнение операции для элементов полиморфного контейнера
Каталог основных паттернов
Порождающие паттерны
MazeGame
MazeGame - общий пример для порождающих паттернов Абстрактная фабрика, Строитель, Фабричный метод, Прототип.
Абстрактная фабрика (Abstract Factory)
Предоставляет интерфейс для создания компонентов системы.
Строитель (Builder)
Предоставляет интерфейс для создания частей сложного объекта и возвращения сконструированного объекта.
Фабричный метод (Factory Method)
Определяет интерфейс для создания объекта и оставляет подклассам решение о том, какой класс инстанцировать.
Прототип (Prototype)
Облегчает динамическое создание путем определения классов, объекты которых могут создавать свои дубликаты.
Одиночка (Singleton)
Обеспечивает наличие в системе только одного экземпляра заданного класса, предоставляет доступ к этому экземпляру.
Пул объектов (Object Pool)
Обеспечивает интерфейс для работы с набором инициализированных и готовых к использованию объектов.
Отложенная инициализация (Lazy Initialization)
Объект, инициализируемый во время первого обращения к нему.
Структурные паттерны
Адаптер (Adapter)
Адаптирует интерфейс одного класса к другому.
Мост (Bridge)
Позволяет менять интерфейс и реализацию независимо друг от друга.
Компоновщик (Composite)
Объединяет объекты в древовидные структуры. Единообразно трактует простые и составные объекты.
Пример. Графические фигуры - это окружность, квадрат, отрезок и СоставнаяФигура, которая состоит из других фигур, в то же время являясь фигурой.
Декоратор (Decorator)
Динамически добавляет объекту новые свойства (без использования наследования, на этапе выполнения).
Фасад (Facade)
Предоставляет простой интерфейс к большой системе, которая обычно представляет множество взаимосвязанных классов.
Приспособленец (Flyweight)
Уменьшает количество объектов системы с многочисленными низкоуровневыми особенностями путем совместного использования подобных объектов.
Заместитель (Proxy)
Заместитель ведет себя точно так же как и основной объект, выполняя при необходимости его инстанцирование.
Паттерны поведения
Цепочка обязанностей (Chain of Responsibility)
Некий запрос должен быть обработан в цепочке взаимосвязанных объектов (список, дерево - движение от листьев к корню). Объект либо обрабатывает запрос, либо передвает по цепочке следующему объекту. Если ни один из объектов не обработал запрос, то может происходить какое-то действие.
Команда (Command)
Упаковка действий в объекты с целью сделать откат изменений (Redo), логирование, комбинирование действий.
Посредник (Mediator)
В большой системе с множеством объектов каждый объект может передавать сообщения другому. В результате этого сильно возрастает количество связей между объектами (n^2).
Вместо этого предлагается завести объект-посредник, через который передавать эти сообщения (n связей)
Хранитель (Memento)
Хранитель - это объект, в котором сохраняется состояние другого объекта - хозяина хранителя. Это необходимо для того чтобы хозяин мог записать в хранитель некоторую контрольную точку - своё текущее состояние, а потом вернуться к этому состоянию.
Null Object
Не GoF.
Предотвращает нулевые указатели, предоставляя объект «по умолчанию».
Наблюдатель (Observer)
Другое имя: Издатель-Подписчик (Publisher-Subscriber)
При изменении состояния одного объекта все зависимые от него объекты (подписчики) оповещаются об обновлении.
Состояние (State)
Позволяет объекту менять своё поведение в зависимости от состояния. Состояние моделируется абстрактным объектом с множеством подобъектов (состояний).
Стратегия (Strategy)
Определяет семейство алгоритмов и позволяет менять алгоритм независимо от объекта-клиента, который им пользуется.
Шаблонный метод (Template Method)
Определяет каркас алгоритма с изменяющимися областями и позволяет наследникам переопределять эти области.
Посетитель (Visitor)
Позволяет выполнить над каждым объектом некоторой структуры операцию, не загрязняя код класса этого объекта и не используя определение типа для каждого объекта.
Разновидность - иерархический визитор - позволяет обойти иерархическую структуру (дерево)
Архитектурные паттерны
Модель-Представление-Контроллер (Model-View-Controller,MVC)
Ссылка на статью в Википедию о паттерне MVC
Модель данных приложения (бизнес-логика), пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные. Является по-существу схемой использования нескольких шаблонов проектирования.