Vous êtes sur la page 1sur 2

Gnie Logiciel Avanc

Anne 2014-2015

Thibaut Balabonski, Delphine Longuet


balabonski@lri.fr, longuet@lri.fr

Prof. Burkhart Wol


wol@lri.fr

TD 2 - Spcication OCL
Semaine du 22 septembre 2014

Exercice 1 (GBU)

On considre de nouveau le systme de gestion de la bibliothque universitaire vu au TD1.


1. Exprimer les invariants suivants en OCL.
(a) La caution associe un ouvrage est toujours positive ou nulle.
(b) Les codes barres de deux exemplaires quelconques sont distincts.
(c) Les codes barres de chaque exemplaire d'un ouvrage sont distincts.
(d) Un emprunteur ne peut pas avoir plus d'un exemplaire de chaque ouvrage.
(e) On ne peut pas emprunter plus de 5 ouvrages en mme temps.
(f) Les livres rares n'existent qu'en un seul exemplaire (mais tous les livres prsents
en un seul exemplaire ne sont pas forcment rares). Les livres rares ont donc une
caution leve, xe 25, pour viter les retards. Seuls les livres rares ont une
caution gale 25.
On ne peut pas emprunter plus d'un ouvrage rare.
(g) On ne peut pas emprunter plus de 2 exemplaires de revue en mme temps.
(h) Si une personne a un exemplaire dans la liste de ses emprunts, l'emprunteur associ
cet ouvrage est ladite personne.
(i) La somme des cautions des ouvrages emprunts ne peut pas dpasser 25.
2. Donner les modles d'opration pour les oprations suivantes.
(a) Emprunteur::crediter(montant:Integer):Integer
(b) Emprunteur::restituer(code:Integer):Boolean
Exercice 2 (Comptes Bancaires)

On considre le diagramme de classes page suivante modlisant un systme de gestion de


comptes bancaires.
Une banque possde un ensemble de clients, chacun pouvant tre titulaire d'un ou plusieurs
comptes. Un compte est soit un compte chque soit un compte d'pargne. Un compte est
hberg par une unique banque. Tout client d'une banque y possde au moins un compte.
Dans chaque banque, un client peut possder plusieurs comptes d'pargne mais ne peut tre
titulaire que d'un seul compte chque. Un compte ne peut appartenir qu' un seul client. Un
client est identi de faon unique par son nom.
Chaque compte est caractris par un numro unique, ainsi que par la devise utilise sur
ce compte (euro, livre sterling, dollar) : deux comptes avec des devises direntes peuvent
donc avoir le mme numro. Les comptes pargne sont plafonns, le plafond pouvant tre
1

dirent d'un compte l'autre. De plus, certains comptes pargne sont bloqus, c'est--dire
que le retrait sur ces comptes est interdit, seul le dpt est autoris. Le dcouvert est interdit
sur les comptes pargne. Les titulaires de comptes chques gs de moins de 25 ans ont un
dcouvert autoris (donc exonr de taxes) de 250 EUR/USD/GBP selon la devise du compte.
Des frais de dcouvert sont ajouts toute opration dont le rsultat laisse le solde du compte
en-dessous du dcouvert autoris (x 0 pour les clients de plus de 25 ans).
Il est possible de dposer et de retirer de l'argent sur un compte (si le retrait sur ce compte
est autoris). Le solde du compte est actualis aprs chaque opration en tenant compte des
ventuels frais de dcouvert.
Un client peut connatre la somme totale des soldes de ces comptes dans une banque
donne. Il peut galement connatre son solde disponible, c'est--dire la somme des soldes de
tous ses comptes pour lesquels le retrait est autoris (toutes banques confondues).
1..* clients
Personne
nom : String
adresse : String
age : Integer

enumeration
Devise

banques 1..*
Banque
solde_total(nom:String) : Real
banque 1

solde_disponible() : Real

comptes 1..*

1 proprietaire

Compte

EUR
USD
GBP

numero : Integer
comptes devise : Devise
solde : Real
1..*
retirer(montant:Real) : Boolean
deposer(montant:Real) : Boolean

Compte_epargne
plafond : Real
retrait_autorise : Boolean

Compte_cheque
decouvert_max : Real
frais_decouvert : Real

Questions

1. Quels sont les invariants associs aux classes


et
qui
ne sont pas dj prsents dans le diagramme? Les exprimer en OCL.
2. Exprimer en OCL les invariants suivants :
(a) Tout propritaire d'un compte est client de la banque hbergeant ce compte.
(b) Tout client d'une banque y possde au moins un compte.
Peut-on exprimer ces deux contraintes en une seule? Expliquer ce qu'on pourrait modier dans le diagramme pour ne plus avoir besoin de ces contraintes.
3. Donner les modles d'opration pour les mthodes suivantes :
 context Compte::deposer(montant : Real) : Boolean
 context Banque::solde_total(nom : String) : Real
 context Personne::solde_disponible : Real
Compte_cheque

Compte_epargne