Expression des contraintes en UML 2 Exprimer des contraintes avec UML Dans le d
Expression des contraintes en UML 2 Exprimer des contraintes avec UML Dans le diagramme de classes: ●contraintes structurelles ○classes, interfaces, héritage, relations, navigabilité, cardinalité ●contraintes de type ○type des propriétés, paramètres, retours ●contraintes de visibilité ○public, privé, protected, package 3 Limite par l’exemple 4 Université Cours sigle: String Professeur nom: String salaire: Integer 1 Diagramme de classes * * 1 1 * professeur employés Limite par l’exemple 5 Code source valide et acceptable Professeur p1 = new Professeur() p1.nom = “Alexandre” p1.salaire = 100000000 Code source valide mais inacceptable Professeur p2 = new Professeur() p2.nom = “” p2.salaire = -10 Limite par l’exemple 6 Diagramme d’objets valide et acceptable p1:Professeur u1:Université c1: Cours p2:Professeur u2:Université c2: Cours Limite par l’exemple 7 Diagramme d’objets valide mais inacceptable p1:Professeur u1:Université c1: Cours p2:Professeur u2:Université c2: Cours Exercice 8 Répertoire nom: String * 0..1 parent Écrivez deux diagrammes d’objets ●un valide et acceptable ●un valide mais inacceptable Solution (exemple valide et acceptable) 9 r1:Répertoire nom=”r1” r2:Répertoire nom=”r2” r5:Répertoire nom=”r5” r6:Répertoire nom=”r6” r3:Répertoire nom=”r3” r4:Répertoire nom=”r4” Solution (exemple valide mais inacceptable) 10 r1:Répertoire nom=”r1” Répertoire r1 = new Répertoire(“r1”) r1.parent = r1 Un besoin: exprimer des contraintes sémantiques Contrainte sémantique du modèle ●condition à respecter ●restriction ●assertion Exemples: ●“le solde du compte doit toujours être positif” ●“un livre ne peut pas être emprunté par deux personnes différentes en même temps” ●“une personne ne peut pas être professeur et chargée de cours en même temps” 11 Contraintes en UML Dans le diagramme de classes ●texte entre accolades: {condition} ●langage naturel: {solde toujours positif} ●ou OCL: {solde >= 0} Dans un document annexe au diagramme ●en OCL 12 Directement dans la classe Dans une note Contraintes dans le diagramme de classes 13 Étudiant nom: String {nom.size() > 0} moyenne: Real {moyenne >= 0.0} Étudiant nom: String moyenne: Real {nom.size() > 0 and moyenne >= 0.0} Contraintes dans le diagramme de classes 14 Personne Sur les relations Corporation Compte propriétaire propriétaire {xor} Contraintes dans un document OCL 15 Diagramme de classes Dans le fichier annexe context Étudiant inv: nom->size() > 0 inv: moyenne >= 0.0 Étudiant nom: String moyenne: Real {nom->size() > 0 and moyenne >= 0.0} OCL Object Constraint Language 16 Object Constraint Language Expression de contraintes pour UML ●langage formel ●en lien avec un diagramme de classes ●depuis UML 1.1 Contraintes de comportement (le QUOI) ●respect de la spécification ●contraintes de sémantique ●et non d’implémentation 17 OCL pour faire quoi? Spécifier des contraintes d’état ●invariants de classes ●pré-conditions sur des opérations ●post-conditions sur des opérations Formuler les contraintes sur les objets au niveau du diagramme de classes Utiliser des contraintes ensemblistes 18 Langage naturel vs OCL Langage naturel ●accessible ●ambigu, imprécis OCL (langage formel) ●précis, non-ambigu ●interprétable par des outils 19 Langage de programmation vs OCL Langage de programmation ●faible niveau d’abstraction ●mode opérationnel (COMMENT) Langage formel ●abstrait ●mode descriptif (QUOI) 20 OCL Logique et syntaxe 21 Logique propositionnelle Issue de la logique mathématique ●logique basée sur les propositions ●on parle aussi d’assertions ●énoncés vrais ou faux Exemples d’assertions solde > 0 resultat = solde 22 Opérateurs logiques Opérateur unaire sur un booléen ●not négation Opérateurs binaires sur des booléens ●and et logique ●or ou logique ●xor ou exclusif ●implies implication logique 23 Opérateur not 24 A not A true false false true Négation de la proposition not true = false Opérateur and, or, xor 25 A B A and B A or B A xor B true true true true false true false false true true false true false true true false false false false false Pour combiner des propositions Opérateur implies Opérateur d’implication logique ●Si A est vrai alors B est vrai aussi. ●Raccourci pour not A or B 26 A B A implies B true true true true false false false true true false false true Opérateur implies Exemples ●SI c’est la nuit ALORS on ne voit pas le soleil ●SI l’alarme incendie sonne ALORS on doit utiliser l’escalier 27 Opérateur if-then-else-endif Opérateur logique if A then B else C endif ●Si A est vrai alors l’expression vaut B ●Si A est faux alors l’expression vaut C 28 Opérateurs mathématiques Opérateurs arithmétiques sur les entiers et réels: ●- unaire (comme dans -10) ●+ addition, - soustraction ●* multiplication, / division Opérateurs de comparaison: ●= égalité et <> différence ●< et <=, > et >= 29 Par ordre de précédence: ●if-then-else-endif ●not et - unaire ●* et / ●+ et - ●<, >, <= et >= ●= et <> ●and ●or ●xor ●implies Précédence des opérateurs 30 Types fondamentaux OCLAny ancêtre de tous les types Boolean true, false Integer 1 ; -3 ; 12 ; 42 Real 1.5 ; 3.14 ; -10.3 String ‘Hello World!’ OCLVoid null ; invalid Et les collections que nous verrons plus tard... 31 Opérations sur les types fondamentaux Integer, Real =, <>, <=, >=, +, -, *, / Boolean and, or, not, xor, =, <>, implies, if <expr> then … else … endif String concat(string), size(), toLower(), toUpper()¸ subString(start, end) Le premier caractère d’une string est à l’index 1! 32 Opérations sur tous les types allInstances(): retourne l’ensemble de toutes les instances d’une classe 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 un de ses sous-types 33 Opérateurs d’appel Opérateur “.” ●pour accéder aux propriétés des objets ●self.name ●self.getName() Opérateur “->” ●pour appeler les méthodes sur les collections OCL ●self.étudiants->size() Opérateur “::” ●pour référer aux propriétés d’une classe ●Étudiant::nom 34 OCL Contraintes 35 Contexte d’une contrainte Une contrainte est toujours associée à un élément du modèle ●classe, interface ●attribut ou opération ●relation Syntaxe: context <élément> 36 Représentation du contexte en OCL 37 Diagramme de classes En OCL context Étudiant inv: moyenne >= 0.0 Étudiant nom: String moyenne: Real {moyenne >= 0.0} renommer(String): void Exemples de contextes Sur une classe context Étudiant Sur un attribut context Étudiant::nom Sur une opération context Étudiant::setNom(nom: String): void 38 Invariant Contrainte à respecter en tout temps (prédicat) inv [<nom>]: <expression_logique> Exemple context Étudiant inv: moyenne >= 0.0 context Cours inv: sigle->size() >= 3 39 Accéder aux propriétés des objets Objet désigné par le contexte: self Exemple dans le context Étudiant nom self.nom renommer(“nouveau_nom”) self.renommer(“nouveau_nom”) 40 Exercice 1 41 Exprimer les contraintes OCL: ●Le nom d’un professeur ne peut être nul ●Le sigle d’un cours fait toujours 3 caractères ●Le coefficient d’un cours est entre 0.0 et 100.0 ●Un professeur doit travailler dans l’université qui dispense le cours pour l’enseigner Université Cours sigle: String coef: Real Professeur nom: String 1 * * 1 professeur université 1 * université Solution 1 42 context Professeur inv: nom <> null context Cours inv: sigle->size() = 3 inv: coef >= 0.0 and coef <= 100.0 inv: universite = professeur.universite Pré-condition, post-condition Contrainte vérifiée avant ou après l’appel d’une opération ●pré-condition avant l’appel ●post-condition après l’appel Prédicat de spécification ●état avant et après un appel ●comportement attendu de l’opération 43 Pré-condition Prédicat sur l’état du système avant l’appel d’une opération pre [<nom>]: <expression_logique> Doit être vraie juste avant l’exécution de l’opération 44 Vérifier une pré-condition Vérifier que l’état avant est respecté: context Etudiant::inscrire() pre: not estInscrit 45 Post-condition Prédicat sur l’état du système après l’appel d’une fonction post [<nom>]: <expression_logique> Doit être vraie juste après l’exécution de l’opération 46 Vérifier une post-condition Vérifier que l’état après est respecté: context Etudiant::inscrire() post: estInscrit 47 Contexte d’une post-condition On peut accéder à certaines valeurs spécifiques: ●result valeur retournée par l’opération ●<référence>@pre valeur de l’attribut ou de l’opération avant l’appel 48 Exemple context Compte::getSolde(): Real post: result = solde context Compte::créditer(montant: Real) pre: montant > 0.0 post: solde = solde@pre + montant 49 Compte solde: Real getSolde(): Real créditer(montant: Real) débiter(montant: Real) Exercice 2 50 Donnez un exemple de pré-condition et post-condition pour MyInteger::diviserPar() MyInteger value: Integer diviserPar(diviseur: MyInteger): MyInteger Solution 2 51 context MyInteger::diviserPar (diviseur: MyInteger): MyInteger pre: diviseur.value <> 0 post: result.value = value / diviseur.value MyInteger value: Integer diviserPar(diviseur: MyInteger): MyInteger Body Contrainte sur le résultat de la requête body : <requête> Exemple context Compte::getSolde(): Real body: self.solde 52 Exprimer les contraintes: ●valeurs est toujours strictement supérieur à 0 ●ajoute prend un paramètre toujours supérieur ou égal à 0 ●ajoute incrémente le nombre de valeurs et additionne valeur à somme ●moyenne retourne la moyenne de somme sur valeurs Exercice 3 53 Compteur valeurs: Integer somme: Integer ajoute(valeur: Integer) moyenne(): Integer Solution 3 54 context Compteur inv: valeurs > 0 context Compteur::ajoute(valeur: Integer) pre: valeur >= 0 post: valeurs = valeurs@pre + 1 and somme = somme@pre + valeur context Compteur::moyenne(): Integer body: somme / valeurs Définition let Pour déclarer une “variable” au sein d’un énoncé let <declaration> = <requete> in <expression> <déclaration> aura la valeur de <requête> lorsqu’utilisé dans <expression> context Étudiant inv: let nblettres = nom->size() in nblettres > 0 55 Définition def Pour déclarer une “variable globale” à un contexte def : <declaration> = <requete> context Étudiant def: nblettres = nom->size() inv: nblettres > 0 56 Contrainte d’initialisation Contrainte sur uploads/Voyage/ 03-ocl-logique.pdf
Documents similaires










-
51
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Nov 08, 2021
- Catégorie Travel / Voayage
- Langue French
- Taille du fichier 0.3201MB