correction

Remarques de correction : L'examen se découpe en deux parties. La première
partie contient deux exercices typiques de TD et la seconde contient un exercice
 ...

Part of the document

TD 4 - OCL
Exercice 1 Pour les différents problèmes suivants construire le diagramme de classes
correspondant et donner les différentes contraintes des opérations en OCL. . Soit une classe d'école composée d'un ensemble d'élèves. Chaque élève
a un nom et un prénom. Pour chaque classe on connaît le nombre
d'élèves, on peut ajuter ou retirer un élèves. On peut aussi connaître
l'effectif de la classe. SOLUTION context Classe d'école::ajouter(unEleve : Personne)
pre : nb_eleves exists(unEleve)
context Classe d'école::retirer(unEleve : Personne)
pre : eleves->exists(unEleve)
post : not(eleves->exists(unEleve))
context Classe d'école::effectif() :entier
post : result = nb_eleves
. Soit une montgolfière composée d'un ballon et de lest. Le ballon a une
température, que l'on peut récupérer et un volume. Le lest a une
masse. La montgolfière a une masse. On peut lâcher du lest ou faire
monter la montgolfière SOLUTION context Montgolfiere::lacherLest(quantite : Poids)
post : self.poids = self.poids@pre - quantite
context Montgolfiere::monter()
post : self.lest() = self.ballon@pre.temperature() . Soit une cave composée de types de bouteilles de vin. Un type de
bouteilles de vin se caractérise par son cépage, sa date de mise en
bouteille, du nombre de bouteilles en réserve et du producteur. Pour
chaque cave on a une réserve et on connaît les bouteilles consommées.
Pour chaque cave on peut boire un type de bouteille, noter un type de
bouteille et connaître la dernière bouteille bue.
SOLUTION
context Cave::note(T : TypeDeBouteille):entier
pre : self.bouteillesConsommes->exists(T)
post : result = t.notation.note
context Cave::boire(T :TypeDeBouteille)
pre : self.reserve->exists(T)
post : self.bouteillesConsommes.notation->notEmpty
and t.notation->exists
and
bouteillesConsommees.nb_bouteilles=bouteillesConsommees.nb_bouteilles@pre+1
Exercice 2 Soit la classe Personne. Une personne peut être l'enfant de quelqu'un ou
être parent. Représenter cette notion sous forme de diagramme de classes. Pour chaque parent, on peut connaître le nombre de filles et de garçons.
Exprimer les propriétés de ces deux méthodes en OCL (utiliser la fonction
select). SOLUTION context Personne::NbFilles():entier
post :result=self.enfants->select(fille | fille.sexe=#feminin)->size
ou result = self.enfants- >select(fille | fille.sexe=#feminin)->size
ou result = self.enfants->select(fille :
Personne|fille.sexe=#feminin)->size Exprimer le fait qu'une personne a au plus deux parents. SOLUTION context Personne inv :
self.parents->size sum> plafondDImposition
then self.parents.payeDesImpots = vrai
else self.parents.payeDesImpots = faux
On peut calculer pour chaque personne les revenus des parents. Exprimer les
propriétés de cette méthode en OCL (utiliser la fonction iterate). SOLUTION context Personne::revenusDesParents():entier
post : result = self.parents->iterate(p :Personne ;val :entier=0 |
val=p.revenus->sum)
Exercice 3 Une personne peut être mari ou femme. Elle peut donc être mariée, avoir un
emploi, avoir une date d'anniversaire, un age, un nom de famille, un
prénom, un sexe et un revenu. Si elle a un emploi elle peut être employée
par une compagnie. Une compagnie a des employés et un patron. Une personne
a un compte en banque avec un numéro de compte. Représenter le diagramme de classes correspondant. Exprimer en OCL les propriétés suivantes : - une compagnie a au moins 50 employés - une personne est considérée comme sans emploi si son salaire est
inférieur à 100 - une compagnie n'a qu'un seul patron - le patron d'une compagnie a forcément plus de 50 ans - si une personne a un époux alors il est du sexe opposé au sien - une personne de moins de 16 ans et de plus de 60 ans est sans
emploi