Лекция8

Содержание

Слайд 2

План

Шаблоны разработки ПО
Стиль мышления эксперта
Определение шаблона
Свойства шаблонов
Типы паттернов
Типы шаблонов разработки ПО
Паттерны проектирования
Классификация

План Шаблоны разработки ПО Стиль мышления эксперта Определение шаблона Свойства шаблонов Типы
по целям паттернов проектирования

Слайд 3

Шаблоны разработки ПО

В разработке ПО часто встречаются проблемы, которые уже решались ранее

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

Слайд 4

Стиль мышления эксперта

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

Стиль мышления эксперта При решении конкретных проблем эксперты обычно не пытаются разработать
решение, который отличается от уже имеющихся.
Действия эксперта:
вспоминают аналогичную проблему, которую они уже решали,
стараются повторно используют суть ранее принятого решения для решения новой проблемы.
Такой «стиль мышление» в терминах пар «проблема - решение», является общим для множества различных предметных областей, таких, как:
архитектура;
экономика;
программная инженерия.

Слайд 5

Зачем нужны шаблоны

Шаблоны позволяют основываться на коллективном опыте квалифицированных инженеров по проектированию.
Они

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

Слайд 6

Определение шаблона

Шаблон это описание хорошо проверенной, обобщенной схемы решения некоторой часто повторяющейся

Определение шаблона Шаблон это описание хорошо проверенной, обобщенной схемы решения некоторой часто
проблемы (задачи) разработки ПО, которая возникает в некоторых специфических условиях (контексте).
Схема решения проблемы задается путем
определения используемых (составляющих) компонент;
их ответственностей;
способов их взаимодействия.

Слайд 7

Свойства шаблонов

Шаблоны описывают решения для часто повторяющихся задач проектирования, которая возникают в

Свойства шаблонов Шаблоны описывают решения для часто повторяющихся задач проектирования, которая возникают
некоторых специфических ситуациях.
Шаблоны документируют накопленный, хорошо зарекомендовавший себя опыт проектирования.
Шаблоны определяют и описывают абстракции, которые находятся на более высоком уровне, чем уровень отдельных классов и экземпляров или компонентов.
Шаблоны предоставляют общий словарь терминов и общее понимание принципов проектирования.

Слайд 8

Свойства шаблонов (2)

Шаблоны являются средствами документирования архитектур ПО.
Шаблоны поддерживают конструирование ПО

Свойства шаблонов (2) Шаблоны являются средствами документирования архитектур ПО. Шаблоны поддерживают конструирование
с определенными свойствами.
Шаблоны помогают разрабатывать сложные и разнородные архитектуры ПО.
Шаблоны помогают справиться с сложностью ПО.

Слайд 9

Типы паттернов

В ОО анализе и проектировании разработано много различных паттернов.
Архитектурные паттерны.
Описывают фундаментальные

Типы паттернов В ОО анализе и проектировании разработано много различных паттернов. Архитектурные
способы структурирования программных систем.
Эти паттерны относятся к уровню систем и подсистем, а не классов.
Паттерны проектирования.
Описывают структуру программных систем в терминах классов.
Наиболее известными в этой области являются 23 паттерна, описанные в [GoF].
Паттерны анализа.
Представляют общие схемы организации процесса объектно-ориентированного моделирования.

Слайд 10

Типы шаблонов разработки ПО

На этапе анализа системы:
шаблоны анализа (analysis patterns ) –

