UML方法名称前的感叹号/问号的含义

时间:2017-09-08 15:40:35

标签: uml class-diagram

我的老师在UML类图中的方法名称之前使用感叹号和问号来区分命令!)和查询({{1} }):

UML Class Diagram

我以前从未见过这个,我想知道它是否真的在实践中使用过,实际意义是什么。

基本上,命令是没有返回类型的方法,而查询是具有的方法,所以我认为这些符号是多余的。此外,我在互联网上找不到关于这种符号的任何内容。

我真的很感激澄清。

2 个答案:

答案 0 :(得分:3)

这不是官方标记。除了通过签名加入明显的事物前缀这一事实之外,它只会让那些不熟悉这种符号的读者感到困惑。

答案 1 :(得分:2)

正如Anna Vopureta和Thomas Kilian所说,老师使用的符号不是标准的UML。但正如Anna Vopureta推荐的Martin Fowler的文章中所指出的那样,并且在Thomas Kilian的asnwer中遗漏了这一点,将那些表示纯粹查询(不改变状态)的返回值的操作/方法区分开来是有意义的。不(由于状态的变化)。

所以,我们必须处理三个案例:

  1. 没有返回值的操作/方法
  2. 具有返回值的操作/方法
    1. 改变状态
    2. 不改变状态(纯查询)
  3. 纯查询方法可以通过将大括号中的操作属性query附加到操作声明中来表示在UML类图中。

    在您的示例中,正确的操作声明将是

    +foo()
    +bar1(): int
    +bar2(): int {query}