Modélisation de système : tutoriel OCL, la gestion des évènements
Ce tutoriel OCL (Object Constraint Language) est consacré à la gestion des évènements.
Pour illustrer ce concept, nous utiliserons le fameux design pattern du GoF (Gang of Four d'après la bande des 4 experts qui ont écrit en 1995 le livre contenant une vingtaine de solutions de conception objet génériques et qui ont révolutionné le monde du développement et de l'architecture logiciel).
Pour ceux qui ne ne connaissent pas leurs gammes, une description du problème, d'un exemple classique de gestion et bien entendu de la solution se trouvent dans mon article publié sur ce blog : https://www.urbanisation-si.com/urbanisation-du-systeme-d-information-creez-l-evenement
En OCL pour spécifier qu'un message signalant un évènement a été envoyé, on utilise l'opérateur ^
Exemple :
post: observer^update(12, 14)
Le résultat de observer^update(12, 14) est vrai si le message update avec les arguments 12 et 14 a été envoyé à "observer" pendant l'exécution de l'opération.
Update() est soit une opération de la classe Oserver ou bien un signal spécifié dans le modèle UML.
Si les valeurs des paramètres sont inconnues au moment de l'appel, on remplace par des ?
post: observer^update(? : Integer, ? : Integer)
OCL défini un type message spécial OclMessage qui peut être reçu par l'opérateur ^^
post: observer^^update(12, 14)
Le résultat est une Sequence de OclMessage.
post: let messages : Sequence(OclMessage) = observer^^update(? : Integer, ? : Integer) in
messages->notEmpty() and
messages->exists( m | m.i > 0 and m.j >= m.i )
Un OclMessage peut être envoyé à plusieurs cibles. Messages est une Sequence d'OclMessage dont chaque occurrence est envoyée à un observer cible :
post: let messages : Sequence(OclMessage) =
observers->collect(o | o^^update(? : Integer, ? : Integer) ) in
messages->forAll(m | m.i <= m.j )
Autre exemple, soit une opération Company::getMoney(amount :Integer) : Boolean
post: let message : OclMessage = company^getMoney(amount) in
message.hasReturned() -- getMoney a été envoyée et retournée
and
message.result() = true -- l'appel à getMoney a retourné true
Voilà à travers ces quelques articles, nous avons appris les rudiments d'OCL.
Ce kit de survie nous servira pour nos futurs articles sur l'ingénierie dirigée par les modèles et les transformations de modèles.
"Soyons reconnaissants envers les personnes qui nous donnent du bonheur ; elles sont les charmants jardiniers par qui nos âmes sont fleuries."
Marcel Proust
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
A découvrir aussi
- Modélisation de système : Soyez maniaque, croisez et recroisez vos modèles UML pour être certain qu'ils soient valides (1)
- Modélisation de système : Soyez maniaque, croisez et recroisez vos modèles UML pour être certain qu'ils soient valides (3)
- Modélisation de système : Soyez maniaque, croisez et recroisez vos modèles UML pour être certain qu'ils soient valides (9)
Inscrivez-vous au site
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 754 autres membres