+ All Categories

OCL.pdf

Date post: 03-Feb-2016
Category:
Upload: adnane-zaher
View: 213 times
Download: 0 times
Share this document with a friend
Popular Tags:
29
Conception Orientée Objets Spécification du logiciel - OCL COO – Spécification OCL Clémentine Nemo Clémentine Nemo – septembre 2010 L3 – INFO / MIAGE Cours 7 Cours inspiré de P. Collet, E. Cariou 1
Transcript
Page 1: OCL.pdf

Conception Orientée Objets

Spécification du logiciel - OCL

COO –

Spécifica

tion OCL

Clémentine Nemo

Clémentine Nemo – septembre 2010

L3 – INFO / MIAGE

Cours 7

Cours inspiré de P. Collet, E. Cariou

1

Page 2: OCL.pdf

PLANOCL : Première partie

• Introduction– Motivations– OCL et UML– OCL : Principes et Forme

• OCL : Première approche– Contraintes, contexte, commentaires– Stéréotypes, mots clefs– Labels, nommage

COO –

Spécifica

tion OCL

Clémentine Nemo

– Labels, nommage– Exercice

• Types et valeurs– Types et valeurs de base– Règle de précédence– Exercice– Types du modèle– Enumération– Exercice

3

Page 3: OCL.pdf

OCL : Première Partie

Motivations

Exemple : Spécifications

Un client peut être client de plusieurs

Un client peut posséder plusieurs

comptes

Un client d’une banque possède au moins un compte dans cette

banque

COO –

Spécifica

tion OCL

Clémentine Nemo

Un compte doit toujoursavoir un solde positif

client de plusieurs banques

Une banque gère plusieurs comptes

Une banque possède plusieurs clients

Seul un client de la banque peut avoir un

compte

4

Page 4: OCL.pdf

OCL : Première Partie

Motivations

Exemple : Spécifications

Un client peut être client de plusieurs

banques

Un client d’une banque possède au moins un compte dans cette

banque

Une banque possède plusieurs clients?

COO –

Spécifica

tion OCL

Clémentine Nemo

Un compte doit toujoursavoir un solde positif

Un client peut posséder plusieurs

comptes

Une banque gère plusieurs comptes

Seul un client de la banque peut avoir un

compte

?

?

5

Page 5: OCL.pdf

OCL : Première Partie

MotivationsValidité relative au diagramme de classe et validité relative aux spécifications ?

COO –

Spécifica

tion OCL

Clémentine Nemo

Un compte doit toujoursavoir un solde positif

Un client d’une banque possède au moins un compte

dans cette banque

Seul un client de la banque peut avoir un compte

6

Page 6: OCL.pdf

OCL : Première Partie

Motivations

• Besoin de spécifier complètement une application

– UML est insuffisant

– Contourner le problème• Langue naturelle imprécision

• Langage avec une sémantique précise OCL !

COO –

Spécifica

tion OCL

Clémentine Nemo

• Langage avec une sémantique précise OCL !

• OCL : Object Constraint Language

– Langage de contraintes orienté-objet

– Langage formel manipulable avec outil

– S’applique sur les diagrammes UML

7

Page 7: OCL.pdf

OCL : Première Partie

Motivations

Pourquoi OCL ?

• Permet d’ajouter des descriptions

• Précises

• Non Ambigües

• Evite les désavantages des langages formels

COO –

Spécifica

tion OCL

Clémentine Nemo

• Evite les désavantages des langages formels

• Reste facile à écrire

• Et facile à lire !

8

Page 8: OCL.pdf

OCL : Première Partie

OCL et UML

Petit Historique

• Première définition : IBM, 1997

• Formellement intégré à UML 1.1 en 1999

• OCL2.0 intégré dans la définition d’UML2.0 en 2003

COO –

Spécifica

tion OCL

Clémentine Nemo

• OCL2.0 intégré dans la définition d’UML2.0 en 2003

– conforme à UML 2 et au MOF 2.0

– fait partie du catalogue de spécifications de l'OMG

– chapitres 7 (OCL Language Description) et 11 (OCL Standard Library)

9

Page 9: OCL.pdf

OCL : Première Partie

OCL et UML

Référence

• Pierre-Alain Muller, Nathalie Gaertner , Modélisation objet avec UML, Eyrolles, 2000

• OMG (Object Management Group) , "Uml 2.0 ocl

COO –

Spécifica

tion OCL

Clémentine Nemo

• OMG (Object Management Group) , "Uml 2.0 oclspecification. Technical report, Object Management Group, 2003. "

• OMG (Object Management Group) , "Uml 2.0 superstructure specification. Technical report, Object Management Group, 2003."

10

Page 10: OCL.pdf

OCL : Première Partie

Principes et Formes

Ensemble de contraintes à respecter

• Description d'invariants sur les classes et les types

• Préconditions et postconditions sur les opérations

• Contraintes sur la valeur retournée par une opération

• Règles de dérivation des attributs

COO –

Spécifica

tion OCL

Clémentine Nemo

• Règles de dérivation des attributs

