Conception par contrats avec UML



Documents pareils
OCL - Object Constraint Language

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Object Constraint Language (OCL)

Object Constraint Language (OCL) Une introduction

Développement d un interpréteur OCL pour une machine virtuelle UML.

UML. Diagrammes de classes (suite) Delphine Longuet.

Ingénierie des Modèles. Méta-modélisation

Développement de logiciel avec UML

UML et les Bases de Données

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Chapitre VI- La validation de la composition.

3. UML - Unified Modeling Language Diagrammes statiques

UML (Diagramme de classes) Unified Modeling Language

Classes et Objets en Ocaml.

Traduction des Langages : Le Compilateur Micro Java

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

IFT2255 : Génie logiciel

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Génie Logiciel avec Ada. 4 février 2013

Modèle Entité/Association

STAGE IREM 0- Premiers pas en Python

Programmer en JAVA. par Tama

M1 : Ingénierie du Logiciel

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Diagramme de classes

Premiers Pas en Programmation Objet : les Classes et les Objets

Une introduction à Java

Objets et Programmation. origine des langages orientés-objet

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

GOL502 Industries de services

Bases de données. Chapitre 1. Introduction

Cours 1 : La compilation

Programmation en Java IUT GEII (MC-II1) 1

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

RTDS G3. Emmanuel Gaudin

TP1 : Initiation à Java et Eclipse

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

MODELISATION UN ATELIER DE MODELISATION «RATIONAL ROSE»

OpenPaaS Le réseau social d'entreprise

Meta Object Facility. Plan

Utilisation d objets : String et ArrayList

Présentation du langage et premières fonctions

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Langage SQL : créer et interroger une base

Cours Composant 2. Qualité logicielle et spécications algébriques

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

A QUOI SERVENT LES BASES DE DONNÉES?

Université de Bangui. Modélisons en UML

Algorithmique & programmation

Patrons de Conception (Design Patterns)

Modélisation de Lignes de Produits en UML *

Langage Java. Classe de première SI

Algorithmique et Programmation, IMA

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Table des matières Sources

Vincent Augusto

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Cours de Génie Logiciel

Conception des bases de données : Modèle Entité-Association

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Java Licence Professionnelle CISII,

Modélisation Conceptuelle. Partie 2: Le modèle Entité-Association

Université de Sherbrooke, Département d informatique

Hala Skaf-Molli. Nancy-Université 14 mai 2007

UML Diagramme de communication (communication diagram) Emmanuel Pichon 2013

Chap. 3: Le modèle de données entité-association (E.A.)

Introduction au Système de Gestion de Base de Données et aux Base de Données

Technologie Web. Conception de sites Web. Alexandre Pauchet. INSA Rouen - Département ASI. INSA - ASI TechnoWeb : Rappels UML 1/21

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Génération de code à partir d une spécification B : Application aux bases de données

OASIS Date de publication

Recherche dans un tableau

I4 : Bases de Données

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

TD3: tableaux avancées, première classe et chaînes

Algorithmique et programmation : les bases (VBA) Corrigé

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Intégration d un ERP guidée par les modèles

Information utiles. webpage : Google+ : digiusto/

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

2 Comment fonctionne un ordinateur, dans les grandes lignes

Cours de Programmation 2

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

1 Introduction et installation

Programmation Web. Madalina Croitoru IUT Montpellier

Génie Logiciel Orienté Objet UML

CREATION WEB DYNAMIQUE

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Transcription:

Conception par contrats avec UML OCL Object Constraint Language Gerson Sunyé gerson.sunye@univ-nantes.fr LINA Introduction à OCL p.1

Plan Introduction Invariants, pré et post-conditions Spécification de propriétés Expressions OCL portant sur les Associations Concepts avancés Conclusion Introduction à OCL p.2

Introduction Introduction à OCL p.3

Motivation Peut-on rendre plus précis un diagramme UML? Introduction à OCL p.4

