GRASP (General Responsibility Assignment Software Patterns) — это набор универсальных принципов для назначения обязанностей классам и объектам в объектно-ориентированном дизайне. Они помогают создавать гибкие, поддерживаемые и повторно используемые системы. Основные паттерны GRASP включают:
- Information Expert: Объект, владеющий информацией, необходимой для выполнения действия, должен взять на себя ответственность за это действие.
- Creator: Класс, который содержит или агрегирует экземпляры других классов, тесно связан с ними или имеет данные инициализации для их создания, должен взять на себя ответственность за их создание.
- Controller: Класс, ответственный за обработку системного события (например, действия пользователя), должен взять на себя ответственность за координацию работы других объектов, но не за выполнение самой работы.
- Pure Fabrication: Искусственно созданный класс, не отражающий концепцию предметной области, но созданный для снижения связности, улучшения связности или обеспечения повторного использования.
- Low Coupling: Принцип проектирования, направленный на минимизацию зависимостей между классами.
- High Cohesion: Принцип проектирования, направленный на то, чтобы методы класса были тесно связаны по функциональности.
- Polymorphism: Назначение ответственности за выбор поведения на основе типа объекта (через виртуальные методы).
- Protected Variations: Принцип проектирования, защищающий от изменений других элементов (объектов, подсистем, систем) путем определения стабильного интерфейса.
- Indirection: Назначение ответственности посредническому объекту для избежания прямой связи двух элементов.
Применение GRASP помогает избежать "толстых" контроллеров и менеджеров, улучшить структуру кода и облегчить его развитие.