13
 Objectif s : Etudier via des ex emples l’utilisation du langage OCL Exercice 1 : retour sur le cours 1.1 Expliquer brièvement les notions d'agrégation et composition dans les diagrammes de classe. Quelle est la différence ? Donner un exemple de chaque. Agrégation : Une classe contient un ensemble d'objets d'une autre classe. Les objets existent indépendamment de l'agrégat. Exemple : Carnet de contacts/d'adresses. Composition : C'est une agrégation forte. Il y a un lien entre l'existence du composé et de ses composants. Exemple : Voiture/roues/moteur. 1.2 A quoi servent les diagrammes de composants lors de la modélisation UML d'un projet informatique ? Donner un exemple. Ils pe rme tte nt d'e xpr ime r le déc oup age mod ula ire d'u ne appli ca tion et d'e xpr ime r les dépendances fonctionnelles entre modules. Cela permet notamment de déterminer l'ordre de compilation. 1.3 Des sociétés emploient un ensemble de personnes, chacune d'elle ayant un poste dans ces société. Chaque poste est identifié par son type et le salaire correspondant. On distingue particulièrement les directeurs de chaque sociétés. Une même personne peut diriger plusieurs sociétés mais une société donnée n'est dirigée que par une personne. De même, chaque personne peut être employée par plusieurs sociétés. Les personnes sont identifiées par leur nom, leur prénom, leur genre et leur date de naissance. On souhaite de plus modéliser certains attributs de ces personnes, tels que leur age, leur revenu, s'ils sont mariés ou non et s'ils sont chôme urs ou non. On sou hai te aus si mod éli ser les lie ns de pa ren ent re ces person ne s (enfant/parent et mari/femme). Lorsque deux personnes sont mariées, la relation de mariage est identifiée par la date à laquelle il est survenu. Finalement, chaque personne possède des comptes en banques, qui peuvent éventuellement être partagés dans un couple. Ces comptes sont identifiés par leur numéro et leur solde (privé). Donner un diagramme de classe correspondant au système décrit ci-dessus. c.f. Ex 5. 1 TD N°5 : OCL  Master MIAGE  Module : Génie Logiciel à Objets  Intervenants : B. Delahaye & M. Bakhouya TD N°5 : Langage OCL

TD5 Correction

  • Upload
    asma-ben

  • View
    2.352

  • Download
    365

Embed Size (px)

DESCRIPTION

OCL

