Outils pour utilisateurs

Outils du site


analyse:diagrammes

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
analyse:diagrammes [2024/08/06 22:18] sgariepyanalyse:diagrammes [2024/08/06 22:20] (Version actuelle) sgariepy
Ligne 211: Ligne 211:
  
  
-====== Exemple d'un DFD ======+===== Exemple d'un DFD =====
 {{:analyse:diagrammes:dfd2.gif|}} {{:analyse:diagrammes:dfd2.gif|}}
 +
 +
 +
 +====== OCL ======
 +
 +
 +===== Invariants =====
 +
 +==== Exemples avec club vidéo ====
 +
 +
 +{{:analyse:uml:videos_domain_model.png?400|}}
 +
 +
 +Une vidéo empruntée est nécessairement une vidéo de l’inventaire
 +<code>
 +context Succursale
 +inv: self.videos->includesAll(self.clients.videos)
 +</code>
 +
 +
 +Deux clients distincts ne peuvent avoir des vidéos en commun.
 +<code>
 +context Succursale
 +inv: self.clients->forAll(c1, c2 | c1.videos->intersect(c2.videos) implies c1 = c2)
 +</code>
 +===== Requêtes =====
 +
 +<code>
 +class Person
 +  attributes
 +    firstname: String
 +    lastname: String
 +    email: Set(String)
 +  operations
 +    fullname(prefix:String) : String =
 +      prefix.concat(' ').concat(firstname).concat(' ').concat(lastname)
 +end
 +prefix= 'Mr' ou 'Dr' ou 'Mad.' etc.
 +</code>
 +===== Opérations =====
 +==== Syntaxe ====
 +
 +<code>
 +context Typename::operationName(param1 : Type1, ...): ReturnType
 +  pre precondname1 : ...param1... ...self...
 +  pre precondname2 : ...param1... ...self...
 +  ...
 +  post postcondname1 : ...result... ...param1... ...self...
 +  post postcondname2 : ...result... ...param1... ...self...
 +</code>
 +
 +==== Exemple 1 ====
 +
 +<code>
 +class Cours
 +  attributes
 +    titre: String
 +    sigle: String
 +  operations
 +    addPreRequis(c : Cours)
 +end
 +
 +class Etudiant < Personne
 +  operations
 +    abandonCours(c : Cours)
 +    nouveauCode(n : String)
 +end
 +</code>
 +
 +<code>
 +context Etudiant::abandonCours(c: Cours)
 +  pre Estinscrit: self.cours->includes(c)
 +  post Plusinscrit: self.cours = cours@pre->excluding(c)
 +</code>
 +
 +La partie ''%%self.cours = cours@pre->excluding(c)%%'' est préférable à ''%%self.cours->excludes(c)%%'' car il peut arriver qu'après l'opération l'ensemble soit vide par erreur, donc qu'il exclus effectivement ''c'', mais qu'en réalité, l'ensemble ne devait pas être vide et exclure ''c'' ''@pre'' permet de faire référence à l'état de ''cours'' avant l'opération et de pouvoir comparer les deux états avant et après.
 +
 +==== Exemple 2 ====
 +
 +<code>
 +context A::sort(s : Sequence(Integer)) : Sequence(Integer)
 +  post MemeTaille:result->size = s->size
 +  post MemesElements: result->forAll(i | result->count(i) = s->count(i))
 +  post EstTriee: Sequence{1..( result->size-1)}->forAll(i | result.at(i) <= result.at(i+1))
 +</code>
 +Notez l’utilisation d’une séquence ici pour imiter une boucle de 1 à ''%%result->size-1%%''.
 +
 +==== Vérification des pre et post conditions ====
 +
 +
 +
 +===== Types primitifs =====
 +
 +{{:analyse:uml:schaums_ocl_operations.png|Operations sur les types primitifs}}
 +==== Real ====
 +
 +^ Operations ^^^
 +| + (r: Real): Real  | abs(): Real  | < (r: Real): Boolean   |
 +| - (r: Real): Real  | floor(): Integer  | > (r: Real): Boolean  |
 +| * (r: Real): Real  | round(): Integer  | %%<=%% (r: Real): Boolean  |
 +| / (r: Real): Real  | max(r: Real): Real  | >= (r: Real): Boolean  |
 +| -: Real  | min(r: Real): Real  |   |
 +
 +
 +==== Integer ====
 +
 +^ Operations  ^^
 +| −: Integer => Valeur négative de ''self'' | abs(): Integer |
 +| + (i: Integer): Integer | div(i: Integer): Integer => Le nombre de fois que ''i'' entre complètement dans ''self'' |
 +| - (i: Integer): Integer | mod(i: Integer): Integer => Modulo  |
 +| * (i: Integer): Integer | max (i: Integer): Integer  |
 +| / (i: Integer): Real | min(i: Integer): Integer  |
 +
 +
 +==== String ====
 +
 +^ Operations  ^
 +| size(): Integer  |
 +| concat(s: String): String  |
 +| substring(lower: Integer, upper: Integer): String  |
 +| toInteger(): Integer  |
 +| toReal(): Real  |
 +
 +==== Boolean ====
 +
 +^ Operations  ^
 +| or (b: Boolean): Boolean  |
 +| xor (b: Boolean): Boolean  |
 +| and (b: Boolean): Boolean  |
 +| not: Boolean  |
 +| implies (b: Boolean): Boolean  |
 +
 +===== Types collections =====
 +
 +{{:analyse:uml:schaums_ocl_operations_collections.png|Operations sur les collections}}
 +
 +==== Collection ====
 +
 +==== Set ====
 +
 +
 +==== Bag ====
 +
 +==== Sequence ====
 +
 +===== Outils =====
 +
 +  * [[http://www.dresden-ocl.org/index.php/DresdenOCL|Dresden OCL toolkit]]
 +  * [[http://www.empowertec.de/|EmPowerTec]] - Vérification de la syntaxe et de la sémantique de base
 +  * [[http://www.key-project.org/|KeY Project]] - Vérification formelle, OCL et JML
 +  * [[http://sourceforge.net/apps/mediawiki/useocl/index.php?title=Main_Page|USE]] - The UML-based Specification Environment.
 +  * [[http://neptune.irit.fr/|Neptune]] (académique) et [[http://www.topcased.org/|Topcased]] (industriel).
 +  * [[http://lci.cs.ubbcluj.ro/ocle/|OCLE 2.0]] - Object Constraint Language Environment (pas de développement depuis 2005).
 +
 +
 +===== Sources =====
 +
 +  * S. Benette, J. Skelton, K. Lunn, 2004.  //Schaum's Outlines of UML//, McGraw Hill.
 +
  
  
analyse/diagrammes.1722975520.txt.gz · Dernière modification : 2024/08/06 22:18 de sgariepy