Страница курса Паттерны проектирования — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Темы докладов и рефератов)
(Темы докладов и рефератов)
Строка 2: Строка 2:
 
== Материалы к курсу ==
 
== Материалы к курсу ==
  
=== Темы докладов и рефератов ===
+
[[Темы докладов и рефератов]]
По книге Гранд М. "Шаблоны проектирования в 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
 
  
 
=== Раздаточные материалы ===
 
=== Раздаточные материалы ===

Версия 13:19, 5 июля 2015

Материалы к курсу

Темы докладов и рефератов

Раздаточные материалы

Лекция 2

Литература

  1. Д. Влиссидес, Э.Гамма, Р. Хелм, Р. Джонсон. Приёмы объектно ориентированного проектирования.Паттерны проектирования. Основная книга
  2. Стелтинг С., Массен О. Применение шаблонов Java Хорошая книга с несколькими новыми паттернами
  3. Гранд М. - Шаблоны проектирования в Java.
  4. Фримен Р., Фримен Л., Сьерра К., Бейтс Б. - Паттерны проектирования. Слишком популярная книга. Может служить источником нескольких примеров
  5. Смит Д. Элементарные шаблоны проектирования (2013). Попытка выделить в стандартных шаблонах элементарные и формализовать описание шаблонов.
  6. Мартин Фаулер. Архитектура корпоративных программных приложений. Паттерны в корпоративных приложениях

Софт

  1. UMLet - Редактор диаграмм UML с простым интерфейсом.
  2. Microsoft Visio (по подписке MSDN)

Интернет-источники

  1. Обзор паттернов проектирования на citforum.ru
  2. Шпаргалка по шаблонам проектирования на Хабрахабре
  3. Шпаргалка по шаблонам проектирования на itdumka.com.ua
  4. Design Patterns with C# examples
  5. Шаблоны проектирования (статья в Википедии)

Типы заданий

  • По системе классов нарисовать UML-диаграмму
  • По UML-диаграмме создать систему классов
  • Реализовать задачу с применением данного паттерна и сдать отчет в указанном виде (вид отчета на паттерны разработать)
  • В коде увидеть паттерн
  • Переделать код без паттерна в код с паттерном
  • Расширить работающий код с паттерном новой функциональностью (связь с ООП)

На лекциях:

  • Доклады по конкретным реализациям паттернов в промышленных системах.
  • Доклады по паттернам в параллельном программировании (везде они выносятся как отдельная тема)

Для дополнительных баллов рейтинга:

  • Пополнение коллекции удачных простых хорошо запоминающихся примеров реализации паттернов

Необходимые факты из ООП

  • Нотация UML-диаграмм классов и диаграмм последовательности
  • Защита доступа в C#
  • Свойства в C#, их особенности
  • Делегаты C# (Указатели на функции, процедурные переменные). Multicast-делегаты
  • События C# (events) - при необходимости
  • Делегирование (один класс делегирует действия другому классу)
  • Наследование и принцип Открыт-Закрыт
  • Полиморфизм и принцип подстановки
  • Интерфейсы
  • Абстрактные классы, определение виртуальных методов для них

Введение в паттерны проектирования

Что такое паттерн проектирования

Паттерн проектирования - описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте.

Паттерн проектирования состоит из четырех элементов.

  1. Имя.Обращаясь к паттерну по имени, можно вести обсуждение с коллегами, упоминать паттерны в документации.
  2. Задача. Описание того, когда следует применять паттерн. Может описываться конкретная проблема, при решении которой уместно использовать паттерн.
  3. Решение.Описание классов и объектов, связей между ними.
  4. Результаты. Преимущества и недостатки данного паттерна. Влияние на степень гибкости, расширяемости и переносимости всей системы.

Описание паттернов проектирования

  • Название и классификация паттерна
  • Назначение
  • Известен также под именем
  • Мотивация (описание)

Какие недостатки есть у существующих решений и как паттерн помогает их решать.

  • Использование

Ситуации, в которых уместно использовать данный паттерн.

  • Структура

Диаграмма классов паттерна. Возможно, диаграмма последовательности.

  • Участники

Классы и объекты и их методы

  • Отношения

Взаимодействие классов и объектов

  • Результаты (достоинства и недостатки)

Результаты применения, компромиссы. Какие аспекты поведения системы можно независимо изменять, используя данный паттерн.

  • Реализация

Сложности реализации, зависимость от используемых языков программирования

  • Пример кода
  • Известные применения
  • Родственные паттерны

Ранее известные паттерны

  • Упаковка параметров
  • Делегирование
  • Итератор
  • Выполнение операции для элементов полиморфного контейнера

Каталог основных паттернов

Порождающие паттерны

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

Модель данных приложения (бизнес-логика), пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные. Является по-существу схемой использования нескольких шаблонов проектирования.