Citation preview

  • Objectifs : Etudier via des exemples lutilisation du langage OCL

    Exercice 1 : retour sur le cours1.1 Expliquer brivement les notions d'agrgation et composition dans les diagrammes declasse. Quelle est la diffrence ? Donner un exemple de chaque.

    Agrgation : Une classe contient un ensemble d'objets d'une autre classe. Les objets existentindpendamment de l'agrgat. Exemple : Carnet de contacts/d'adresses.Composition : C'est une agrgation forte. Il y a un lien entre l'existence du compos et de sescomposants. Exemple : Voiture/roues/moteur.

    1.2 A quoi servent les diagrammes de composants lors de la modlisation UML d'un projetinformatique ? Donner un exemple.

    Ils permettent d'exprimer le dcoupage modulaire d'une application et d'exprimer lesdpendances fonctionnelles entre modules. Cela permet notamment de dterminer l'ordre decompilation.

    1.3 Des socits emploient un ensemble de personnes, chacune d'elle ayant un poste dans cessocit. Chaque poste est identifi par son type et le salaire correspondant. On distingueparticulirement les directeurs de chaque socits. Une mme personne peut diriger plusieurssocits mais une socit donne n'est dirige que par une personne. De mme, chaquepersonne peut tre employe par plusieurs socits. Les personnes sont identifies par leurnom, leur prnom, leur genre et leur date de naissance. On souhaite de plus modliser certainsattributs de ces personnes, tels que leur age, leur revenu, s'ils sont maris ou non et s'ils sontchmeurs 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 mariageest identifie par la date laquelle il est survenu. Finalement, chaque personne possde descomptes en banques, qui peuvent ventuellement tre partags dans un couple. Ces comptessont 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

    Master MIAGEModule : Gnie Logiciel Objets

    Intervenants : B. Delahaye & M. BakhouyaTD N5 : Langage OCL

  • Exercice 2 Diagramme de classesUne entreprise souhaite informatiser la gestion de son parc informatique (ordinateurs,imprimantes, etc.) pour en optimiser la maintenance. Proposer un schma de classes UMLmodlisant les spcifications ci-dessous (classes, associations entre classes, cardinalits desassociations, attributs des classes).

    1. Un ordinateur est caractris par son numro dinventaire, son adresse rseau (adresseIP), son modle, la date de son acquisition, la date de la prochaine maintenanceplanifie et le systme dexploitation install.

    2. Sur chaque ordinateur est install un ensemble de logiciels caractriss par un numrode licence, un nom et une version.

    3. Grce un systme de mots de passe, chaque ordinateur peut tre utilis par plusieursemploys mais, pour des raisons de scurit des donnes, un employ na le droitdutiliser quun seul ordinateur. Un employ est caractris par son nom, son prnomet sa fonction dans lentreprise.

    4. Les ordinateurs sont relis un certain nombre de priphriques en rseau(imprimantes, scanners, etc.). Chaque priphrique est caractris par un numrodinventaire, son adresse IP, son type, son modle, sa date dacquisition et la date de laprochaine maintenance planifie. Les priphriques pouvant servir plusieursordinateurs simultanment, un indice de priorit est affect chaque ordinateur pourchaque priphrique auquel il est connect.

    5. Chaque ordinateur et chaque priphrique est localis dans un bureau donn. Lesbureaux sont caractriss par un numro de bureau et le numro du btiment danslequel ils se trouvent. Un numro de bureau est unique dans un btiment donn.

    2 TD N5 : OCL

  • Exercice 3 Une entreprise souhaite modliser avec UML le processus de formation de ses employs afindinformatiser certaines tches. Le processus de formation est initialis quand le responsable formation reoit une demande deformation dun employ. Cet employ peut ventuellement consulter le catalogue desformations offertes par les organismes agrs par lentreprise. Cette demande est instruite parle responsable qui transmet son accord ou son refus lemploy. En cas daccord, le responsable cherche la formation adquate dans le catalogues desformations agres quil tient jour. Il informe lemploy du contenu de la formation et luisoumet le liste des prochaines sessions prvues. Lorsque lemploy fait son choix il inscritlemploy la session retenue auprs de lorganisme de formation concern. En cas dempchement lemploy doit avertir au plus vite le responsable formation pour quecelui-ci demande lannulation de linscription. A la fin de la formation lemploy transmet une apprciation sur le stage suivi et un documentattestant 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 lonpeut dduire de lnonc, ainsi que les associations entre classes avec leurs cardinalits.

    4 TD N5 : OCL

  • 3.3 Dessiner le diagramme de squence associ la demande initiale de lemploy dcritedans le deuxime paragraphe de lnonc ; assurer la cohrence avec votre rponse laquestion prcdente.

    5 TD N5 : OCL

  • Exercice 4 Le directeur d'une chane d'htels vous demande de concevoir une application de gestion deses htels. Un htel est constitu d'un certain nombre de chambres (plus de 2). Un responsablede l'htel gre la location des chambres (on dira que cette personne dirige l'htel). Chaquechambre se loue un prix donn. L'accs aux salles de bains est compris dans le prix de lalocation 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. Cesdernires peuvent tre utilises par plusieurs htes. Les pices de l'htel qui ne sont ni deschambres ni des salles de bain (hall d'accueil, cuisine...) ne font pas partie de l'tude (horssujet). Des personnes peuvent louer une ou plusieurs chambres d'htel afin d'y rsider. Dansce cas, on dit que l'htel hberge ces personnes. Un htel a pour attributs son adresse, lenombre de pices qu'il contient, le numro de l'tage infrieur et le numro de l'tagesuprieur. I faut pouvoir calculer le chiffre d'affaires de chaque htel. Une chambre a pourattributs son numro, le nombre de lits qu'elle contient, son prix et son tage. On doit pouvoirrepeindre une chambre avec une couleur choisie, ce qui engendre un cot (rel). Les salles debains ont pour attributs leur tage, leur numro, le nombre d'utilisateurs pouvant les utiliser, eton 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 13context SalleDeBains inv :self.etage 13

    Un htel ne contient jamais d'tage numro 13

    4.2 context Chambre inv :client->size 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 lachambre loue. Les enfants (accompagns) de moins de 4 ans ne comptent pas dans cettergle 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.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 i13 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 chambrecote 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 chambrecontenant la salle de bains et une salle de bains sur le palier ne peut tre utilise que par lesclients qui logent sur le mme palier

    4.7context 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

    Exercice 5 : Contraintes OCLSoit le diagramme de classes de la figure suivante qui modlise des personnes, leurs liens deparent (enfant/parent et mari/femme) et le poste ventuel de ces personnes dans une socit.

    8 TD N5 : OCL

  • Ajouter des contraintes pour les cas suivants :1. Dans une socit, le directeur est un employ, nest pas un chmeur et doit avoir plus

    de 40 ans. De plus, une socit possde exactement un directeur et au moins unemploy

    context Socitinv : self.directeur->size()=1 and not(self.directeur.chmeur) and self.directeur.age > 40 and self.employ->includes(self.directeur)

    2. Une personne considre comme au chmage ne doit pas avoir des revenus suprieurs 100

    context Personneinv : let revenus : Real = self.poste.salaire->sum() in if chmeur then revenus < 100 else revenus >= 100 endif

    3. Une personne possde au plus 2 parents (rfrencs).context Personneinv : parent->size()size()=2 implies ( parent->exists(genre=Genre::homme) and parent->exists(genre=Genre::femme) )

    5. Tous les enfants dune personne ont bien cette personne comme parent et inversement.context Personneinv : enfant->notEmpty() implies enfant->forAll( p : Personne | p.parents->includes(self))

    context Personneinv : parent->notEmpty() implies parent->forAll ( p : Personne | p.enfant->includes (self))

    9 TD N5 : OCL

  • 6. Pour tre mari, il faut avoir une femme ou un mari.context Personne::mariderive : self.femme->notEmpty() or self.mari->notEmpty()

    7. Pour tre mari, il faut avoir plus de 18 ans. Un homme est mari avec exactement unefemme et une femme avec exactement un homme.

    context Personneinv : 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

    Exercice 6 : Soit une application bancaire permettant de grer des comptes bancaires, des clients, et desbanques. 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 trepositif. On peut simplement ajouter une note prcisant cette contrainte ({solde > 0}), commele montre la figure suivant :

    10 TD N5 : OCL

  • Le diagramme dobjets suivant est valide vis--vis du diagramme de classes de la figuresuivant mais ne respectant pas la spcification du problme. Ce diagramme dobjets montreune personne (P1) ayant un compte dans une banque sans en tre client. Ce diagrammemontre galement un client (P2) dune banque ny possdant pas de compte.

    Le diagramme de classes suivant accompagn des contraintes OCL est adapt laspcification du problme.

    context Compteinv : solde > 0

    context Compte :: dbiter(somme : int)pre : somme > 0post : solde = solde@pre - somme

    context Compteinv : banque.clients -> includes (propritaire)

    11 TD N5 : OCL

  • Exercice 7 :

    7.1 Donnez une expression OCL qui permette d'indiquer que la personne qui travaille dans ledpartement 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 uneentreprise doit tre ge de 18 ans et plus. On suppose que la classe Personne a un attributge.

    context Personne inv :self.age > 18

    7.3 Modifier, graphiquement, le diagramme des classes prcdent pour prendre en compte lacontrainte 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 | p1p2 implies p1.nom p2.nom)

    7.5 Aucune personne n'est ge de plus de 130 ans. Le jour d'anniversaire de la personne, songe est augment de 1 an. Ajouter l'expression OCL permettant de reprsenter cetteprcondition et cette post-condition associes l'opration anniversaire de Personne.

    context Personne : :anniversaire()pre : age >= 1 and age =18 and p.age