Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.



operation (операция)

Спецификация трансформации или запроса, которые должен выполнить вызываемый объект. Имеет имя и список параметров. Метод - это процедура, которая реализует операцию, у него есть алгоритм и описание процедуры. Операцию для активного класса можно также реализовать в виде события вызова.
См. call; call event; method.

Семантика

Операция определяет трансформацию состояния целевого объекта (и, возможно, состояния всей остальной системы, доступной целевому объекту) или запрос, который возвращает значение вызывающему операцию объекту. Операция может быть реализована в виде метода или события вызова, которое приводит к переходу в конечном автомате активного объекта. Запустить операцию можно при помощи вызова, приостанавливающего работу вызывающего объекта до тех пор, тюка операция не закончится, после чего управление возвращается к нему вместе с возвращаемым значением (если таковое имеется) в следующую за точкой вызова позицию.
Операцию объявляют в классе, после чего объявление наследуется потомками этого класса. Если у другой операции сопоставляемая сигнатура, значит, это одна и та же операция. Программная реализация может определять правило совпадения сигнатур, чтобы тестировать их на наличие конфликтов. По умолчанию в сигнатуру входят имя операции и классы (но не имена и не направление передачи) параметров, без учета возвращаемых параметров. Та же самая операция может появляться в классе-потомке. В этом случае ее считают повторением унаследованного объявления и игнорируют. Целью в данном случае будет разрешение объявления операции в классах из различных пакетов более одного раза, используя совпадение имен. Объявление операции, которое является общим предком для всех других ее объявлений, называется источником (origin, термин Бертрана Мейера).
Если два объявления операции имеют одинаковые имена и упорядоченный список типов параметров (исключая возвращаемые параметры), а остальные свойства этих операций отличаются, (например, если параметр является входным параметром (in-parameter) в одной операции и выходным параметром (out-parameter) в другой), то между этими двумя объявлениями возникает конфликт и модель считается плохо согласованной.
Метод является реализацией операции (которая также может быть реализована с помощью события вызова). Если операция объявлена в классе, не имеющем абстрактных свойств, то для нее в этом классе задается метод. В противном случае операция считается абстрактной (у нее нет метода); если метод наследуется, то она может быть конкретной.

Структура

