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

avec Java Discussion :

Classe correcte ?


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 110
    Points : 57
    Points
    57
    Par défaut Classe correcte ?
    bonjours, je souhaiterai savoir si ma classe est correct et plus particulièrement la méthode equals merci

    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
    35
     
    package pModel;
     
    public class Mot 
    {
    	private String francais;
    	private String anglais;
     
    	public Mot(String francais,String anglais)
    	{
    		this.francais = francais;
    		this.anglais = anglais;
    	}
     
    	public String getFrancais()
    	{
    		return francais;
    	}
    	public String getAnglais()
    	{
    		return anglais;
    	}
     
    	public boolean equals(Mot m)
    	{
    		if(francais.equals(m.francais) || anglais.equals(m.anglais))
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    }

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par kazuzu Voir le message
    bonjours, je souhaiterai savoir si ma classe est correct et plus particulièrement la méthode equals merci

    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
    35
     
    package pModel;
     
    public class Mot 
    {
    	private String francais;
    	private String anglais;
     
    	public Mot(String francais,String anglais)
    	{
    		this.francais = francais;
    		this.anglais = anglais;
    	}
     
    	public String getFrancais()
    	{
    		return francais;
    	}
    	public String getAnglais()
    	{
    		return anglais;
    	}
     
    	public boolean equals(Mot m)
    	{
    		if(francais.equals(m.francais) || anglais.equals(m.anglais))
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public boolean equals(Mot m)
    	{
     
              return ( francais.equals(m.getFrancais() ) || anglais.equals(m.getAnglais() )   );
     
    	}

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ça, et puis je suppose que la condition ne devrait pas être un OU, mais un ET.
    Autrement dit, que le mot français soit le même dans les deux objets ET que le mot anglais soit le même dans les deux objets.

    (Mais je peux me tromper. Si ça se trouve c'est voulu que ce soit un OU.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Il y a potentiellement deux problèmes liés à ta méthode equals.

    Le premier, c'est que ta méthode n'est pas consistante. Si tu as 3 objets A, B et C, que A.francais = C.francais, que B.anglais = C.anglais, tu peux avoir A =C, B = C mais A <> B. C'est peu judicieux

    Le second, c'est qu'en général quand tu définis la méthode equals, il faut aussi redéfinir la méthode hashcode. Je te laisse chercher plus de doc à ce sujet

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ce qui m'amène à ma propre remarque annexe :

    Là, nous avons une méthode equals(Mot). Ce n'est pas la même chose que la méthode equals(Object).

    Les différentes classes Java qui se servent de la comparaison, appellent equals(Object) et rien d'autre. Si ton but est qu'elles appellent ta propre méthode, il faut redéfinir equals(Object).
    Et si tu fais ça, il y a effectivement des règles à respecter : symétrie et transitivité de l'égalité, et redéfinir hashCode().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Bonjour,

    Comme cela vient d'être expliqué, la méthode equals nécessite une attention particulière selon la façon dont tu vas l'utiliser.

    Cf. http://java.developpez.com/faq/java/...#DIVERS_equals . C'est sans doute un peu ardu quand on débute mais au moins tu as les éléments auxquels il faut faire attention.

    Donc ton implémentation n'est pas véritablement fausse, tout dépend de la façon dont tu l'utilises mais par exemple, dans une application JEE, elle ne sera pas exploitable en l'état.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 110
    Points : 57
    Points
    57
    Par défaut
    Voila, je me suis concentré sur la méthode hashcode().
    Pouvez-vous me dire si ce que j'en ai compris est valable ?

    En gros cela permet d augmenter la vitesse de recherche dans un tableau en retournant un index qui renvoi plus ou moin a la bonne place.

    Dans mon cas l'implémentation de la méthode hashcode() serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public int hashcode()
    {
            return (francais.hashcode() + anglais.hashcode());
    }
    Maintenant je ne vois pas comment appeler cette méthode dans equals(). Peut-être comme ceci ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public boolean equals(Mot m)
    {
        if(this.hashcode()>0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

  8. #8
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Heu, à mon avis tu vas avoir du mal à t'en sortir en faisant comme ça...

    La méthode hashcode n'a pas a être invoquée à partir de la méthode equals.
    Relis plutôt ce que je t'ai indiqué par le lien.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  9. #9
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Laurent.B Voir le message
    Heu, à mon avis tu vas avoir du mal à t'en sortir en faisant comme ça...

    La méthode hashcode n'a pas a être invoquée à partir de la méthode equals.
    Relis plutôt ce que je t'ai indiqué par le lien.
    +1

    Deux objets égaux ont le même hashCode(), mais deux objets avec le même hashCode() ne sont pas forcément égaux.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 110
    Points : 57
    Points
    57
    Par défaut
    je ne vois vraiment pas ou je peux invocqué la méthode hashcode() vu que je n utilise pas de map

    ils faudrait que j appel la méthode equals() dans hashcode() ?

  11. #11
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par kazuzu Voir le message
    je ne vois vraiment pas ou je peux invocqué la méthode hashcode() vu que je n utilise pas de map

    ils faudrait que j appel la méthode equals() dans hashcode() ?
    Ce n'est pas à toi d'utiliser hashCode(), c'est l'implémentation de Map qui va utiliser ta méthode hashCode pour répartir les objets de la map dans des emplacements pour améliorer les performances. En règle général, on n'appelle jamais directement la méthode hashCode().

Discussions similaires

  1. Classes correctes ?
    Par conan76 dans le forum VB.NET
    Réponses: 6
    Dernier message: 26/03/2013, 17h55
  2. ce diagramme de classe, correct? [aide pour PFE]
    Par hamzawii dans le forum UML
    Réponses: 4
    Dernier message: 30/05/2011, 12h00
  3. [DEBUTANT] Diagramme de classe correct ?
    Par nuhuruine dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 07/06/2010, 09h10
  4. Comment créer une classe correctement
    Par oasiscreation dans le forum Langage
    Réponses: 1
    Dernier message: 15/12/2009, 23h03
  5. correction d'une classe point.
    Par deubelte dans le forum C++
    Réponses: 12
    Dernier message: 20/05/2007, 18h16

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