60 likes | 184 Views
Programmation par contrats. Appel de la méthode Si le contrat est respecté : Pré-assertions. L’appelant. Une méthode appelée. En retour le contrat est garanti : Post-assertions. Exemple : une Table. @Pre("t > 0") @Post("this.size() == t") public Table(int t){ … }
E N D
Programmation par contrats Appel de la méthodeSi le contrat est respecté : Pré-assertions L’appelant Une méthode appelée En retour le contrat est garanti : Post-assertions
Exemple : une Table @Pre("t > 0") @Post("this.size() == t") public Table(int t){ … } @Pre , @Post : Annotations en Java
Objectifs du projet • Convertir ces annotations en une vérification des contrats public Table(int t){ assert ("t > 0"); // @Pre("t > 0") this.table = new int[t]; assert("this.size() == t") // @Post("this.size() == t") } public int size(){…}
Comment ? • Annotations @Pre, @Post … • Évaluées statiquement • Avec un outil standard apt (annotation processing tool) • un source instrumenté est généré • Ou à l’exécution • En utilisant l’introspection • un mandataire intercepte les appels de méthodes et vérifient les contrats • Les deux solutions devront être maquettées, • la seconde a notre préférence pour la version finale du projet …
Bibliographie • Jass : http://csd.informatik.uni-oldenburg.de/~jass/index.html • iContract : http://www.javaworld.com/javaworld/jw-02-2001/jw-0216-cooltools.html • DBCProxy : http://www.javaworld.com/javaworld/jw-02-2002/jw-0215-dbcproxy.html • Obligate : https://obligate.dev.java.net/ • Une présentation en Master/Jussieu • http://www-master.ufr-info-p6.jussieu.fr/2006/Ajouts/Master_esj_2006_2007/IMG/pdf/Rogovchenko.pdf • Annotations et génération de code • http://java.sun.com/j2se/1.5.0/docs/guide/apt/index.html • http://www.btcweb.com/btc/fr/download/java/annotation/1-annotations.html • http://adiguba.developpez.com/tutoriels/java/tiger/annotations/ • http://www-igm.univ-mlv.fr/~dr/XPOSE2005/leblevec/apt.php • http://www.theserverside.com/tt/articles/content/AgileJava_Chapter/AgileJava_Chapter.pdf • http://www.csg.is.titech.ac.jp/~chiba/javassist/ • http://www-128.ibm.com/developerworks/java/library/j-cwt06075/ • http://asm.objectweb.org/
Travail à réaliser • Programmation par contrats ? • Pour une classe • Contrats entre une classe et ses sous-classes • Utiliser quelques outils existants : modern-jass, DBCProxy, … • En déduire les annotations et leur syntaxe • Deux prototypes • Génération de source Java (apt) • Génération à la volée (introspection) • Critiques puis choix • Une extension/Plug-in pour BlueJ • En vue d’un TP en IN413 • Documentation et exemples en ligne