У операции есть несколько основных составляющих:
параллелизм (concurrency)
Семантика параллельных вызовов одного и того же пассивного экземпляра. Является перечислением. Возможны следующие значения:
последовательный (sequential)
Вызывающие объекты должны быть скоординированы таким образом, чтобы одновременно осуществлялся только один вызов любой последовательной операции объекта. В случае если вызовы будут идти параллельно, гарантировать семантику и целостность системы невозможно.
охраняемый (guarded)
От параллельных потоков управления может производиться несколько вызовов одного объекта (для любой охраняемой операции), однако выполняются они не все сразу, а один за другим. Все прочие вызовы блокируются до того момента, пока не завершится выполнение первой операции. Разработчик должен спроектировать систему таким образом, чтобы в подобной ситуации в ней не возникало взаимоблокировок. В случае наличия последовательной одновременной операции, охраняемые операции должны выполняться корректно (или же само блокироваться). В противном случае соблюсти семантику охраняемых операций нельзя.
параллельный (concurrent)
От параллельных потоков управления может одновременно осуществляться несколько вызовов одного объекта (для параллельных операций). Все они могут происходить одновременно. Семантика при этом остается корректной. Параллельные операции можно проектировать таким образом, чтобы они осуществлялись корректно в случае наличия параллельной, последовательной или охраняемой onqtannw для одного и того же объекта. В противном случае соблюсти семантику параллелизма нельзя.
полиморфность (polymorphism)
Указывает, могут ли классы-потомки заменять реализацию операции (метод или событие вызола). Если полиморфность есть, то реализация операции может быть подменена в классе-потомке, который предоставляет новое определение метода или другой переход в конечном автомате. Таким образом, реализация может принимать различные формы (иначе говоря, она полиморфна). Если же полиморфность отсутствует, то текущая реализация наследуется без изменений всеми потомками и имеет одну единственную форму.
запрос (query)
Указывает, оставляет ли операция состояние системы неизменным, иначе говоря, является ли она запросом. Если да, то операция возвращает значение и больше ничего не делает. Если нет, то она может изменить состояние системы.
имя (name)
Имя операции, строка. Имя операции и список типов параметров (к которым не относятся имена параметров и возвращаемые типы) называется сопоставляемой сигнатурой операции. Эта сигнатура должна быть уникальной в пределах класса и его предков. Если же встречаемся дублирование, то оно воспринимается как повторное объявление операции, которое должно полностью совпадай с предыдущим. Если они совпадают, то игнорируются нее объявления этой операции, кроме того, которое было сделано у самого далекого предка. Если же сигнатуры не совпадают, модель считается плохо согласованной.
список параметров (parameter list)
Список объявлений параметров операции. См. статью parameter list.
возвращаемое значение (return type)
Список типов значений, которые возвращаются вызовом операции (если таковые имеются). Если операция не возвращает значений, значит, это свойство имеет нулевое значение (null). Обратите внимание, что многие языки программирования не поддерживают возможность возврат нескольких значений. Однако это остается обоснованном концепцией моделирования, которую можно реализовать различными способами, - например, использовать один или несколько параметров операции и качестве выходных значений.
область действия (scope)
Указывает, применяется ли операция к отдельным объектам или ко всему классу. Возможны следующие значения:
экземпляр (instance)
Операцию можно применять к отдельным объектам.
класс (class)
Операция применяется к самому классу, - например, операция но созданию экземпляра класса.
спецификация (specification)
Выражение, описывающее действия, производимые в результате выполнения операции (например, условия до-и-после). Язык UML не определяет формат спецификации, то есть она может принимать разнообразные формы.
видимость (visibility)
Видимость операции для классов, отличных от того, в котором она определяется. См. visibility.
Метод обладает теми же составляющими, что и операция. Кроме того, у него может быть одно или несколько своих собственных свойств:
поведение (behavior)
Необязательный конечный автомат, описывающий реализацию метода.

тело (body)
Выражение, описывающее процедуру (содержание) метода. Может быть представлено в виде фрагмента текста. Обычно тело метода записывается на языке программирования, однако для неформальных определений может подойти и естественный язык. Вообще, это значение обычно не указывается вместе с конечным автоматом. Присутствует либо конечный автомат, либо текст метода.
кооперация (collaboration)
Множество коопераций, описывающих реализацию метода в виде упорядоченного множества сообщений, которыми обмениваются роли (при взаимодействии).
Событие вызова имеет те же составляющие, что и операция. Реализация операции должна определяться одним или несколькими переходами, которые активируются событием вызова.

Нотация

Операция записывается в виде строки текста, которую можно разобрать по свойствам. По умолчанию используется следующий синтаксис:
"стереотип"необяз видимостьнеобяз имя (список-параметров) : возвращаемый тип необяз
{ строка-свойств }необяз
Стереотип, видимость, выражение возвращаемого типа и строка свойств опциональны (равно как и отделяющие их знаки пунктуации). Список параметров может быть пустым.

На рис. 137 изображена типичная операция.

