IFT Génie logiciel

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

OCL - Object Constraint Language

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

UML. Diagrammes de classes (suite) Delphine Longuet.

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

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

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

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

UML et les Bases de Données

Java Licence Professionnelle CISII,

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

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

Classes et Objets en Ocaml.

Langage SQL : créer et interroger une base

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

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

Développement de logiciel avec UML

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

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

CREATION WEB DYNAMIQUE

4. Groupement d objets

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

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Paginer les données côté serveur, mettre en cache côté client

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

Examen Médian - 1 heure 30

Diagramme de classes

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmer en JAVA. par Tama

Bases de données. Chapitre 1. Introduction

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Cours Bases de données 2ème année IUT

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

OpenPaaS Le réseau social d'entreprise

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

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

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

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

Qualité du logiciel: Méthodes de test

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

Du 10 Fév. au 14 Mars 2014

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours Informatique Master STEP

A QUOI SERVENT LES BASES DE DONNÉES?

IFT2255 : Génie logiciel

UML Diagramme de communication (communication diagram) Emmanuel Pichon 2013

Une introduction à Java

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

OASIS Date de publication

Once the installation is complete, you can delete the temporary Zip files..

Présentation du langage et premières fonctions

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Algorithmique & programmation

3. UML - Unified Modeling Language Diagrammes statiques

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Chapitre VI- La validation de la composition.

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

as Architecture des Systèmes d Information

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

Traduction des Langages : Le Compilateur Micro Java

Héritage presque multiple en Java (1/2)

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

UML (Paquetage) Unified Modeling Language

Patrons de Conception (Design Patterns)

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Cours de Génie Logiciel

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

Généralités sur le Langage Java et éléments syntaxiques.

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

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

Compétences Business Objects

Chapitre I : le langage UML et le processus unifié

Utilitaires méconnus de StrataFrame

Présentation Windows Azure Hadoop Big Data - BI

ACTIVITÉ DE PROGRAMMATION

Intelligence Artificielle Planification

UML (Diagramme de classes) Unified Modeling Language

Algorithmique et programmation : les bases (VBA) Corrigé

.NET - Classe de Log

Application 1- VBA : Test de comportements d'investissements

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

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Corrigés détaillés des exercices

Ordonnance sur le paiement à un enfant ou à une personne qui n est pas saine d esprit. Infant or Person of Unsound Mind Payment Order CODIFICATION

Présentation du PL/SQL

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

1. Structure d'un programme FORTRAN 95

Programmation en Java IUT GEII (MC-II1) 1

Transcription:

