2017-09-13 4 views
1

J'ai une classe qui stocke certaines données requises de l'EXIF d'une photographie. Il y a des options dans le requierement:cardinalité d'attribut de classe UML: au moins un de ceux-ci mais pas aucun

J'ai besoin FocalLengthIn35mmFilm ou (FocalLength et FocalPlaneXResolution et FocalPlaneYResolution).

Il correspondrait aux instructions SQL:

create table Photo(
    /* Whatever */ 
    FocalLengthIn35mmFilm FLOAT null, 
    FocalLength FLOAT null, 
    FocalPlaneXResolution FLOAT null, 
    FocalPlaneYResolution FLOAT null, 
    constraint AtLeastOneFocal CHECK (
    FocalLengthIn35mmFilm is not null OR (
     FocalLength is not null AND 
     FocalPlaneXResolution is not null AND 
     FocalPlaneYResolution is not null 
     ) 
) 
) 

Le schéma xsd serait quelque chose comme this answer

Je définirais/dessiner le schéma UML correspondant, mais je n'ai aucune idée sur la façon de modéliser cette " option en cardinalité ". Une idée?

Répondre

1

vous suffit inclure une contrainte comme ceci:

enter image description here

Notes:

  • Vous préférez utiliser != Null ou similaires pour en faire une expression bool. J'ai simplement copié votre syntaxe SQL.
  • Je n'ai pas inclus tous les attributs.
  • La contrainte pourrait aussi être écrite en OCL ce qui la rend plus formelle (pour ceux qui y insistent). Cependant, mon OCL n'est toujours pas si fluent que je pourrais l'écrire bien formé.
1

Comme le suggère @Thomas Kilian, OCL est une manière propre de formaliser ces contraintes pour UML, ce serait:

context Photo inv : 
(
self.FocalLengthIn35mmFilm->notEmpty() 
    or (
    self.FocalLenght->notEmpty() and 
    self.FocalPlaneXResolution->notEmpty() and 
    self.FocalPlaneYResolution->notEmpty() 
) 
)