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

Кафедра информатики и автоматизации научных исследований

Специальность: Прикладная информатика в области принятия решений

Преподаватель: Старостин Н.В.

Целями освоения дисциплины (модуля) «Шаблоны проектирования»  являются ознакомление  студентов  с новыми мировыми концепциями в области разработки объектно-ориентированного программного обеспечения.

В рамках курса приводится обзор базовых методологий разработки программных систем, обсуждаются их преимущества и недостатки. Рассматриваются аспекты проектирования и реализации программных систем, которые позволяют учитывать вопросы будущих модификаций, переносимости и отладки систем. Для ясного понимания диаграмм, имеющих место в курсе, даются основы языка UML. В курсе рассматриваются такие аспекты объектно-организованных программных систем, как инстанцирование, информационный обмен, высокоуровневое управление системами объектов. Обсуждаются вопросы функционального расширения системы с минимальными изменениями в существующем коде. Отдельно освещаются вопросы оптимизации систем на этапе проектирования.

К дисциплинам, для которых освоение данной дисциплины необходимо как предшествующее, относятся дисциплины вариативной части (профильной) части профессионального цикла «Основы алгоритмизации и алгоязыки», «Информационные технологии», «Высокоуровневые методы информатики и программирования(С++)».

В результате освоения дисциплины обучающийся должен:

Знать: основные понятия и принципы объектно-ориентированной парадигмы, основные определения и методы проектирования построения сложных объектно-ориентированных систем на основе шаблонных решений, основополагающие принципы инстанцирования объектно-организованных систем и варианты их объектно-ориентированной реализации, модели связности систем объектов, идеологию организации управляемых систем объектов.

Уметь: применять шаблонные решения к конкретным задачам проектирования.

Владеть: базовыми средствами языка UML по визуализации моделей объектно-ориентированных программ, приемами проектирования на шаблонных решений, техниками реализации проектных решений на одном из объектно-ориентированных языков программирования.

Содержание

1. ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ПАРАДИГМА. Метод функциональной декомпозиции и проблема изменяющихся требований. Основные термины, понятия и принципы объектно-ориентированной парадигмы. Дополнительные механизмы объектно-ориентированной технологии.

2. ВВЕДЕНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ и БАЗИС ЯЗЫКА ВИЗУАЛЬНОГО МОДЕЛИРОВАНИЯ. Сложность систем. Объектная модель. Классификация. Идентификация классов и объектов. Ключевые абстракции и механизмы. Базис языка визуального моделирования. Унифицированный язык моделирования UML. Назначение, базовые понятия и определения. Концептуальные модели. Сущности. Отношения. Диаграммы. Статические и динамические модели программных систем. Применение UML на основных этапах разработки объектно-ориентированной системы.

3. ШАБЛОННЫЙ МЕТОД ПРОЕКТИРОВАНИЯ. Механизмы повторного использования. Система каталогизации шаблонов проектирования. Объекты: традиционное представление и новый подход. Инкапсуляция: традиционное представление и новый подход. Принципы инкапсуляции.  Общность и изменчивость в абстрактных классах.

4. ШАБЛОНЫ ФАСАД И АДАПТЕР. Специфика работа со сложной системой с множеством интерфейсов. Описание решения на базе шаблона Фасад (Facade). Проблема преобразования интерфейса класса в другой интерфейс. Обеспечение совместной работы классов с несовместимыми интерфейсами. Описание решения на базе шаблона Адаптер (Adapter).

5. ШАБЛОН МОСТ. Понятия абстракции и реализации. Механизм отделения абстракции от реализации. Анализ общности и анализ изменчивости. Стратегии проектирования. Понятие рефакторинга. Вывод и описание шаблона Мост (Bridge). Особенности использования шаблона Мост.

6. ШАБЛОНЫ КОМПОНОВЩИК И ИТЕРАТОР. Механизм группировки объектов в плоские коллекции и иерархические структуры. Манипулирование группами с помощью шаблона Компоновщик (Composite). Прозрачные и безопасный Компоновщик (Composite). Организация доступа к элементам составного объекта на базе шаблон Итератор (Iterator). Внутренний и внешний итератор. Проблема устойчивости итератора. Робастный итератор для линейных и иерархических структур.

7. ШАБЛОНЫ ДЕКОРАТОР И СТРАТЕГИЯ. Динамическое расширение функциональности объектов. Шаблон Декоратор (Decorator) – как  гибкая альтернатива порождению подклассов. Инкапсуляция алгоритма в объект. Механизм «прозрачной» замены алгоритма. Шаблон Стратегия (Strategy).

8. ИНСТАНЦИРОВАНИЕ ОБЪЕКТНО-ОРГАНИЗОВАННЫХ СИСТЕМ. Основополагающие принципы.  Обработка вариаций с применением порождающих шаблонов проектирования. Идеология объекта-одиночки (Singleton) в системе объектов. Способы доступа к объекту-одиночке. Конфигурирование и инстанцирование систем объектов на базе решения Абстрактная Фабрика (Abstract Factory). Применение решений Фабричного Метода  (Factory Method) и Шаблонного Метода (Template Method) в конструировании каркасов приложений с использование. Клонирование объектов и систем объектов. Поверхностное и глубокое клонирование на базе Прототипа (Prototype). Организация процесса конструирования различных представлений сложного объекта на базе решения Строитель (Builder).

