SlideShare una empresa de Scribd logo
1 de 26
megaplanet.org/JeanMarieFavre
OCL : Liaison avec UMLOCL : Liaison avec UML
ContexteContexte
Accès aux attributs et opérationsAccès aux attributs et opérations
Navigation via les associationsNavigation via les associations
Invariant, Propriété dérivée, Valeur d'initialisationInvariant, Propriété dérivée, Valeur d'initialisation
Précondition, Postcondition, Corps de méthodePrécondition, Postcondition, Corps de méthode
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
2
Contexte d'une contrainteContexte d'une contrainte
Contrainte toujours associée à un élément de modèle :Contrainte toujours associée à un élément de modèle :
lele contextecontexte de la contrainte.de la contrainte.
Deux techniques pour spécifier le contexte :Deux techniques pour spécifier le contexte :
Client
1..4 0..*
titulaires
Compte
numéro
solde
dMax
*
1
signataire1
0..*
CarteBleue
code
retraitMax
context Compte
inv: dmax >=0
inv: solde > -dMax
context CarteBleue
inv: Compte.titulaires->includes(self.signataire)
inv: code>0 and code<=9999
inv: retraitMax>10
context Compte::solde : integer
init: floor(depotInitial * 10 / 100)
{ init: 0 }
{ inv: Compte.titulaires->includes(self.signataire)}
{ inv: dMax >= 0
inv: solde > -dMax }
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
3
Opérations spécifiquesOpérations spécifiques
au modèle objet d ’UMLau modèle objet d ’UML
accès à un attribut, à une opérationaccès à un attribut, à une opération
navigation via les associationsnavigation via les associations
VIA une associationVIA une association
VERS une classe associativeVERS une classe associative
DEPUIS une classe associativeDEPUIS une classe associative
VIA un association qualifiéeVIA un association qualifiée
accès au type et super typesaccès au type et super types
accès aux instances d’une classe (extension)accès aux instances d’une classe (extension)
accès à l'état d'un objetaccès à l'état d'un objet
constructions pour les post conditionsconstructions pour les post conditions
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
4
Accès à un attributAccès à un attribut
Accès à une méthodeAccès à une méthode
objet . attributobjet . attribut
Accès à un attributAccès à un attribut
selfself.dateDeNaissance.dateDeNaissance
objet . méthodeobjet . méthode(( expr1expr1,, expr2expr2, … ), … )
Accès à une méthodeAccès à une méthode sans effet de bordsans effet de bord (( {query}{query} ))
selfself.impôts(1998).impôts(1998)
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
5
Navigation VIA une associationNavigation VIA une association
X
Set(X)
OrderedSet(X)
Bag(X)
Sequence(X)
Personne Société
employés
* 0..2
sociétés
objet . roleobjet . role
X
1 ou 0..1
X*
X
{ordered} *
X
*
X
{ordered, nonunique} *
{nonunique}
typetype
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
6
ExempleExemple
Personne
Set(Voiture)
OrderedSet(Personne)
Sequence(Personne)
self.père
self.voitures
self.enfants
self.épouses
0..1
*
* {ordered}
* {ordered,nonunique}
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
7
Navigation VIA une associationNavigation VIA une association
Rappel: élement converti en singletonRappel: élement converti en singleton
selfself.père->.père->sizesize()() = 1= 1
Permet de tester si la valeur est définiePermet de tester si la valeur est définie
selfself.père->.père->isEmptyisEmpty()()
selfself.épouse->.épouse->notEmptynotEmpty()() impliesimplies selfself.épouse.sexe =.épouse.sexe =
Sexe::fémininSexe::féminin
Association sans nom de rôleAssociation sans nom de rôle
=> nom de la classe destination (avec une minuscule)=> nom de la classe destination (avec une minuscule)
père
épouse
0..1
0..1Personne
sexe
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
8
Personne Société
Navigation VERS une associationNavigation VERS une association
objet . associationobjet . association
Permet d ’accéder à l ’ensemble des liensPermet d ’accéder à l ’ensemble des liens
employés
* 0..2
Emploi
salaire
augmenter()
sociétés
s.Emploi
p.Emploi
s.Emploi->collect(salaire)->sum()
s.Emploi.salaire->forall(x | x>500 )
sp
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
9
Navigation VERS une association réflexiveNavigation VERS une association réflexive
association réflexive => indication du sens de parcoursassociation réflexive => indication du sens de parcours
(vers le role)(vers le role)
objet . associationobjet . association [[ rolerole ]]
Personne
age
chefs
employés
*
*
Evaluation
note
paul.Evaluation [chefs ]
paul.Evaluation [employés]
paul.Evaluation [chefs].note -> sum()/paul.chefs->size()
paul.Evaluation ? marie
sophie
chefs
chefs
note=5
e1
note=15
e1
paulpablo
chefs
note=5
e3
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
10
Personne Société
Emploi
salaire
Navigation DEPUIS une associationNavigation DEPUIS une association
lienlien .. rolerole
Accès aux objets à d'un lienAccès aux objets à d'un lien
toujourstoujours un et un seulun et un seul objetobjet
employés
* 0..2
sociétés
e.employés
e.sociétés
s.Emploi->select(salaire<1000).employés
e
s
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
11
Navigation via une Association QualifiéeNavigation via une Association Qualifiée
Banque Comptenc
0..1
lienlien .. rolerole [[valeurvaleur,,valeurvaleur, … ], … ]
Accès qualifiéAccès qualifié
b.compte[ 4029 ]
b.compte[ 0 ]
compte
Gère
lienlien .. rolerole
codomainecodomaine
lienlien .. assoc . keyassoc . key
domainedomaine
b.compte b.Gére.nc
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
12
Opérations concernant les typesOpérations concernant les types
objetobjet .. oclIsTypeOf(oclIsTypeOf( typetype ))
type directtype direct
objetobjet . oclIsKindOf(. oclIsKindOf( typetype ))
type direct ou supertypestype direct ou supertypes
objetobjet . oclAsType(. oclAsType( typetype ))
Conversion de type (casting)Conversion de type (casting)
Figures
Cercles Polygones
Triangles Carrés
c1
c2
c3
c4
t1
t2
ca1
ca2
p
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
13
Opérations concernant les typesOpérations concernant les types
Contraintes sur les typesContraintes sur les types
p.enfantsp.enfants->select(oclIsTypeOf(->select(oclIsTypeOf(FemmeFemme))))
p.enfants->p.enfants->select(oclIsKindOf(select(oclIsKindOf(FemmeFemme))))
Accès aux propriétés redéfiniesAccès aux propriétés redéfinies
f .f . oclAsType(oclAsType(PersonPerson)).nom.nom
Typage dynamiqueTypage dynamique
p.enfants-p.enfants->select(oclIsKindOf(>select(oclIsKindOf(FemmeFemme)).oclAsType(Set()).oclAsType(Set(FemmeFemme))))
->select(->select(nomDeJF <> nomnomDeJF <> nom))
Personne
nom enfants
*
Femme
nomDeJF
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
14
Opérations définies sur les classesOpérations définies sur les classes
Classe.propdeclasseClasse.propdeclasse
Permet d ’accéder aux propriétés de classesPermet d ’accéder aux propriétés de classes
Classe.Classe.allInstancesallInstances
Retourne l ’ensemble des instances de la classeRetourne l ’ensemble des instances de la classe
c ’est à dire l ’extension de cette classec ’est à dire l ’extension de cette classe
Personne.allInstances->Personne.allInstances->size()size() < 500< 500
Personne.allInstances->Personne.allInstances->forallforall(p1,p2 |(p1,p2 |
p1<>p2p1<>p2 impliesimplies p1.numsecu <> p2.numsecu)p1.numsecu <> p2.numsecu)
Personne.allInstances-Personne.allInstances->isUnique>isUnique(numsecu)(numsecu)
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
15
Où utiliser OCLOù utiliser OCL
OCL peut être utilisé pour décrire des prédicatsOCL peut être utilisé pour décrire des prédicats
inv:inv: invariants de classesinvariants de classes inv:inv: solde < decouvertMaxsolde < decouvertMax
pre:pre: pré-conditions d ’opérationspré-conditions d ’opérations pre:pre: montantARetirer > 0montantARetirer > 0
post:post: post-conditions d ’opérationspost-conditions d ’opérations post:post: solde > solde@presolde > solde@pre
OCL peut également être utilisé pour décrire des expressionsOCL peut également être utilisé pour décrire des expressions
def:def: déclarer des attributs ou des opérationsdéclarer des attributs ou des opérations def:def: nbEnfants:IntegernbEnfants:Integer
init:init: spécifier la valeur initiale des attributsspécifier la valeur initiale des attributs init:init: enfants->size()enfants->size()
body:body: exprimer le corps de méthodes {query}exprimer le corps de méthodes {query} body:body: enfants->select(age< a )enfants->select(age< a )
derive:derive: définir des élements dérivés (/)définir des élements dérivés (/) derive:derive: age<18age<18
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
16
InvariantsInvariants (inv)(inv)
Prédicat associé à une classe ou une associationPrédicat associé à une classe ou une association
Doit être vérifié à tout instantDoit être vérifié à tout instant
Le contexte est défini par un objetLe contexte est défini par un objet
cet objet peut être référencé parcet objet peut être référencé par selfself
l ’objet peut être nommé explicitement (possibilité supprimée en UML2.0?)l ’objet peut être nommé explicitement (possibilité supprimée en UML2.0?)
L ’invariant peut être nomméL ’invariant peut être nommé
contextcontext PersonnePersonne
invinv pasTropVieux : age < 110pasTropVieux : age < 110
invinv : self.age >= 0: self.age >= 0
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
17
Exemples d’invariantsExemples d’invariants (inv)(inv)
contextcontext PersonnePersonne
invinv : age>0: age>0 andand selfself.age<110.age<110
invinv mariageLégal : mariémariageLégal : marié impliesimplies age > 16age > 16
invinv enfantsOk : enfants->enfantsOk : enfants->sizesize() < 20() < 20
invinv : not enfants->: not enfants-> includesincludes((selfself))
invinv : enfants->: enfants->includesAllincludesAll(filles)(filles)
invinv : enfants->: enfants->forallforall( e |( e | selfself.age - e.age < 7 ).age - e.age < 7 )
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
18
Définitions additionnellesDéfinitions additionnelles (def)(def)
Il est possible en OCL de définir dans une classe existante:Il est possible en OCL de définir dans une classe existante:
de nouveaux attributsde nouveaux attributs
de nouvelles opérationsde nouvelles opérations
contextcontext ClasseClasse
defdef: nomatt : type = expr: nomatt : type = expr
defdef: nomop( … ) : type = expr: nomop( … ) : type = expr
Utile pour décomposer des requetes ou contraintes complexesUtile pour décomposer des requetes ou contraintes complexes
Eviter de "polluer" le modèleEviter de "polluer" le modèle
contextcontext PersonnePersonne
defdef: ancestres() :: ancestres() : SetSet(Personne)(Personne)
= parents->= parents-> unionunion(parents.ancestres()->(parents.ancestres()->asSetasSet())())
invinv:: notnot ancestres()->ancestres()->includesincludes((selfself))
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
19
Expression de propriétés dérivéesExpression de propriétés dérivées (derive)(derive)
Préciser en OCL la valeur d'un attribut ou d'une associationPréciser en OCL la valeur d'un attribut ou d'une association
dérivéedérivée
Complète la notationComplète la notation //
contextcontext Personne::estMarié : BooleanPersonne::estMarié : Boolean
derivederive : conjoint->: conjoint->notEmpty()notEmpty()
contextcontext Personne::filles :Personne::filles : SetSet(Personne)(Personne)
derivederive : enfants->: enfants->selectselect(sexe = Sexe::Feminin)(sexe = Sexe::Feminin)
contextcontext Personne::grandParents :Personne::grandParents : SetSet(Personne)(Personne)
derivederive: parents.parents->: parents.parents->asSetasSet()()
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
20
Expression du corps d'une méthodeExpression du corps d'une méthode (body)(body)
Description en OCL d'une méthode sans effet de bordDescription en OCL d'une méthode sans effet de bord
(({isQuery}{isQuery}))
Equivalent à une requêteEquivalent à une requête
contextcontext Personne:acf( p : Personne ) :Personne:acf( p : Personne ) : OrderedSetOrderedSet(Personne)(Personne)
bodybody : self.ancestres()->: self.ancestres()->intersectionintersection(p.ancestres())(p.ancestres())
->select(sexe = Sexe::Feminin)-->select(sexe = Sexe::Feminin)-
>>sortedBysortedBy(dateDeNaissance)(dateDeNaissance)
contextcontext PersonnePersonne
defdef: ancestres :: ancestres : SetSet(Personne)(Personne)
= parents->= parents->unionunion(parents.ancestres->(parents.ancestres->asSetasSet())())
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
21
Pré-conditions et post-conditionsPré-conditions et post-conditions (pre, post)(pre, post)
Prédicats associés à une opérationPrédicats associés à une opération
les pré-conditions doivent être vérifiées avant l ’exécutionles pré-conditions doivent être vérifiées avant l ’exécution
les post-conditions sont vraies après l ’exécutionles post-conditions sont vraies après l ’exécution
selfself désigne l ’objet sur lequel l ’opération à lieudésigne l ’objet sur lequel l ’opération à lieu
Dans une post-condition :Dans une post-condition :
@pre@pre permet de faire référence à la valeur avant l ’opérationpermet de faire référence à la valeur avant l ’opération
resultresult designe le resultatdesigne le resultat
ocsIsNewocsIsNew()() indique si un objet n'existait pas dans l'état précédentindique si un objet n'existait pas dans l'état précédent
contextcontext Type::opération( param1 : Type1, …) : TypeType::opération( param1 : Type1, …) : Type
prepre nom1 : param1 < …nom1 : param1 < …
prepre nom2 : …nom2 : …
postpost nom2 : …nom2 : … resultresult > …> …
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
22
ExemplesExemples
contextcontext Personne::retirer( montant : Integer )Personne::retirer( montant : Integer )
prepre :: montant > 0montant > 0
postpost : solde < solde: solde < solde@pre@pre - montant- montant
contextcontext Personne::salaire() : integerPersonne::salaire() : integer
postpost : result >= Legislation::salaireMinimum: result >= Legislation::salaireMinimum
contextcontext Compagnie::embaucheEmployé( p : Personne) : ContratCompagnie::embaucheEmployé( p : Personne) : Contrat
prepre pasPrésent :pasPrésent : notnot employés->employés->includesincludes(p)(p)
postpost embauché : employés = employésembauché : employés = employés@pre@pre->->includingincluding(p)(p)
postpost :: result.oclIsNewresult.oclIsNew()()
postpost :: resultresult.compagnie =.compagnie = selfself andand resultresult.employé = p.employé = p
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
23
ExercicesExercices
Spécifier une fonction qui retourne la racine carrée d'un réelSpécifier une fonction qui retourne la racine carrée d'un réel
context Math::Sqrt(x : Real) : Realcontext Math::Sqrt(x : Real) : Real
pre: x>=0pre: x>=0
post: result * result = xpost: result * result = x
Partie entière de la racine carrée d'un entierPartie entière de la racine carrée d'un entier
context Math::ISqrt( x : Integer ) : Integercontext Math::ISqrt( x : Integer ) : Integer
pre: x>=0pre: x>=0
post: result*result <= x and (result+1)*(result+1) > xpost: result*result <= x and (result+1)*(result+1) > x
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
24
Accès à l'état d'un objetAccès à l'état d'un objet
obj . oclInState( state )obj . oclInState( state )
Indique si l'objet est dans l'état spécifiéIndique si l'objet est dans l'état spécifié
Si une machine à état a été associée à la classe de l'objetSi une machine à état a été associée à la classe de l'objet
:::: pour avoir accès aux états imbriquéspour avoir accès aux états imbriqués
enfants->select( e | e.oclInState( Employé ) )enfants->select( e | e.oclInState( Employé ) )
livres->exists( l.oclInState( Rentré::ARanger ) )livres->exists( l.oclInState( Rentré::ARanger ) )
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
25
Contraintes sur l'état dans les post-conditionsContraintes sur l'état dans les post-conditions
@pre@pre fait référence à la valeur d'une propriété dans l'état initialfait référence à la valeur d'une propriété dans l'état initial
resultresult fait référence au résultatfait référence au résultat
oclIsNewoclIsNew indique que l'objet n'existait pas dans l'état initialindique que l'objet n'existait pas dans l'état initial
context Compte::virementInterne( dest : Compte, montant : integer )context Compte::virementInterne( dest : Compte, montant : integer )
: Opération: Opération
pre: montant>0pre: montant>0
pre: montant<self.soldepre: montant<self.solde
pre: self.titulaire = dest.titulairepre: self.titulaire = dest.titulaire
pre: self.banque = dest.banquepre: self.banque = dest.banque
post: self.solde < self.solde@pre - montantpost: self.solde < self.solde@pre - montant
post: dest.solde = dest.solde@pre + montantpost: dest.solde = dest.solde@pre + montant
post: self.operations = self.operations@pre->append(result)post: self.operations = self.operations@pre->append(result)
post: result.oclIsNew and result.montant = montantpost: result.oclIsNew and result.montant = montant
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
26
Contraintes sur l'échange de messagesContraintes sur l'échange de messages
^^ indique qu'un message à été envoyé entre les deux étatsindique qu'un message à été envoyé entre les deux états
^^^^ dénote l'ensemble des messages envoyés entre les deux étatsdénote l'ensemble des messages envoyés entre les deux états
Utile pour l'expression de protocoles, de patrons de conception, etc.Utile pour l'expression de protocoles, de patrons de conception, etc.
context TreeModel::hasChanged()context TreeModel::hasChanged()
post: getTreeListeners()@pre->forall( li | li ^ update() )post: getTreeListeners()@pre->forall( li | li ^ update() )
TreeModel TreeView
treeListeners
*
update()hasChanged()

