Les contraintes UML
Sur les deux diagrammes du haut, la contrainte porte sur un attribut qui doit être positif. En bas à gauche, la contrainte {frozen} précise que le nombre de roues d’un véhicule ne peut pas varier. Au milieu, la contrainte {subset} précise que le président est également un membre du comité. Enfin, en bas à droite, la contrainte {xor} (ou exclusif) précise que les employés de l’hôtel n’ont pas le droit de prendre une chambre dans ce même hôtel
Exemple:
context Compte inv : solde > 0 context Compte :: débiter(somme : int) pre : somme > 0 post : solde = solde@pre - somme context Compte inv : banque.clients -> includes (propriétaire)
context <élément>
<context Compte
inv : solde > 0
context Compte::débiter(somme : Real) pre : somme > 0 post : solde = solde@pre - somme context Compte::getSolde() : Real post : result = solde
le résultat de l’appel de l’opération getSolde doit être égal à l’attribut solde.
context Compte::getSolde() : Real body : solde
context Personne::getComptePositif():Set pre: self.cpts.notEmpty() body: self.cpts->select(c | c.solde>0)
context Personne self.cpts->select(c | c.solde>0)
context Personne self.cpts->forAll(c | c.solde>0)
context Personne self.cpts->exist(c | c.solde>0)
Liens entre les métamodèles UML et OCL: