如何在UML类图中为方法参数指定条件?
例如以下方法:
+grade(n : Integer)
n的值应介于1和6之间。有可能做到这一点吗?或者有没有一种不同的方式:
"+grade(n oneOf [1,2,3,4,5,6]"
谢谢你的帮助。
UML的语法不允许使用第二种方法。如果你在某个你可以控制的领域,你可以记录它的使用情况,这是可以的。然而,更好的方法是对该操作附加约束。您可以使用括号内的自由文本作为注释。或者,如果你更大胆,你可以写一个合适的OCL。这是我的观点,只有在学术界才是可取的。
详细说明qwerty_so的答案:
UML约束可以在类中的操作旁边表示:
-
纯文本,如:
{ 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注释来表示。但是,由于它可能非常复杂,特别是如果你想为每个操作记录合同,它也可以单独保存(例如,在建模工具的约束规范窗口中,或者作为图表或模型的补充文本(。