Спецификация константной функции в UML - PullRequest
2 голосов
/ 13 октября 2010

Если у меня есть fnc:

class AClass
{
    void fnc() const;
};

Должен ли я предоставлять модификатор const на диаграмме классов UML при перечислении этого fnc или нет?

Ответы [ 4 ]

2 голосов
/ 02 ноября 2015

Вы действительно ищете свойство isQuery для операции .

Согласно спецификации UML (2.5):

Если свойство isQuery имеет значение true, вызов Операции не должен изменять состояние экземпляра или любого другого элемента в модели.

В отношении нотации UML говорит следующее:

[<visibility>] <name> ‘(‘ [<parameter-list>] ‘)’ [‘:’ [<return-type>] [‘[‘ <multiplicity-range> ‘]’][‘{‘ <oper-property> [‘,’<oper-property>]* ‘}’]]

, где

<oper-property> указывает свойства Операции.

<oper-property> ::= ‘redefines’ <oper-name> | ‘query’ | ‘ordered’ |‘unordered’ | ‘unique’ | ‘nonunique’ | ‘seq’ |‘sequence’ |<oper-constraint>

Так что для вас пример, который станет

+ func() : void {query}

1 голос
/ 13 октября 2010

Синтаксис на самом деле немного запутанный, например:

<< query >> -fnc()

Const можно представить в виде стереотипа (например, << query >> или «query», если у вас есть пост 1980-х годовкомпьютер)

0 голосов
/ 07 июля 2011

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

Реальный вопрос:

Почему вы рисуете эту диаграмму? Кто ваша аудитория? [Кто будет читать диаграммы]

и

Для себя или для своей аудитории, нужно ли показывать эту деталь? Какую выгоду вы получаете?

Техническая информация

В с ++

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

Итак ...

Если fnc ничего не меняет (это может измениться в Logger), его можно «пометить» как «запрос».

enter image description here

0 голосов
/ 07 июля 2011

Если ваша функция имеет побочные эффекты, такие как запись файла журнала, это не запрос в смысле UML.Из "UML Superstructure 2.3", гл.7.3.36 «Операция»:

isQuery: Boolean Указывает, оставляет ли выполнение BehavioralFeature состояние системы неизменным (isQuery = true) или могут ли возникать побочные эффекты (isQuery = false).Значением по умолчанию является false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...