- Dans une société, le directeur est un employé, n’est pas un chômeur et doit avoir plus de 40 ans. De plus, une société possède exactement un directeur et au moins un employé.
context Société inv:
self.directeur->size() = 1 and
not(self.directeur.chômeur) and
self.directeur.age > 40 and
self.employé->includes(self.directeur)
- Une personne considérée comme au chômage ne doit pas avoir des revenus supérieurs à 10000 DA.
context Personne inv:
let revenus: Real = self.poste.salaire->sum() in
if chômeur then
revenus < 10000
else
revenus >= 10000
endif
- Une personne possède au plus 2 parents (référencés).
context Personne inv:
parent->size() <= 2
- Si une personne possède deux parents, l’un est une femme et l’autre un homme.
context Personne inv:
parent->size() = 2 implies
(parent->exists(genre = Genre::homme) and
parent->exists(genre = Genre::femme))
- Tous les enfants d’une personne ont bien cette personne comme parent et inversement.
context Personne inv:
enfant->notEmpty() implies
enfant->forAll(p: Personne | p.parents->includes(self))
ou
context Personne inv:
parent->notEmpty() implies
parent->forAll(p: Personne | p.enfant->includes(self))
- Pour être marié, il faut avoir une femme ou un mari.
context Personne::marié derive:
self.femme->notEmpty() or self.mari->notEmpty()
- Pour être marié, il faut avoir plus de 18 ans. Un homme est marié avec exactement une femme et une femme avec exactement un homme.
context Personne inv:
self.marié implies
self.genre = Genre::homme implies (self.femme->size() = 1 and
self.femme.genre = Genre::femme) and self.genre = Genre::femme implies
(self.mari->size() = 1 and self.mari.genre = Genre::homme) and self.age >= 18
- Concernant la méthode débiter de la classe Compte, la somme à débiter doit être positive pour que l’appel de l’opération soit valide et, après l’exécution de l’opération, l’attribut solde doit avoir pour valeur la différence de sa valeur avant l’appel et de la somme passée en paramètre.
context Compte::débiter(somme: Real)
pre: somme > 0
post: solde = solde@pre - somme
- Toute société doit posséder, parmi ses employés, au moins une personne de plus de 50 ans.
context Société inv: self.employé->select(age > 50)->notEmpty()
ou
context Société inv: self.employé->select(individu | individu.age > 50)->notEmpty()
ou
context Société inv: self.employé->select(individu : Personne | individu.age > 50)->notEmpty()
- Imposer qu’il n’existe pas deux instances de la classe Personne pour lesquelles l’attribut nom a la même valeur, c’est-à-dire que deux personnes différentes ont un nom différent.
context Personne inv: Personne.allInstances()->forAll(p1, p2 | p1 <> p2 implies p1.nom <> p2.nom)