Más contenido relacionado

La actualidad más candente

Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Yassine Badri
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donneesAmir Souissi
 
Les collections en JAVA
Les collections en JAVALes collections en JAVA
Les collections en JAVAAxel KAMALAK
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de javaAmir Souissi
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objetsAbdoulaye Dieng
 
Héritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIHéritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIJihenHedhli1
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateursAziz Darouichi
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POOmazenovi
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objetsAbdoulaye Dieng
 

La actualidad más candente (18)

Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Les collections en JAVA
Les collections en JAVALes collections en JAVA
Les collections en JAVA
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
Héritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIHéritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLI
 
test doc
test doctest doc
test doc
 
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
POO
POOPOO
POO
 
Diagramme de classes
Diagramme de classesDiagramme de classes
Diagramme de classes
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
 

Destacado (20)

El Amor
El AmorEl Amor
El Amor
 
Moodle y b-blearning
Moodle y b-blearningMoodle y b-blearning
Moodle y b-blearning
 
Hidrografía
HidrografíaHidrografía
Hidrografía
 
El gran impacto de las pequeñas decisiones
El gran impacto de las pequeñas decisionesEl gran impacto de las pequeñas decisiones
El gran impacto de las pequeñas decisiones
 
La elaboración de los proyectos de investigación
La elaboración de los proyectos de investigaciónLa elaboración de los proyectos de investigación
La elaboración de los proyectos de investigación
 
