具有继承的UML类图,具体取决于属性值

时间:2012-10-20 22:46:47

标签: inheritance uml class-diagram

示例如下:

 -----------                -------------------- 
|     X     | 1..1    0..1 |    <<abstract>>    |
|           |<>------------|         Y          |
|-----------|              |--------------------|
| +a:bool   |              | +b:positiveInteger |
'-----------'              '--------------------'

在现实世界中,抽象Y可以是具体的A,B或C,根据以下规则:

  • atrue时,Y为A类;
  • afalseb == 1时,Y为B类;
  • afalseb > 1时,Y为C类。

您如何在UML类图中对这些继承规则进行建模?

1 个答案:

答案 0 :(得分:1)

您可以使用OCL langauge。

首先,您应该扩展您的图并介绍A的三个具体子类BCY,然后您需要这样的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)))