IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Programmation par contrat


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 99
    Par défaut Programmation par contrat
    Bonjour tout le monde,

    j'ai un projet à faire en utilisant la programmation par contrat, est ce qu'il y aurait quelqu'un qui pourrai m'aider à trouver des exemples de code source en java sur ce type de programmation,

    merci beaucoup les amis et bonne journée

  2. #2
    Membre très actif Avatar de ZeRevo
    Inscrit en
    Avril 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 302
    Par défaut
    En reprenant l'exemple de wikipédia sur le calcul de la racine carrée d'un nombre, on arrive à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public class Test {
     
    	public static void main(String[] args) throws Exception {
    		Test test = new Test();
    		System.out.println(test.racine(2));
    	}
    	public double racine(double x) throws Exception {
    	    if (!precondition(x)) {
    	      error("precondition failed");
    	   }
     
    	   // traitement de la racine
    	   double resultat = Math.sqrt(x);
     
    	   if (!postcondition(resultat, x)) {
    	      error("postcondition failed");
    	   }
    	   return resultat;
    	}
     
    	private void error(String error) throws Exception  {
    		throw new Exception("error = " + error);
    	}
     
    	private boolean precondition(double x) {
    	    return (x >=0) ?  true : false;
    	}
     
     
    	private boolean postcondition(double resultat, double x) {
    	    return (resultat >=0 && (resultat * resultat == x)) ?  true : false;
    	}
    }

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    remarque sur le code ci-dessus: l'exception correspondant à une précondition non remplie (argument illegal) doit être un descendant de RuntimeException (par exemple IllegalArgumentException).
    Pourquoi? parque c'est une condition connue du code appelant et testable par lui.

    à mon humble avis la postcondition serait, elle, mieux avec une assertion: on n'aurait alors pas pollué la méthode par une Exception qui n'a rien à faire ici.

    edit: tant que j'y suis je suis prêt à parier un grain de sel contre un grain de poivre que la postcondition ne fonctionne pas pour certaines valeurs de l'argument.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    Il existe pour java tout un tas de lib pour faire de la programmation par contrats, notamment JML qui permet pour ce genre de postconditions d'introduire un epsilon, et qui ne pollue pas le code avec des exceptions

    A plus

  5. #5
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    salut .
    pour moi , j'ai appris la programmation par contrat avec le langage Eiffel

  6. #6
    Membre très actif Avatar de ZeRevo
    Inscrit en
    Avril 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 302
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    remarque sur le code ci-dessus: l'exception correspondant à une précondition non remplie (argument illegal) doit être un descendant de RuntimeException (par exemple IllegalArgumentException).
    Pourquoi? parque c'est une condition connue du code appelant et testable par lui.

    à mon humble avis la postcondition serait, elle, mieux avec une assertion: on n'aurait alors pas pollué la méthode par une Exception qui n'a rien à faire ici.

    .
    Tu pourrais nous donner un example d'assertion j'en ai jamais utilisé.
    De même pourquoi la RuntimeException est elle plus intéressante à utiliser que l'Exception ?

    edit: tant que j'y suis je suis prêt à parier un grain de sel contre un grain de poivre que la postcondition ne fonctionne pas pour certaines valeurs de l'argument
    Oui il doit y avoir des problèmes avec des valeurs arrondies

  7. #7
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par ZeRevo Voir le message
    Tu pourrais nous donner un example d'assertion j'en ai jamais utilisé.
    De même pourquoi la RuntimeException est elle plus intéressante à utiliser que l'Exception ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    assert presqueEgal(resultat*resultat, x) ; // en supposant qu'on écrive cette méthode
    Ici c'est une RuntimeException parceque la responsabilité de l'erreur incombe au code appelant.
    Une exception controlée (non Runtime) oblige le code appelant à capturer (ou propager) parceque le code appelant ne connait pas les conditions de l'erreur.

Discussions similaires

  1. Programmation par contrat en C++
    Par bolhrak dans le forum C++
    Réponses: 11
    Dernier message: 07/09/2007, 00h12
  2. [Language]Programmation par contrat
    Par manube dans le forum Langage
    Réponses: 3
    Dernier message: 20/12/2005, 10h16
  3. [Eiffel] Programmation par contrats
    Par SkIllz2k dans le forum Autres langages
    Réponses: 1
    Dernier message: 02/05/2005, 20h05
  4. [Tests]La programmation par contrats
    Par fabien.raynaud dans le forum Test
    Réponses: 6
    Dernier message: 26/07/2004, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo