ocl : object constraint · pdf file1 object constraint language (ocl) eric cariou...

Click here to load reader

Post on 11-Sep-2018

214 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • 1

    Object Constraint Language (OCL)

    Eric Cariou

    Universit de Pau et des Pays de l'AdourUFR Sciences Pau Dpartement Informatique

    [email protected]

  • 2

    Plan1.Pourquoi OCL ? Introduction par l'exemple2.Les principaux concepts d'OCL3.Exemple d'application sur un autre modle

  • 3

    Exemple d'application Application bancaire

    Des comptes bancaires Des clients Des banques

    Spcification Un compte doit avoir un solde toujours positif Un client peut possder plusieurs comptes Un client peut tre client de plusieurs banques Un client d'une banque possde au moins un compte dans

    cette banque Une banque gre plusieurs comptes Une banque possde plusieurs clients

  • 4

    Diagramme de classe

    Personneint age

    Banque

    Compteint solde

    crditer(int)dbiter(int)int getSolde()

    1

    *

    **

    1

    *

    clients

    propritaire

  • 5

    Manque de prcision Le diagramme de classe ne permet pas d'exprimer

    tout ce qui est dfini dans la spcification informelle Exemple

    Le solde d'un compte doit toujours tre positif : ajout d'une contrainte sur cet attribut

    Le diagramme de classe permet-il de dtailler toutes les contraintes sur les relations entre les classes ?

  • 6

    Diagramme d'instancesBanque:B1

    Personne:P2

    Compte:Co2

    Banque:B2

    Personne:P1

    Compte:Co1

    Diagramme d'instances valide vis--vis du diagramme de classe et de la spcification attendue

    Personneint age

    Banque

    Compteint solde

    crditer(int)dbiter(int)int getSolde()

    1

    *

    **

    1

    *

    clients

    propritaire

    { solde > 0 }

  • 7

    Diagramme d'instances

    Diagramme d'instances valide vis--vis du diagramme de classe mais ne respecte pas la spcification attendue

    Une personne a un compte dans une banque o elle n'est pas cliente Une personne est cliente d'une banque mais sans y avoir de compte

    Banque:B1

    Personne:P2Compte:Co2

    Banque:B2

    Personne:P1

    Compte:Co1Personneint age

    Banque

    Compteint solde

    crditer(int)dbiter(int)int getSolde()

    1

    *

    **

    1

    *

    clients

    propritaire

    { solde > 0 }

  • 8

    Diagrammes UML insuffisants Pour spcifier compltement une application

    Diagrammes UML seuls sont gnralement insuffisants Ncessit de rajouter des contraintes

    Comment exprimer ces contraintes ? Langue naturelle mais manque de prcision, comprhension

    pouvant tre ambigu Langage formel avec smantique prcise : par exemple

    OCL OCL : Object Constraint Language

    Langage de contraintes orient-objet Langage formel (mais simple utiliser) avec une

    syntaxe, une grammaire, une smantique (manipulable par un outil)

    S'applique entre autres sur les diagrammes UML

  • 9

    Plan1.Pourquoi OCL ? Introduction par l'exemple2.Les principaux concepts d'OCL3.Exemple d'application sur un autre modle

  • 10

    Le langage OCL Norme de l'OMG

    Version courante : 2.4 (2014) Peut s'appliquer sur tout type de modle, indpendant d'un

    langage de modlisation donn OCL permet principalement d'exprimer deux types de

    contraintes sur l'tat d'un objet ou d'un ensemble d'objets

    Des invariants qui doivent tre respects en permanence Des pr et post-conditions pour une opration

    Prcondition : doit tre vrifie avant l'excution Postcondition : doit tre vrifie aprs l'excution

    Attention Une expression OCL dcrit une contrainte respecter et

    non pas le code d'une mthode

  • 11

    Usage d'OCL sur l'application bancaire

    On rajoute les invariants et les pr/post-conditions spcifiant les contraintes non exprimables par le diagramme de classe seul

    Personneint age

    Banque

    Compteint solde

    crditer(int)dbiter(int)int getSolde()

    1

    *

    **

    1

    *

    clients

    propritaire

    context Compteinv: solde > 0

    context Compte::dbiter(somme : Integer)pre: somme > 0post: solde = [email protected] - somme

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

  • 12

    Utilisation d'OCL dans le cadre d'UML OCL peut s'appliquer sur la plupart des

    diagrammes UML Il sert, entre autres, spcifier des

    Invariants sur des classes Pr et postconditions sur des oprations Gardes sur transitions de diagrammes d'tats ou de

    messages de diagrammes de squence/collaboration

    Des ensembles d'objets destinataires pour un envoi de message

    Des attributs drivs Des strotypes ...

  • 13

    Contexte Une expression OCL est toujours dfinie dans

    un contexte Ce contexte est une classe

    Mot-cl : context Exemple

    context Compte L'expression OCL s'applique la classe Compte,

    c'est--dire toutes les instances de cette classe

  • 14

    Invariants Un invariant exprime une contrainte sur un

    objet ou un groupe d'objets qui doit tre respecte en permanence

    Mot-cl : inv Exemple

    context Compteinv: solde > 0

    Pour toutes les instances de la classe Compte, l'attribut solde doit toujours tre positif

  • 15

    Pr et postconditions Pour spcifier une opration

    Prcondition : tat qui doit tre respect avant l'appel de l'opration

    Postcondition : tat qui doit tre respect aprs l'appel de l'opration

    Mots-cls : pre et post Dans la postcondition, deux lments particuliers

    sont utilisables Pseudo-attribut result : rfrence la valeur retourne par

    l'opration [email protected] : rfrence la valeur de mon_attribut

    avant l'appel de l'opration Syntaxe pour prciser la signature de l'opration

    context ma_classe::mon_op(liste_param) : type_retour

  • 16

    Pr et postconditions Exemples

    context Compte::dbiter(somme : Integer)pre: somme > 0post: solde = [email protected] somme

    La somme dbiter doit tre positive pour que l'appel de l'opration soit valide

    Aprs l'excution de l'opration, l'attribut solde doit avoir pour valeur sa valeur avant l'appel laquelle a t soustrait la somme passe en paramtre

    context Compte::getSolde() : Integerpost: result = solde

    Le rsultat retourn doit tre le solde courant Attention

    On ne dcrit pas comment l'opration est ralise mais des contraintes sur l'tat avant et aprs son excution

  • 17

    Conception par contrat pour oprations Pre et postconditions permettent de faire une

    conception par contrat Contrat pass entre l'appelant d'une opration et

    l'appel (celui qui excute l'opration) Si l'appelant respecte les contraintes de la

    prcondition alors l'appel s'engage respecter la post-condition

    Si l'appelant ne respecte pas la prcondition, alors le rsultat de l'appel est indfini

    Pour exemple prcdent Si l'appelant de l'opration dbiter passe une somme

    positive en paramtre, alors le compte est bien dbit de cette somme

  • 18

    Accs aux objets, navigation Dans une contrainte OCL associe un objet, on peut

    Accder l'tat interne de cet objet (ses attributs) Naviguer dans le diagramme : accder de manire transitive

    tous les objets (et leur tat) avec qui il est en relation Nommage des lments pour y accder

    Attributs ou paramtres d'une opration : utilise leur nom directement

    Objet(s) en association : on utilise au choix Le nom de la classe associe (avec la premire lettre en minuscule) Le nom de l'association si elle nomme Le nom du rle d'association du cot de la classe vers laquelle on

    navigue s'il est nomm

    La navigation retourne Si cardinalit de 1 pour une association : un objet Si cardinalit > 1 : une collection d'objets

  • 19

    Accs aux objets, navigation Pseudo-attribut particulier

    self: rfrence l'objet de dpart, d'o part la navigation Exemples, dans contexte de la classe Compte

    solde : attribut rfrenc directement banque : objet de la classe Banque (rfrence via le nom

    de la classe) associ au compte propritaire : objet de la classe Personne (rfrence via le

    nom de rle d'association) associe au compte banque.clients : ensemble des clients de la banque

    associe au compte (rfrence par transitivit) banque.clients.age : ensemble des ges de tous les clients

    de la banque associe au compte Le propritaire d'un compte doit avoir plus de 18 ans

    context Compteinv: self.propritaire.age >= 18

  • 20

    Oprations sur objets et collections OCL propose un ensemble de primitives utilisables sur les

    collections size() : retourne le nombre d'lments de la collection isEmpty() : retourne vrai si la collection est vide notEmpty() : retourne vrai si la collection n'est pas vide count(obj): le nombre doccurrences de l'objet obj dans la collection includes(obj) : vrai si la collection inclut l'objet obj excludes(obj) : vrai si la collection n'inclut pas l'objet obj including(obj) : la collection rfrence doit tre cette collection en

    incluant l'objet obj excluding(obj) : idem mais en excluant l'objet obj includesAll(col) : la collection contient tous les lments de la

    collection col excludesAll(col) : la collection ne contient aucun des lments de la

    collection col Syntaxe d'utilisation : objetOuCollection -> primitive

  • 21

    Oprations sur objets et collections Exemples, invariants dans le contexte de la classe

    Compte propritaire -> size() = 1 : le nombre d'objets Personne

    associs un compte est de 1 Vrai par principe cause de la cardinalit de 1 qui doit tre respecte On manipule ici un objet (cardinalit de 1) comme une collection

    contenant l'objet banque.clients -> size() >= 1 : une banque a au moins