Первый слайд презентации: Проектирование ИС (часть 2) Тема 2 : Паттерны проектирования
Объем лекций по теме: 6 часов Лектор: Щеголева Людмила Владимировна
ПрИС 2 Паттерны проектирования 2 Тема 2 : Паттерны проектирования Содержание Введение Порождающие паттерны Структурные паттерны Паттерны поведения Пример использования паттернов
Слайд 4: Паттерн: определение
ПрИС 2 Паттерны проектирования 4 Паттерн: определение имя задача решение результаты
Слайд 5: Классификация паттернов
ПрИС 2 Паттерны проектирования 5 Классификация паттернов Архитектурные паттерны Паттерны проектирования Паттерны анализа Паттерны тестирования Паттерны реализации
Слайд 6: Классификация паттернов
ПрИС 2 Паттерны проектирования 6 Классификация паттернов Архитектурные паттерны Паттерны проектирования Паттерны анализа Паттерны тестирования Паттерны реализации
ПрИС 2 Паттерны проектирования 7 Паттерны проектирования Классификация порождающие паттерны структурные паттерны паттерны поведения
Слайд 8: Порождающие паттерны
ПрИС 2 Паттерны проектирования 8 Порождающие паттерны Абстрактная фабрика Одиночка Прототип Строитель Фабричный метод
Слайд 9: Структурные паттерны
ПрИС 2 Паттерны проектирования 9 Структурные паттерны Адаптер Декоратор Заместитель Компоновщик Мост Приспособленец Фасад
Слайд 10: Паттерны поведения
ПрИС 2 Паттерны проектирования 10 Паттерны поведения Интерпретатор Итератор Команда Наблюдатель Посетитель Посредник Состояние Стратегия Хранитель Цепочка обязанностей Шаблонный метод
Слайд 12: Паттерн «Абстрактная фабрика» Задача
ПрИС 2 Паттерны проектирования 12 Паттерн «Абстрактная фабрика» Задача предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов другие имена: Инструментарий
Слайд 13: Паттерн «Абстрактная фабрика» Решение
ПрИС 2 Паттерны проектирования 13 Паттерн «Абстрактная фабрика» Решение
Слайд 14: Паттерн «Одиночка» Задача
ПрИС 2 Паттерны проектирования 14 Паттерн «Одиночка» Задача необходим только один экземпляр класса
Слайд 15: Паттерн «Одиночка» Решение
ПрИС 2 Паттерны проектирования 15 Паттерн «Одиночка» Решение Одиночка ПолучитьДоступ()
Слайд 16: Паттерн «Прототип» Задача
ПрИС 2 Паттерны проектирования 16 Паттерн «Прототип» Задача система не должна зависеть от того, как в ней создаются, компонуются и представляются объекты
Слайд 17: Паттерн «Прототип» Решение
ПрИС 2 Паттерны проектирования 17 Паттерн «Прототип» Решение Клиент Прототип Клонировать() Конкретный Прототип 1 Клонировать() Конкретный Прототип 2 Клонировать()
Слайд 18: Паттерн «Строитель» Задача
ПрИС 2 Паттерны проектирования 18 Паттерн «Строитель» Задача необходимо отделить конструирование сложного объекта от его представления
Слайд 19: Паттерн «Строитель» Решение
ПрИС 2 Паттерны проектирования 19 Паттерн «Строитель» Решение Продукт Директор Создать() Строитель ПостроитьЧасть() Конкретный Строитель ПостроитьЧасть() ПолучитьРезультат()
Слайд 20: Паттерн «Строитель» Решение
ПрИС 2 Паттерны проектирования 20 Паттерн «Строитель» Решение : Клиент : Директор : Конкретный Строитель new КонкретныйСтроитель ПолучитьРезультат() Создать() ПостроитьЧастьА() new Директор( КонкретныйСтроитель) ПостроитьЧастьВ() ПостроитьЧастьС()
Слайд 21: Паттерн «Фабричный метод» Задача
ПрИС 2 Паттерны проектирования 21 Паттерн «Фабричный метод» Задача необходимо определить интерфейс для создания объекта, но оставить подклассам возможность решения о том, какой класс инстанцировать другие имена: виртуальный конструктор
Слайд 22: Паттерн «Фабричный метод» Решение
ПрИС 2 Паттерны проектирования 22 Паттерн «Фабричный метод» Решение Продукт Конкретный Продукт Создатель ФабричныйМетод() Конкретный Создатель ФабричныйМетод()
Слайд 23: Паттерн «Фабричный метод» Пример
ПрИС 2 Паттерны проектирования 23 CreateDocument () NewDocument() OpenDocument() Open() Close() Save() Revert() Паттерн «Фабричный метод» Пример Document MyDocument Application MyApplication CreateDocument ()
Слайд 25: Паттерн «Адаптер» Задача
ПрИС 2 Паттерны проектирования 25 Паттерн «Адаптер» Задача необходимо обеспечить взаимодействие несовместимых интерфейсов
Слайд 26: Паттерн «Адаптер» Решение
ПрИС 2 Паттерны проектирования 26 Паттерн «Адаптер» Решение
Слайд 27: Паттерн «Декоратор» Задача
ПрИС 2 Паттерны проектирования 27 Паттерн «Декоратор» Задача необходимо возложить дополнительные обязанности на отдельный объект, а не на класс в целом другие имена: Оболочка Обертка
Слайд 28: Паттерн «Декоратор» Решение
ПрИС 2 Паттерны проектирования 28 Паттерн «Декоратор» Решение Компонент Операция() Конкретный Компонент Операция() Декоратор Операция() Конкретный Декоратор 1 Операция() Конкретный Декоратор 2 Операция() Новая Операция()
Слайд 29: Паттерн «Декоратор» Пример
ПрИС 2 Паттерны проектирования 29 Паттерн «Декоратор» Пример VisualComponent Draw () TextView Draw () Decorator Draw () ScrollDecorator scrollPosition Draw () ScrollTo() BorderDecorator borderWidth Draw () DrawBorder ()
Слайд 30: Паттерн «Заместитель» Задача
ПрИС 2 Паттерны проектирования 30 Паттерн «Заместитель» Задача необходимо управлять доступом к объекту, так чтобы создавать громоздкие объекты «по требованию» другие имена: Суррогат
Слайд 31: Паттерн «Заместитель» Решение
ПрИС 2 Паттерны проектирования 31 Паттерн «Заместитель» Решение Клиент Реальный Субъект Субъект Запрос() Заместитель Запрос()
Слайд 32: Паттерн «Компоновщик» Задача
ПрИС 2 Паттерны проектирования 32 Паттерн «Компоновщик» Задача необходимо обрабатывать группу или композицию структур объектов одновременно
Слайд 33: Паттерн «Компоновщик» Решение
ПрИС 2 Паттерны проектирования 33 Паттерн «Компоновщик» Решение Операция() Добавить() Удалить() ПолучитьЭлемент() Элемент Операция() Клиент Компонент Операция() Добавить() Удалить() ПолучитьЭлемент() СоставнойОбъект потомки
Слайд 34: Паттерн «Мост» Задача
ПрИС 2 Паттерны проектирования 34 Паттерн «Мост» Задача необходимо отделить абстракцию от ее реализации так, чтобы то и другое можно было изменять независимо другие имена: Описатель Тело
Слайд 35: Паттерн «Мост» Решение
ПрИС 2 Паттерны проектирования 35 Паттерн «Мост» Решение Клиент Абстракция Реализация Уточненная Абстракция Конкретная Реализация 1 Конкретная Реализация 2
Слайд 36: Паттерн «Мост» Пример
ПрИС 2 Паттерны проектирования 36 Паттерн «Мост» Пример
Слайд 37: Паттерн «Приспособленец» Задача
ПрИС 2 Паттерны проектирования 37 Паттерн «Приспособленец» Задача необходимо обеспечить поддержку множества мелких объектов
Слайд 38: Паттерн «Приспособленец» Решение
ПрИС 2 Паттерны проектирования 38 Паттерн «Приспособленец» Решение ПриспособленецФабрика ПриспособленецСоздать(ключ) Клиент Приспособленец Операция(внешнее состояние) Конкретный Приспособленец Операция(внешнее состояние) Неразделяемый Конкретный Приспособленец Операция(внешнее состояние)
Слайд 39: Паттерн «Фасад» Задача
ПрИС 2 Паттерны проектирования 39 Паттерн «Фасад» Задача необходимо обеспечить унифицированный интерфейс с набором разрозненных реализаций или интерфейсов
Слайд 40: Паттерн «Фасад» Решение
ПрИС 2 Паттерны проектирования 40 Паттерн «Фасад» Решение «interface» IConcreteClass ConcreteClass Facade «interface» IFacade 1..* 1
Слайд 41: Паттерн «Фасад» Пример
ПрИС 2 Паттерны проектирования 41 Паттерн «Фасад» Пример « Interface » I Адрес + ЗадатьУлицу() + ЗадатьКорпус() + ЗадатьДом() + ЗадатьКвартиру() + ПрочитатьУлицу() + ПрочитатьКорпус() + ПрочитатьДом() + ПрочитатьКвартиру() « Interface » I Фасад + ЗадатьАдрес() + ПрочитатьАдрес() Адрес - Улица : String - Корпус : Integer - Дом : Integer - Квартира : Integer Фасад + Адрес : String
Слайд 42: Паттерн «Фасад» Пример
ПрИС 2 Паттерны проектирования 42 Паттерн «Фасад» Пример : Фасад : Адрес ЗадатьАдрес() ЗадатьУлицу() ЗадатьКорпус() ЗадатьДом() ЗадатьКвартиру()
Слайд 44: Паттерн «Интерпретатор» Задача
ПрИС 2 Паттерны проектирования 44 Паттерн «Интерпретатор» Задача имеется часто встречающаяся, подверженная изменениям задача
Слайд 45: Паттерн «Интерпретатор» Решение
ПрИС 2 Паттерны проектирования 45 Паттерн «Интерпретатор» Решение Клиент Абстрактное Выражение Разобрать(Контекст) Терминальное Выражение Разобрать(Контекст) Нетерминальное Выражение Разобрать(Контекст) Контекст
Слайд 46: Паттерн «Итератор» Задача
ПрИС 2 Паттерны проектирования 46 Паттерн «Итератор» Задача необходимо предоставить способ последовательного доступа ко всем элементам составного объекта, не раскрывая его внутреннего представления другие имена: Курсор
Слайд 47: Паттерн «Итератор» Решение
ПрИС 2 Паттерны проектирования 47 Первый() Следующий() Выполнено() ТекущийЭлемент() Паттерн «Итератор» Решение Агрегат СоздатьИтератор() Клиент Итератор Конкретный Агрегат СоздатьИтератор() Конкретный Итератор
Слайд 48: Паттерн «Команда» Задача
ПрИС 2 Паттерны проектирования 48 Паттерн «Команда» Задача необходимо послать объекту запрос, не зная о том, выполнение какой операции запрошено и кто будет получателем другие имена: Действие Транзакция
Слайд 49: Паттерн «Команда» Решение
ПрИС 2 Паттерны проектирования 49 Паттерн «Команда» Решение Клиент Команда Выполнить() Инициатор Получатель Действие() Конкретная Команда Состояние Выполнить()
Слайд 50: Паттерн «Наблюдатель» Задача
ПрИС 2 Паттерны проектирования 50 Паттерн «Наблюдатель» Задача один объект («Подписчик») должен знать об изменении состояний или некоторых событиях другого объекта, при этом необходимо поддерживать низкий уровень связывания с объектом «Подписчик» другие имена: Опубликовать – подписаться Delegation Event Model
Слайд 51: Паттерн «Наблюдатель» Решение
ПрИС 2 Паттерны проектирования 51 Паттерн «Наблюдатель» Решение Subject Concrete Subject ConcreteObserver Observer 1..* 1
Слайд 52: Паттерн «Наблюдатель» Пример
ПрИС 2 Паттерны проектирования 52 Паттерн «Наблюдатель» Пример ТаблицаБД Таблица MSAccess Круговая Диаграмма Диаграмма 1..* 1 Столбиковая Диаграмма
Слайд 53: Паттерн «Посетитель» Задача
ПрИС 2 Паттерны проектирования 53 Паттерн «Посетитель» Задача необходимо определить новую операцию, не изменяя классы объектов
Слайд 54: Паттерн «Посетитель» Решение
ПрИС 2 Паттерны проектирования 54 Паттерн «Посетитель» Решение ПосетитьЭлементА() ПосетитьЭлементВ() Клиент Посетитель СтруктураОбъекта ПосетитьЭлементА() ПосетитьЭлементВ() Конкретный Посетитель1 Элемент Принять(Посетитель) Конкретный Элемент А Принять(Посетитель) ОперацияА() Конкретный Элемент В Принять(Посетитель) ОперацияВ()
Слайд 55: Паттерн «Посетитель» Решение
ПрИС 2 Паттерны проектирования 55 Паттерн «Посетитель» Решение : Структура Объекта : Конкретный Элемент А : Конкретный Элемент В : Конкретный Посетитель Принять(Посетитель) ПосетитьЭлементА(КонкретныйЭлементА) ОперацияА() Принять(Посетитель) ПосетитьЭлементВ( КонкретныйЭлементВ) ОперацияВ()
Слайд 56: Паттерн «Посредник» Задача
ПрИС 2 Паттерны проектирования 56 Паттерн «Посредник» Задача обеспечить взаимодействие множества объектов, сформировав при этом слабую связанность и избавив объекты от необходимости явно ссылаться друг на друга
Слайд 57: Паттерн «Посредник» Решение
ПрИС 2 Паттерны проектирования 57 Паттерн «Посредник» Решение Посредник Коллеги Конкретный Посредник Конкретный Коллега 1 Конкретный Коллега 2
Слайд 58: Паттерн «Посредник» Пример
ПрИС 2 Паттерны проектирования 58 Паттерн «Посредник» Пример
Слайд 59: Паттерн «Посредник» Пример
ПрИС 2 Паттерны проектирования 59 Паттерн «Посредник» Пример DialogDirector ShowDialog() CreateWidget() WidgetChanged(Widget) Widget Changed() FontDialog Director CreateWidget() WidgetChanged(Widget) ListBox GetSelection() Edit SetText()
Слайд 60: Паттерн «Посредник» Пример
ПрИС 2 Паттерны проектирования 60 Паттерн «Посредник» Пример
Слайд 61: Паттерн «Состояние» Задача
ПрИС 2 Паттерны проектирования 61 Паттерн «Состояние» Задача необходимо варьировать поведение объекта в зависимости от его внутреннего состояния
Слайд 62: Паттерн «Состояние» Решение
ПрИС 2 Паттерны проектирования 62 Паттерн «Состояние» Решение Контекст Запросить() Конкретное Состояние 1 Изменить() Состояние Изменить() Конкретное Состояние 2 Изменить()
Слайд 63: Паттерн «Стратегия» Задача
ПрИС 2 Паттерны проектирования 63 Паттерн «Стратегия» Задача необходимо спроектировать изменяемые, но надежные алгоритмы или стратегии другие имена Политика
Слайд 64: Паттерн «Стратегия» Решение
ПрИС 2 Паттерны проектирования 64 Паттерн «Стратегия» Решение Контекст КонтекстИнтерфейс() Стратегия АлгоритмИнтерфейс() Конкретная Стратегия А АлгоритмИнтерфейс() Конкретная Стратегия В АлгоритмИнтерфейс() Конкретная Стратегия С АлгоритмИнтерфейс()
Слайд 65: Паттерн «Хранитель» Задача
ПрИС 2 Паттерны проектирования 65 Паттерн «Хранитель» Задача необходимо зафиксировать поведение объекта для реализации другие имена: Лексема
Слайд 66: Паттерн «Хранитель» Решение
ПрИС 2 Паттерны проектирования 66 Паттерн «Хранитель» Решение Посыльный Хозяин СоздатьХранитель() УстановитьХранитель() Хранитель УстановитьСостояние() СчитатьСостояние()
Слайд 67: Паттерн «Цепочка обязанностей» Задача
ПрИС 2 Паттерны проектирования 67 Паттерн «Цепочка обязанностей» Задача запрос должен быть обработан несколькими объектами
Слайд 68: Паттерн «Цепочка обязанностей» Решение
ПрИС 2 Паттерны проектирования 68 Паттерн «Цепочка обязанностей» Решение Клиент Обработчик ОбработатьЗапрос() Конкретный Обработчик 1 ОбработатьЗапрос() Конкретный Обработчик 2 ОбработатьЗапрос() преемник
Слайд 69: Паттерн «Шаблонный метод» Задача
ПрИС 2 Паттерны проектирования 69 Паттерн «Шаблонный метод» Задача необходимо определить алгоритм и реализовать возможность переопределения некоторых шагов алгоритма для подклассов без изменения общей структуры алгоритма
Слайд 70: Паттерн «Шаблонный метод» Решение
ПрИС 2 Паттерны проектирования 70 Паттерн «Шаблонный метод» Решение АбстрактныйКласс ШаблонныйМетод () Операция1 () Операция2() КонкретныйКласс Операция1() Операция2()
Слайд 71: Аспекты паттернов
ПрИС 2 Паттерны проектирования 71 Аспекты паттернов Назначение Паттерн Аспекты Порождающие паттерны Абстрактная фабрика Семейства порождаемых объектов Одиночка Единственный экземпляр класса Прототип Класс, из которого инстанцируется объект Строитель Способ создания собственного объекта Фабричный метод Инстанцируемый подкласс объекта Структурные паттерны Адаптер Интерфейс к объекту Декоратор Обязанности объекта без порождения подкласса Заместитель Способ доступа к объекту, его местоположение Компоновщик Структура и состав объекта Мост Реализация объекта Приспособленец Накладные расходы на хранение объектов Фасад Интерфейс к подсистеме Паттерны поведения Интерпретатор Грамматика и интерпретация языка Итератор Способ обхода элементов агрегата Команда Время и способ выполнения запроса Наблюдатель Множество объектов, зависящих от другого объекта. Способ, которым зависимые объекты поддерживают себя в актуальном состоянии Посетитель Операции, которые можно применить к объекту, не меняя класса Посредник Объекты, взаимодействующие между собой, способ их коопераций Состояние Состояние объекта Стратегия Алгоритм Хранитель Закрытая информация, хранящаяся вне объекта и время ее сохранения Цепочка обязанностей Объект, выполняющий запрос Шаблонный метод Шаги алгоритма
Слайд 73: Проектирование текстового редактора Функции
ПрИС 2 Паттерны проектирования 73 Проектирование текстового редактора Функции документ состоит из текста и графики документ разбит на несколько колонок колонки состоят из строк строка состоит из символов или графики для текста можно установить тип шрифта, размер, выравнивание функция проверки правописания функция расстановки переносов
Слайд 74: Структура документа
ПрИС 2 Паттерны проектирования 74 Структура документа
Слайд 75: Структура объектов Текстового редактора
ПрИС 2 Паттерны проектирования 75 Структура объектов Текстового редактора
Слайд 76: Структура документа Глиф
ПрИС 2 Паттерны проектирования 76 Структура документа Глиф абстрактный класс всех объектов документа подклассы: примитивные графические элементы (символ, рисунок) структурные элементы (строка, колонка) содержат информацию о своих предках и потомках могут нарисовать себя на экране содержат информацию об объеме занимаемого пространства
Слайд 77: Иерархия классов Glyph
ПрИС 2 Паттерны проектирования 77 Иерархия классов Glyph Glyph + Bounds(Rect&) # Draw () + Intersects(Point&) : boolean + Insert(Glyph, int) + Remove(Glyph) + Child(int) : *Glyph + Parent() : *Glyph Character c: char Draw () Row Draw () Column Draw () Picture Draw ()
Слайд 78: Форматирование документа
ПрИС 2 Паттерны проектирования 78 Форматирование документа алгоритм форматирования не должен зависеть от глифов
Слайд 79: Форматирование
ПрИС 2 Паттерны проектирования 79 Форматирование Glyph + Insert(Glyph, int) Composition + Insert(Glyph, int) Compositor + Compose() + SetComposition() ArrayCompositor + Compose() TexCompositor + Compose()
Слайд 80: Оформление шрифтов
ПрИС 2 Паттерны проектирования 80 Оформление шрифтов
Слайд 81: Оформление шрифтов
ПрИС 2 Паттерны проектирования 81 Оформление шрифтов
Слайд 82: Паттерны: Вопросы
ПрИС 2 Паттерны проектирования 82 Паттерны: Вопросы Что такое паттерн? Классификация паттернов. Классификация паттернов проектирования.
Слайд 83: Заключение
ПрИС 2 Паттерны проектирования 83 Заключение Паттерн описывает задачу, которая снова и снова появляется в работе Паттерн включает имя, задачу, решение, результаты Разработаны паттерны архитектурные, проектирования, анализа, тестирования, реализации
Последний слайд презентации: Проектирование ИС (часть 2) Тема 2 : Паттерны проектирования: Список литературы
ПрИС 2 Паттерны проектирования 84 Список литературы Гамма Э. Приемы объектно-ориентированного проектирования. Паттерны проектирования. / Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. – СПб.: Питер, 2001. – 368 с. Ларман К. Применение UML и шаблонов проектирования / К. Ларман. – М.: «Вильямс», 2001. – 496 с.