9. ИНФОРМАЦИОННЫЙ ОБМЕН МЕЖДУ ОБЪЕКТАМИ. Основополагающие принципы. Классификация моделей связанности (зависимости) по типу связей и по сложности. Простейшие модели. Модель информационного обмена с помощью Посредника (Mediator). Модель доставки сообщения на базе решения Цепочка Обязанностей (Chain of Responsibility). Цепочки Обязанностей без менеджера и с менеджером. Проксирование сообщений. Широковещательные трансляции на базе шаблона Наблюдатель (Observer). Особенности реализации систем типа Субъект-Наблюдатель без менеджера и с менеджером без учета и с учетом циклических связей (зависимостей).

10. УПРАВЛЕНИЕ СИСТЕМОЙ ОБЪЕКТОВ. Идеология представление команды (операции) в виде объекта. Манипулирование командами как объектами. Протоколирование команд. Организация макросов (составные команды) на базе шаблона Компоновщик (Composite). Менеджер команд и универсальные механизмы отката (отмены операций) на базе решений Команда (Command) и Хранитель (Memento).

11. ФУНКЦИОНАЛЬНОЕ РАСШИРЕНИЕ СИСТЕМЫ С МИНИМАЛЬНЫМИ ИЗМЕНЕНИЯМИ. Наращивание функциональности отдельных объектов (классов) без изменения существующего кода на базе решений Декоратор (Decorator) и Стратегия (Strategy). Двойная диспетчеризация. Динамическое определение новых функций для систем объектов без изменения существующего кода на базе решения Посетитель (Visitor). Представление грамматики языка и  интерпретация предложений на базе шаблона Интерпретатор (Interpreter).

12. ПРОЕКТИРОВАНИЕ С ЭЛЕМЕНТАМИ ОПТИМИЗАЦИИ. Планирование вычислительных ресурсов. Идеологии кэширования и отложенной реакции на событие. Объектно-ориентированная организация событийных систем на основе решения Заместитель (Proxy). Идеология разделения объекта и его состояния. Объектно-ориентированная организация систем с большим числом объектов на основе решения Приспособленец (Flyweight). Идеология совмещения в одном объекта разных состояний на основе решения Состояние (State).

Лабораторный практикум

  1. ВИЗУАЛЬНОЕ МОДЕЛИРОВАНИЕ СРЕДСТВАМИ UML. По заданному объектно-ориентированному коду студенты должны построить UML-диаграмму классов и проверить ее работу UML-диаграммой последовательностей. По заданной UML-диаграмме классов студенты должны написать рабочий код, который бы соответствовал модели.
  2. МЕХАНИЗМЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОЙ ПАРАДИГМЫ. Повторение основных механизмов объектно-ориентированного программирования на базе языков С++, Java и C#. В рамках данного практического задания слушатели создают интерфейсы и иерархии объектов. Учатся реализовывать объекты-коллекции.
  3. ВВЕДЕНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ. Моделирование процесса конструирования программной системы от обсуждения технического задания с заказчиком до построения дизайна каркаса системы. В рамках данного практического задания слушатели учатся строить разговор с заказчиком, моделировать работу системы в виде диаграмм прецедентов, реализовывать отдельные прецеденты в кооперации, проводить тестирование дизайна системы.
  4. РЕАЛИЗАЦИЯ СХЕМ АДАПТАЦИИ ИНТЕРФЕЙСОВ. На данном практическом занятии слушатели создают объект-фасад к большому объекту (например System.Drawing.Graphics в среде .NET) и объект-адаптер к заданному интерфейсу.
  5. РЕАЛИЗАЦИЯ ШАБЛОНА МОСТ. На данном практическом занятии слушатели учатся проектировать системы методом разделения абстракций и реализаций. На примере конкретной задачи (например задача рисования внешнего вида объектов-фигур) учатся применять шаблонное решение Мост (Bridge). Отдельное внимание уделяется конфигурированию моста.

Пример задачи. Предусмотреть в системе разные виды фигур (окружности, прямоугольники, треугольники и д.р.). Фигуры должны хранить информацию о своем расположении и должны по требованию себя рисовать. Создайте объект-рисователь, в задачу которого входит рисование графических примитивов (линий и окружностей). Пусть фигуры используют объекты-рисователи для отображения себя. Создайте несколько видов рисователей. Конфигурируйте ими фигуры для получения разных визуальных представлений фигур (например, простые фигуры, фигуры с тенью, фигуры полупрозрачные и д.р.).

  1. ПРОЕКТИРОВАНИЕ И РЕАЛИЗАЦИЯ ГРУППОВЫХ ОБЪЕКТОВ. Практическое занятие знакомит слушателей с реализацией шаблона Компоновщик (Composite). Задание заключается в требовании построить систему, в которой имеется возможность клиентской части приложения работать не только с единичными объектами, ни и с группой объектов. При этом клиентская часть не должна «знать» работает она с единичными или групповыми объектами.

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

  1. ПРОЕКТИРОВАНИЕ, СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ ИТЕРАТОРОВ. Практическое занятие знакомит слушателей с типовыми интерфейсами итераторов. На данном практическом задании слушатели должны обеспечить в созданных ими коллекциях поддержку интерфейса итератора и организовать перебор элементов коллекций при помощи итераторов.
  2. ДЕКОРИРОВАНИЕ ОБЪЕКТОВ. Практическое занятие знакомит слушателей с реализацией шаблона Decorator. Студенты учатся проектировать прозрачные для клиентского кода объекты-оболочки, которые помимо основной работы выполняют другие дополнительные действия.

