Author: jcouteau Date: 2010-05-26 17:20:09 +0200 (Wed, 26 May 2010) New Revision: 1935 Url: http://nuiton.org/repositories/revision/jaxx/1935 Log: Add doc about contract programming Added: trunk/src/site/rst/contractProgramming.rst Modified: trunk/src/site/site_fr.xml Added: trunk/src/site/rst/contractProgramming.rst =================================================================== --- trunk/src/site/rst/contractProgramming.rst (rev 0) +++ trunk/src/site/rst/contractProgramming.rst 2010-05-26 15:20:09 UTC (rev 1935) @@ -0,0 +1,72 @@ +========================= +Programmation par contrat +========================= + +Comme tout bon développeur Java, vous utilisez régulièrement la programmation +par contrat et la puissance de Java dans votre code en ajoutant des génériques, +des interfaces,... dès que possible et vous souhaitez retrouver les mêmes +mécanismes dans JAXX. + +Ajout de contrats sur le code généré +------------------------------------ + +Le compilateur JAXX génère des classes à partir de fichiers JAXX mais n'est pas +capable d'ajouter des contrats sur les objets générés, donc interdit en quelque +sorte la programmation par contrat. + +Pour palier à cette limitation, vous pouvez utiliser l'attribut spécial +*implements*. + +Cet attribut ne doit être placé que sur le tag racine d'un fichier JAXX et son +contenu est le nom qualifié d'un ou plusieurs contrats séparés par des virgules. +:: + + <JPanel implements='java.lang.Comparable'> + + <script>public int compareTo(JPanel o) { return getName().compareTo(o.getName()); }</script> + + </JPanel> + +La classe générée aura bien le contrat *java.lang.Comparable*. + +Attention a bien implémenter toutes les méthodes du contrat dans les scripts ou +votre fichier ne compilera pas. + +Générer des classes abstraites +------------------------------ + +En utilisant l'attribut abstract et en le positionnant à true, la classe générée +est abstraite. :: + + <JPanel abstract='true'/> + +Manipuler les types génériques +------------------------------ + +Il est possible d'utiliser les types génériques dans JAXX en utilisant les +attributs *genericType* et *superGenericType*. + +L'attribut genericType précise le type générique d'une classe. Exemple (fichier +Parent.jaxx) : :: + + <JPanel genericType='E' + implements='java.lang.Comparable<E>' + abstract='true' /> + +La classe générée sera de la forme : :: + + public abstract Parent<E> implements java.lang.Comparable<E> { + ... + } + +Pour surcharger une telle classe, on utilise l'attibut *superGenericType* en lui +donnant le type à utiliser. Par exemple (fichier Son.jaxx) : :: + + <Parent superGenericType='String' + abstract='true'/> + +La classe générée sera de la forme : :: + + public Son extends Parent<String> { + ... + } \ No newline at end of file Modified: trunk/src/site/site_fr.xml =================================================================== --- trunk/src/site/site_fr.xml 2010-05-26 14:58:33 UTC (rev 1934) +++ trunk/src/site/site_fr.xml 2010-05-26 15:20:09 UTC (rev 1935) @@ -63,9 +63,9 @@ <item name="Fonctionnalités avancées"> <item name="Internationalisation" href="I18n.html"/> <!--item name="Arbre de navigation" href=""/> - <item name="Validateurs" href=""/> - <item name="Programmation par contrat" href=""/> - <item name="Widgets" href=""/--> + <item name="Validateurs" href=""/--> + <item name="Programmation par contrat" href="contractProgramming.html"/> + <!--item name="Widgets" href=""/--> </item> <!--item name="Bonnes pratiques" href=""/--> <item name="Démo" href="demo.html"/>