GRASP – паттерны Объектно-Ориентированного...

21
GRASP Паттерны Объектно- Ориентированног о Проектирования

Transcript of GRASP – паттерны Объектно-Ориентированного...

Page 1: GRASP – паттерны Объектно-Ориентированного Проектирования

GRASPПаттерныОбъектно-

Ориентированного Проектирования

Page 2: GRASP – паттерны Объектно-Ориентированного Проектирования

Обо мне

Alexander [email protected]

Skype: asoft4webFB: https://

www.facebook.com/alexander.nemanov

Page 3: GRASP – паттерны Объектно-Ориентированного Проектирования

Цель доклада

• Сделать краткий обзор паттернов GRASP• Подтолкнуть Вас к их детальному изучению

и применению на практике

Page 4: GRASP – паттерны Объектно-Ориентированного Проектирования

GRASP

Ларман КрэгПрименение UML и шаблонов проектирования

Page 5: GRASP – паттерны Объектно-Ориентированного Проектирования

Х.., Х… - и на продакшенПринципы ООП• Абстракция• Инкапсуляция• Наследование• Полиморфизм

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

Page 6: GRASP – паттерны Объектно-Ориентированного Проектирования

GRASP - определение

General Responsibility Assignment Software Patternsобщие образцы распределения обязанностей

GRASP - паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам

Page 7: GRASP – паттерны Объектно-Ориентированного Проектирования

GRASPМетодический подход к объектному проектированию

Паттерны

• Information Expert (Информационный эксперт)• Creator (Создатель)• Controller (Контроллер)• Low Coupling (Слабая связанность)• High Cohesion (Сильное Сцепление)• Polymorphism (Полиморфизм)• Pure Fabrication (Чистая выдумка)• Indirection (Посредник)• Protected Variations (Сокрытие реализации)

Page 8: GRASP – паттерны Объектно-Ориентированного Проектирования

Information ExpertИнформационный эксперт

Проблема: В системе должна аккумулироваться, рассчитываться и т. п. необходимая информация.

Решение: Назначить обязанность аккумуляции информации, расчета и т. п. некоему классу (информационному эксперту), обладающему необходимой информацией.

Рекомендации: Информационным экспертом может быть не один класс, а несколько.

Page 9: GRASP – паттерны Объектно-Ориентированного Проектирования

Information Expert

Page 10: GRASP – паттерны Объектно-Ориентированного Проектирования

Information ExpertПреимущества• Поддерживает инкапсуляцию, то есть объекты

используют свои собственные данные для выполнения поставленных задач

• Поведение системы обеспечивается классами, содержащими требуемую информацию. Поддерживается High Cohesion

НедостаткиПри проблемах со связыванием и зацеплением.

Page 11: GRASP – паттерны Объектно-Ориентированного Проектирования

CreatorПроблема: "Кто" должен отвечать за создание экземпляров класса ?

Решение: Назначить классу В обязанность создавать объекты другого класса А

Рекомендации: применять паттерн если• Класс B содержит или агрегирует объекты A.• Класс B записывает экземпляры объектов A.• Класс B активно использует объекты A• Класс B обладает данными инициализации для

объектов A

Page 12: GRASP – паттерны Объектно-Ориентированного Проектирования

CreatorПреимущества• Использование этого паттерна не повышает

связанности, поскольку созданный класс, как правило, виден только для класса - создателя.

НедостаткиЕсли процедура создания объекта достаточно сложная (например выполняется на основе некоего внешнего условия), логично использовать паттерн "Абстрактная Фабрика", то есть, делегировать обязанность создания объектов специальному классу.

Page 13: GRASP – паттерны Объектно-Ориентированного Проектирования

Low CouplingНизкая связанность

Проблема: Как обеспечить низкую зависимость, незначительное влияние изменений и повысить возможность повторного использования?

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

Page 14: GRASP – паттерны Объектно-Ориентированного Проектирования

Low CouplingНизкая связанность

Page 15: GRASP – паттерны Объектно-Ориентированного Проектирования

Low CouplingНизкая связанность

Преимущества:• Изменение компонентов мало сказывается на других

объектах• Принципы работы и функции классов/компонентов

можно понять, не изучая другие объекты• Удобство повторного использования

Page 16: GRASP – паттерны Объектно-Ориентированного Проектирования

High CohesionВысокое зацепление

Проблема: Как обеспечить возможность управления сложностью?

Решение: Обеспечить распределение обязанностей с высокой степенью зацепления

Пример: Если на класс "Регистрация" возлагать все новые и новые системные функции, связанные с системными операциями, то данный класс будет слишком перегружен и будет обладать низкой степенью зацепления.

Page 17: GRASP – паттерны Объектно-Ориентированного Проектирования

High CohesionВысокое зацепление

Преимущества: Классы с высокой степенью зацепления просты в поддержке и повторном использовании.

Недостатки: Иногда бывает неоправданно использовать высокое зацепление для распределенных серверных объектов. В этом случае для обеспечения быстродействия необходимо создать несколько более крупных серверных объектов со слабым зацеплением.

Page 18: GRASP – паттерны Объектно-Ориентированного Проектирования

Pure FabricationЧистая выдумка

Проблема: Какой класс должен обеспечивать реализацию паттернов "Высокое зацепление", и "Низкая связанность"?

Решение: Присвоить группу обязанностей с высокой степенью зацепления классу, который не представляет конкретного понятия из предметной области.

Пример: Какой класс должен сохранять экземпляры класса "Продажа" в реляционной базе данных?

Page 19: GRASP – паттерны Объектно-Ориентированного Проектирования

Pure FabricationЧистая выдумка

Преимущества:Класс "ПостоянноеХранилище" будет обладать низкой степенью связывания и высокой степенью зацепления.

Недостатки:Данным паттерном не следует злоупотреблять иначе все функции системы превратятся в объекты.

Page 20: GRASP – паттерны Объектно-Ориентированного Проектирования

GRASPМетодический подход к объектному проектированию

Паттерны

• Information Expert (Информационный эксперт)• Creator (Создатель)• Controller (Контроллер)• Low Coupling (Слабая связанность)• High Cohesion (Сильное Сцепление)• Polymorphism (Полиморфизм)• Pure Fabrication (Чистая выдумка)• Indirection (Посредник)• Protected Variations (Сокрытие реализации)

Page 21: GRASP – паттерны Объектно-Ориентированного Проектирования

?