Il y a quelques années, j'ai mené une enquête sur les packages DbC pour Java et je n'étais totalement satisfait d'aucun d'entre eux. Malheureusement, je n'ai pas gardé de bonnes notes sur mes découvertes et je suppose que les choses ont changé. Quelqu'un voudrait-il comparer et contraster différents packages DbC pour Java?
Réponses
Trop de publicités?Il y a une belle vue d'ensemble sur Wikipédia à propos de la Conception par Contrat, à la fin il y a une section concernant les langues avec le soutien de tiers bibliothèques, qui comprend une jolie série de bibliothèques Java. La plupart de ces bibliothèques Java sont basées sur Java Affirmations.
Dans le cas où vous avez seulement besoin de Condition préalable à la Vérification il y a aussi un léger Méthode de validation des Arguments de solution, à SourceForge sous Java Argument de Validation (Plaine d'implémentation de Java).
Selon votre problème, peut-être l' Ovale du cadre, pour le terrain/propriété des Contraintes de validation est un bon choix. Ce cadre vous permet de placer des Contraintes de toutes sortes de formes (Annotations, POJO, XML). Créer des contraintes du client par le biais de POJO ou les langages de script (JavaScript, Groovy, BeanShell, OGNL, MVEL). Et elle aussi partie met en œuvre la Programmation par Contrat.
Google a une bibliothèque open source appelé les contrats de java.
Les contrats de Java, c'est notre nouvel outil open source. Conditions préalables, les postconditions et invariants sont ajoutés en tant que Java expressions booléennes à l'intérieur des annotations. Par défaut, ils ne font rien, mais activé par l'intermédiaire d'une JVM argument, ils sont vérifiés au moment de l'exécution.
• @Requires, @Ensures, @ThrowEnsures and @Invariant specify contracts as Java boolean expressions • Contracts are inherited from both interfaces and classes and can be selectively enabled at runtime
J'ai testé contract4J une fois et je l'ai trouvé utilisable mais pas parfait. Vous créez des contrats pour et après des appels de méthodes et des invars sur l'ensemble de la classe.
Le contrat est créé en tant qu'assertion pour la méthode. Le problème est que le contrat lui-même est écrit dans une chaîne, vous n'avez donc pas de support IDE pour les contrats ni de temps de compilation si le contrat fonctionne toujours.
Un lien vers la bibliothèque
Il a été un long temps depuis que j'ai regardé ces, mais a trouvé des vieux liens. L'un était pour le JASS.
L'autre que j'avais utilisé (et aimé) a été iContract par des Systèmes Fiables. Il avait une tâche ant qui vous irait comme un préprocesseur. Cependant, je n'arrive pas à le trouver avec quelques recherches google, on dirait qu'il a disparu. Le site d'origine est maintenant une ferme de liens. Consultez ce lien pour quelques façons possibles pour l'obtenir.
Il est Groovy extensions qui permet la Conception par Contrat(tm) en Groovy/code Java - GContracts. Il utilise ce qu'on appelle la fermeture des annotations pour spécifier la classe d'invariants, de pré - et postconditions. Des exemples peuvent être trouvés sur le projet github wiki.
Avantage majeur: il n'est qu'un seul bocal sans dépendances externes et il peut être résolu via Maven dépôts compatibles depuis sa été placé dans le central de Maven repo.