1 / 6

Programmation par contrats

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){ … }

arlo
Download Presentation

Programmation par contrats

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Exemple : une Table @Pre("t > 0") @Post("this.size() == t") public Table(int t){ … } @Pre , @Post : Annotations en Java

  3. 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(){…}

  4. 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 …

  5. 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/

  6. 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

More Related