+display ( ): ochtion
-hide ( )
"constructor + create ( )
-atlachXWindow(x win:Xwindow')

Рис. 137. Список различных операций
Имя. Строка, в которой содержится имя операции (параметры к имени не относятся).
Список параметров. Список объявлений параметров, разделенных запятыми. Каждый из них состоит направления, имени и типа. Весь список берется в круглые скобки - даже если этот список пустой.
См. более подробно о параметре или списке параметров в статьях parameter list и parameter.
Возвращаемый тип. Строка, в которой содержится список разделенных запятыми имен классификаторов (классов, типов данных или интерфейсов). Сначала идет список параметров операции, затем двоеточие и уже после него - строка возвращаемого типа. Если операция не возвращает никакого значения, то двоеточие и строка типа просто не указываются (в языке С++ соответствует типу void). Некоторые языки программирования поддерживают возможность возврата нескольких значений.
Видимость. Видимость указывается при помощи знаков пунктуации: "+", "#", или "-", которые обозначают соответственно открытую, закрытую и защищенную видимость. Кроме этого, видимость можно указать при помощи ключевого слова, стоящего в строке свойств (например, {visibiliti=private}). Такую форму нотации лучше использовать при определении типа видимости пользователем или же в тех случаях, когда этого требует язык программирования.
Метод. Для объявления метода используется тот же синтаксис, что и для объявления операции. В качестве объявления операции используется самое первое появление ее сигнатуры в иерархии обобщения. Одинаковые сигнатуры в классах-потомках являются лишними объявлениями операции, которые, впрочем, можно использовать для объявления методов или для объявления операций при разработке классов по отдельности. Если у объявления операции есть абстрактное свойство (при этом имя операции пишется курсивом или около него ставится ключевое слово abstract), то метода у него нет. В противном случае объявление представляет как операцию, так и реализующий его метод.
В совпадающих операциях и методах используются имя операции и упорядоченный список типов параметров, куда не входят возвращаемые параметры. Если остальные параметры не соответствуют друг другу (например, входной параметр соответствует параметру), то получается конфликтная ситуация, а модель считается плохо согласованной.
Если у двух одинаковых объявлений операций нет общего объявления -предка, однако, при этом они наследуются одним классом, значит, модель плохо согласована - одинаковые объявления операций вызовут конфликт в классе, который их наследует.
Тело метода. Тело метода можно изобразить в виде фрагмента текста, находящегося в примечании, которое прикреплено к объявлению операции. Если этот текст является формальной спецификацией на каком-либо языке (семантическое ограничение), то его нужно брать в фигурные скобки. В противном случае это обычный текст на естественном языке, которым описывается поведение (комментарий). Связь между объявлением метода и его конечным автоматом или кооперацией не имеет визуального представления, однако инструмент моделирования может создать в соответствующем месте гиперссылку.
Спецификация. Выражение, описывающее результаты совершения операции. Его можно сформулировать по-разному, включая текст, условия до-после и интервалы. В любом случае спецификация должна быть выражена в терминах наблюдаемого воздействия операции на состояние системы, а не в терминах алгоритма выполнения. За алгоритм отвечает метод.
Спецификация изображается в виде строки ограничения, расположенной в комментарии, прикрепленном к операции.
Запрос. Эта опция имеет вид строки свойств, которая может иметь форму либо isQuery=true, либо isQuery=false. Если выражение истинно (true), то запрос может также изображаться при помощи ключевого слова query (запрос). Отсутствие опции указывает на то, что выражение ложно (false), иными словами, что операция потенциально может изменить состояние системы.
Полиморфность. Эта опция изображается в виде строки свойств isPolymorphic=true (переопределение допускается) или isPolymorphic= false (переопределение не допускается). Отсутствие опции указывает на то, что выражение истинно (true), иными словами, что переопределение допускается.
Область действия. Чтобы изобразить операцию с областью действия в масштабе экземпляра, не нужно подчеркивать строку операции. У операции с областью действия в масштабе класса подчеркивается строка имени.
Параллелизм. Эта операция изображается при помощи строки свойств concurrency=значение, где значение будет либо sequential, либо guarded либо concurrent.
Сигналы. Для того чтобы доказать, что класс получает сигнал, в списке операций перед объявлением операции помешается ключевое слово "signal". Параметры такой операции являются параметрами сигнала. У объявления может не быть возвращаемого типа. Реакция объекта на получение события изображается при помощи конечного автомата. Помимо всего прочего, эта нотация может отображать реакцию объектов этого класса на сбойные ситуации и на исключения, которые должны моделироваться в виде сигналов.
Варианты представления
Список аргументов и возвращаемый тип можно tie указывать (но только вместе, а не по отдельности). Инструмент моделирования может по-разному обозначать видимость, - например, с помощью специальной пиктограммы или же определенным образом сгруппировав элементы.
Синтаксис строки сигнатуры операции можно заимствовать у конкретного языка программирования, например C++ или Smalltalk. В эту же строку можно включать специфические именованные свойства.

Стилистические указания.

  • Как правило, имена операций начинаются со строчных (а не прописных) букв.
  • Имена операций записываются обычным шрифтом,
  • Абстрактные операции записываются курсивом.

Стандартные элементы

semantics (семантика).

Алфавитный указатель