如果我有fnc:
class AClass
{
void fnc() const;
};
我是否应该在列出此fnc时在UML类图中提供const修饰符?
答案 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没有改变任何东西(它可以在记录器上改变)它可以被“标记”为“查询”。