Cómo enamorar
Cómo enamorarCómo enamorar
Cómo enamorar
 
E-Journal Décembre 2014 et Janvier 2015
E-Journal Décembre 2014 et Janvier 2015E-Journal Décembre 2014 et Janvier 2015
E-Journal Décembre 2014 et Janvier 2015
 
general book
general book general book
general book
 
El camino a la libertad
El camino a la libertadEl camino a la libertad
El camino a la libertad
 
Presentacion
PresentacionPresentacion
Presentacion
 
Intención
IntenciónIntención
Intención
 
02.5 Un Pelo
02.5 Un Pelo02.5 Un Pelo
02.5 Un Pelo
 
Gestion de la innovacion
Gestion de la innovacionGestion de la innovacion
Gestion de la innovacion
 
Leonmaitreetudesurlelac1914
Leonmaitreetudesurlelac1914Leonmaitreetudesurlelac1914
Leonmaitreetudesurlelac1914
 
Position des loisirs dans les charges au Maghreb
Position des loisirs dans les charges au Maghreb
Position des loisirs dans les charges au Maghreb
Position des loisirs dans les charges au Maghreb
 
VulnerabilidadDelAdolescente Calzada[1]
VulnerabilidadDelAdolescente Calzada[1]VulnerabilidadDelAdolescente Calzada[1]
VulnerabilidadDelAdolescente Calzada[1]
 
