UML中的Const函数规范

时间:2010-10-13 18:45:48

标签: c++ uml

如果我有fnc:

class AClass
{
    void fnc() const;
};

我是否应该在列出此fnc时在UML类图中提供const修饰符?

4 个答案:

答案 0 :(得分:2)

您确实在操作上寻找 isQuery 属性。

根据UML(2.5)规范:

  

如果isQuery属性为true,则Operation的调用不应修改实例或任何其他实例的状态   模型中的元素。

关于符号,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 :(得分:1)

语法实际上有点复杂,例如:

<< query >> -fnc()

const可以表示为刻板印象(例如,如果你有80年代后的计算机,则&lt;&lt; query&gt;&gt;或«query»)

答案 2 :(得分:0)

如果您的函数具有编写日志文件等副作用,则它不是UML意义上的查询。来自“UML Superstructure 2.3”,Sec。 7.3.36“操作”:

  

isQuery:Boolean指定BehavioralFeature的执行是否保持系统状态不变(isQuery = true)或是否可能发生副作用(isQuery = false)。默认值为false。

答案 3 :(得分:0)

您是唯一能够识别您的UML图表详细信息的人。所以UML并没有规定(如果它决定谁在乎:-))你有什么......你可以表现出来。

真正的问题是:

  

为什么要绘制该图表?谁是你的观众? [谁将阅读图表]

  

对于您自己或您的受众,是否有必要显示详细信息?你获得了什么样的好处?

只是技术信息

在c ++中

  

使用const关键字声明成员函数指定该函数是“只读”函数,不会修改调用它的对象。

所以......

  

如果fnc没有改变任何东西(它可以在记录器上改变)它可以被“标记”为“查询”。

enter image description here