示例如下:
----------- --------------------
| X | 1..1 0..1 | <<abstract>> |
| |<>------------| Y |
|-----------| |--------------------|
| +a:bool | | +b:positiveInteger |
'-----------' '--------------------'
在现实世界中,抽象Y可以是具体的A,B或C,根据以下规则:
a
为true
时,Y为A类; a
为false
和b == 1
时,Y为B类; a
为false
且b > 1
时,Y为C类。您如何在UML类图中对这些继承规则进行建模?
答案 0 :(得分:1)
您可以使用OCL langauge。
首先,您应该扩展您的图并介绍A
的三个具体子类B
,C
和Y
,然后您需要这样的OCL约束:
context X:
inv: (self.a implies self.y isOclTypeOf(A)) and
(((not self.a) and (not self.y.isOclUndefined())) implies (self.y.b = 1 implies self.y.isOclTypeOf(B))) and
(((not self.a) and (not self.y.isOclUndefined())) implies (self.y.b > 1 implies self.y.isOclTypeOf(C)))