Edimbourg
EdimbourgEdimbourg
Edimbourg
 
I 2-15 examen prénuptial
I 2-15 examen prénuptialI 2-15 examen prénuptial
I 2-15 examen prénuptial
 
No intentes
No intentesNo intentes
No intentes
 
Qu'est ce que la veille informationnelle ?
Qu'est ce que la veille informationnelle ?Qu'est ce que la veille informationnelle ?
Qu'est ce que la veille informationnelle ?
 

Similar a UML OCL : Liaison avecUML -- 24

Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationECAM Brussels Engineering School
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?Ruau Mickael
 
Les bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralLes bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralGeoffrey Bachelet
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Kristen Le Liboux
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsVladyslav Riabchenko
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la viecluelessjoe
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptxSafaeLhr1
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsDenis Voituron
 
Clean Architecture et Code patrimonial
Clean Architecture et Code patrimonialClean Architecture et Code patrimonial
Clean Architecture et Code patrimonialAgile Montréal
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 

Similar a UML OCL : Liaison avecUML -- 24 (20)

Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?
 
Les bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralLes bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en général
 
Theme 10
Theme 10Theme 10
Theme 10
 
Javascript mémo.pdf
Javascript  mémo.pdfJavascript  mémo.pdf
Javascript mémo.pdf
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
 
