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

Post on 15-Jun-2015

2.245 views 3 download

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

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

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

Обо мне

Alexander Nemanovalexander@asoft4web.com

Skype: asoft4webFB: https://

www.facebook.com/alexander.nemanov

Цель доклада

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

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

GRASP

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

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

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

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

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

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

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

Паттерны

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

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

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

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

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

Information Expert

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

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

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

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

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

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

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

объектов A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Паттерны

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

?