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 :

Exercice sur l'héritage


Sujet :

avec Java

  1. #21
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    Voici mes essais pour la question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int i =0;i < ensembleVolailles.length;i++)
                if(ensembleVolailles[i] != null){
                    if(ensembleVolailles[i].getType().equals("Poulet"))
                        prixTotalPoulet += ensembleVolailles[i].prixJour;
                    if(ensembleVolailles[i].getType().equals("Canard"))
                        prixTotalCanard += ensembleVolailles[i].prixJour;
                }
    Quelles sont vos suggestions ?

  2. #22
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    Quelles sont vos suggestions ?
    Bah tu n'as plus qu'à additionner tes deux sous-totaux, et faire quelques petits tests (sur le même principe que pour la seconde question) histoire de vérifier que cela fonctionne...

    Mako.

  3. #23
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    Bonjour !

    Selon les règles du forum on ne doit pas poser une question non accompagnée d'un essai, par contre si on fait un essai on a le droit à une réponse (ou une idée).
    Donc, j’espère que les participants qui se donnent la peine-avec toute la reconnaissance qu'ils méritent-veuillent bien apporter des idées qui contribuent à élucider la solution évitant autant que possible les ambiguïtés et l’imprécision, On est dans le domaine scientifique et il va de soi donc que la précision aide à orienter le chercheur à déterminer ses failles.

    Pour le moment voici un nouveau essai :
    • Volaille.Java
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      public abstract class Volaille {
          int ID;
          double Poids;
          public Volaille(double P, int id){
              Poids = P;
              ID = id;
          }
          @Override
          public String toString(){
              return "Poids : "+Poids+", N° : "+ID;
          }
          public abstract String getType();
          public abstract double getPrixJour();
      }
    • Poulet.Java
      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
      public class Poulet extends Volaille{
          //On suppose que le poids d'abattage égal cinq kilo.
          final static double POIDS_ABAT = 5.00;
          static double prixJour;
          public Poulet(double p, int id, double pj){
              super(p,id);
              prixJour = pj;
          }
          public void SetPrixJour(double PrixPoulet){
               prixJour = PrixPoulet;
          }
          public double getPrixJour(){
              return prixJour;
          }
          @Override
          public String toString(){
              return super.toString() +", Prix du Jour : "+prixJour+", Poids d'abattage : "+POIDS_ABAT;
          }
          public String getType(){
              return "Poulet";
          }
      }
    • Canard.Java
      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
      public class Canard extends Volaille{
          //On suppose que le poids d'abattage égal quatre kilo.
          final static double POIDS_ABAT = 4.00;
          static double prixJour;
          public Canard(double p, int id, double pj){
              super(p,id);
              prixJour = pj;
          }
          public void SetPrixJour(double prixCanard){
               prixJour = prixCanard;
          }
          public double getPrixJour(){
              return prixJour;
          }
          @Override
          public String toString(){
              return super.toString() +"Prix du Jour : "+prixJour+", Poids d'abattage : "+POIDS_ABAT;
          }
          public String getType(){
              return "Canard";
          }
      }
    • EnsembleVolailles.Java
      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
      public class EnsembleVolailles{
          final static short NBR_MAX = 200;
          static int prixTotalPoulet,prixTotalCanard;
          static Volaille ensembleVolailles[] = new Volaille[NBR_MAX];
          public static double PrixTotal(){
              for(int i =0;i < ensembleVolailles.length;i++)
                  if(ensembleVolailles[i] != null){
                      if(ensembleVolailles[i].getType().equals("Poulet"))
                          prixTotalPoulet += ensembleVolailles[i].getPrixJour();
                      if(ensembleVolailles[i].getType().equals("Canard"))
                          prixTotalCanard += ensembleVolailles[i].getPrixJour();
                  }
              return prixTotalPoulet + prixTotalCanard;
          }
          public static void main(String args[]){
              Poulet Plt_1 = new Poulet(0.25,18,0.30);
              Canard Cnrd_1 = new Canard(0.30,21,0.33);
              Poulet Plt_2 = new Poulet(0.19,36,0.24);
              Canard Cnrd_2 = new Canard(0.18,42,0.2);
              Poulet Plt_3 = new Poulet(0.07,25,0.17);
              ensembleVolailles[0] = Plt_1;
              ensembleVolailles[1] = Cnrd_1;
              ensembleVolailles[2] = Plt_2;
              ensembleVolailles[3] = Cnrd_2;
              ensembleVolailles[4] = Plt_3;
              double prix = PrixTotal();
              System.out.println("Le prix total = "+prix);
          }
      }


    lorsque j'ai testé la classe EnsembleVolailles on m'a afficher :
    Le prix total = 0.0
    pour quoi le prix total apparait-il nul ??
    Merci.

  4. #24
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    1) prix du jour étant une variable statique: on ne la change pas dans un constructeur (erreur de design)
    2) prix du jour étant statique, les méthode qui retournent / changent cette valeur devraient être statique
    3) prix du jour est un double < 1 (cf ton main). Tu somme les prix sur des entiers. 0 +0.25 arrondi à un entier, ça fait 0. ajoute y 0.25 au tour suivant, c'est toujours 0. Donc on ne mélange pas les pommes et les poires, reste cohérent sur ton type de données.

  5. #25
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    Selon les règles du forum on ne doit pas poser une question non accompagnée d'un essai, par contre si on fait un essai on a le droit à une réponse (ou une idée).
    Donc, j’espère que les participants qui se donnent la peine-avec toute la reconnaissance qu'ils méritent-veuillent bien apporter des idées qui contribuent à élucider la solution évitant autant que possible les ambiguïtés et l’imprécision, On est dans le domaine scientifique et il va de soi donc que la précision aide à orienter le chercheur à déterminer ses failles.
    Ouais, enfin là, cela fait presque une semaine et une dizaine de messages que j'essaie d'aider. Et quant à parler de précisions alors que l'on arrive simplement en disant "ça marche pas" ou bien "des idées ?", je trouve cela légèrement malvenu.

    Surtout qu'en l'occurrence, si tu avais testé un tant soit peu (ajout de quelques System.out par-ci par-là), tu te serais vite rendu compte de ton erreur.

    Sinon, +1 pour les remarques/conseils de tchize_.

    Mako.

  6. #26
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    1) prix du jour étant une variable statique: on ne la change pas dans un constructeur (erreur de design)
    2) prix du jour étant statique, les méthode qui retournent / changent cette valeur devraient être statique
    3) prix du jour est un double < 1 (cf ton main). Tu somme les prix sur des entiers. 0 +0.25 arrondi à un entier, ça fait 0. ajoute y 0.25 au tour suivant, c'est toujours 0. Donc on ne mélange pas les pommes et les poires, reste cohérent sur ton type de données.
    Vos 3 remarques sont extrêmement pertinentes, la 1ére et la 3éme me sont très claires. Mais avec la 2éme j'ai eu les difficultés suivantes en l’appliquant :
    • D'abord, la méthode abstraite peut-elle être statique ??
    • j'ai essayé de rendre la méthode getPrixJour abstraite mais je me suis buté sur une erreur (cf l'image) :
      http://sub5.rofof.com/img3/01ajvgp30.png
    • supposons que la méthode getPrixJour soit abstraite, il apparaitra une erreur dans la classe EnsembleVolailles parce qu’on l'a utilisée avec un objet (ensembleVolailles[i]) même si on l'utilise avec la classe mère Volaille l'erreur continue.


    Mako.
    Vos conseils et vos remarques m'ont servi beaucoup, je vous en remercie infiniment. Mon impatience s'inscrit dans le cadre de l'utilisation optimale du temps, je m'en excuse.

  7. #27
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    une méthode statique n'a pas a être abstraite. Votre champ est statique, donc votre méthode doit être statique, donc elle ne doit pas être abstraite. Le reste du code doit en découler.

  8. #28
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    puisque je vais appliquer getPrixJour sur une des cases de tableau dont le type est Volaille, alors cette méthode doit se présenter dans la classe mère (c'est obligatoire qu'elle soit abstraite), sinon Netbeans m'affiche l'erreur suivante :
    http://sub5.rofof.com/img3/01uytsf31.png

    c'est quoi la solution alors ?

  9. #29
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    L'erreur c'est dans le design, pourquoi as-tu besoin de l'appeler "sur l'instance". Ceci marche tout aussi bien si la méthode est statique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i =0;i < ensembleVolailles.length;i++)
                if(ensembleVolailles[i] != null){
                    if(ensembleVolailles[i].getType().equals("Poulet"))
                        prixTotalPoulet += Poulet.getPrixJour();
                    if(ensembleVolailles[i].getType().equals("Canard"))
                        prixTotalCanard += Canard.getPrixJour();
                }
            return prixTotalPoulet + prixTotalCanard;

  10. #30
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    L'erreur c'est dans le design, pourquoi as-tu besoin de l'appeler "sur l'instance". Ceci marche tout aussi bien si la méthode est statique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i =0;i < ensembleVolailles.length;i++)
                if(ensembleVolailles[i] != null){
                    if(ensembleVolailles[i].getType().equals("Poulet"))
                        prixTotalPoulet += Poulet.getPrixJour();
                    if(ensembleVolailles[i].getType().equals("Canard"))
                        prixTotalCanard += Canard.getPrixJour();
                }
            return prixTotalPoulet + prixTotalCanard;
    C'est bien juste mais :
    1. c'est un cas particulier, en effet si on ajoute un autre animal qui hérite la classe mère Volaille (L’oie par exemple) le prix total ne la comportera pas !!, et c'est un problème : (
    2. Ensuite, si on suppose que pour chaque animal nouveau il faudrait un test nouveau ce ne serait pas pratique tant au niveau de la conception que de l'optimisation !!, on aurait :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      static double prixTotal = 0, prixTotalPoulet = 0, prixTotalCanard = 0, prixTotalOie = 0 ....
      for(int i =0;i < ensembleVolailles.length;i++)
                  if(ensembleVolailles[i] != null){
                      if(ensembleVolailles[i].getType().equals("Poulet"))
                          prixTotalPoulet += Poulet.getPrixJour();
                      if(ensembleVolailles[i].getType().equals("Canard"))
                          prixTotalCanard += Canard.getPrixJour();
                      if(ensembleVolailles[i].getType().equals("Oie"))
                          prixTotalOie += Oie.getPrixJour();
                      if......
                  }
              return prixTotalPoulet + prixTotalCanard + prixTotalOie + ........ ;

  11. #31
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    1) oui et le code ne compilera pas, ce qui est l'effet voulu quand une méthode doit exister mais n'existe pas
    2) le problème est plus à chercher dans ta conception là, ton code de départ n'a déjà pas de sens. Si ta variable est statique, les méthodes qui l'utilisent telle quelles doivent être statique. Si t'as besoin que l'information soit liée à l'instance, alors elle n'a pas à être statique!

  12. #32
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    Pour le moment j'ai deux choix les deux ont des avantages et des inconvénient :
    • Le premier : c'est que je déclare la méthode getPrixJour comme static (et non pas abstraite), son avantage c'est que la valeur de la variable statique va être retournée par une méthode static mais son inconvénient c'est le fait qu'elle ne peut nous affichée que le prix total de Poulet/Canard, pour les autres animaux il faut qu'on écrit pour chacun d'entre eux un nouveau test (si on a 10 animaux le test prendra 20 ligne !!!).
    • Le deuxième : je déclare la méthode en tant qu'une méthode abstraite (et non static), son avantage c'est que le test se fera sur un animal, la vérification sur le type de volaille se fait automatiquement .. mais son inconvénient c'est que la valeur de la variable statique prixJour va être retournée par une méthode static.


    lequel de choix est-il préférable ?
    Merci.

  13. #33
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    lequel de choix est-il préférable ?
    Merci.
    Je n'ai pas tout suivis et bien compris pourquoi tu utilises des statiques dans ton cas. Moi ce que je vois c'est que toute ta volaille (Poulet, Canard) dispose d'un attribut "prixJour" et d'un getter associé. Du coup moi je ne m'embêterais pas avec abstract, static, .. Je ferais ç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
    // Déclaration
    public abstract class Volaille {
      private double prixJour;
      public double getPrixJour() {
        return prixJour;
      }
    }
     
    // Utilisation
    public double PrixTotal(){
      double total = 0;
      for(int i =0;i < ensembleVolailles.length;i++)
        total += ensembleVolailles[i].getPrixJour();
      }
      return total;
    }
    Moi je dis ça parce que je vois que ta distinction Canard, etc... n'est pas utile durant ton calcul puisque tu te contentes du prix total.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  14. #34
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    Je n'ai pas tout suivis et bien compris pourquoi tu utilises des statiques dans ton cas
    il semble que vous n'avez pas compris, peut être parce que vous n'avez pas lu !!, suivez cette phrase :
    le prix est le même pour tous les individus de la même espèce.
    La variable prixJour existe une seule fois dans chaque classe alors elle doit obligatoirement être statique.

    Merci.

  15. #35
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    khaled, veuillez restez courtois s'il vous plait.

    Quand au message il précise bien, effectivement, le même pour tout espèce, mais ça n'implique pas nécessairement d'utiliser un champ statique, vu qu'il existe plusieurs espèces justement. Le comportement (prix du jour) est présent dans tous les animaux, mais chaque sous classe en a un différent, ce qui est incompatible avec un champ statique. Mais c'est aussi (tous les animaux de la même espece on le même) incompatible avec un paramètre direct à passer au constructeur (comme vous le faites actuellement)


    Dans votre cas, on peux représenter, par exemple, cette contraite comme ceci si on ignore la contrainte "change chaque jour":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public abstract class Volaille {
      private double prixJour;
      public Volaille(double prixJour){this.prixJour=prixJour;}
      public abstract double getPrixJour() {
        return prixJour;
      }
    }
    public class Poulet {
       public Poulet(double p, int id){
          super(15.20); // Le poulet est à 15,20€, mais du coup on sait pas configurer
       }
    }
    Sinon, en prenant "change chaque jour" mais en considérant des poulet/ canard indépendant du jour d'enregistrement (autrement dit leur prix n'est pas fixe à leur abattage mais évolue dans le temps)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class PrixDuJour{
        private static Map<String,Double> prix  = new HashMap<String,Double>();
        public static void setPrix(String type, Double prix){
           prix.put(type,prix);
        }
        public Double getPrix(String type){return prix.get(type);}
    }
    et après initialisation correct des prix du jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public double PrixTotal(){
      double total = 0;
      for(int i =0;i < ensembleVolailles.length;i++)
        total += PrixDuJour.getPrix(ensembleVolailles[i].getType());
      }
      return total;
    }

  16. #36
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    khaled, veuillez restez courtois s'il vous plait.
    je ne pense pas avoir manqué quelqu'un de respect si vous faites allusion à mon message à Roben pour qui j'ai beaucoup de respect je lui ai montré tout simplement le passage qu'il a avoué lui même ne pas suivre assez. Je ne suis pourtant pas exempt des maladresses qui peuvent survenir inconsciemment si cela arrive je m'en excuse.

    pour ce qui est de ce code j ne l'ai pas bien compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public abstract class Volaille {
      private double prixJour;
      public Volaille(double prixJour){this.prixJour=prixJour;}
      public abstract double getPrixJour() {
        return prixJour;
      }
    }
    public class Poulet {
       public Poulet(double p, int id){
          super(15.20); // Le poulet est à 15,20€, mais du coup on sait pas configurer
       }
    }
    Comment écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Volaille(double prixJour){this.prixJour=prixJour;}
    alors que vous avez dit :
    incompatible avec un paramètre direct à passer au constructeur

  17. #37
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Volaille est abstrait, ce sont les fils qui n'ont pas le prix du jour en paramètre. L'exemple du poulet montre bien que c'est la classe poulet qui fixe le prix du jour, et pas l'appelant de new Poulet()

  18. #38
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    Deux remarques sur ce code s'il vous plait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public abstract class Volaille {
      private double prixJour;
      public Volaille(double prixJour){this.prixJour=prixJour;}
      public abstract double getPrixJour() {
        return prixJour;
      }
    }
    public class Poulet {
       public Poulet(double p, int id){
          super(15.20); // Le poulet est à 15,20€, mais du coup on sait pas configurer
       }
    }
    • Comment vous avez pu utiliser l'opérateur super alors que le Poulet (selon votre code) n'a pas de classe mère ??
    • Comme la variable prixJour est la même pour tous les individus de la même espèce donc elle existe une seule fois alors, elle est évidemment incompatible avec un paramètre direct à passer au constructeur. Qu'on la place dans le constructeur de la sous-classe ou de la classe mère on en revient au même resultat !! on y recourt à chaque fois à la création d'un objet pour en changer le prix

  19. #39
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    1) oubli
    2) la valeur 15.20 est dans le code et donc bien unique. Poulet respecte donc bien la contrainte. Volaille, par contre, ne respecte pas la contrainte "la même valeur pour tous" Mais en même temps on a pas la même valeur pour toutes les Volailles, donc c'est logique.

  20. #40
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Par défaut
    • puisque le poids el l'id sont commun entre tous les volailles donc elles doivent faire partie de paramètres du constructeur de la classe mère.
    • la méthode getPrixJour est abstraite donc elle doit être non définie.
    • Selon votre code, si on crée un nouveau objet de la classe Poulet, le prix du jour sera 15.20 $ et si on change la valeur du prix du jour avec la méthode setPrixJour et on crée un autre objet de Poulet, la valeur de prix deviendra 15.20 $ donc c'est pas logique quand même !!
      puisque la variable prixJour est la même pour tous les Poulet, donc il faut la lier à la classe et non pas à l'instance ! ce qui veux dire que sa valeur ne doit absolument pas être changée dans le constructeur.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. exercice de base sur l'héritage
    Par rdtech dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 22/04/2014, 10h25
  2. [Turbo Pascal] [Débutante] Exercice sur l'héritage
    Par sandra-n dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 10/01/2009, 00h49
  3. [POO] Problème dans un exercice sur l'héritage
    Par FabaCoeur dans le forum C++
    Réponses: 2
    Dernier message: 05/05/2007, 18h09
  4. Besoin d'aide pour un exercice sur les registres
    Par zakuza dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 15h23
  5. Réponses: 4
    Dernier message: 28/07/2005, 17h22

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