Theme 10
Theme 10Theme 10
Theme 10
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénients
 
Clean Architecture et Code patrimonial
Clean Architecture et Code patrimonialClean Architecture et Code patrimonial
Clean Architecture et Code patrimonial
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 

Más de megaplanet20

UML OCL : Cheat Sheet - 10
UML OCL : Cheat Sheet - 10UML OCL : Cheat Sheet - 10
UML OCL : Cheat Sheet - 10megaplanet20
 
IDM : Vision Globale - Introduction -- 9
IDM : Vision Globale - Introduction -- 9IDM : Vision Globale - Introduction -- 9
IDM : Vision Globale - Introduction -- 9megaplanet20
 
UML OCL : An Expression Language - Core -- 29
UML OCL : An Expression Language - Core -- 29UML OCL : An Expression Language - Core -- 29
UML OCL : An Expression Language - Core -- 29megaplanet20
 
UML : Diagrammes de cas d'utilisation -- Problemes recurrents -- 20
UML : Diagrammes de cas d'utilisation -- Problemes recurrents -- 20UML : Diagrammes de cas d'utilisation -- Problemes recurrents -- 20
UML : Diagrammes de cas d'utilisation -- Problemes recurrents -- 20megaplanet20
 
UML : Diagrammes de cas d'utilisation -- modele detaille -- 15
UML : Diagrammes de cas d'utilisation -- modele detaille -- 15UML : Diagrammes de cas d'utilisation -- modele detaille -- 15
UML : Diagrammes de cas d'utilisation -- modele detaille -- 15megaplanet20
 
Uml : Diagrammes de Cas dutilisation -- Modele preliminaire -- 23
Uml : Diagrammes de Cas dutilisation -- Modele preliminaire -- 23Uml : Diagrammes de Cas dutilisation -- Modele preliminaire -- 23
Uml : Diagrammes de Cas dutilisation -- Modele preliminaire -- 23megaplanet20
 
Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27megaplanet20
 
Uml: Diagrammes de classes -- Concepts De Base 41
Uml: Diagrammes de classes -- Concepts De Base 41Uml: Diagrammes de classes -- Concepts De Base 41
Uml: Diagrammes de classes -- Concepts De Base 41megaplanet20
 

Más de megaplanet20 (8)

UML OCL : Cheat Sheet - 10
UML OCL : Cheat Sheet - 10UML OCL : Cheat Sheet - 10
UML OCL : Cheat Sheet - 10
 
IDM : Vision Globale - Introduction -- 9
IDM : Vision Globale - Introduction -- 9IDM : Vision Globale - Introduction -- 9
IDM : Vision Globale - Introduction -- 9
 
UML OCL : An Expression Language - Core -- 29
UML OCL : An Expression Language - Core -- 29UML OCL : An Expression Language - Core -- 29
UML OCL : An Expression Language - Core -- 29
 
UML : Diagrammes de cas d'utilisation -- Problemes recurrents -- 20
UML : Diagrammes de cas d'utilisation -- Problemes recurrents -- 20UML : Diagrammes de cas d'utilisation -- Problemes recurrents -- 20
UML : Diagrammes de cas d'utilisation -- Problemes recurrents -- 20
 
UML : Diagrammes de cas d'utilisation -- modele detaille -- 15
UML : Diagrammes de cas d'utilisation -- modele detaille -- 15UML : Diagrammes de cas d'utilisation -- modele detaille -- 15
UML : Diagrammes de cas d'utilisation -- modele detaille -- 15
 
Uml : Diagrammes de Cas dutilisation -- Modele preliminaire -- 23
Uml : Diagrammes de Cas dutilisation -- Modele preliminaire -- 23Uml : Diagrammes de Cas dutilisation -- Modele preliminaire -- 23
Uml : Diagrammes de Cas dutilisation -- Modele preliminaire -- 23
 
Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27
 
Uml: Diagrammes de classes -- Concepts De Base 41
Uml: Diagrammes de classes -- Concepts De Base 41Uml: Diagrammes de classes -- Concepts De Base 41
Uml: Diagrammes de classes -- Concepts De Base 41
 

Último

PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Gilles Le Page
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSKennel
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSKennel
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsRajiAbdelghani
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSKennel
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 37
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Alain Marois
 

Último (19)

PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 temps
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024
 

