GRASP
Паттерны
Объектно-
Ориентированного
Проектирования
Обо мне
Alexander Nemanov
alexander@asoft4web.com
Skype: asoft4web
FB:
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 (Сокрытие реализации)
?

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

  • 1.
  • 2.
    Обо мне Alexander Nemanov alexander@asoft4web.com Skype:asoft4web FB: https://www.facebook.com/alexander.nemanov
  • 3.
    Цель доклада • Сделатькраткий обзор паттернов GRASP • Подтолкнуть Вас к их детальному изучению и применению на практике
  • 4.
    GRASP Ларман Крэг Применение UMLи шаблонов проектирования
  • 5.
    Х.., Х… -и на продакшен Принципы ООП • Абстракция • Инкапсуляция • Наследование • Полиморфизм Проектирование Сначала определяются требования и создается модель предметной области, затем добавляются методы программных классов, описывающие передачу сообщений между объектами для удовлетворения требований.
  • 6.
    GRASP - определение GeneralResponsibility Assignment Software Patterns общие образцы распределения обязанностей GRASP - паттерны, используемые в объектно- ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам
  • 7.
    GRASP Методический подход кобъектному проектированию Паттерны • Information Expert (Информационный эксперт) • Creator (Создатель) • Controller (Контроллер) • Low Coupling (Слабая связанность) • High Cohesion (Сильное Сцепление) • Polymorphism (Полиморфизм) • Pure Fabrication (Чистая выдумка) • Indirection (Посредник) • Protected Variations (Сокрытие реализации)
  • 8.
    Information Expert Информационный эксперт Проблема:В системе должна аккумулироваться, рассчитываться и т. п. необходимая информация. Решение: Назначить обязанность аккумуляции информации, расчета и т. п. некоему классу (информационному эксперту), обладающему необходимой информацией. Рекомендации: Информационным экспертом может быть не один класс, а несколько.
  • 9.
  • 10.
    Information Expert Преимущества • Поддерживаетинкапсуляцию, то есть объекты используют свои собственные данные для выполнения поставленных задач • Поведение системы обеспечивается классами, содержащими требуемую информацию. Поддерживается High Cohesion Недостатки При проблемах со связыванием и зацеплением.
  • 11.
    Creator Проблема: "Кто" долженотвечать за создание экземпляров класса ? Решение: Назначить классу В обязанность создавать объекты другого класса А Рекомендации: применять паттерн если • Класс B содержит или агрегирует объекты A. • Класс B записывает экземпляры объектов A. • Класс B активно использует объекты A • Класс B обладает данными инициализации для объектов A
  • 12.
    Creator Преимущества • Использование этогопаттерна не повышает связанности, поскольку созданный класс, как правило, виден только для класса - создателя. Недостатки Если процедура создания объекта достаточно сложная (например выполняется на основе некоего внешнего условия), логично использовать паттерн "Абстрактная Фабрика", то есть, делегировать обязанность создания объектов специальному классу.
  • 13.
    Low Coupling Низкая связанность Проблема:Как обеспечить низкую зависимость, незначительное влияние изменений и повысить возможность повторного использования? Решение: Распределить обязанности таким образом, чтобы степень связанности оставалась низкой.
  • 14.
  • 15.
    Low Coupling Низкая связанность Преимущества: •Изменение компонентов мало сказывается на других объектах • Принципы работы и функции классов/компонентов можно понять, не изучая другие объекты • Удобство повторного использования
  • 16.
    High Cohesion Высокое зацепление Проблема:Как обеспечить возможность управления сложностью? Решение: Обеспечить распределение обязанностей с высокой степенью зацепления Пример: Если на класс "Регистрация" возлагать все новые и новые системные функции, связанные с системными операциями, то данный класс будет слишком перегружен и будет обладать низкой степенью зацепления.
  • 17.
    High Cohesion Высокое зацепление Преимущества:Классы с высокой степенью зацепления просты в поддержке и повторном использовании. Недостатки: Иногда бывает неоправданно использовать высокое зацепление для распределенных серверных объектов. В этом случае для обеспечения быстродействия необходимо создать несколько более крупных серверных объектов со слабым зацеплением.
  • 18.
    Pure Fabrication Чистая выдумка Проблема:Какой класс должен обеспечивать реализацию паттернов "Высокое зацепление", и "Низкая связанность"? Решение: Присвоить группу обязанностей с высокой степенью зацепления классу, который не представляет конкретного понятия из предметной области. Пример: Какой класс должен сохранять экземпляры класса "Продажа" в реляционной базе данных?
  • 19.
    Pure Fabrication Чистая выдумка Преимущества: Класс"ПостоянноеХранилище" будет обладать низкой степенью связывания и высокой степенью зацепления. Недостатки: Данным паттерном не следует злоупотреблять иначе все функции системы превратятся в объекты.
  • 20.
    GRASP Методический подход кобъектному проектированию Паттерны • Information Expert (Информационный эксперт) • Creator (Создатель) • Controller (Контроллер) • Low Coupling (Слабая связанность) • High Cohesion (Сильное Сцепление) • Polymorphism (Полиморфизм) • Pure Fabrication (Чистая выдумка) • Indirection (Посредник) • Protected Variations (Сокрытие реализации)
  • 21.