GRASP (объектно-ориентированный дизайн) - GRASP (object-oriented design)

Шаблоны программного обеспечения для распределения общей ответственности (или же Принципы), сокращенно ПОНЯТЬ, состоят из рекомендаций по распределению ответственности между классами и объектами в объектно-ориентированный дизайн.[1] Это не связано с ТВЕРДЫЙ принцип конструкции.

В GRASP используются различные шаблоны и принципы: контроллер, создатель, косвенное обращение, эксперт по информации, низкий уровень связь, высоко сплоченность, полиморфизм, защищенные вариации и чистое изготовление. Все эти шаблоны отвечают некоторым программного обеспечения проблемы, и эти проблемы характерны почти для всех разработка программного обеспечения проект. Эти методы были изобретены не для создания новых способов работы, а для лучшего документирования и стандартизации старых, проверенных и проверенных временем. программирование принципы объектно-ориентированного дизайна.

Специалист в области информатики Крейг Ларман утверждает, что «важнейшим инструментом проектирования для разработки программного обеспечения является ум, хорошо образованный в принципах проектирования. Это не UML или любой другой технологии ".[2] Таким образом, GRASP на самом деле представляет собой набор инструментов для ума, учебное пособие, помогающее в разработке объектно-ориентированного программного обеспечения.

Узоры

В объектно-ориентированном дизайне шаблон - это именованное описание проблемы и решения, которое может применяться в новых контекстах; в идеале паттерн подсказывает нам, как применить его решение в различных обстоятельствах, и учитывает силы и компромиссы. Многие шаблоны для конкретной категории проблем определяют распределение обязанностей по объектам.

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

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

Информационный эксперт (также эксперт или экспертный принцип) - это принцип, используемый для определения, куда делегировать такие обязанности, как методы, вычисляемые поля и т. д.

Используя принцип информационного эксперта, общий подход к распределению обязанностей состоит в том, чтобы взглянуть на данную ответственность, определить информацию, необходимую для ее выполнения, а затем определить, где эта информация хранится.

Это приведет к возложению ответственности на класс, располагающий наибольшей информацией, необходимой для ее выполнения.[3]

Связанный образец или принцип: Низкое сцепление, высокая когезия

Создатель

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

Проблема: кто создает объект A?
Решение: В общем, назначить класс B ответственность за создание объекта А если применимо одно или, предпочтительно, несколько из следующего:

  • Экземпляры B содержать или составно агрегировать экземпляры А
  • Экземпляры B записывать экземпляры А
  • Экземпляры B внимательно использовать экземпляры А
  • Экземпляры B иметь инициализирующую информацию для экземпляров А и передать на создание.[4]

Связанный образец или принцип: Низкое сцепление, Заводской образец

Контроллер

В контролер шаблон возлагает ответственность за обработку системных событий на неUI класс, который представляет всю систему или вариант использования сценарий. Объект контроллера - это объект, не относящийся к пользовательскому интерфейсу, который отвечает за получение или обработку системного события.

Проблема: кто должен отвечать за обработку события системы ввода?
Решение. Для работы с все системные события варианта использования и могут использоваться более чем для одного варианта использования. Например, для случаев использования Создать пользователя и Удалить пользователя, можно иметь один класс с именем UserController, вместо двух отдельных контроллеров вариантов использования.

Контроллер определяется как первый объект за пределами уровня пользовательского интерфейса, который получает и координирует («управляет») системную операцию. Контроллер должен делегировать работу, которая должна быть сделана, другим объектам; он координирует или контролирует деятельность. Сам он не должен делать много работы. Контроллер GRASP можно рассматривать как часть уровня приложения / сервиса.[5] (при условии, что приложение явно различает уровень приложения / сервиса и уровень домена ) в объектно-ориентированной системе с общими уровнями в логической архитектуре информационной системы.

Связанный образец или принцип: Команда, Фасад, Слои, Чистое изготовление

Косвенное обращение

Шаблон косвенного обращения поддерживает низкую связь и повторно использует потенциал между двумя элементами, возлагая ответственность за посредничество между ними на промежуточный объект. Примером этого является введение компонента контроллера для посредничества между данными (моделью) и их представлением (представлением) в шаблоне управления модель-представление. Это гарантирует, что связь между ними остается низкой.

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

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

         Посредник создает косвенное обращение между другими компонентами.

Низкое сцепление

Связь - это мера того, насколько сильно один элемент связан с другими элементами, знает о них или полагается на них. Низкое сцепление - это оценочный образец, который диктует, как распределять обязанности за следующие преимущества:

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

Высокая сплоченность

Высокая сплоченность - это оценочный паттерн, который пытается удерживать объекты должным образом сфокусированными, управляемыми и понятными. Высокое сцепление обычно используется для поддержки низкого сцепления. Высокая сплоченность означает, что обязанности данного элемента тесно связаны и четко сфокусированы. Разбиение программ на классы и подсистемы - это пример действий, которые увеличивают связующие свойства системы. В качестве альтернативы, низкая сплоченность - это ситуация, в которой у данного элемента слишком много несвязанных обязанностей. Элементы с низкой связностью часто страдают от того, что их трудно понять, повторно использовать, поддерживать и изменять.[6]

Полиморфизм

Согласно полиморфизм В принципе, ответственность за определение вариации поведения в зависимости от типа возлагается на тип, для которого это изменение происходит. Это достигается с помощью полиморфный операции. Пользователь типа должен использовать полиморфные операции вместо явного ветвления на основе типа.

Проблема: как работать с альтернативами в зависимости от типа? Как создавать сменные программные компоненты?
Решение: когда связанные альтернативы или поведения различаются в зависимости от типа (класса), возложите ответственность за поведение - с помощью полиморфных операций - на типы, для которых поведение варьируется. (Полиморфизм имеет несколько связанных значений. В этом контексте он означает «присвоение одного и того же имени службам в разных объектах».)

Защищенные варианты

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

Проблема: как спроектировать объекты, подсистемы и системы так, чтобы вариации или нестабильность этих элементов не оказывали нежелательного влияния на другие элементы?
Решение: Определите точки прогнозируемых отклонений или нестабильности; распределите обязанности по созданию вокруг них стабильного интерфейса.

Чистая фабрикация

А чистая фабрикация - это класс, который не представляет концепцию в проблемной области, специально созданный для достижения низкой связи, высокой связности и полученного потенциала повторного использования (когда решение, представленное информационный эксперт узор нет). Такой класс называется в предметно-ориентированный дизайн.

Связанные модели и принципы• Низкое сцепление. • Высокое сцепление.

Смотрите также

Примечания

  1. ^ https://dzone.com/articles/solid-grasp-and-other-basic-principles-of-object-o
  2. ^ Ларман 2005, п. 272.
  3. ^ Ларман 2005 глава 17, раздел 11.
  4. ^ Ларман 2005 глава 16, раздел 16.7
  5. ^ "Уровень приложений, как фасад бизнеса?". Yahoo! Группы (domaindrivendesign). Получено 15 июля 2010.
  6. ^ Ларман 2005 С. 314–315.

Рекомендации