UML OCL : Liaison avecUML -- 24

  • 1. megaplanet.org/JeanMarieFavre OCL : Liaison avec UMLOCL : Liaison avec UML ContexteContexte Accès aux attributs et opérationsAccès aux attributs et opérations Navigation via les associationsNavigation via les associations Invariant, Propriété dérivée, Valeur d'initialisationInvariant, Propriété dérivée, Valeur d'initialisation Précondition, Postcondition, Corps de méthodePrécondition, Postcondition, Corps de méthode
  • 2. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 2 Contexte d'une contrainteContexte d'une contrainte Contrainte toujours associée à un élément de modèle :Contrainte toujours associée à un élément de modèle : lele contextecontexte de la contrainte.de la contrainte. Deux techniques pour spécifier le contexte :Deux techniques pour spécifier le contexte : Client 1..4 0..* titulaires Compte numéro solde dMax * 1 signataire1 0..* CarteBleue code retraitMax context Compte inv: dmax >=0 inv: solde > -dMax context CarteBleue inv: Compte.titulaires->includes(self.signataire) inv: code>0 and code<=9999 inv: retraitMax>10 context Compte::solde : integer init: floor(depotInitial * 10 / 100) { init: 0 } { inv: Compte.titulaires->includes(self.signataire)} { inv: dMax >= 0 inv: solde > -dMax }
  • 3. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 3 Opérations spécifiquesOpérations spécifiques au modèle objet d ’UMLau modèle objet d ’UML accès à un attribut, à une opérationaccès à un attribut, à une opération navigation via les associationsnavigation via les associations VIA une associationVIA une association VERS une classe associativeVERS une classe associative DEPUIS une classe associativeDEPUIS une classe associative VIA un association qualifiéeVIA un association qualifiée accès au type et super typesaccès au type et super types accès aux instances d’une classe (extension)accès aux instances d’une classe (extension) accès à l'état d'un objetaccès à l'état d'un objet constructions pour les post conditionsconstructions pour les post conditions
  • 4. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 4 Accès à un attributAccès à un attribut Accès à une méthodeAccès à une méthode objet . attributobjet . attribut Accès à un attributAccès à un attribut selfself.dateDeNaissance.dateDeNaissance objet . méthodeobjet . méthode(( expr1expr1,, expr2expr2, … ), … ) Accès à une méthodeAccès à une méthode sans effet de bordsans effet de bord (( {query}{query} )) selfself.impôts(1998).impôts(1998)
  • 5. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 5 Navigation VIA une associationNavigation VIA une association X Set(X) OrderedSet(X) Bag(X) Sequence(X) Personne Société employés * 0..2 sociétés objet . roleobjet . role X 1 ou 0..1 X* X {ordered} * X * X {ordered, nonunique} * {nonunique} typetype
  • 7. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 7 Navigation VIA une associationNavigation VIA une association Rappel: élement converti en singletonRappel: élement converti en singleton selfself.père->.père->sizesize()() = 1= 1 Permet de tester si la valeur est définiePermet de tester si la valeur est définie selfself.père->.père->isEmptyisEmpty()() selfself.épouse->.épouse->notEmptynotEmpty()() impliesimplies selfself.épouse.sexe =.épouse.sexe = Sexe::fémininSexe::féminin Association sans nom de rôleAssociation sans nom de rôle => nom de la classe destination (avec une minuscule)=> nom de la classe destination (avec une minuscule) père épouse 0..1 0..1Personne sexe
  • 8. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 8 Personne Société Navigation VERS une associationNavigation VERS une association objet . associationobjet . association Permet d ’accéder à l ’ensemble des liensPermet d ’accéder à l ’ensemble des liens employés * 0..2 Emploi salaire augmenter() sociétés s.Emploi p.Emploi s.Emploi->collect(salaire)->sum() s.Emploi.salaire->forall(x | x>500 ) sp
  • 9. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 9 Navigation VERS une association réflexiveNavigation VERS une association réflexive association réflexive => indication du sens de parcoursassociation réflexive => indication du sens de parcours (vers le role)(vers le role) objet . associationobjet . association [[ rolerole ]] Personne age chefs employés * * Evaluation note paul.Evaluation [chefs ] paul.Evaluation [employés] paul.Evaluation [chefs].note -> sum()/paul.chefs->size() paul.Evaluation ? marie sophie chefs chefs note=5 e1 note=15 e1 paulpablo chefs note=5 e3
  • 10. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 10 Personne Société Emploi salaire Navigation DEPUIS une associationNavigation DEPUIS une association lienlien .. rolerole Accès aux objets à d'un lienAccès aux objets à d'un lien toujourstoujours un et un seulun et un seul objetobjet employés * 0..2 sociétés e.employés e.sociétés s.Emploi->select(salaire<1000).employés e s
  • 11. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 11 Navigation via une Association QualifiéeNavigation via une Association Qualifiée Banque Comptenc 0..1 lienlien .. rolerole [[valeurvaleur,,valeurvaleur, … ], … ] Accès qualifiéAccès qualifié b.compte[ 4029 ] b.compte[ 0 ] compte Gère lienlien .. rolerole codomainecodomaine lienlien .. assoc . keyassoc . key domainedomaine b.compte b.Gére.nc
  • 12. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 12 Opérations concernant les typesOpérations concernant les types objetobjet .. oclIsTypeOf(oclIsTypeOf( typetype )) type directtype direct objetobjet . oclIsKindOf(. oclIsKindOf( typetype )) type direct ou supertypestype direct ou supertypes objetobjet . oclAsType(. oclAsType( typetype )) Conversion de type (casting)Conversion de type (casting) Figures Cercles Polygones Triangles Carrés c1 c2 c3 c4 t1 t2 ca1 ca2 p
  • 13. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 13 Opérations concernant les typesOpérations concernant les types Contraintes sur les typesContraintes sur les types p.enfantsp.enfants->select(oclIsTypeOf(->select(oclIsTypeOf(FemmeFemme)))) p.enfants->p.enfants->select(oclIsKindOf(select(oclIsKindOf(FemmeFemme)))) Accès aux propriétés redéfiniesAccès aux propriétés redéfinies f .f . oclAsType(oclAsType(PersonPerson)).nom.nom Typage dynamiqueTypage dynamique p.enfants-p.enfants->select(oclIsKindOf(>select(oclIsKindOf(FemmeFemme)).oclAsType(Set()).oclAsType(Set(FemmeFemme)))) ->select(->select(nomDeJF <> nomnomDeJF <> nom)) Personne nom enfants * Femme nomDeJF
  • 14. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 14 Opérations définies sur les classesOpérations définies sur les classes Classe.propdeclasseClasse.propdeclasse Permet d ’accéder aux propriétés de classesPermet d ’accéder aux propriétés de classes Classe.Classe.allInstancesallInstances Retourne l ’ensemble des instances de la classeRetourne l ’ensemble des instances de la classe c ’est à dire l ’extension de cette classec ’est à dire l ’extension de cette classe Personne.allInstances->Personne.allInstances->size()size() < 500< 500 Personne.allInstances->Personne.allInstances->forallforall(p1,p2 |(p1,p2 | p1<>p2p1<>p2 impliesimplies p1.numsecu <> p2.numsecu)p1.numsecu <> p2.numsecu) Personne.allInstances-Personne.allInstances->isUnique>isUnique(numsecu)(numsecu)
  • 15. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 15 Où utiliser OCLOù utiliser OCL OCL peut être utilisé pour décrire des prédicatsOCL peut être utilisé pour décrire des prédicats inv:inv: invariants de classesinvariants de classes inv:inv: solde < decouvertMaxsolde < decouvertMax pre:pre: pré-conditions d ’opérationspré-conditions d ’opérations pre:pre: montantARetirer > 0montantARetirer > 0 post:post: post-conditions d ’opérationspost-conditions d ’opérations post:post: solde > solde@presolde > solde@pre OCL peut également être utilisé pour décrire des expressionsOCL peut également être utilisé pour décrire des expressions def:def: déclarer des attributs ou des opérationsdéclarer des attributs ou des opérations def:def: nbEnfants:IntegernbEnfants:Integer init:init: spécifier la valeur initiale des attributsspécifier la valeur initiale des attributs init:init: enfants->size()enfants->size() body:body: exprimer le corps de méthodes {query}exprimer le corps de méthodes {query} body:body: enfants->select(age< a )enfants->select(age< a ) derive:derive: définir des élements dérivés (/)définir des élements dérivés (/) derive:derive: age<18age<18
  • 16. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 16 InvariantsInvariants (inv)(inv) Prédicat associé à une classe ou une associationPrédicat associé à une classe ou une association Doit être vérifié à tout instantDoit être vérifié à tout instant Le contexte est défini par un objetLe contexte est défini par un objet cet objet peut être référencé parcet objet peut être référencé par selfself l ’objet peut être nommé explicitement (possibilité supprimée en UML2.0?)l ’objet peut être nommé explicitement (possibilité supprimée en UML2.0?) L ’invariant peut être nomméL ’invariant peut être nommé contextcontext PersonnePersonne invinv pasTropVieux : age < 110pasTropVieux : age < 110 invinv : self.age >= 0: self.age >= 0
  • 17. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 17 Exemples d’invariantsExemples d’invariants (inv)(inv) contextcontext PersonnePersonne invinv : age>0: age>0 andand selfself.age<110.age<110 invinv mariageLégal : mariémariageLégal : marié impliesimplies age > 16age > 16 invinv enfantsOk : enfants->enfantsOk : enfants->sizesize() < 20() < 20 invinv : not enfants->: not enfants-> includesincludes((selfself)) invinv : enfants->: enfants->includesAllincludesAll(filles)(filles) invinv : enfants->: enfants->forallforall( e |( e | selfself.age - e.age < 7 ).age - e.age < 7 )
  • 18. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 18 Définitions additionnellesDéfinitions additionnelles (def)(def) Il est possible en OCL de définir dans une classe existante:Il est possible en OCL de définir dans une classe existante: de nouveaux attributsde nouveaux attributs de nouvelles opérationsde nouvelles opérations contextcontext ClasseClasse defdef: nomatt : type = expr: nomatt : type = expr defdef: nomop( … ) : type = expr: nomop( … ) : type = expr Utile pour décomposer des requetes ou contraintes complexesUtile pour décomposer des requetes ou contraintes complexes Eviter de "polluer" le modèleEviter de "polluer" le modèle contextcontext PersonnePersonne defdef: ancestres() :: ancestres() : SetSet(Personne)(Personne) = parents->= parents-> unionunion(parents.ancestres()->(parents.ancestres()->asSetasSet())()) invinv:: notnot ancestres()->ancestres()->includesincludes((selfself))
  • 19. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 19 Expression de propriétés dérivéesExpression de propriétés dérivées (derive)(derive) Préciser en OCL la valeur d'un attribut ou d'une associationPréciser en OCL la valeur d'un attribut ou d'une association dérivéedérivée Complète la notationComplète la notation // contextcontext Personne::estMarié : BooleanPersonne::estMarié : Boolean derivederive : conjoint->: conjoint->notEmpty()notEmpty() contextcontext Personne::filles :Personne::filles : SetSet(Personne)(Personne) derivederive : enfants->: enfants->selectselect(sexe = Sexe::Feminin)(sexe = Sexe::Feminin) contextcontext Personne::grandParents :Personne::grandParents : SetSet(Personne)(Personne) derivederive: parents.parents->: parents.parents->asSetasSet()()
  • 20. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 20 Expression du corps d'une méthodeExpression du corps d'une méthode (body)(body) Description en OCL d'une méthode sans effet de bordDescription en OCL d'une méthode sans effet de bord (({isQuery}{isQuery})) Equivalent à une requêteEquivalent à une requête contextcontext Personne:acf( p : Personne ) :Personne:acf( p : Personne ) : OrderedSetOrderedSet(Personne)(Personne) bodybody : self.ancestres()->: self.ancestres()->intersectionintersection(p.ancestres())(p.ancestres()) ->select(sexe = Sexe::Feminin)-->select(sexe = Sexe::Feminin)- >>sortedBysortedBy(dateDeNaissance)(dateDeNaissance) contextcontext PersonnePersonne defdef: ancestres :: ancestres : SetSet(Personne)(Personne) = parents->= parents->unionunion(parents.ancestres->(parents.ancestres->asSetasSet())())
  • 21. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 21 Pré-conditions et post-conditionsPré-conditions et post-conditions (pre, post)(pre, post) Prédicats associés à une opérationPrédicats associés à une opération les pré-conditions doivent être vérifiées avant l ’exécutionles pré-conditions doivent être vérifiées avant l ’exécution les post-conditions sont vraies après l ’exécutionles post-conditions sont vraies après l ’exécution selfself désigne l ’objet sur lequel l ’opération à lieudésigne l ’objet sur lequel l ’opération à lieu Dans une post-condition :Dans une post-condition : @pre@pre permet de faire référence à la valeur avant l ’opérationpermet de faire référence à la valeur avant l ’opération resultresult designe le resultatdesigne le resultat ocsIsNewocsIsNew()() indique si un objet n'existait pas dans l'état précédentindique si un objet n'existait pas dans l'état précédent contextcontext Type::opération( param1 : Type1, …) : TypeType::opération( param1 : Type1, …) : Type prepre nom1 : param1 < …nom1 : param1 < … prepre nom2 : …nom2 : … postpost nom2 : …nom2 : … resultresult > …> …
  • 22. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 22 ExemplesExemples contextcontext Personne::retirer( montant : Integer )Personne::retirer( montant : Integer ) prepre :: montant > 0montant > 0 postpost : solde < solde: solde < solde@pre@pre - montant- montant contextcontext Personne::salaire() : integerPersonne::salaire() : integer postpost : result >= Legislation::salaireMinimum: result >= Legislation::salaireMinimum contextcontext Compagnie::embaucheEmployé( p : Personne) : ContratCompagnie::embaucheEmployé( p : Personne) : Contrat prepre pasPrésent :pasPrésent : notnot employés->employés->includesincludes(p)(p) postpost embauché : employés = employésembauché : employés = employés@pre@pre->->includingincluding(p)(p) postpost :: result.oclIsNewresult.oclIsNew()() postpost :: resultresult.compagnie =.compagnie = selfself andand resultresult.employé = p.employé = p
  • 23. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 23 ExercicesExercices Spécifier une fonction qui retourne la racine carrée d'un réelSpécifier une fonction qui retourne la racine carrée d'un réel context Math::Sqrt(x : Real) : Realcontext Math::Sqrt(x : Real) : Real pre: x>=0pre: x>=0 post: result * result = xpost: result * result = x Partie entière de la racine carrée d'un entierPartie entière de la racine carrée d'un entier context Math::ISqrt( x : Integer ) : Integercontext Math::ISqrt( x : Integer ) : Integer pre: x>=0pre: x>=0 post: result*result <= x and (result+1)*(result+1) > xpost: result*result <= x and (result+1)*(result+1) > x
  • 24. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 24 Accès à l'état d'un objetAccès à l'état d'un objet obj . oclInState( state )obj . oclInState( state ) Indique si l'objet est dans l'état spécifiéIndique si l'objet est dans l'état spécifié Si une machine à état a été associée à la classe de l'objetSi une machine à état a été associée à la classe de l'objet :::: pour avoir accès aux états imbriquéspour avoir accès aux états imbriqués enfants->select( e | e.oclInState( Employé ) )enfants->select( e | e.oclInState( Employé ) ) livres->exists( l.oclInState( Rentré::ARanger ) )livres->exists( l.oclInState( Rentré::ARanger ) )
  • 25. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 25 Contraintes sur l'état dans les post-conditionsContraintes sur l'état dans les post-conditions @pre@pre fait référence à la valeur d'une propriété dans l'état initialfait référence à la valeur d'une propriété dans l'état initial resultresult fait référence au résultatfait référence au résultat oclIsNewoclIsNew indique que l'objet n'existait pas dans l'état initialindique que l'objet n'existait pas dans l'état initial context Compte::virementInterne( dest : Compte, montant : integer )context Compte::virementInterne( dest : Compte, montant : integer ) : Opération: Opération pre: montant>0pre: montant>0 pre: montant<self.soldepre: montant<self.solde pre: self.titulaire = dest.titulairepre: self.titulaire = dest.titulaire pre: self.banque = dest.banquepre: self.banque = dest.banque post: self.solde < self.solde@pre - montantpost: self.solde < self.solde@pre - montant post: dest.solde = dest.solde@pre + montantpost: dest.solde = dest.solde@pre + montant post: self.operations = self.operations@pre->append(result)post: self.operations = self.operations@pre->append(result) post: result.oclIsNew and result.montant = montantpost: result.oclIsNew and result.montant = montant
  • 26. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 26 Contraintes sur l'échange de messagesContraintes sur l'échange de messages ^^ indique qu'un message à été envoyé entre les deux étatsindique qu'un message à été envoyé entre les deux états ^^^^ dénote l'ensemble des messages envoyés entre les deux étatsdénote l'ensemble des messages envoyés entre les deux états Utile pour l'expression de protocoles, de patrons de conception, etc.Utile pour l'expression de protocoles, de patrons de conception, etc. context TreeModel::hasChanged()context TreeModel::hasChanged() post: getTreeListeners()@pre->forall( li | li ^ update() )post: getTreeListeners()@pre->forall( li | li ^ update() ) TreeModel TreeView treeListeners * update()hasChanged()