Типы шаблонов разработки ПО На этапе анализа системы: шаблоны анализа (analysis patterns
комбинации классов для описания стандартных задач прикладной области;
На этапе проектирования системы
шаблоны архитектуры (architecture patterns).
шаблоны проектирования (design patters);
специфичные для конкретного языка программирования идиомы.

Слайд 11

Паттерны проектирования (Design patterns)

Cпециальные схемы для уточнения структуры подсистем или компонентов

Паттерны проектирования (Design patterns) Cпециальные схемы для уточнения структуры подсистем или компонентов
программной системы и отношений между ними.
Паттерны проектирования описывают общую структуру взаимодействия элементов программной системы, которые реализуют исходную проблему проектирования в конкретном контексте. Наиболее известными паттернами этой категории являются паттерны GoF (Gang of Four), названные в честь Э. Гаммы, Р. Хелма, Р. Джонсона и Дж. Влиссидеса, которые систематизировали их и представили общее описание. Паттерны GoF включают в себя 23 паттерна. Эти паттерны не зависят от языка реализации, но их реализация зависит от области приложения.

Слайд 12

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

Паттерн проектирования ПО – это описание взаимодействия объектов и классов,

Понятие паттерна проектирования Паттерн проектирования ПО – это описание взаимодействия объектов и
адаптированных для решения общей задачи проектирования в конкретном контексте [GoF].
Следует отличать паттерны проектирования от идиом.
Паттерны проектирования не зависят от выбора языка (хотя их реализации, зачастую, зависимы от языка программирования).
Идиомы — это паттерны, описывающие типичные решения на конкретном языке программирования.

Слайд 13

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

В конце 80-х годов XX века в области разработки

Причины возникновения паттернов проектирования В конце 80-х годов XX века в области
ПО (в частности, ОО проектировании) накопилось много различных похожих по своей сути решений.
Эти решения требовали
систематизации,
обобщения на всевозможные ситуации,
доступного описания, способствующего пониманию их людьми, которые до этого никогда их не использовали.
Такое упорядочение знаний в ОО проектировании позволило бы повторно использовать готовые и уже проверенные решения, а не снова и снова «изобретать велосипед».
Решение данной проблемы взяли на себя паттерны проектирования.

Слайд 14

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

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

Описание паттернов В общем случае каждый паттерн состоит из таких составляющих: Имя
уникальным идентификатором паттерна. Имена паттернов проектирования, описанных в [GoF], являются общепринятыми.
2. Задача описывает ситуацию, в которой можно применять паттерн.
3. Решения задачи проектирования в виде паттерна определяет общие функции каждого элемента дизайна и отношения между ними.
4. Результаты представляют следствия применения паттерна.

Слайд 15

Практическое применение паттернов проектирования

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

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

Не обязательно для хорошего дизайна системы проектировать её части на основе паттернов проектирования,
Специально подводить дизайн ПО под уже известные шаблоны.
С практической точки зрения, отталкиваться от паттернов проектирования не является самым эффективным и гибким подходом.
Это может привести к решению не отвечающему требованиям гибкости и масштабируемости решению.

Слайд 16

Базовые принципы гибкого проектирования

Всегда формировать простой дизайн: из двух предложенных решений, как

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

Слайд 17

В этом случае целесообразно применить уже готовое шаблонное решение (паттерн),
при этом

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

Слайд 18

Унификация терминологии

Благодаря паттернам проектирования произошла:
ссылки на паттерны проектирования, как на известные

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

Слайд 19

Организация каталога шаблонов проектирования ПО

Паттерны проектирования различаются степенью детализации и уровнем абстракции

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

Слайд 20

Критерии классификации

Паттерны можно классифицировать по двум критериям :
Цель -- отражает назначение

Критерии классификации Паттерны можно классифицировать по двум критериям : Цель -- отражает
паттерна.
Уровень -- говорит о том, к чему обычно применяется паттерн.

Слайд 21

Классификация по целям паттернов проектирования

Порождающие паттерны (Creational Patterns).
Определяют способы создания объектов

Классификация по целям паттернов проектирования Порождающие паттерны (Creational Patterns). Определяют способы создания
в системе.
Структурные паттерны (Structural Patterns).
Описывают способы построение сложных структур из классов и объектов.
Поведенческие паттерны (Behavioral Patterns).
Описывают способы взаимодействия между объектами.

Слайд 22

Список паттернов проектирования (порождающие)

Factory Method (фабричный метод)
Определяет интерфейс для создания объектов, при этом

Список паттернов проектирования (порождающие) Factory Method (фабричный метод) Определяет интерфейс для создания
выбранный класс инстанцируется подклассами.
Abstract Factory (абстрактная фабрика)
Предоставляет интерфейс для создания семейств, связанных между собой, или независимых объектов, конкретные классы которых неизвестны.
Singleton (одиночка)
Гарантирует, что некоторый класс может иметь только один экземпляр, и предоставляет глобальную точку доступа к нему.
Prototype (прототип)
Описывает виды создаваемых объектов с помощью прототипа и создает новые объекты путем его копирования.
Builder (строитель)
Отделяет конструирование сложного объекта от его представления, позволяя использовать один и тот же процесс конструирования для создания различных представлений.

Слайд 23

Список паттернов проектирования (структурные )

Adapter (адаптер)
Преобразует интерфейс класса в некоторый другой

Список паттернов проектирования (структурные ) Adapter (адаптер) Преобразует интерфейс класса в некоторый
интерфейс, ожидаемый клиентами.
Обеспечивает совместную работу классов, которая была бы невозможна без данного паттерна из-за несовместимости интерфейсов.
Bridge (мост)
Отделяет абстракцию от реализации, благодаря чему появляется возможность независимо изменять то и другое.
Decorator (декоратор)
Динамически возлагает на объект новые функции.
Применяются для расширения имеющейся функциональности и являются гибкой альтернативой порождению подклассов.

Слайд 24

Список паттернов проектирования (структурные) (2)

Proxy (заместитель)
Подменяет другой объект для контроля доступа к

Список паттернов проектирования (структурные) (2) Proxy (заместитель) Подменяет другой объект для контроля
нему
Facade (фасад)
Предоставляет унифицированный интерфейс к множеству интерфейсов в некоторой подсистеме.
Определяет интерфейс более высокого уровня, облегчающий работу с подсистемой.
Composite (компоновщик)
Группирует объекты в древовидные структуры для представления иерархий типа «часть-целое».
Позволяет клиентам работать с единичными объектами так же, как с группами объектов.
Flyweight (приспособленец)
Использует разделение для эффективной поддержки большого числа мелких объектов.

Слайд 25

Список паттернов проектирования (поведения)

Interpreter (интерпретатор)
Для заданного языка определяет представление его грамматики,

Список паттернов проектирования (поведения) Interpreter (интерпретатор) Для заданного языка определяет представление его
а также интерпретатор предложений языка, использующий это представление.
Template Method (шаблонный метод)
Определяет скелет алгоритма, перекладывая ответственность за некоторые его шаги на подклассы.
Позволяет подклассам переопределять шаги алгоритма, не меняя его общей структуры.
Iterator (итератор)
Дает возможность последовательно обойти все элементы составного объекта, не раскрывая его внутреннего представления.

Слайд 26

Список паттернов проектирования (поведения) (2)

Command (команда)
Инкапсулирует запрос в виде объекта, позволяя тем

Список паттернов проектирования (поведения) (2) Command (команда) Инкапсулирует запрос в виде объекта,
самым параметризовывать клиентов типом запроса, устанавливать очередность запросов, протоколировать их и поддерживать отмену выполнения операций.
Observer (наблюдатель)
Определяет между объектами зависимость типа один-ко-многим, так что при изменении состоянии одного объекта все зависящие от него получают извещение и автоматически обновляются.
Visitor (посетитель)
Представляет операцию, которую надо выполнить над элементами объекта. Позволяет определить новую операцию, не меняя классы элементов, к которым он применяется.

Слайд 27

Список паттернов проектирования (поведения) (3)

Mediator (посредник)
Определяет объект, в котором инкапсулировано знание о

Список паттернов проектирования (поведения) (3) Mediator (посредник) Определяет объект, в котором инкапсулировано
том, как взаимодействуют объекты из некоторого множества.
Способствует уменьшению числа связей между объектами, позволяя им работать без явных ссылок друг на друга.
Это, в свою очередь, дает возможность независимо изменять схему взаимодействия.
Memento (хранитель)
Позволяет, не нарушая инкапсуляции, получить и сохранить во внешней памяти внутреннее состояние объекта, чтобы позже объект можно было восстановить точно в таком же состоянии.

Слайд 28

Список паттернов проектирования (5)

State (состояние)
Позволяет объекту варьировать свое поведение при изменении

Список паттернов проектирования (5) State (состояние) Позволяет объекту варьировать свое поведение при
внутреннего состояния.
При этом создается впечатление, что поменялся класс объекта.
Strategy (стратегия)
Определяет семейство алгоритмов, инкапсулируя их все и позволяя подставлять один вместо другого.
Можно менять алгоритм независимо от клиента, который им пользуется.

Слайд 29

Список паттернов проектирования (поведения) (4)

Chain of Responsibility (цепочка обязанностей)
Позволяет избежать

Список паттернов проектирования (поведения) (4) Chain of Responsibility (цепочка обязанностей) Позволяет избежать
жесткой зависимости отправителя запроса от его получателя, при этом запросом начинает обрабатываться один из нескольких объектов.
Объекты-получатели связываются в цепочку, и запрос передается по цепочке, пока какой-то объект его не обработает.

Слайд 30

Абстрактная фабрика

Абстрактная фабрика

Слайд 31

Одиночка (Singleton)

Одиночка (Singleton)

Слайд 32

Заместитель (Proxy) или Суррогат (Surrogate)

Заместитель (Proxy) или Суррогат (Surrogate)

Слайд 33

Адаптер

Адаптер

Слайд 34

Composite – Компоновщик

Composite – Компоновщик

Слайд 35

Facade - Фасад

Facade - Фасад

Слайд 36

Chain of Responsibility - Цепочка обязанностей

Chain of Responsibility - Цепочка обязанностей

Слайд 38

Strategy – Стратегия

Strategy – Стратегия

Слайд 39

Template Method - Шаблонный метод

Template Method - Шаблонный метод

Слайд 40

Контрольные вопросы

Дайте определение шаблона разработки ПО
Назовите свойства шаблонов
Какие типы паттернов вы знаете?
Типы

Контрольные вопросы Дайте определение шаблона разработки ПО Назовите свойства шаблонов Какие типы
шаблонов разработки ПО
Что такое паттерны проектирования?
Перечислите классификацию паттернов проектирования по целям
Назовите порождающие паттерны проектирования
Назовите структурные паттерны проектирования
Назовите поведенческие паттерны проектирования
Имя файла: Лекция8.pptx
Количество просмотров: 30
Количество скачиваний: 0