Шаблоны программного обеспечения общего назначения ответственности (или Принципы ), сокращенно GRASP, состоят из руководящих указаний по назначению ответственности классам и объектам в объектно-ориентированном дизайне. Это не связано с принципом конструкции SOLID.
Различные шаблоны и принципы, используемые в GRASP: контролер, создатель, косвенное обращение, эксперт по информации, низкая связь, высокая связность, полиморфизм, защищенные вариации и чистое изготовление. Все эти шаблоны решают некоторые программные проблемы, и эти проблемы являются общими почти для всех программных проектов. Эти методы были изобретены не для создания новых способов работы, а для лучшего документирования и стандартизации старых, испытанных принципов программирования в объектно-ориентированном дизайне.
Компьютерный ученый Крейг Ларман утверждает, что «важнейшим инструментом проектирования для разработки программного обеспечения является ум, хорошо образованный в принципах проектирования. Это не UML или какая-либо другая технология. " Таким образом, GRASP на самом деле представляет собой набор инструментов для ума, учебное пособие, помогающее в разработке объектно-ориентированного программного обеспечения.
В объектно-ориентированном проектировании шаблон - это именованное описание проблемы и решения которые можно применять в новых контекстах; в идеале паттерн подсказывает нам, как применить его решение в различных обстоятельствах, и учитывает силы и компромиссы. Многие шаблоны для конкретной категории проблем определяют распределение обязанностей по объектам.
Проблема: каков основной принцип, по которому назначаются обязанности для объектов?. Решение: возложите ответственность на класс, у которого есть информация, необходимая для его выполнения.
Информационный эксперт (также эксперт или принцип эксперта ) - это принцип, используемый для определения того, куда делегировать такие обязанности, как методы, вычисляемые поля и т. Д.
Используя принцип информационного эксперта, общий подход к распределению обязанностей состоит в том, чтобы взглянуть на данную ответственность, определить информацию, необходимую для ее выполнения, а затем определить, где эта информация хранится.
Это приведет к возложению ответственности на класс, обладающий наибольшей информацией, необходимой для ее выполнения.
Связанный образец или принцип : низкая взаимосвязь, высокая сплоченность
Создание объектов - одно из наиболее распространенных действий в объектно-ориентированной системе. Какой класс отвечает за создание объектов, является фундаментальным свойством взаимосвязи между объектами определенных классов.
Проблема: Кто создает объект A?. Решение: Как правило, назначьте классу B
ответственность за создание объекта A
, если один или, желательно, несколько из применяется следующее:
B
содержат или совокупно объединяют экземпляры A
B
записывают экземпляры A
B
близко используйте экземпляры A
B
имеют инициализирующую информацию для экземпляров A
и передают ее при создании.Связанный шаблон или принцип : низкая связь, Заводской шаблон
Шаблон контроллер назначает ответственность за обработку системных событий классу, отличному от UI, который представляет систему в целом или вариант использования сценарий. Объект контроллера - это объект, не относящийся к пользовательскому интерфейсу, который отвечает за получение или обработку системного события.
Проблема: кто должен отвечать за обработку события системы ввода?. Решение: контроллер варианта использования должен использоваться для обработки всех системных событий варианта использования, и его можно использовать более чем для одного вариант использования. Например, для вариантов использования «Создать пользователя» и «Удалить пользователя» можно использовать один класс с именем UserController вместо двух отдельных контроллеров вариантов использования.
Контроллер определяется как первый объект за пределами уровня пользовательского интерфейса, который принимает и координирует («управляет») системную операцию. Контроллер должен делегировать работу, которая должна быть сделана, другим объектам; он координирует или контролирует деятельность. Сам он не должен делать много работы. Контроллер GRASP можно рассматривать как часть уровня приложения / сервиса (при условии, что приложение явно различает уровень приложения / сервиса и уровень домена ) в объектно-ориентированной системе. с общими слоями в логической архитектуре информационной системы.
Связанный шаблон или принцип : Command, Facade, Layers, Pure Fabrication
Шаблон косвенного обращения поддерживает низкую связь и повторно использует потенциал между двумя элементами, возлагая ответственность за посредничество между ними на промежуточный объект. Примером этого является введение компонента контроллера для посредничества между данными (моделью) и их представлением (представлением) в шаблоне управления модель-представление. Это гарантирует, что связь между ними остается низкой.
Проблема: где распределить ответственность, чтобы избежать прямой связи между двумя (или более) вещами? Как разделить объекты, чтобы поддерживать низкую связь, а потенциал повторного использования оставался выше?.
Решение: возложите на промежуточный объект ответственность за посредничество между другими компонентами или службами, чтобы они не были напрямую связаны..
Посредник создает косвенное обращение между другими компонентами.
Связь - это мера того, насколько сильно один элемент связан с другими элементами, знает о них или полагается на них. Низкая связь - это оценочный паттерн, который диктует, как распределять обязанности за следующие преимущества:
Высокая сплоченность - это оценочный паттерн, который пытается удерживать объекты в должной фокусировке, управляемости и понятности. Высокое сцепление обычно используется для поддержки низкого сцепления. Высокая сплоченность означает, что обязанности данного элемента тесно связаны и четко сфокусированы. Разбиение программ на классы и подсистемы - это пример действий, которые увеличивают связующие свойства системы. В качестве альтернативы, низкая сплоченность - это ситуация, в которой у данного элемента слишком много несвязанных обязанностей. Элементы с низкой связностью часто страдают от того, что их трудно понять, повторно использовать, поддерживать и изменять.
Согласно принципу полиморфизма ответственность за определение вариации поведения на основе типа присваивается типу, для которого происходит это изменение. Это достигается с помощью полиморфных операций. Пользователь типа должен использовать полиморфные операции вместо явного ветвления на основе типа.
Проблема: как обрабатывать альтернативы в зависимости от типа? Как создать подключаемые программные компоненты?. Решение: Когда связанные альтернативы или поведения различаются по типу (классу), возложите ответственность за поведение - используя полиморфные операции - на типы, для которых это поведение различается (полиморфизм имеет несколько связанных значений. В данном контексте это означает «присвоение одного и того же имени сервисам в разных объектах»)
Шаблон защищенные варианты защищает элементы от изменений в других элементах. (объекты, системы, подсистемы) путем обертывания фокуса нестабильности с помощью интерфейса и использования полиморфизма для создания различных реализаций этого интерфейса.
Проблема: как спроектировать объекты, подсистемы и системы так, чтобы вариации или нестабильность этих элементов не оказывали нежелательного воздействия на другие элементы?. Решение: выявить точки прогнозируемых вариаций или нестабильности; распределите обязанности по созданию вокруг них стабильного интерфейса.
A чистое изготовление - это класс, который не представляет концепцию в проблемной области, специально созданный для достижения низкой связи, высокой когезии и полученного потенциала повторного использования (когда решение, представленное информационным шаблоном эксперта, нет). Этот вид класса называется «службой» в доменно-ориентированном проектировании.
Связанные шаблоны и принципы • Низкое сцепление. • Высокая сплоченность.