• Description de cibles pour les messages et les actions

• Expression des gardes

– conditions dans les diagrammes dynamiques

• Invariants de type pour les stéréotypes

– Les contraintes servent en particulier à décrire la sémantique d'UML.

11

Page 11: OCL.pdf

PLANOCL : Première partie

• Introduction– Motivations– OCL et UML– OCL : Principes et Forme

• OCL : Première approche– Contraintes, contexte, commentaires– Stéréotypes, mots clefs– Labels, nommage

COO –

Spécifica

tion OCL

Clémentine Nemo

– Labels, nommage– Exercice

• Types et valeurs– Types et valeurs de base– Règle de précédence– Exercice– Types du modèle– Enumération– Exercice

12

Page 12: OCL.pdf

OCL : Première Partie

Première Approche

contrainte, contexte, commentaire

contextcontextcontextcontext moncontexte <stéréotype> :

Type, méthode ou attribut context type

context ma_classe::mon_op(liste_param) : type_retour

COO –

Spécifica

tion OCL

Clémentine Nemo

contextcontextcontextcontext moncontexte <stéréotype> :

Expression de la contrainte

-- Commentaire

inv : invariant de classepre : préconditionpost : postcondition

Un invariant exprime une contrainte qui doit être respectée en permanence.

Une précondition (resp. une postcondition) permet de spécifier une contrainte qui doit être vérifiée avant (resp. après) l’appel d’une opération

13

Page 13: OCL.pdf

OCL : Première Partie

Première Approche

contrainte, contexte, commentaire

contextcontextcontextcontext Personne inv :

COO –

Spécifica

tion OCL

Clémentine Nemo

contextcontextcontextcontext Personne inv :

(age <= 140) and (age >=0)-- l'âge ne peut dépasser 140 ans

contextcontextcontextcontext Personne::setAge(a : integer)pre: (a <= 140)

and (a >=0)and (a >= age)

post: age = a

14

Page 14: OCL.pdf

OCL : Première Partie

Première Approche

contrainte, contexte, commentaire• Si les contraintes sont placées sans ambiguïté, pas besoin de plus

• Si elles sont dans un fichier global, il faut spécifier le package dans lequel les contraintes se placent

packagepackagepackagepackage Package::SubPackage

COO –

Spécifica

tion OCL

Clémentine Nemo

packagepackagepackagepackage Package::SubPackage

context X inv:

... un invariant ...

context X::operationName(..)

pre: ... une precondition ...

endpackageendpackageendpackageendpackage

15

Page 15: OCL.pdf

OCL : Première Partie

Première Approche

Stéréotypes (suite)

• body indique le résultat d'une opération queryCe type de contrainte permet de définir directement le résultat d’une opération

• init indique la valeur initiale d'un attribut

COO –

Spécifica

tion OCL

Clémentine Nemo

• init indique la valeur initiale d'un attribut

• derive indique la valeur dérivée d'un attribut

16

Page 16: OCL.pdf

OCL : Première Partie

Première Approche

Stéréotypes (suite)

• body indique le résultat d'une opération queryCe type de contrainte permet de définir directement le résultat d’une opération

• init indique la valeur initiale d'un attribut

• derive indique la valeur dérivée d'un attribut

COO –

Spécifica

tion OCL

Clémentine Nemo

• derive indique la valeur dérivée d'un attribut

contextcontextcontextcontext Personne::getAge() : integerbody: age

contextcontextcontextcontext Personne::age : Booleaninit: 0

contextcontextcontextcontext Personne::majeur : integerderive: age>=18

17

Page 17: OCL.pdf

OCL : Première Partie

Première Approche

Label

• Une contrainte peut être nommée par un label

• Utilité

• Rappeler la contrainte dans une autre contrainte

COO –

Spécifica

tion OCL

Clémentine Nemo

• Retrouver une contrainte en cas d’évaluation dans un outil, de production de code de vérification, etc.

contextcontextcontextcontext Personne inv ageBorné:(age <= 140) and (age >=0)-- l'âge ne peut depasser 140 ans

18

Page 18: OCL.pdf

OCL : Première Partie

Première Approche

Nommage

• Le mot-clef « self » permet de désigner l'objet à partir duquel part l'évaluation

contextcontextcontextcontext Personne inv:

COO –

Spécifica

tion OCL

Clémentine Nemo

contextcontextcontextcontext Personne inv:

(self.age <= 140) and (self.age >=0)

-- l'âge ne peut depasser 140 ans

• Un nom formel peut être donné à l'objet à partir duquel part l'évaluation

contextcontextcontextcontext p : Personne inv:

(p.age <= 140) and (p.age >=0)

-- l'age ne peut depasser 140 ans

19

Page 19: OCL.pdf

OCL : Première Partie

Première Approche

A vous de jouer !• Ajoutez un attribut mère de type Personne dans la classe Personne.

• Ecrivez une contrainte précisant – que la mère d'une personne ne peut être cette personne elle-même

– et que l'âge de la mère doit être supérieur à celui de la personne

COO –

Spécifica

tion OCL

Clémentine Nemo 20