Пример задачи. Реализовать свойства фигур: фигура с тенью, фигура с рамкой, фигура закрашенная. Предусмотреть возможность расширения перечня свойств фигур и возможность произвольной комбинации свойств для фигур (например, фигура с тенью и рамкой). Для решения поставленной задачи создайте абстрактный класс свойств фигур, организуйте его как шаблон Декоратор. Конкретные свойства фигур реализуйте в конкретных классах-потомках от абстрактный класс свойств.

  1. ИНКАПСУЛЯЦИЯ СТРАТЕГИЙ НА ПРИМЕРЕ СОРТИРОВКИ. Практическое занятие знакомит слушателей с реализацией шаблона Стратегия (Strategy) на примере алгоритма сортировки. В рамках данного практического задания слушатели добавляют в объект-коллекцию способность сортировать объекты согласно стратегиям сортировки.
  2. ИНСТАНЦИРОВАНИЕ ОБЪЕКТНО-ОРГАНИЗОВАННЫХ СИСТЕМ. Реализация объекта-одиночки в системе цель которого – инстанциирование объектов Абстрактной Фабрики. Практическое занятие знакомит слушателей с реализацией шаблонов Абстрактной Фабрики (Abstract Factory), Фабричный Метод (Factory Method) и одиночки (Singleton). В рамках данного практического задания слушатели модифицируют код программы, заменяя в ней явное создание объектов при помощи оператора new на запрос у объекта-фабрики.
  3. ДОСТАВКА СООБЩЕНИЙ. Реализация модели доставки сообщения на базе шаблона Цепочка Обязанностей (Chain of Responsibility). Практическое занятие знакомит слушателей с механизмом доставки сообщений при помощи менеджера сообщений. В рамках данного практического задания слушатели создают специальный объект (Message Manager), организующий механизм распространения сообщений по цепочке от одного объекта к другому.
  4. СУБЪЕКТЫ И НАБЛЮДАТЕЛИ. Реализация независимых субъектов и зависимых от них объектов-наблюдателей. Практическое занятие знакомит слушателей с кооперацией шаблонов Наблюдатель (Observer), Шаблонный Метод (Template Method) и Одиночка (Singleton) для реализации классической разделенной модели субъект-наблюдателя. В рамках данного практического задания студенты должны создать объект-субъект, который содержит разнообразные общедоступные данные, и группу объектов-наблюдателей, которые автоматически должны пересчитывать свои состояния при изменении состояния субъекта.
  5. РЕАЛИЗАЦИЯ МЕХАНИЗМА ОТКАТА СИСТЕМЫ. Практическое занятие знакомит студентов с кооперацией шаблонов Прототип (Prototype), Шаблонный Метод(Template Method) и Одиночка (Singleton) для реализации шаблона Команда (Command). В рамках данного практического задания все запросы к системе инкапсулируются в специальные объекты-команды, обслуживанием которых занимается специальный объект (Command Manager). В дополнительную задачу этого объекта входит реализация универсального механизма протоколирования выполненных команд и механизма отката состояния системы в любое предыдущее состояние.
  6. ДВОЙНАЯ ДИСПЕТЧЕРИЗАЦИЯ. Реализация двойной диспетчеризации на базе шаблона Посетитель (Visitor). Практическое занятие знакомит студентов с методом расширения функциональности системы без изменения существующего кода. В рамках данного практического задания группе объектов приписывается дополнительная обязанность принимать посетителя (семейство объектов Visitor). Посетители «посещая» объекты выполняют над ними определенные действия.
  7. КЭШИРОВАНИЕ. Практическое занятие знакомит студентов с техникой кэширования для повышения производительности систем.

Литература

а) основная литература:

  1. Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования
  2. Алан Шаллоуей, Джеймс Р. Тротт. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию
  3. Гради Буч, Дж. Рамбо, А. Якобсон. UML: специальный справочник

б) дополнительная литература:

  1. А. Элиенс. Принципы объектно-ориентированной разработки программ
  2. Коуд и др. Объектные модели. Стратегии, шаблоны и приложения.
  3. Крэг Ларман. Применение UML и шаблонов проектирования
  4. Гради Буч, Дж. Рамбо, А. Якобсон. UML. Руководство пользователя
  5. Мартин Фаулер. Рефакторинг. Улучшение существующего кода
  6. Гради Буч, Дж. Рамбо, А. Якобсон. Унифицированный процесс разработки программного обеспечения

Отчетность

  • Семестр 1: Экз