问题描述
如何为 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} } 或模型)。