UML方法名前exclamation/question标记的含义

Meaning of exclamation/question mark before UML method name

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

这个我没见过,不知道有没有在实践中使用,具体意思是什么

基本上,commands 是没有 return 类型的方法,而 queries 是有类型的方法,所以我认为这些符号是多余的。此外,我在互联网上找不到有关此符号的任何信息。

非常感谢您的澄清。

这不是官方表示法。除了通过签名显而易见的东西加上前缀是没有意义的,它只会让不熟悉这种符号的读者感到困惑。

正如 Anna Vopureta 和 Thomas Kilian 所说,您的老师使用的符号不是标准的 UML。但正如 Anna Vopureta 推荐的 Martin Fowler 文章中所指出的,并且在 Thomas Kilian 的回答中缺失,区分那些 operations/methods 和 return 值代表纯查询(不改变状态)和那些不(由于状态变化)。

所以,我们要处理三种情况:

  1. operations/methods 没有 return 值
  2. operations/methods 具有 return 值
    1. 改变状态
    2. 不改变状态(纯查询)

一个纯查询方法可以在UML class图中通过在花括号中附加操作属性 query到操作声明来表达。

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

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