Главная » UML » Операции основы UML

0

 

Операции (operations) представляют собой действия, реализуемые некоторым классом. Существует очевидное соответствие между операциями и методами класса. Обычно можно не показывать такие операции, которые просто манипулируют свойствами, поскольку они и так подразумеваются.

Полный синтаксис операций в языке UML выглядит следующим образом:

 

видимость имя (список параметров) : возвращаемый тип {строка свойств}

 

• Метка видимости обозначает, относится ли операция к открытым (+) (public) или к закрытым (-) (private); другие типы видимости обсуждаются на стр. 110.

•        

•       Имя – это строка.

•       Список параметров – список параметров операции.

•       Возвращаемый тип – тип возвращаемого значения, если таковое есть.

•       Строка свойств – значения свойств, которые применяются к данной операции.

Параметры в списке параметров обозначаются таким же образом, что и для атрибутов. Они имеют вид:

 

направление имя: тип = значение по умолчанию

 

•       Имя, тип и значение по умолчанию те же самые, что и для атрибутов.

•       Направление обозначает, является ли параметр входным (in), выходным (out) или тем и другим (inout). Если направление не указано, то предполагается in.

Например, в счете операция может выглядеть так:

 

+ balanceOn (date: Date) : Money

 

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

По моему мнению, следует различать операции, изменяющие состояние системы, и операции, не делающие этого. Язык UML определяет запрос как некую операцию, результатом которой является некоторое значение, получаемое от класса; при этом состояние системы не изменяется, то есть данная операция не вызывает побочных эффектов. Такую операцию можно пометить строкой свойств {query} (запрос). Операции, изменяющие состояние, я называю модификаторами, иначе именуемые командами.

Строго говоря, различие между запросом и модификаторами состоит в том, могут ли они изменять видимое состояние [33]. Видимое состояние – это то, что можно наблюдать извне. Операция, обновляющая кэш, изменит внутреннее состояние, но это не окажет никакого влияния на то, что видно снаружи.

Я считаю полезным выделение запросов, так как это позволяет изменить порядок выполнения запросов и не изменить при этом поведение системы. Общепринято конструировать операции так, чтобы модификаторы не возвращали значение, – тогда можно быть уверенным в том, что операции, возвращающие значения, являются запросами. [33] называет это принципом разделения команды-запроса. Делать так все время не очень удобно, но необходимо применять этот способ так часто, как только возможно.

Другие термины, с которыми иногда приходится сталкиваться, – это методы получения значения (getting methods) и методы установки

 

значения (setting methods). Метод получения значения возвращает некоторое значение из поля (и не делает ничего больше). Метод установки значения помещает некоторое значение в поле (и не делает ничего больше). За пределами класса клиент не способен определить, является ли запрос методом получения значения или модификатор – методом установки значений. Эта информация о методах является исключительно внутренней для каждого из классов.

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

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

Источник: Фаулер М.UML. Основы, 3-е издание. – Пер. с англ. – СПб: Символ-Плюс, 2006. – 192 с.,ил.

По теме:

  • Комментарии