GRASP

GRASP

GRASP (англ. General Responsibility Assignment Software Patterns — общие образцы распределения обязанностей) — паттерны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам.

В книге Крейга Лармана (Craig Larman) «Применение UML и шаблонов проектирования»[1] описано 9 таких образцов. Каждый из них помогает решить некоторую проблему, возникающую при объектно-ориентированном анализе, и которая возникает практически в любом проекте по разработке программного обеспечения. Таким образом, GRASP-паттерны — это хорошо документированные, стандартизированные и проверенные временем принципы объектно-ориентированного анализа, а не попытка привнести что-то принципиально новое.

Содержание

Каталог паттернов

Ниже следует краткая характеристика девяти известных паттернов.

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

Шаблон Information Expert определяет базовый принцип назначения обязанностей. Он утверждает, что обязанности должны быть назначены объекту, который владеет максимумом необходимой информации для выполнения обязанности. Такой объект называется информационным экспертом. Возможно, этот шаблон является самым очевидным из девяти, но вместе с тем и самым важным.

Если дизайн не удовлетворяет этому принципу, то при программировании получается спагетти-код, в котором очень трудно разбираться. Локализация обязанностей позволяет повысить уровень инкапсуляции и уменьшить уровень связанности. Кроме читабельности кода повышается уровень готовности компонента к повторному использованию.

Creator (Создатель)

Шаблон Creator решает, кто должен создавать объект. Фактически, это применение шаблона Information Expert к проблеме создания объектов. Более конкретно, нужно назначить классу B обязанность создавать экземпляры класса A, если выполняется как можно больше из следующих условий:

  • Класс B содержит или агрегирует объекты A.
  • Класс B записывает экземпляры объектов A.
  • Класс B активно использует объекты A
  • Класс B обладает данными инициализации для объектов A.

Альтернативой создателю является шаблон проектирования Фабрика. В этом случае создание объектов концентрируется в отдельном классе.

Controller (Контроллер)

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

Иногда класс-контроллер представляет всю систему в целом, корневой объект, устройство или важную подсистему (внешний контроллер).

Low Coupling (Слабая связанность)

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

  • Малое число зависимостей между классами (подсистемами).
  • Слабая зависимость одного класса (подсистемы) от изменений в другом классе (подсистеме).
  • Высокая степень повторного использования подсистем.

High Cohesion (Сильное зацепление)

High Cohesion — это принцип, который задаёт свойство сильного зацепления внутри подсистемы. Классы (подсистемы) таким образом получаются сфокусированными, управляемыми и понятными. Зацепление (cohesion) (или более точно, функциональное зацепление) — это мера связанности и сфокусированности обязанностей класса. Считается что объект (подсистема) обладает высокой степенью зацепления, если его обязанности тесно связаны между собой и он не выполняет огромных объемов работы.

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

  • Трудность понимания.
  • Сложность при повторном использовании.
  • Сложность поддержки.
  • Ненадежность, постоянная подверженность изменениям.

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

Polymorphism (Полиморфизм)

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

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

Pure Fabrication (Чистая выдумка)

Чистая выдумка — это класс, не отражающий никакого реального объекта предметной области, но специально придуманный для усиления зацепления, ослабления связанности или увеличения степени повторного использования. Pure Fabrication отражает концепцию сервисов в модели Программирование от предметной области.

Indirection (Посредник)

Indirection поддерживает слабую связанность (и возможность повторного использования) путём назначения обязанностей посредника между ними промежуточному объекту. Пример: Model-View-Controller, который позволяет ослабить связь между данными и их представлением с помощью введения класса-посредника (контроллер), отвечающего за поведение.

Protected Variations (Сокрытие реализации)

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

См. также


Ссылки

  1. Larman, Craig. Applying UML and Patterns — Third Edition. [1]



Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "GRASP" в других словарях:

  • grasp — grasp·able; grasp·er; grasp·ing·ly; grasp·ing·ness; grasp·less; re·grasp; grasp; grasp·able·ness; grasp·ably; …   English syllables

  • GRASP — may refer to:* GRASP (multimedia authoring software), a multimedia authoring software * GRASP (SAT solver), a SAT instance solver * GRASP (Object Oriented Design) * Greedy randomized adaptive search procedure * Given, Required, Analysis, Solution …   Wikipedia

  • Grasp — Grasp, n. 1. A gripe or seizure of the hand; a seizure by embrace, or infolding in the arms. The grasps of love. Shak. [1913 Webster] 2. Reach of the arms; hence, the power of seizing and holding; as, it was beyond his grasp. [1913 Webster] 3.… …   The Collaborative International Dictionary of English

  • Grasp — Grasp, v. i. To effect a grasp; to make the motion of grasping; to clutch; to struggle; to strive. [1913 Webster] As one that grasped And tugged for life and was by strength subdued. Shak. [1913 Webster] {To grasp at}, to catch at; to try to… …   The Collaborative International Dictionary of English

  • Grasp — Saltar a navegación, búsqueda En diseño orientado a objetos, GRASP son patrones generales de software para asignación de responsabilidades, es el acrónimo de General Responsibility Assignment Software Patterns . Aunque se considera que más que… …   Wikipedia Español

  • grasp — [n1] hold, grip butt, cinch, clamp, clasp, clench, clinch, clutches, embrace, grapple, lug, possession, purchase, tenure; concepts 191,710 Ant. avoidance, release grasp [n2] understanding awareness, comprehension, ken, knowledge, mastery,… …   New thesaurus

  • Grasp — Grasp, v. t. [imp. & p. p. {Grasper}; p. pr. & vb. n. {Qraspine}.] [OE. graspen; prob. akin to LG. grupsen, or to E. grope. Cf. {Grab}, {Grope}.] 1. To seize and hold by clasping or embracing with the fingers or arms; to catch to take possession… …   The Collaborative International Dictionary of English

  • grasp — (v.) mid 14c., to reach for, feel around, possibly a metathesis of grapsen, from O.E. *græpsan to touch, feel, from P.Gmc. *grap , *grab (Cf. E.Fris. grapsen to grasp, M.Du. grapen to seize, grasp, O.E. grapian to touch, feel, grope ), from PIE… …   Etymology dictionary

  • grasp — [grasp, gräsp] vt. [ME graspen, by metathesis < * grapsen, prob. < MLowG (as in LowG, Fris grapsen), akin to Norw dial. grapsa, to scratch, ON grapa, to snatch: see GRAB] 1. to take hold of firmly with or as with the hand or arms; grip 2.… …   English World dictionary

  • grasp — vb clutch, grab, seize, *take, snatch Analogous words: *catch, capture: apprehend, *arrest: *apprehend, comprehend grasp n *hold, grip, clutch …   New Dictionary of Synonyms


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»