Rappel 2 Les diagrammes UML ne nous disent pas tout... IFT2255 - Génie logiciel Object Constraint Language (OCL) enfants parents Alice:Personne n est pas une instance valide de Bruno Dufour dufour@iro.umontreal.ca parents 2 Personne * enfants Object Constraint Language (OCL) 3 Contextes 4 Développé par IBM en 1995 Fait partie d'uml depuis la version 1.1 Permet d'exprimer de l'information supplémentaire à propos d'un modèle (un ensemble de diagrammes UML) Est un langage de spécification formelle purement déclaratif (pas d'effets de bord) fortement typé OCL permet d associer des contraintes à des contextes N'importe quel élément du modèle peut servir de contexte paquetage, composant, classe, interface, opération, attribut Le contexte est exprimé à l'aide du mot clé context

Contraintes 5 Contraintes d attributs 6 Contrainte: restriction d'une ou plusieurs valeurs dans un modèle UML Formulées en fonction d'un diagramme de classes, appliquées au niveau des objets Similaire à des assertions pour les modèles Assertion : prédicat inséré dans un programme afin d'indiquer ce que le développeur croit être toujours vrai à un endroit donné Valeur initiale Sélectionne l attribut -- solde initialisé à 0 Type (optionnel) context Compte::solde : Real init: 0 Valeur dérivée -- Intérêt dérivé context Compte::intérêt : Real derive: solde * 0.005 Exemple 7 Types de contraintes 8 Personne nom: String age: Integer Réunion Membre nom: String age: Integer participants réunions titre: String jour: Date début: Integer fin: Integer confirmée: Boolean durée(): Integer nombredeparticipants():integer confirmer():void annuler():void déplacer(jour:date,heure:integer):void Invariants Préconditions Postconditions Équipe nom: String taille: Integer

Invariants Une contrainte qui est vraie durant toute la durée de vie d'un objet Syntaxe: context <classe> inv [<nom>]: <expression OCL booléenne> ex: context Réunion inv: self.fin > self.début self : instance pour laquelle la contrainte est évaluée (similaire à this en Java) 9 Précondition 10 Une contrainte qui doit être vraie juste avant l'exécution d'une opération Syntaxe: context <classe>::<opération> (<paramètres>) pre [<nom>]: <expression OCL booléenne> ex: context Réunion::déplacer(jour:Date,heure:Integer) pre: heure>0 pre: self.confirmée = false Postcondition 11 Postcondition - exemples 12 context Meeting::confirm() post: self.isconfirmed = true Une contrainte qui doit être vraie juste après l'exécution d'une opération Syntaxe : context <classe>::<opération> (<paramètres>) post [<nom>]: <expression OCL booléenne> context Meeting::duration():Integer post: result = self.end self.start context Compte::dépôt(montant:Real) post: solde = solde@pre + montant fait référence au résultat de l'opération indique une expression qui doit être évaluée dans l'état original (avant l'exécution de l'opération)

Types 13 Opérations - Types primitifs 14 Types primitifs d UML : String, Real, Integer, etc. Collections d OCL : Set, Bag, Sequence, OrderedSet Les types du modèle UML (diagramme de classes) OclAny : l ancêtre de tous les types Integer, Real =, <>, <=, >=, +, -, *, /, x.mod(y), x.div(y) Boolean and, or, not, xor, =, <>, implies, if <expr> then... else... endif String s.concat(t), s.size(), s.tolower(), s.toupper(), s.substring(start, end) L'indexation débute à 1 et non 0 Opérations - Tous les types 15 Opérations - Collection 16 allinstances(): retourne l'ensemble de toutes les instances d'une classe Personne.allInstances() ocltype(): retourne le type d un objet oclistypeof(<type>): retourne vrai si l objet est du type spécifié ocliskindof(<type>): retourne vrai si l objet est du type spécifié ou d un de ses sous-types size() : Integer includes(object : T) : Boolean excludes(object : T) : Boolean count(object : T) : Integer includesall(c2 : Collection(T)) : Boolean excludesall(c2 : Collection(T)) : Boolean isempty() : Boolean notempty() : Boolean sum() : T asbag(), asset(), asorderedset(), assequence()

Opérations - Set 17 Opérations - Collections ordonnées 18 union(s : Set(T)) : Set(T) intersection(s : Set(T)) : Set(T) including(object : T) : Set(T) Nouvelle collection qui inclut tous les objets de la collection d origine, en plus de l objet spécifié excluding(object : T) : Set(T) Nouvelle collection qui inclut tous les objets de la collection d origine, sauf l objet spécifié append (object: T) : OrderedSet(T) prepend(object : T) : OrderedSet(T) insertat(index : Integer, object : T) at(i : Integer) : T indexof(obj : T) : Integer first() : T last() : T Types du modèle 19 Navigation 20 Chaque classe correspond à un type en OCL La généralisation définit la hiérarchie de types Pour chaque classe du diagramme, on peut accéder à ses attributs (ex: obj.start) ses opérations (ex: obj.duration()) À partir d'un objet spécifique, il est possible de naviguer vers d'autres objets en passant par les associations La navigation utilise les étiquettes (noms) d'associations La cardinalité de l'association détermine le type de l'expression:?..1: le type est un objet (ou un ensemble vide s il n y a pas d objet) sinon: le type est une collection

Itération 21 Itération 22 OCL définit un itérateur de base pour toutes les collections context Collection(T)::sum() : T post: result = self->iterate( element : T; total : T = 0 total + element ) D autres itérateurs plus conviviaux sont disponibles exists : vérifie si une expression est vraie pour au moins un élément d'une collection forall : vérifie si une expression est vraie pour tous les éléments d'une collection select/reject : retournent le sous-ensemble de la collection qui satisfait/ne satisfait pas une condition one : retourne vrai si un seul élement satisfait une condition any : retourne un élément qui satisfait une condition, ou null si aucun élément ne satisfait la condition Exemple - exists 23 Exemples - forall 24 -- un gestionnaire ne gère pas ses propres comptes -- le conseiller d'un client gère au moins un des -- comptes de ce client inv : self.managedaccount->forall(c : Account c.owner <> self) inv : self.managedaccount->forall(owner <> self) inv : self.account->exists(c : Account c.administrator->includes(self.counsellor)) -- double itération inv : self.contract->forall(c1,c2 c1 <> c2 implies c1.id <> c2.id)

Exemples - select / reject 25 collect 26 context Company inv: self.employee->select(p p.age > 50)->notEmpty() inv: self.employee->select(p : Person p.age > 50)->notEmpty() inv: self.employee->select(age > 50)->notEmpty() inv: self.employee->reject(ismarried)->isempty() Retourne une collection contenant le résultat d une expression pour chacun des éléments d une collection Bag et non Set, puisque certains éléments pourraient présents plus d une fois ex: -- Une collection des âges de tous les employés self.employees->collect( age ) Notation abrégée: appliquer une propriété à une collection d'objets équivaut à effectuer une opération collect sur la collection avec cette propriété self.employees.age closure 27 Variables 28 Permet d accumuler la fermeture transitive d une expression Récemment ajouté à OCL Pourrait être exprimé par récursion, mais plus compliqué ex: parent.closure(children) retourne une collection qui inclut les enfants, les petits enfants, etc. let: permet de définir une sous-expression utilisée plus d'une fois dans une même contrainte : inv: let income = self.job.salary->sum() in if isunemployed then else endif income < 100 income >= 100

Variables 29 Définition de requêtes 30 def: Permet de définir une sous-expression sur plusieurs contraintes : def: income : Integer = self.job.salary->sum() inv: if isunemployed then else endif income < 100 income >= 100 inv: taxes = income * 0.25 OCL peut être utilisé pour définir précisément le résultat d une opération à l aide du mot clé body Opération sans effet de bord Une sorte de post-condition exacte Exemple - body 31 Contraintes et héritage 32 context Compte::getSolde() : Integer body : self.solde ::getcurrentspouse() : Person pre: self.ismarried = true body: self.marriages->select(m m.ended = false ).spouse ::issenior() : Boolean pre: age >= 0 post: age = age@pre -- age is unchanged by operation body: age >= 65 Les contraintes sont héritées Un invariant peut être renforcé mais non affaibli dans une sous-classe Une précondition peut être affaiblie mais non renforcée dans une redéfinition de l'opération dans une sous-classe Une postcondition peut être renforcée mais non affaiblie dans une redéfinition de l'opération dans une sous-classe Raison: "Substitution Principle" (Liskov) "Wherever an instance of a class is expected, one can always substitute an instance of any of its subclasses."