如何为UML类图中的参数指定条件?

问题描述

如何为 UML 类图中的方法参数指定条件?

例如下面的方法

+grade(n : Integer)

n 的值应该在 1 到 6 之间。可以这样做吗? 或者是否有不同的方式,例如:

"+grade(n oneOf [1,2,3,4,5,6]"

感谢您的帮助。

解决方法

UML 的语法不允许您使用第二种方法。如果你在某个域中,你可以控制你可以记录它的使用,那就可以了。但是,更好的方法是为该操作附加一个约束。您可以在作为注释附加的大括号内使用自由文本。或者,如果您更大胆,可以编写适当的 OCL。这是我的 POV 仅在学术界可取的。

,

详细说明qwerty_so的回答:

UML constraint 可以表示,就在类中的操作旁边:

  • 纯文本格式,例如:{ n between 1 and 6 }

  • 使用 OCL 语法,例如:{ n>0 and n<=6 }

如果是较长的表达式,也可以放在一个附于操作的注释符号中(在UML中我们说的是“操作”而不是“方法”)。

更复杂的约束也可以用普通的 OCL 表示,指示它适用的 context(例如特定的类、属性或操作)。约束可以表示不变量 (inv:),在操作的情况下,还可以表示前置条件 (pre:) 和后置条件 (post:)。在您的情况下,它看起来像:

 context: MyClass::grade(n : Integer)
   pre: n>0 and n<=6     -- expression could involve properties using prefix 'self.'

这可以在附加到类的 UML 注释中表达。但由于它可能非常复杂,特别是如果您想为每个操作记录合同,它也可以单独保存(例如,在建模工具的约束 specification windows 中,或作为 {{3} } 或模型)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...