- •« Шаблоны проектирования» (5 курс, 9 семестр, 2011–2012 учебный год)
- •1 Понятие шаблона проектирования. Средства описания шаблонов проектирования.
- •2 История развития шаблонов проектирования. Классификация шаблонов проектирования.
- •12 Структурные шаблоны. Adapter
- •13 Cтруктурные шаблоны. Facade
- •14 Структурные Шаблоны. Bridge
- •15 Структурные Шаблоны. Decorator
- •16 Структурные Шаблоны. Proxy, Composite
- •23 Поведенческие Шаблоны. Command
- •24 Поведенческие Шаблоны. Strategy
- •25 Поведенческие Шаблоны. Observer
- •26 Поведенческие Шаблоны. Iterator
- •27 Поведенческие Шаблоны. Chain Of Responsibility
- •28 Поведенческие Шаблоны. Mediator
- •29 Поведенческие Шаблоны. Template Method
- •30 Архитектурные шаблоны. Классификация
- •31 Архитектурные шаблоны. Клиент-серверные системы
- •32 Архитектурные шаблоны. Многоуровневые системы
- •33 Архитектурные шаблоны. Репозиторий
- •34 Архитектурные шаблоны. Поток данных
- •35 Архитектурные шаблоны. Централизованное управление Вызов - возврат (сценарий транзакции - частный случай).
- •Диспетчер
- •36 Архитектурные шаблоны. Управление, основанное на событиях Передача сообщений
- •Управляемый прерываниями
- •37 Архитектурные шаблоны. Active Record
- •38 Архитектурные шаблоны. Unit of Work
- •39 Архитектурные шаблоны. Lazy Load
- •40 Архитектурные шаблоны. Identity Map
- •41 Архитектурные шаблоны. Data Access Object
- •42 Шаблоны проектирования пользовательского интерфейса. Model-View-Controller
- •43 Шаблоны проектирования пользовательского интерфейса. Document-View
- •44 Шаблоны проектирования пользовательского интерфейса. Model-View-Presenter
- •45 Шаблоны проектирования пользовательского интерфейса. Model-View-ViewModel
- •Назначение
- •Использование
- •Описание
- •46 Антишаблоны
« Шаблоны проектирования» (5 курс, 9 семестр, 2011–2012 учебный год)
Понятие шаблона проектирования. Средства описания шаблонов проектирования.
История развития шаблонов проектирования. Классификация шаблонов проектирования.
GRASP. Information Expert
GRASP. Creator
GRASP. Controller
GRASP. Low Coupling
GRASP. High Cohesion
GRASP. Polymorphism
GRASP. Pure Fabrication
GRASP. Indirection
GRASP. Protected Variations
Структурные шаблоны. Adapter
Структурные шаблоны. Facade
Структурные шаблоны. Bridge
Структурные шаблоны. Decorator
Структурные шаблоны. Proxy, Composite
Порождающие шаблоны. Lazy Initialization, Singleton
Порождающие шаблоны. Object Pool
Порождающие шаблоны. Prototype
Порождающие шаблоны. Builder
Порождающие шаблоны. Factory Method
Порождающие шаблоны. Abstract Factory
Поведенческие шаблоны. Command
Поведенческие шаблоны. Strategy
Поведенческие шаблоны. Observer
Поведенческие шаблоны. Iterator
Поведенческие шаблоны. Chain of Responsibility
Поведенческие шаблоны. Mediator
Поведенческие шаблоны. Template Method
Архитектурные шаблоны. Классификация
Архитектурные шаблоны. Клиент-серверные системы
Архитектурные шаблоны. Многоуровневые системы
Архитектурные шаблоны. Репозиторий
Архитектурные шаблоны. Поток данных
Архитектурные шаблоны. Централизованное управление
Архитектурные шаблоны. Управление, основанное на событиях
Архитектурные шаблоны. Active Record
Архитектурные шаблоны. Unit of Work
Архитектурные шаблоны. Lazy Load
Архитектурные шаблоны. Identity Map
Архитектурные шаблоны. Data Access Object
Шаблоны проектирования пользовательского интерфейса. Model-View-Controller
Шаблоны проектирования пользовательского интерфейса. Document-View
Шаблоны проектирования пользовательского интерфейса. Model-View-Presenter
Шаблоны проектирования пользовательского интерфейса. Model-View-ViewModel
Антишаблоны
1 Понятие шаблона проектирования. Средства описания шаблонов проектирования.
Шаблон проектирования, паттерн (англ. design pattern) — это многократно применяемая архитектурная конструкция, предоставляющая решение общей проблемы проектирования в рамках конкретного контекста и описывающая значимость этого решения. Паттерн не является законченным образцом проекта, который может быть прямо преобразован в код. Это описание или образец для того, как решить задачу таким образом, чтобы это можно было использовать в различных ситуациях. Объектно-ориентированные шаблоны зачастую показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться.
2 История развития шаблонов проектирования. Классификация шаблонов проектирования.
В 1970-е годы архитектор Кристофер Александр составил набор шаблонов проектирования. В области архитектуры эта идея не получила такого развития, как позже в области программной разработки.
В 1987 году Кент Бэк (Kent Beck) и Вард Каннигем (Ward Cunningham) взяли идеи Александра и разработали шаблоны применительно к разработке программного обеспечения для разработки графических оболочек на языке Smalltalk.
В 1988 году Эрих Гамма (Erich Gamma) начал писать докторскую диссертацию при цюрихском университете об общей переносимости этой методики на разработку программ.
В 1989—1991 годах Джеймс Коплин (James Coplien) трудился над разработкой идиом для программирования на C++ и опубликовал в 1991 году книгу Advanced C++ Idioms.
В этом же году Эрих Гамма заканчивает свою докторскую диссертацию и переезжает в США, где в сотрудничестве с Ричардом Хелмом (Richard Helm), Ральфом Джонсоном (Ralph Johnson) и Джоном Влиссидсом (John Vlissides) публикует книгу Design Patterns — Elements of Reusable Object-Oriented Software. В этой книге описаны 23 шаблона проектирования. Также команда авторов этой книги известна общественности под названием «Банда четырёх» (англ. Gang of Four, часто сокращается до GoF). Именно эта книга стала причиной роста популярности шаблонов проектирования.
Классификация:
Основные шаблоны (Fundamental): Шаблон делегирования (Delegation pattern), Шаблон функционального дизайна (Functional design)
Порождающие шаблоны (Creational): Фабричный метод (Factory method), Строитель (Builder), Одиночка (Singleton).
Структурные шаблоны (Structural): Адаптер, Компоновщик (Composite), Декоратор, Мост (Bridge).
Поведенческие шаблоны (Behavioral): Интерпретатор, Итератор и др.
Так же выделяют виды шаблонов MVC, Enterprise и Антишаблоны.
3 GRASP. Information Expert
GRASP (англ. General Responsibility Assignment Software Patterns — общие образцы распределения обязанностей) — паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам.
Information Expert
Проблема В системе должна аккумулироваться, рассчитываться и т. п. необходимая информация.
Решение Назначить обязанность аккумуляции информации, расчета и т. п. некоему классу (информационному эксперту), обладающему необходимой информацией.
Рекомендации Информационным экспертом может быть не один класс, а несколько.
Преимущества Поддерживает инкапсуляцию, то есть объекты используют свои собственные данные для выполнения поставленных задач.
Недостатки Если объект, обладающий наиболее полной информацией, будет отвечать и за сохранение этой информации в базе данных, то получится, что логика приложения и логика связи с базой данных "помещаются" в один класс (нарушение принципа разделения обязанностей основных объектов системы, и, кроме того, логика связи с базой данных будет дублироваться во многих других классах.
4 GRASP. Creator
GRASP (англ. General Responsibility Assignment Software Patterns — общие образцы распределения обязанностей) — паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам.
Creator
Проблема "Кто" должен отвечать за создание экземпляров класса.
Решение Назначить классу В обязанность создавать объекты другого класса А
Рекомендации Логично использовать паттерн если класс В содержит, агрегирует, активно использует и т.п. объекты класса
Преимущества Использование этого паттерна не повышает связанности, поскольку созданный класс, как правило, виден только для класса - создателя.
Недостатки Если процедура создания объекта достаточно сложная (например выполняется на основе некоего внешнего условия), логично использовать паттерн "Абстрактная Фабрика", то есть, делегировать обязанность создания обьектов специальному классу.
5 GRASP. Controller
GRASP (англ. General Responsibility Assignment Software Patterns — общие образцы распределения обязанностей) — паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам.
Controller
Проблема "Кто" должен отвечать за обработку входных системных событий? Решение Обязанности по обработке системных сообщений делегируются специальному классу. Контроллер - это объект, который отвечает за обработку системных событий и не относится к интерфейсу пользователя. Контроллер определяет методы для выполнения системных операций.
Рекомендации Для различных прецедентов логично использовать разные контроллеры (контроллеры прецедентов) - контроллеры не должны быть перегружены. Внешний контроллер представляет всю систему целиком, его можно использовать, если он будет не слишком перегруженным (то есть, если существует лишь несколько системных событий).
Преимущества Удобно накапливать информацию о системных событиях (в случае, если системные операции выполняются в некоторой определенной последовательности). Улучшаются условия для повторного использования компонентов (системные события обрабатываются Контроллером а не элементами интерфейса пользователя).
Недостатки Контроллер может оказаться перегружен.
6 GRASP. Low Coupling
GRASP (англ. General Responsibility Assignment Software Patterns — общие образцы распределения обязанностей) — паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам.
Low Coupling
Проблема Обеспечить низкую связанность при создании экземпляра класса и связывании его с другим классом.
Решение Распределить обязанности между объектами так, чтобы степень связанности оставалась низкой.
Пример Необходимо создать экземпляр класса "Платеж". В предметной области регистрация объекта "Платеж" выполняется объектом "Регистрация" (ведется рестр). Ниже приводятся 2 способа создания экземпляра класса "Платеж". Верхний рисунок - с использованием паттерна "Создатель", нижний - с использованием "Низкая связанность". Последний способ обеспечивает более низкую степень связывания.
7 GRASP. High Cohesion
GRASP (англ. General Responsibility Assignment Software Patterns — общие образцы распределения обязанностей) — паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам.
High Cohesion
Проблема Необходимо обеспечить выполнение объектами разнородных функций.
Решение Обеспечить распределение обязанностей с высоким зацеплением.
Преимущества Классы с высокой степенью зацепления просты в поддержке и повторном использовании.
Недостатки Иногда бывает неоправданно использовать высокое зацепление для распределенных серверных обьектов. В этом случае для обеспечения быстродействия необходимо создать несколько более крупных серверных обьектов со слабым зацеплением.
8 GRASP. Polymorphism
GRASP (англ. General Responsibility Assignment Software Patterns — общие образцы распределения обязанностей) — паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам.
Polymorphism
Проблема Как обрабатывать альтернативные варианты поведения на основе типа? Как заменять подключаемые компоненты системы?
Решение Обязанности распределяются для различных вариантов поведения с помощью полиморфных операций для этого класса. Каждая внешняя система имеет свой интерфейс.
Преимущества Впоследствии легко расширять и модернизировать систему. Недостатки Не следует злоупотреблять добавлением интерфейсов с применением принципа полиморфизма с целью обеспечения дееспособности системы в неизвестных заранее новых ситуациях.
9 GRASP. Pure Fabrication
GRASP (англ. General Responsibility Assignment Software Patterns — общие образцы распределения обязанностей) — паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам.
Pure Fabrication
Проблема Какой класс должен обеспечивать реализацию паттернов "Высокое зацепление", и "Низкая связанность"?
Решение Присвоить группу обязанностей с высокой степенью зацепления классу, который не представляет конкретного понятия из предметной области (синтезировать искусственную сущность для обеспечения высокого зацепления и слабого связывания).
Преимущества Класс будет обладать низкой степенью связывания и высокой степенью зацепления.
Недостатки Данным паттерном не следует злоупотреблять иначе все функции системы превратятся в объекты.
10 GRASP. Indirection
GRASP (англ. General Responsibility Assignment Software Patterns — общие образцы распределения обязанностей) — паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам.
Indirection
Проблема Как перераспределить обязанности обьектов, чтобы обеспечить отсутствие прямого связывания?
Решение Присвоить обязанности по обеспечению связи между службами или компонентами промежуточному объекту.
11 GRASP. Protected Variations
GRASP (англ. General Responsibility Assignment Software Patterns — общие образцы распределения обязанностей) — паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам.
Protected Variations
Проблема Как спроектировать систему так, чтобы изменение одних ее элементов не влияло на другие?
Решение Идентифицировать точки возможных изменений или неустойчивости и распределить обязанности таким образом, чтобы обеспечить устойчивую работу системы.