OCL 2'0 - PowerPoint PPT Presentation

1 / 83
About This Presentation
Title:

OCL 2'0

Description:

Cette cr ation est mise disposition selon le Contrat Paternit -Partage des Conditions ... Grouper des donn es arbitrairement. Ordre et noms de types sont ... – PowerPoint PPT presentation

Number of Views:75
Avg rating:3.0/5.0
Slides: 84
Provided by: laurenth6
Category:

less

Transcript and Presenter's Notes

Title: OCL 2'0


1
OCL 2.0
  • Laurent Henocque
  • http//laurent.henocque.free.fr/
  • Enseignant Chercheur ESIL/INFO France
  • http//laurent.henocque.perso.esil.univmed.fr/
  • mis à jour en Novembre 2008

2
Licence Creative Commons
  • Cette création est mise à disposition selon le
    Contrat Paternité-Partage des Conditions
    Initiales à l'Identique 2.0 France disponible en
    ligne
  • http//creativecommons.org/licenses/by-sa/2.0/fr/
  • ou par courrier postal à Creative Commons, 559
    Nathan Abbott Way, Stanford, California 94305,
    USA.

3
Références Normatives
  • OCL
  • http//www.omg.org/cgi-bin/doc?ptc/05-06-06

4
Document de référence
5
Objectifs
  • Ce support de cours propose un panorama complet
    des constructions OCL présentées dans le document
    de référence

6
Exemple support
7
  • Relation d'OCL avec le méta modèle UML

8
Self
  • Self désigne l'objet courant

9
Context
  • Le contexte est soit un objet support, soit une
    méthode, éventuellement dans le cadre d'un
    package spécifique

10
Invariants
11
Pré et Post conditions
12
Package
13
Corps d'opération
14
Valeurs initiales
15
Valeurs dérivées
16
  • Types et valeurs de base

17
Types de base
18
Opérations sur les types prédéfinis
19
Types du modèle UML
  • Toute expression OCL est formulée dans le
    contexte d'un type défini dans le modèle de
    travail

20
Enumérations
21
Expressions "Let"
22
Attributs fictifs
  • On peut réutiliser des définitions dans plusieurs
    expressions ocl.

23
"Type Conformance"
  • OCL est un langage typé
  • Tout type est conforme avec tous ses supertypes
  • La compatibilité de types est transitive

24
Compatibilité des types containers
25
Expressions invalides
26
Cast
  • On peut évaluer une expression avec un "downcast"
    ou "upcast"

27
Règles de précédence
  • _at_pre
  • déréferencement . and -gt
  • expressions unaires not et -
  • et /
  • et - binaires
  • if-then-else-endif
  • lt, gt, lt, gt
  • , ltgt
  • and, or et xor
  • implies

28
Opérateurs infixes
  • Expressions équivalentes

29
Mots réservés (1)
  • and
  • attr
  • context
  • def
  • else
  • endif
  • endpackage
  • if
  • implies
  • in

30
Mots réservés (2)
  • inv
  • let
  • not
  • oper
  • or
  • package
  • post
  • pre
  • then
  • xor

31
Commentaires
32
Expressions indéfinies
  • Normalement, une expression faisant intervenir un
    élément indéfini (par exemple un cast impossible)
    est elle-même indéfinie
  • Il y a des exceptions
  • les opérateurs logiques "and", "or", "implies"
  • l'expression "if" valide si la branche choisie
    est valide
  • Il y a une opération explicite pour tester si une
    expression est valide oclIsUndefined()

33
  • Objets et propriétés

34
Propriétés
  • On utilise l'opérateur de déréférencement point
    pour atteindre les propriétés
  • un attribut
  • un "associationEnd"
  • une opération avecl flag "isQuery" vrai
  • une méthode avec le flag "isQuery" vrai
  • isQueryvrai signifie que l'opération est un
    accesseur pur, sans effet de bord

35
Attributs
  • Quand un attribut a une multiplicité non unaire,
    le résultat du déréférencement est une collection

36
Définir les opérations
  • On utilise les postconditions, et on peut gérer
    le cas des paramètres in/out ("var" pascal)

37
Opérations
38
Extrémités d'associations
  • La valeur d'une extrémité d'association est un
    objet si la multiplicité est inférieure à 1, et
    une collection sinon.

39
Cascades de déréférencement
  • On utilise la flèche pour déréférencer les
    collections, et le point pour les objets

40
Noms de rôles manquants
  • On utilise le nom de la classe cible quand le nom
    du rôle est absent
  • On met toutefois la première lettre en minuscules

41
Relations 0-1
  • On peut leur appliquer les opérations sur les
    ensembles

42
Test de présence de la cible
  • On doit souvent tester si un élément est présent
    pour une relation 0-1. On combine les deux
    notations

