Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
TD N5 : Langage OCL
Objectifs :
1.2 A quoi servent les diagrammes de composants lors de la modlisation UML d'un projet
informatique ? Donner un exemple.
Ils permettent d'exprimer le dcoupage modulaire d'une application et d'exprimer les
dpendances fonctionnelles entre modules. Cela permet notamment de dterminer l'ordre de
compilation.
1.3 Des socits emploient un ensemble de personnes, chacune d'elle ayant un poste dans ces
socit. Chaque poste est identifi par son type et le salaire correspondant. On distingue
particulirement les directeurs de chaque socits. Une mme personne peut diriger plusieurs
socits mais une socit donne n'est dirige que par une personne. De mme, chaque
personne peut tre employe par plusieurs socits. Les personnes sont identifies par leur
nom, leur prnom, leur genre et leur date de naissance. On souhaite de plus modliser certains
attributs de ces personnes, tels que leur age, leur revenu, s'ils sont maris ou non et s'ils sont
chmeurs ou non. On souhaite aussi modliser les liens de parent entre ces personnes
(enfant/parent et mari/femme). Lorsque deux personnes sont maries, la relation de mariage
est identifie par la date laquelle il est survenu. Finalement, chaque personne possde des
comptes en banques, qui peuvent ventuellement tre partags dans un couple. Ces comptes
sont identifis par leur numro et leur solde (priv).
Donner un diagramme de classe correspondant au systme dcrit ci-dessus.
c.f. Ex 5.
1 TD N5 : OCL
2 TD N5 : OCL
Exercice 3
Une entreprise souhaite modliser avec UML le processus de formation de ses employs afin
dinformatiser certaines tches.
Le processus de formation est initialis quand le responsable formation reoit une demande de
formation dun employ. Cet employ peut ventuellement consulter le catalogue des
formations offertes par les organismes agrs par lentreprise. Cette demande est instruite par
le responsable qui transmet son accord ou son refus lemploy.
En cas daccord, le responsable cherche la formation adquate dans le catalogues des
formations agres quil tient jour. Il informe lemploy du contenu de la formation et lui
soumet le liste des prochaines sessions prvues. Lorsque lemploy fait son choix il inscrit
lemploy la session retenue auprs de lorganisme de formation concern.
En cas dempchement lemploy doit avertir au plus vite le responsable formation pour que
celui-ci demande lannulation de linscription.
A la fin de la formation lemploy transmet une apprciation sur le stage suivi et un document
attestant sa prsence.
Le responsable formation contrle la facture envoye par lorganisme de formation.
3.1 Dessiner le diagramme des cas dutilisation.
3 TD N5 : OCL
3.2 Dessiner le schma des classes de cette application, incluant toutes les classes que lon
peut dduire de lnonc, ainsi que les associations entre classes avec leurs cardinalits.
4 TD N5 : OCL
5 TD N5 : OCL
Exercice 4
Le directeur d'une chane d'htels vous demande de concevoir une application de gestion de
ses htels. Un htel est constitu d'un certain nombre de chambres (plus de 2). Un responsable
de l'htel gre la location des chambres (on dira que cette personne dirige l'htel). Chaque
chambre se loue un prix donn. L'accs aux salles de bains est compris dans le prix de la
location d'une chambre. Certaines chambres comportent une salle de bains, mais pas toutes.
Les htes de chambres sans salle de bain peuvent utiliser une salle de bains sur le palier. Ces
dernires peuvent tre utilises par plusieurs htes. Les pices de l'htel qui ne sont ni des
chambres ni des salles de bain (hall d'accueil, cuisine...) ne font pas partie de l'tude (hors
sujet). Des personnes peuvent louer une ou plusieurs chambres d'htel afin d'y rsider. Dans
ce cas, on dit que l'htel hberge ces personnes. Un htel a pour attributs son adresse, le
nombre de pices qu'il contient, le numro de l'tage infrieur et le numro de l'tage
suprieur. I faut pouvoir calculer le chiffre d'affaires de chaque htel. Une chambre a pour
attributs son numro, le nombre de lits qu'elle contient, son prix et son tage. On doit pouvoir
repeindre une chambre avec une couleur choisie, ce qui engendre un cot (rel). Les salles de
bains ont pour attributs leur tage, leur numro, le nombre d'utilisateurs pouvant les utiliser, et
on doit pouvoir les utiliser avec une fonction prenant en paramtre la personne concerne.
Finalement, les personnes sont identifies par leur nom, leur age et leur sexe.
4.1 Donner un diagramme de classes correspondant cette spcification.
6 TD N5 : OCL
Donnez une formulation en langage naturel pour chacune des contraintes OCL suivantes :
4.1
context Chambre inv :
self.etage <>13
context SalleDeBains inv :
self.etage <>13
Un htel ne contient jamais d'tage numro 13
4.2
context Chambre inv :
client->size <= nombreDeLits or
(client->size = nombreDeLits +1 and
client->exists(p:Personne | p.age < 4))
Le nombre de personnes par chambre doit tre infrieur ou gal au nombre de lits dans la
chambre loue. Les enfants (accompagns) de moins de 4 ans ne comptent pas dans cette
rgle de calcul ( hauteur d'un enfant de moins de 4 ans maximum par chambre)
4.3
context Hotel inv :
self.chambre->forAll (c : Chambre |
c.etage <= self.etageMax and c.etage >= self.etageMin)
L'tage de chaque chambre est compris entre le premier et le dernier tage de l'htel
4.4
context Hotel inv :
Sequence{etageMin..etageMax}->forAll(i : Integer |
if i<>13 then
self.chambre->select(c : Chambre | c.etage = i)->notEmpty
endif)
Chaque tage possde au moins une chambre (sauf le 13 qui n'existe pas, bien entendu...)
4.5
context Chambre::repeindre(c:Couleur)
pre : client->isEmpty
post : prix = prix@pre * 1.1
On ne peut repeindre une chambre que si elle n'est pas loue. Une fois repeinte, une chambre
cote 10% de plus.
4.6
7 TD N5 : OCL
context SalleDeBains::utiliser(p:Personne)
pre : if chambre->notEmpty then
chambre.client->includes(p)
else
p.chambre.etage = self.etage
endif
post : nbUtilisateurs = nbUtilisateurs@pre + 1
Une salle de bain privative ne peut tre utilise que par des personnes qui louent la chambre
contenant la salle de bains et une salle de bains sur le palier ne peut tre utilise que par les
clients qui logent sur le mme palier
4.7
context Hotel::calculerLoyer() : integer
post : result = self.chambre->select(client->notEmpty).prix->sum
Le loyer de l'htel est gal la somme du prix de toutes les chambres loues
8 TD N5 : OCL
Exercice 6 :
Soit une application bancaire permettant de grer des comptes bancaires, des clients, et des
banques. On souhaite intgrer les contraintes suivantes dans le modle suivant:
un compte doit avoir un solde toujours positif
un client peut possder plusieurs comptes
une personne peut tre cliente de plusieurs banques
un client dune banque possde au moins un compte dans cette banque
un compte appartient forcment un client
une banque gre plusieurs comptes
une banque possde plusieurs clients
Cependant, rien ne spcifie, dans ce diagramme, que le solde du client doit toujours tre
positif. On peut simplement ajouter une note prcisant cette contrainte ({solde > 0}), comme
le montre la figure suivant :
10 TD N5 : OCL
11 TD N5 : OCL
Exercice 7 :
7.1 Donnez une expression OCL qui permette d'indiquer que la personne qui travaille dans le
dpartement est la mme que celle qui est employe par l'entreprise.
Cntext Personne inv :
self.employeur = self.departement.employeur
7.2 Donner une expression OCL qui permette d'indiquer qu'une personne travaillant pour une
entreprise doit tre ge de 18 ans et plus. On suppose que la classe Personne a un attribut
ge.
context Personne inv :
self.age > 18
7.3 Modifier, graphiquement, le diagramme des classes prcdent pour prendre en compte la
contrainte suivante :
context personne inv :
(self.departement -> isEmpty)
xor
(self.Entreprise -> isEmpty)
12 TD N5 : OCL
7.4 Ajouter la contrainte indiquant que deux personnes ne doivent pas avoir le mme nom.
Context Personne inv :
Personne.allinstances -> forAll(p1,p2 | p1<>p2 implies p1.nom <> p2.nom)
7.5 Aucune personne n'est ge de plus de 130 ans. Le jour d'anniversaire de la personne, son
ge est augment de 1 an. Ajouter l'expression OCL permettant de reprsenter cette
prcondition et cette post-condition associes l'opration anniversaire de Personne.
context Personne : :anniversaire()
pre : age >= 1 and age <130
post : age = age@pre +1
7.6 Les personnes qui travaillent dans l'entreprise sont ges de 18 65 ans. Donner l'expression OCL correspondante.
context Entreprise inv :
self.employeur.forAll(Personne p | p.age >=18 and p.age <=65)
13 TD N5 : OCL