Перейти к основному содержимому

GRASP: краткий обзор

Проектирование ПО начинается с определения архитектуры высокого уровня (HLA - High Level Architecture). В HLA надо определить объекты или процессы, для чего создаём приложение. Существуют подходы:

  1. Функциональный (структурный)
  2. Объектно‑ориентированный
    • Включает принципы GRASP
    • Может быть реализован с помощью DDD

Функциональный подход

В функциональном подходе выделяют компоненты системы, их функции и способы взаимодействия, без привязки к объектам.

Пример:

  • Выделяем модули для управления товарами (добавление, удаление), обработки заказов (создание, обработка оплаты). Модуль управления товарами может вызывать функции модуля обработки для оформления заказа.

Объектно-ориентированный подход

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

  • Класс — шаблон, который определяет структуру и поведение объектов. Содержит атрибуты (данные) и методы (функции).
  • Объект — конкретный экземпляр класса, содержащий значения атрибутов и способный выполнять определённые методы.

Пример:

  • Рассматриваем систему как набор объектов (Задача, Пользователь), каждый из которых имеет свои свойства и методы, и взаимодействует через них.

GRASP

GRASP (General Responsibility Assignment Software Patterns) — набор рекомендаций и принципов проектирования ПО для определения архитектуры и отношений между объектами.

  • Сфокусирован не на решении прикладных задач, а на распределении какому объекту назначить то или иное поведение.
  • GRASP может рассматриваться в рамках объектно-ориентированного проектирования, помогает в реализации его принципов.
  • Применяется в веб-разработке и мобильной разработке, автоматизации процессов и т. д.
  • Может использоваться в сочетании с различными типами паттернов проектирования. Например, чтобы определить, какие объекты будут создавать методы / определить роли классов в компонентах.

Зачем GRASP аналитику?

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

Паттерны GRASP

Используются для:

  • Создания объектов.
  • Определения ответственностей классов.
  • Управления связями между объектами и др.

Сначала определяют бизнес-правила и требования к системе. Затем выбираются подходящие паттерны для реализации этих требований. Каждый паттерн решает конкретную проблему проектирования и имеет свои рекомендации по применению.

Популярные принципы GRASP

  1. Controller (Контроллер): координирует работу между объектами и обрабатывает внешние запросы. Объект, который принимает пользовательский ввод, делегирует его другим объектам для выполнения операций.

    • Пример: контроллер веб-приложения обрабатывает запросы от клиентов и вызывает методы для выполнения бизнес-логики.
  2. Creator (Создатель): отвечает за создание экземпляров других классов.

    • Пример: если есть класс Order, который создает экземпляры Item, то метод создания объекта Item должен быть внутри класса Order.
  3. Expert (Эксперт): объект, больше всех знает, как выполнить определенную операцию, должен быть ответственным за её выполнение.

    • Пример: класс управления заказами может быть экспертом по созданию и обработке заказов.
  4. High Cohesion (Высокая связность): класс выполняет только одну задачу или ответственность. Каждый класс должен быть организован вокруг единой цели.

    • Пример: класс EmailSender должен заниматься только отправкой электронных писем, а класс PaymentProcessor - только обработкой платежей.
  5. Low Coupling (Низкая связность): классы должны быть слабо связаны друг с другом. Изменения в одном классе не должны приводить к изменениям в другом классе.

    • Пример: если меняется способ оплаты в классе PaymentProcessor, класс Order и Customer не должны быть затронуты.
  6. Pure Fabrication (Чистая фабрикация): используется для создания объектов, которые не имеют аналога в предметной области, но служат для снижения связанности и увеличения гибкости системы.

    • Пример: класс Logger для записи логов, не является объектом из реального мира, но играет важную роль в системе для логирования.

Подборка материалов по GRASP

  1. ООП для ООП: GRASP
  2. GRASP паттерны проектирования
  3. GRASP принципы
  4. О GRASP
  5. Проектирование объектно-ориентированного приложения
  6. Анемичная и «Богатая» модель в контексте GRASP шаблонов
  7. G.R.A.S.P | шаблоны проектирования
  8. Принципы хорошей архитектуры
  9. Базовые шаблоны проектирования
  10. Объектно-ориентированное проектирование
  11. Шпаргалка по шаблонам проектирования
  12. Лекция про ООПроектирование
  13. Объектно-ориентированный дизайн и как его использовать для проектирования систем (про интерфейсы)
  14. Объектно-ориентированный подход при проектировании цифрового офиса сотрудника
  15. История объектно-ориентированного проектирование. Возникновение DDD
  16. Объектно-ориентированный анализ BABOK
  17. Способы отображения: существует ли связь между DDD и ООП
  18. Применение ООП при проектировании ER-диаграмм
  19. Шаблоны проектирования "банды четырёх (GoF)"

Видео

  1. Введение в GRASP-шаблоны, Low Coupling, High Cohesion
  2. Шаблоны GRASP. Лекция
  3. Цикл коротких видео: GRASP Design Patterns
  4. Шаблоны GRASP // Демо-занятие курса «Архитектура и шаблоны
  5. Объектно-ориентированное проектирование, как проектируются классы
  6. Декомпозиция, объектно-ориентированное проектирование

Книги

  1. UML 2 и Унифицированный процесс, практический объектно-ориентированный анализ и проектирование - Арлоу Джим, Нейштадт Айла
  2. Погружение в Паттерны Проектирования - Александр Швец
  3. Объектно-ориентированное мышление - Мэтт Вайсфельд
  4. Приемы объектно-ориентированного проектирования. Паттерны проектирования. Хелм Ричард, Влиссидес Джон
  5. Объектно-ориентированный анализ и проектирование с примерами приложений - Грэди Буч
  6. Методы объектно-ориентированного анализа и программирования в управлении экономическими системами - Д. Е. Толмачев, А. А. Тарасьев, В. Ф. Турыгина