43
Former des expressions
  • Une entreprise a moins de 50 salariés
  • Une personne mariée a plus de 18 ans

44
Atteindre les classes d'association
  • Exemple difficile d'une "self" relation

45
Cas simple
  • On peut mentionner le nom du rôle traversé pour
    atteindre la classe d'association même dans les
    cas simples

46
Navigation à partir des classes d'association
  • On utilise les noms des rôles

47
Associations qualifiées
  • On utilise des crochets pour spécifier la clé
  • mais cela reste optionnel

48
Chemins de packages
49
Propriétés surchargées
  • On utilise oclAsType(type) pour upcaster un objet
    et atteindre des propriétés surchargées par la
    classe courante.
  • Ex B hérite de A

50
Exemple d'ambiguïté
51
Propriétés prédéfinies
  • oclIsTypeOf (t OclType) Boolean
  • oclIsKindOf (t OclType) Boolean
  • oclInState (s OclState) Boolean
  • oclIsNew () Boolean
  • oclAsType (t OclType) instance of OclType

52
OclIsTypeOf
  • Test du type exact

53
OclIsKindOf
  • Teste si son argument est un supertype de l'objet
    support

54
OclInState
  • On utilise aussi la notation "" quand la classe
    comporte plusieurs statemachines que l'on veut
    identifier

55
Propriétés des classes
  • allInstances

56
Littéraux des Collections
  • Ensembles
  • Séquences
  • Bags

57
Ranges
58
Obtenir les collections
  • Par les littéraux,
  • Par les rôles
  • Par l'utilisation d'opérations à valeurs de
    retour adaptées

59
Règles de compatibilité pour les collections
  • Les types Set(X), Bag(X) et Sequence(X) sont des
    sous types de Collection(X)
  • Collection(Type1) est compatible avec
    Collection(Type2), quand Type1 est compatible
    avec Type2.
  • (valable pour Set, Sequence, Bag)

60
Valeurs avant l'appel dans les postconditions
  • On ajoute _at_pre à la propriété

61
_at_pre
  • Quand une propriété _at_pre évalue à un objet, ses
    propriétés sont celles obtenues à la fin de
    l'appel.
  • Si on veut désigner celles valables avant
    l'appel, il faut utiliser _at_pre de nouveau

62
Tuples
  • Grouper des données arbitrairement
  • Ordre et noms de types sont optionnels

63
TupleType
64
Tuples ...
  • On déréférence les tuples comme des expressions
  • Ex un manager a le plus haut salaire des
    employés qu'il dirige

65
Opérations sur les collections
  • select
  • reject
  • collect
  • forall
  • exists
  • iterate

66
Select
67
Select
  • On peut spécifier le type de l'itérateur

68
reject
69
collect
  • Construit un ensemble à partir des propriétés
    d'un autre

70
Valeur de collect
  • Si l'ensemble itéré est un Set, le résultat est
    un Bag. On peut en refaire un ensemble avec
    "asSet"
  • Si c'est une séquence ou un ordered set, le
    résultat est une séquence

71
Raccourci pour collect
72
Forall/Exists
73
Paramètres formels multiples
  • Deux formulations équivalentes

74
iterate
  • iterate est l'expression de base pour construire
    collect etc...
  • iterate utilise un élément (elem) et un
    accumulateur (acc)

75
collect avec iterate
76
iterate en Java (pour le fun)
77
Variables implicites
  • On peut omettre des variables, qui sont
    substituées par des variables implicites.
  • En cas d'ambiguïté, une propriété est résolue
    dans le bloc de portée la plus proche

78
  • employer variable implicite selfPerson
  • employee variable implicite cCompany
  • lastname variable implicite pPerson
  • name est une propriété de Company
  • lastname est une propriété de Person, donc ici
    ambiguë on choisit "p" au lieu de self
  • self.employer-gt
  • forall(cCompanyc.employee-gt
  • exists(pPersonp.lastNamec.name))

79
  • Messages en OCL

80
Appel d'opérations et envoi de signal
  • On utilise l'opérateur "hasSent" .
  • Ex évalue à vrai si un message a été envoyé à
    l'observer pendant l'exécution
  • les paramètres peuvent être indéterminés

81
Ensemble des messages
  • Opérateur

82
Valeurs de retour
  • On utilise une opération standard sur les
    messages "result()"
  • Disponible même dans le cas asynchrone à
    condition que l'opération définisse un type de
    retour

83
Conclusion
  • OCL est un langage pour formuler les contraintes
    appliquées aux modèles objets
  • L'utilisation d'OCL permet de spécifier des
    aspects des modèles qui ne peuvent être décrits
    par les diagrammes seuls
Write a Comment
User Comments (0)
About PowerShow.com