Page 20: OCL.pdf

PLANOCL : Première partie

• Introduction– Motivations– OCL et UML– OCL : Principes et Forme

• OCL : Première approche– Contraintes, contexte, commentaires– Stéréotypes, mots clefs– Labels, nommage

COO –

Spécifica

tion OCL

Clémentine Nemo

– Labels, nommage– Exercice

• Types et valeurs– Types et valeurs de base– Règle de précédence– Exercice– Types du modèle– Enumération– Exercice

22

Page 21: OCL.pdf

OCL : Première Partie

Types et Valeurs

Types et valeurs de base : Entier

• Le type entier (Integer)

– Les constantes littérales s'écrivent de manière

COO –

Spécifica

tion OCL

Clémentine Nemo

– Les constantes littérales s'écrivent de manière ordinaire :

• 1 -5 22

– Les opérateurs sont les suivants :

• = <> + - * / abs div mod max min < > <= >=

– L'opérateur - est unaire ou binaire

23

Page 22: OCL.pdf

OCL : Première Partie

Types et Valeurs

Types et valeurs de base : Réel

• Le type réel (Real)

– Les constantes s'écrivent de manière ordinaire :

COO –

Spécifica

tion OCL

Clémentine Nemo

– Les constantes s'écrivent de manière ordinaire :

• 1.56 -5.7 3.14

– Les opérateurs sont les suivants :

• = <> + - * / abs floor round max min < > <= >=

– L'opérateur - est unaire ou binaire

24

Page 23: OCL.pdf

OCL : Première Partie

Types et Valeurs

Types et valeurs de base : String

• Le type chaîne de caractères (String)

– Les constantes s'écrivent entre simples quotes : • 'ceci est une chaîne OCL'

COO –

Spécifica

tion OCL

Clémentine Nemo

• 'ceci est une chaîne OCL'

– Les opérateurs sont (notamment) les suivants : • =

• size

• concat(String)

• toUpper

• toLower

• substring(Entier, Entier)

25

Page 24: OCL.pdf

OCL : Première Partie

Types et Valeurs

Types et valeurs de base : Booléen

• Le type booléen (Boolean)

– Les constantes s'écrivent

COO –

Spécifica

tion OCL

Clémentine Nemo

– Les constantes s'écrivent

• true

• false

– Les opérateurs sont les suivants :

• = or xor and not

• b1 implies b2

• if b then expression1 else expression2 endif

26

Page 25: OCL.pdf

OCL : Première Partie

Types et Valeurs

Règle de PrécédenceOrdre de précédence pour les opérateurs/primitives :• @pre• . et ->• not et -• * et /

COO –

Spécifica

tion OCL

Clémentine Nemo

• + et -• if then else endif• >, <, <= et >=• = et <>• and, or et xor• Implies

Les parenthèses permettent de changer cet ordre

27

Page 26: OCL.pdf

OCL : Première Partie

Première Approche

A vous de jouer !

• Indiquez qu’une personne mariée est forcément majeur

COO –

Spécifica

tion OCL

Clémentine Nemo

• Trouvez une version plus compacte de l’expression suivantecontext Personne inv majeurIf:

if age >=18 then majeur=vrai

else majeur=faux endif

28

Page 27: OCL.pdf

OCL : Première Partie

Types et Valeurs

Type énuméré• Leur syntaxe est la suivante

– <nom_type_enuméré>::valeur

• Le nom du type est déduit de l’attribut de déclaration– catégorie => Catégorie

COO –

Spécifica

tion OCL

Clémentine Nemo

– catégorie => Catégorie

• Exemple :contextcontextcontextcontext Personne inv:

if age <=12

then categorie = Categorie::enfant

else if age <=18

then categorie = Categorie::ado

else categorie = Categorie::adulte

endif

endif

30

Page 28: OCL.pdf

OCL : Première Partie

Types et Valeurs

Type de modèle

• Les types des modèles utilisables en OCL sont • les classifieurs, donc :

les classes, les interfaces et les associations

• Manipulation de la relation de spécialisation

COO –

Spécifica

tion OCL

Clémentine Nemo

• oclAsType(t) (l’objet est casté en t)

• oclIsTypeOf(t) (vrai si t est supertype direct)

• oclIsKindOf(t) (vrai si t est supertype indirect)

p = r

p.oclAsType(Rectangle)

r.oclIsTypeOf(Rectangle) (vrai)(vrai)(vrai)(vrai)

r.oclIsKindOf(Polygone) (vrai)(vrai)(vrai)(vrai)

31

Page 29: OCL.pdf

OCL : Première PartieTypes et Valeurs

A vous de jouer !

• En supposant l'existence

– d'un attribut hauteur dans la classe Rectangle

– d'une méthode hauteur():Réel dans Polygone

• Ecrivez un invariant dans Polygone disant que le résultat de hauteur():Réel vaut hauteur pour les polygones qui sont des

COO –

Spécifica

tion OCL

Clémentine Nemo

hauteur():Réel vaut hauteur pour les polygones qui sont des rectangles, sinon 0

32


Recommended