Диаграмма классов UML с наследованием в зависимости от значений свойств

Пример следующий:

 -----------                -------------------- 
|     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?


person Elvex    schedule 20.10.2012    source источник
comment
Я бы не стал. Это побочные ограничения, и они не относятся к самой диаграмме классов.   -  person John Saunders    schedule 21.10.2012


Ответы (1)


Для этого можно использовать язык OCL.

Сначала вы должны расширить свою диаграмму и ввести три конкретных подкласса, 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)))
person gefei    schedule 21.10.2012
comment
Schematron, по-видимому, также работает для XML-документов. - person Elvex; 26.11.2012