Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
от 5 курса и руслана.doc
Скачиваний:
3
Добавлен:
22.11.2019
Размер:
533.5 Кб
Скачать

« Шаблоны проектирования» (5 курс, 9 семестр, 2011–2012 учебный год)

  1. Понятие шаблона проектирования. Средства описания шаблонов проектирования.

  2. История развития шаблонов проектирования. Классификация шаблонов проектирования.

  3. GRASP. Information Expert

  4. GRASP. Creator

  5. GRASP. Controller

  6. GRASP. Low Coupling

  7. GRASP. High Cohesion

  8. GRASP. Polymorphism

  9. GRASP. Pure Fabrication

  10. GRASP. Indirection

  11. GRASP. Protected Variations

  12. Структурные шаблоны. Adapter

  13. Структурные шаблоны. Facade

  14. Структурные шаблоны. Bridge

  15. Структурные шаблоны. Decorator

  16. Структурные шаблоны. Proxy, Composite

  17. Порождающие шаблоны. Lazy Initialization, Singleton

  18. Порождающие шаблоны. Object Pool

  19. Порождающие шаблоны. Prototype

  20. Порождающие шаблоны. Builder

  21. Порождающие шаблоны. Factory Method

  22. Порождающие шаблоны. Abstract Factory

  23. Поведенческие шаблоны. Command

  1. Поведенческие шаблоны. Strategy

  2. Поведенческие шаблоны. Observer

  3. Поведенческие шаблоны. Iterator

  4. Поведенческие шаблоны. Chain of Responsibility

  5. Поведенческие шаблоны. Mediator

  6. Поведенческие шаблоны. Template Method

  7. Архитектурные шаблоны. Классификация

  8. Архитектурные шаблоны. Клиент-серверные системы

  9. Архитектурные шаблоны. Многоуровневые системы

  10. Архитектурные шаблоны. Репозиторий

  11. Архитектурные шаблоны. Поток данных

  12. Архитектурные шаблоны. Централизованное управление

  13. Архитектурные шаблоны. Управление, основанное на событиях

  14. Архитектурные шаблоны. Active Record

  15. Архитектурные шаблоны. Unit of Work

  16. Архитектурные шаблоны. Lazy Load

  17. Архитектурные шаблоны. Identity Map

  18. Архитектурные шаблоны. Data Access Object

  19. Шаблоны проектирования пользовательского интерфейса. Model-View-Controller

  20. Шаблоны проектирования пользовательского интерфейса. Document-View

  21. Шаблоны проектирования пользовательского интерфейса. Model-View-Presenter

  22. Шаблоны проектирования пользовательского интерфейса. Model-View-ViewModel

  23. Антишаблоны

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

Проблема Как спроектировать систему так, чтобы изменение одних ее элементов не влияло на другие?

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