Les diagrammes UML manquent parfois de précision. na prenom: 1 nom: imar } sexe:enum ( age epouse 1 Le langage naturel est souvent ambigu. L' m Introduction à OCL p.5 Motivation Persone isance: Da te Str ing O. Str ing {home, feme ): In teger O. id'unepersones te le épouse dumar ême. En d'au tres termes, lemar id'une épouse. feme l'apour

na prenom: 1 nom: imar } sexe:enum ( age epouse 1 L' m Conception par contrats avec UML Persone isance: Da te Str ing O. Str ing {home, feme ): In teger O. id'unepersones te le épouse dumar Ajout de contraintes à des éléments de modélisation. ême. En d'au tres termes, lemar id'une épouse. feme l'apour context Personne inv: self.epouse notempty() implies self.epouse.mari = self and self.mari notempty() implies self.mari.epouse = self } Introduction à OCL p.6

OCL Object Constraint Language Langage de description de contraintes de UML. Permet de restreindre une ou plusieurs valeurs d un ou de partie d un modèle. Utilisé dans les modèles UML ainsi que dans son méta-modèle (à travers les stéréotypes). Formel, non ambigu, mais facile à utiliser (même par les non mathématiciens). Introduction à OCL p.7

OCL Object Constraint Language Une contrainte OCL est une expression booléenne, sans effet de bord, portant sur les éléments suivants: Types de base: String, Boolean, Integer, Real; Classificateurs et ses propriétés: Attributs, Opération qui sont des "fonctions pures"; Associations; États (des machines d états associées). Introduction à OCL p.8

Différentes sortes de contraintes (1/2) Invariants de classe. Une contrainte qui doit être respectée par toutes les instances d une classe. Pré-condition d une opération (ou transition). Une contrainte qui doit être toujours vraie avant l exécution d une opération. Post-condition d une opération (ou transition). Une contrainte qui doit être toujours vraie après l exécution d une opération. Introduction à OCL p.9

Différentes sortes de contraintes (2/2) Définition de nouvelles propriétés. Définition de nouveaux attributs ou opérations à l intérieur d une classe. Établir la valeur initiale d un attribut. Définition de propriétés dérivées. Préciser la valeur d un attribut ou association dérivés. Spécifier le corps d une opération. Spécification d une opération dans effet de bord (query). Introduction à OCL p.10

Stéréotypes des contraintes Trois stéréotypes sont définis en standard dans UML: Invariants de classe: «invariant» Pré-conditions: «precondition» Post-conditions: «postcondition» Introduction à OCL p.11

Notation Directement à l intérieur d un modèle ou dans un document séparé: context Personne inv: self.age < 150 context Personne inv: age < 50 Personne +nom: String +age: Integer <<invariant>> age < 150 Personne {age < 150} +nom: String +age:integer Introduction à OCL p.12

Plan Introduction Invariants, pré et post-conditions Spécification de propriétés Expressions OCL portant sur les Associations Concepts avancés Conclusion Introduction à OCL p.13

Invariants, pré et post-conditions Introduction à OCL p.14

Exemple de modèle Introduction à OCL p.15

Contexte Toute contrainte OCL est liée à un contexte spécifique, l élément auquel la contrainte est attachée. Le contexte peut être utilisé à l intérieur d une expression grâce au mot-clef «self». Implicite dans toute expression OCL. Similaire à celui de Smalltalk ou Python, au «this» de C++ et Java, ou au «Current» de Eiffel. Introduction à OCL p.16

Invariants de classe Dans un état stable, toute instance d une classe doit vérifier les invariants de cette classe. Expression OCL stéréotypée «invariant». Exemples: context e : Etudiant inv ageminimum: e.age > 16 context e : Etudiant inv: e.age > 16 context Etudiant inv: self.age > 16 Introduction à OCL p.17

Éléments d une expression OCL Les éléments suivants peuvent être utilisés dans une expression OCL: Les types de base: String, Boolean, Integer, Real. Les Classificateurs et leurs propriétés: Attributs d instance et de classe. Opérations de Query (i.e. sans effet de bord) d instance et de classe. États des machines d états associées. Associations du modèle UML. Introduction à OCL p.18

Types de base type values Boolean true, false Integer 1, -5, 2, 34, 26524,... Real 1.5, 3.14,... String To be or not to be... Introduction à OCL p.19

Opérations sur les types de base type Integer Real String operations =, *, +, -, /, abs, div, mod, max, min =, *, +, -, /, abs, floor, round, max, min, >, <,... =, size, concat, toupper, tolower, substring Introduction à OCL p.20

Objets et propriétés Une expression OCL peut faire référence à: Des classificateurs (types, classes, interfaces, associations, datatypes, cas d utilisation, etc.). Des propriétés: Un Attribut. Une Opération dont isquery est vrai. Un État. Un rôle d association. Introduction à OCL p.21

Propriétés: Attributs On utilise la notation pointée: Attributs d instance: context Enseignant inv: self. salaire < 10 Attributs de classe: context Enseignant inv: self. salaire < Enseignant.salaireMaximum Introduction à OCL p.22

Propriétés: Types énumérés Définition: enum{value1, value2, value3} Pour éviter les conflits de nom, on utilise le nom de l énumération: Enum::val1 context Enseignant inv: self. titre = Titre :: prof implies self. salaire > 10 Introduction à OCL p.23

Propriétés: Opérations de Query Notation pointée: Opérations d instance: context Etudiant self.age() > 16 Opérations de classe: context Etudiant inv: self.age() > Etudiant.ageMinimum() Introduction à OCL p.24

Propriétés: États Accessibles avec oclinstate(): context Departement:: ajouter (e: Enseignant) pre: e. oclinstate ( disponible ) pre:e. oclinstate ( indisponible :: en vacances) etats imbriques Introduction à OCL p.25

Spécification d opérations Inspirée des Types Abstraits: une opération est composée par une signature, des pré-conditions et des post-conditions. Permet de contraindre l ensemble de valeurs d entrée d une opération. Permet de spécifier la sémantique d une opération: c est qu elle fait, et non comment elle le fait. Introduction à OCL p.26

Pré-condition Ce qui doit être respecté par le client (l appelant de l opération) Représentée par une expression OCL stéréotypée «precondition» context Departement:: ajouter (e : Enseignant) : Integer pre nonnul: e. notnil () Introduction à OCL p.27

Post-condition Spécifie ce qui devra être vérifié après l exécution d une opération. Représentée par une expression OCL stéréotypée «postcondition»: Opérateurs spéciaux: @pre: accès à une valeur d une propriété d avant l opération (old de Eiffel). result: accès au résultat de l opération. Introduction à OCL p.28

Post-condition context Etudiant :: age() : Integer post correct : result = (today naissance ). years () context Typename::operationName(param1: type1,...): Type post: result =... context Typename::operationName(param1: type1,...): Type post resultok : result =... Introduction à OCL p.29

Postcondition: valeurs précédentes A l intérieur d une postcondition, deux valeurs sont disponibles pour chaque propriété: la valeur de la propriété avant l opération. la valeur de la propriété après la fin de l opération. context Personne :: anniversaire () post: age = age@pre + 1 context Enseignant :: augmentation(v : Integer) post: self. salaire = self. salaire @pre + v Introduction à OCL p.30

Body Spécifie le corps d une opération sans effet de bord (query). context Universite :: enseignants () : Set(Enseignant) body: self. departements. enseignants asset() Introduction à OCL p.31

Plan Introduction Invariants, pré et post-conditions Spécification de propriétés Expressions OCL portant sur les Associations Concepts avancés Conclusion Introduction à OCL p.32

Spécification de propriétés Introduction à OCL p.33

Définitions Définition de nouveaux attributs et opérations dans une classe existante. contextclasse def: nomatt : type = expr def: nomop(... ) : type = expr Introduction à OCL p.34

Définitions Utile pour décomposer des expressions complexes, sans surcharger le modèle. context Enseignant def: eleves () : Bag(Etudiants) = self. enseigne. etudiant inv: self. titre = Titre :: prof implies self. eleves () forall(each each.estadmis()) un professeur a toujours 100% de reussite Introduction à OCL p.35

Valeur initiale Spécification de la valeur initiale d un attribut ou d un rôle (Association End). Le type de l expression doit être conforme au type de l attribut ou du rôle. context Typename::attributeName: Type init : expression representant la valeur initiale context Enseignant :: salaire : Integer init : 800 Introduction à OCL p.36

Propriétés dérivées Spécification de la valeur dérivée d un attribut ou d un rôle (Association End). context Typename::assocRoleName: Type derive: expression representant la regle de derivation Introduction à OCL p.37

Propriétés dérivées context Enseignant :: service : Integer derive: self. enseigne. heures sum() context Personne :: celibataire : Boolean derive: self. conjoint isempty() Introduction à OCL p.38

Plan Introduction Invariants, pré et post-conditions Spécification de propriétés Expressions OCL portant sur les Associations Concepts avancés Conclusion Introduction à OCL p.39

Expressions OCL portant sur les Associations Introduction à OCL p.40

Rôles: navigation Il est possible de naviguer à travers les associations, en utilisant le rôle opposé: Université nom : String1 1 * universite departement Département nom : String ajouter(enseignant) context Departement inv: self. universite. notnil () context Universite inv: self.departement (...) Introduction à OCL p.41

Rôles: navigation Le type de la valeur de l expression dépend de la cardinalité maximale du rôle. Si égal à 1, alors c est un classificateur. Si > 1, alors c est une collection. context Matiere un objet: inv: self. enseignant. oclinstate ( disponible ) une collection (Set): inv: self.competent notempty() Introduction à OCL p.42

Rôles: navigation Quand le nom de rôle est absent, le nom du type (en minuscule) est utilisé. Il est possible de naviguer sur des rôles de cardinalité 0 ou 1 en tant que collection: context Departement inv: self. chef size () = 1 context Departement inv: self. chef.age > 40 context Personne inv: self.epouse notempty() implies self.epouse.sexe = Sexe:: femme Introduction à OCL p.43

Rôles: navigation Il est possible de combiner des expressions: context Personne inv: self. epouse notempty() implies self.epouse.age 18 and self.mari notempty() implies self. mari.age 18 Introduction à OCL p.44

Association Classe On utilise le nom de la classe-association, en minuscules: context Etudiant inv: Ensemble des notes: self. note Note date : Date valeur : Integer Étudiant nom : string nasissance : Date estadmis() : Bool age() : Integer etudiant matiere Matière heures : Integer nom : String Introduction à OCL p.45

Association Classe Il est possible de naviguer en utilisant les noms de rôle et la notation pointée: context Note inv: self. etudiant.age() 18 self. matiere. heures > 3 Note date : Date valeur : Integer Étudiant nom : string nasissance : Date estadmis() : Bool age() : Integer etudiant matiere Matière heures : Integer nom : String Introduction à OCL p.46

Associations qualifiées La valeur du qualificatif est mis entre crochets: context Universite inv: self. etudiants [8764423] Quand la valeur n est pas précisée, le résultat est une collection: context Universite inv: self. etudiants Université nom : String code:integer etudiants Étudiant nom : string nasissance : Date estadmis() : Bool age() : Integer Introduction à OCL p.47

Sortes de Collection (1/2) Set: ensemble non ordonné. Résultat d une navigation. {1, 2, 45, 4} OrderedSet: ensemble ordonné. navigations combinées. {1, 2, 4, 45} Introduction à OCL p.48

Sortes de Collection (2/2) Bag: multi-ensemble non ordonné. navigations combinées. {1, 3, 4, 3} Sequence: multi-ensemble ordonné. navigation à travers un rôle ordonné {Ordered} {1, 3, 3, 5, 7} {1..10} Introduction à OCL p.49

Collections de collections En UML 1.5, les collections de collections étaient mises à plat automatiquement. En UML 2.0 ce n est plus le cas, la mise à plat doit être explicitement spécifiée. Set{Set{1, 2}, Set{3, 4}} flatten () = Set{1, 2, 3, 4} Introduction à OCL p.50

Opérations sur les collections isempty() : vrai si la collection est vide. notempty() : vrai si la collection a au moins un élément. size() : nombre d éléments dans la collection. count (elem) : nombre d occurrences de elem dans la collection. Introduction à OCL p.51

Opération sur les collections Select et Reject Collect ForAll Exists Iterate Introduction à OCL p.52

Select et Reject collection select (elem:t bool expr) : collection reject (elem:t bool expr) : collection collection Sélectionne le sous-ensemble d une collection pour lequel la propriété expr est vraie (ou fausse reject). Introduction à OCL p.53

Select et Reject Syntaxes possibles: context Departement inv: self. enseignants select (age > 50) notempty() self. enseignants reject (age < 23) isempty() context Departement inv: avec iterateur self. enseignants select (e e.age > 50) notempty() context Departement inv: avec iterateur typé self. enseignants select (e : Enseignant e. age > 50) notempty() Introduction à OCL p.54

Collect collection collect (expr) : collection Évalue l expression expr pour chaque élément de la collection, et rend une autre collection, composée par les résultats de l évaluation. Le résultat est un multi-ensemble (bag). Introduction à OCL p.55

Collect Syntaxe: context Departement: self. enseignants collect (nom) self. enseignants collect (e e. nom) self. enseignants collect (e: Enseignant e. nom) conversion de Bag en Set: self. enseignants collect (nom) asset() Raccourci: self. enseignants.nom Introduction à OCL p.56

For All collection forall(elem:t bool expr) : Boolean Vrai si expr est vrai pour chaque élément de la collection. Introduction à OCL p.57

For All Syntaxe: context Departement inv: self. enseignants forall( titre = Titre :: mdc) self. enseignants forall(each each. titre = Titre :: mdc) self. enseignants forall(each: Enseignants each. titre = Titre :: mdc) Introduction à OCL p.58

For All Produit cartésien: context Departement inv: self. enseignant forall(e1, e2 : Enseignant e1 < > e2 implies e1.nom < >e2.nom equivalent à self. enseignants forall(e1 self. enseignants forall (e2 e1 < > e2 implies e1.nom < >e2.nom)) Introduction à OCL p.59

Exists collection exists (boolean expression) : Boolean Vrai si expr est vrai pour au moins un élément de la collection. context: Departement inv: self. enseignants exists (e: Enseignant p.nom = Martin ) Introduction à OCL p.60

Iterate collection iterate (elem: T; reponse: T = <valeur> <expr avec elem et reponse>) Opération générique (et complexe) applicable aux collections. Introduction à OCL p.61

Iterate context Departement inv: self. enseignants select (age > 50) notempty() context Departement inv: expression équivalente: self. enseignants iterate (e: Enseignant; answer: Set(Enseignant) = Set {} if e.age > 50 then answer.including(e) else answer endif) notempty() Introduction à OCL p.62

Autres opérations sur les Collections includes(elem), excludes(elem) : vrai si elem est présent (ou absent) dans la collection. includesall(coll) : vrai si tous les éléments de coll sont dans la collection. union (coll), intersection (coll) : opérations classiques d ensembles. asset(), asbag(), assequence() : conversions de type. Introduction à OCL p.63

Plan Introduction Invariants, pré et post-conditions Spécification de propriétés Expressions OCL portant sur les Associations Concepts avancés Conclusion Introduction à OCL p.64

Concepts avancés Introduction à OCL p.65

Conformance de type Type Set(T) Sequence(T) Bag(T) Integer Est conforme à Collection(T) Collection(T) Collection(T) Real Introduction à OCL p.66

Propriétés prédéfinies oclistypeof(t : OclType) : Boolean ocliskindof(t : OclType) : Boolean oclinstate (s : OclState ) : Boolean oclisnew() : Boolean oclastype(t : OclType) : instance de OclType Exemples: context Universite inv: self.oclistypeof( Universite ) inv: self.oclistypeof(departement) vrai faux Introduction à OCL p.67

Expression Let Quand une sous-expression apparaît plus d une fois dans une contrainte, il est possible de la remplacer par une variable qui sert de alias: context Person inv: let income : Integer = self. job. salary sum() in if isunemployed then income < 100 else income 100 endif Introduction à OCL p.68

Valeurs précédentes (1/2) Quand la valeur @pre d une propriété est un objet, toutes les valeurs accédées à partir de cet objet sont nouvelles: a.b@pre.c l ancienne valeur de b, disons X, et la nouvelle valeur de c de X a.b@pre.c@pre l ancienne valeur de b, disons X, et l ancienne valeur de c de x. Introduction à OCL p.69

Valeurs précédentes (2/2) b b1:b c c1:c a:a b2:b Avant Après a:a b b2:b c c2:c b1:b c c3:c a.b@pre.c la nouvelle valeur de b1.c, c3 a.b@pre.c@pre l ancienne valeur de b1.c, c1 a.b.c la nouvelle valeur de b2.c, c2 Introduction à OCL p.70

Héritage de contrats Rappel: principe de substitution de Liskov (LSP): «Partout où une instance d une classe est attendue, il est possible d utiliser une instance d une de ses sous-classes.» Introduction à OCL p.71

Héritage d invariants Conséquences du principe de substitution de Liskov pour les invariants: Les invariants sont toujours hérités par les sous-classes. Un sous-classe peut renforcer l invariant. Introduction à OCL p.72

Héritage de pré et post-conditions Conséquences du LSP pour les pré et post-conditions: Une pré-condition peut seulement être assouplie (contrevariance). Une post-condition peut seulement être renforcée (covariance). Introduction à OCL p.73

Plan Introduction Invariants, pré et post-conditions Spécification de propriétés Expressions OCL portant sur les Associations Concepts avancés Conclusion Introduction à OCL p.74

Conclusion Introduction à OCL p.75

Développement en cours Amélioration de la grammaire. Développement d un méta-modèle (syntaxe abstraite). UML 2.0. Introduction à OCL p.76

Autres nouveautés dans UML 2.0 Tuples. Collections imbriquées (collectnested). Envoi de messages. context Subject :: haschanged() la post-condition doit asssurer que le message update() a ete envoye a tous les observateurs: post: observers forall( o o^update() ) Introduction à OCL p.77

Conseils de modélisation Faire simple: les contrats doivent améliorer la qualité des spécifications et non les rendre plus complexes. Toujours combiner OCL avec un langage naturel: les contrats servent à rendre les commentaires moins ambigus et non à les remplacer. Utiliser un outil. Introduction à OCL p.78

Rappels La conception par contrats permet aux concepteurs de: Modéliser de manière plus précise. Mieux documenter un modèle. Rester indépendant de l implémentation. Identifier les responsabilités de chaque composant. Introduction à OCL p.79

Applicabilité Génération de code: assertions en Eiffel, Sather. dans d autres langages, grâce à des outils spécialisés ou au patron Contract. Génération de tests mieux ciblés. Introduction à OCL p.80

Références The Object Constraint Language Jos Warmer, Anneke Kleppe. OCL home page www.klasse.nl/ocl/ OCL tools www.um.es/giisw/ocltools OMG Specification v1.5. OMG UML 2.0 Working Group. Introduction à OCL p.81