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

UML方法名称前的感叹号/问号的含义,uml,class-diagram,Uml,Class Diagram,我的老师在UML类图中的方法名称前使用感叹号和问号来区分命令(!)和查询(?): 因为我以前从未见过这个,我想知道它是否实际用于实践,以及实际意义是什么 基本上,命令是没有返回类型的方法,而查询是确实有的方法,所以我认为这些符号是多余的。此外,我在互联网上找不到关于这个符号的任何信息 我非常感谢您的澄清。这不是官方符号。除了在通过签名明显的东西前面加前缀是毫无意义的之外,这只会让不熟悉这种符号的读者感到困惑。正如安娜·沃普雷塔和托马斯·基利安所说,你的老师使用的符号不是标准的UML。但正如An

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

因为我以前从未见过这个,我想知道它是否实际用于实践,以及实际意义是什么

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


我非常感谢您的澄清。

这不是官方符号。除了在通过签名明显的东西前面加前缀是毫无意义的之外,这只会让不熟悉这种符号的读者感到困惑。

正如安娜·沃普雷塔和托马斯·基利安所说,你的老师使用的符号不是标准的UML。但正如Anna Vopureta推荐的Martin Fowler的文章所指出的,Thomas Kilian的asnwer中缺少的,区分那些返回值表示纯查询(不改变状态)的操作/方法和那些不表示纯查询(由于状态改变)的操作/方法是有意义的

因此,我们必须处理三种情况:

  • 没有返回值的操作/方法
  • 具有返回值的操作/方法
  • 改变状态
  • 不更改状态(纯查询)
  • 纯查询方法可以在UML类图中表示,方法是将操作属性
    query
    用花括号附加到操作声明中

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

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

    分离查询和命令是有意义的(),但我不认为这是“正式的”UML符号。不要指望你的班级/学校以外的人知道这个符号。@AnnaVopureta谢谢你的文章!好吧,这就是我期待的答案。非常感谢。