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 :

[Débutant][Conception] Mettre à jour un objet de type classe


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut [Débutant][Conception] Mettre à jour un objet de type classe
    Bonjour en fait voilà comment se présente mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Famille {
    private final String nomFamille;
    private final int age;
    private final int enfants;
    public Famille(String nomFamille, int age, int enfants){
        this.nomFamille = nomFamille;
        this.age = age;
        this.enfants = enfants;
    }
    // fin omise
    Ensuite je voudrais programmer une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Famille setChildrenNumber(int enfants)
    pour mettre à jour le nombre d'enfants en cas de naissance ou de décès en renvoyant un objet de type Famille. Le problème c'est que je ne vois pas comment l'implémenter. Faut il refaire un autre constructeur dans la méthode (bien que je ne pense pas cela possible) ou existe-t-il une méthode?
    Merci.

  2. #2
    Membre expérimenté Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par défaut
    Il faut rajouter une méthode du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void setEnfant(int nbEnfant){
    enfants = nbEnfant;
    }
    Et dans ton programme, après avoir construit ton objet famille, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Famille maFamille = new Famille("BOB", 12, 12);
    maFamille.setEnfant(56);
    et hop, le nombre d'enfants est changé...

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut Re: [Débutant]Mettre à jour un objet de type classe
    Salut,

    Je ne suis pas sur de bien avoir compris ta question mais il me semble que tu peux faire ç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
     
    class Famille {
    private final String nomFamille;
    private final int age;
    private final int enfants;
    public Famille(String nomFamille, int age, int enfants){
        this.nomFamille = nomFamille;
        this.age = age;
        this.enfants = enfants;
    }
     
    public Famille setChildrenNumber(int enfants){
      this.enfants = enfants;
      return this; // vu que la méthode est appliquée sur l'objet... je ne suis pas sur qu'il est un interet...
    }

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut Re: [Débutant]Mettre à jour un objet de type classe
    Hello,

    Citation Envoyé par Sylvester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Famille setChildrenNumber(int age)
    hum hum

    une setChildrenNumber qui prend un paramètre "age" ? faudrait plutôt l'appeler "childrenNumber" non ?

    plus concrètement, une famille, ça doit plutôt encapsuler une liste de personnes.

    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
     
    class Famille {
      private final String nomFamille;
      private List<Personne> personnes = new ArrayList<Personne>();
     
      public Famille(String nomFamille){
        this.nomFamille = nomFamille;
      } 
     
      public void addPersonne(Personne p) {
        if(p!=null)
          personnes.add(p);
      }
     
      public void removePersonne(Personne p) {
        if(p!=null)
          personnes.remove(p);
      }
    }
     
    class Personne {
      private String prenom;
      Personne(String prenom) {
        super();
        this.prenom = prenom;
      }
    }

  5. #5
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    Merci pour vos réponses je vais m'en inspirer pour compléter mon code.
    Oui je sais pour la variable age mais j'ai changé juste après que tu regardes mon post

  6. #6
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    Bonjour,
    Si j'ai bien compris tu désire créer un methode afin d'actualiser le nombre d'enfant c'est ca?
    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
     
    class Famille {
    private final String nomFamille;
    private final int age;
    private final int enfants;
    public Famille(String nomFamille, int age, int enfants){
        this.nomFamille = nomFamille;
        this.age = age;
        this.enfants = enfants;
    }
    //la ta methode 
    public void setChildrenNumber(int enf){
     
    enfants = enf;
     
    }
     
    }

  7. #7
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    Merci pour votre aide mais je vais tenter d'être un peu plus clair. Mais en fait concentrez vous sur le côté technique plutot que sur le côté esthétique et cohérent. En gros :
    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
    class Famille { 
    // MES VARIABLES DE CLASSE :
    private final String nomFamille; 
    private final int age; 
    private final int enfants; 
    // MON CONSTRUCTEUR :
    public Famille(String nomFamille, int age, int enfants){ 
        this.nomFamille = nomFamille; 
        this.age = age; 
        this.enfants = enfants; 
    } 
    // Ma méthode à implémenter qui doit renvoyer un objet de type Famille:
    Famille setChildrenNumber(int enfants){ 
    /*?????*/ 
    } 
    }
    En fait ma méthode doit pouvoir mettre à jour l'objet de type famille et plus précisément le nombre d'enfants (ou l'âge ou encore d'autre paramètres que je n'ai pas mis pour simplifier).
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Famille setChildrenNumber(int enfants){ 
    this.enfants = enfants; 
    }
    Alors il me met : "cannot assigne a value to final variable type" donc je pourrais enlever le final lors de la déclaration de mes variables de classes? Ce qui me perturbe aussi c'est que selon les indications ma méthode doit renvoyer un objet Address et donc je ne peux me contenter d'assigner une nouvelle valeur...Mais je ne peux refaire un constructeur dans la méthode. Donc y aurait il moyen de faire un lien entre le constructeur et la nouvelle variable pour la mettre à jour?
    MercI.

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Si tes champs sont déclarés en final, cela signifie qu'il ne doivent pas être modifié (d'ou l'erreur).

    Le nombre d'enfant d'une famille ne devrait pas être final puisqu'il peut évoluer...

    Enfin pourquoi as-tu besoin de renvoyer un objet de type Famille ? Ce n'est généralement pas le cas dans une méthode mutateurs, sauf cas particulier...

    a++

  9. #9
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Si tes champs sont déclarés en final, cela signifie qu'il ne doivent pas être modifié (d'ou l'erreur).

    Le nombre d'enfant d'une famille ne devrait pas être final puisqu'il peut évoluer...

    Enfin pourquoi as-tu besoin de renvoyer un objet de type Famille ? Ce n'est généralement pas le cas dans une méthode mutateurs, sauf cas particulier...

    a++
    Bonjour, en fait on m'impose un certain nombre de méthodes obligatoires à implémenter dans le code final. Et parmi celles ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected Famille setChildrenNumber(int enfants) {}
    qui doit selon les instructions mettre à jour le nombre d'enfants et renvoyer un objet de type famille. D'où effectivement mon problème qui me bloque un peu....

  10. #10
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Hello,

    peut-être que ton prof veut simplement que tu renvoie "this", afin de pouvoir chaîner les appels ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Famille {
      Famille setChildrenNumber(int enfants){
        this.enfants = enfants;
        return this;
      } 
    }
     
    ...
     
    new Famille().setChildren(10).blabla()...;

  11. #11
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Sylvester
    Bonjour, en fait on m'impose un certain nombre de méthodes obligatoires à implémenter dans le code final. Et parmi celles ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected Famille setChildrenNumber(int enfants) {}
    qui doit selon les instructions mettre à jour le nombre d'enfants et renvoyer un objet de type famille. D'où effectivement mon problème qui me bloque un peu....
    Alors il faut être précis sur le fonctionnement de la méthode :
    • Que renvoit-elle ? Une nouvelle instance de Famille ou la Famille courante ?
    • Si le champs enfants doit être mis à jours il ne peut pas être final.


    a++

  12. #12
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    @adiGuba&Pill_S

    En fait, voilà ce que j'ai comment instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        /**
         * Met à jour le nombre d'enfants
         * 
         * @param enfants, le nombre d'enfants
         * 
         * @pre -
         * @pre -     
         * @post Le nombre d'enfants est mis à jour avec la valeur du 
         *       paramètre enfants
         * @return Famille
         */
    protected Famille setChildrenNumber(int enfants) {}
    Voilà en gros ce que l'on me demande...
    Par contre Pill toi tu rajoutes encore du code en mettant un constructeur ce qui n'est pas permis visiblement .

    En fait je pensais à ceci mais ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected Famille setChildrenNumber(int enfants) {
    this.enfants = enfants;
    return new Famille().setChildren(enfants);
    }
    Franchement je sèche un peu là ... Pourtant je suis sûr que c'est simple comme bonjour...

    @Pill: quelle est l'utilité de ton super(); dans le constructeur de ton premier post?

    Merci.

  13. #13
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Qu'est-ce que ca veut dire ? Que cela retourne la famille courante ou une nouvelle famille ????

  14. #14
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    Citation Envoyé par adiGuba
    Qu'est-ce que ca veut dire ? Que cela retourne la famille courante ou une nouvelle famille ????
    Ca doit retourner la famille courant vu que c'est une mise à jour...Enfin en toute logique oui mais je spécule vu que les seules infos que j'ai sont les mêmes que les vôtres... Mais le bon sens voudrait cela non?

  15. #15
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Sylvester
    Ca doit retourner la famille courant vu que c'est une mise à jour...
    Dans ce cas pourquoi créer une nouvelle famille ? Il suffit de renvoyer la famille courante et le code de Phill_S est correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Famille setChildrenNumber(int enfants){
        this.enfants = enfants;
        return this;
    }
    Mais bien sûr le champs enfants ne peut pas être final...

    a++

  16. #16
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par Sylvester
    Par contre Pill toi tu rajoutes encore du code en mettant un constructeur ce qui n'est pas permis visiblement .
    bah écoute c'était juste pour illustrer le principe du chaînage des appels de méthodes, je me suis pas casser la tête à passer des paramètres fictifs puisque de toute façon le problème ne se situait pas là....

    Citation Envoyé par Sylvester
    @Pill: quelle est l'utilité de ton super(); dans le constructeur de ton premier post?
    pour le super, que tu le mettes manuellement ou pas il sera quand même là... ça fait partie des règles de l'héritage, chaque constructeur doit appeler soit un constructeur de la même classe soit un de la super classe comme première instruction, afin d'éviter de se retrouver avec des instances partiellement initialisées...

    avec les infos qui te sont données, je parierais à dix contre un que cette méthode doit renvoyer "this", pour les raisons citées plus haut

  17. #17
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    YEP Je vais garder ton code Pill Merci à toi en tout cas
    Et à tous les autres aussi...

  18. #18
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    Juste une dernière question pour la route (désolé de vous embêter):
    je comprend cette partie du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        protected Address setCity(String city) {
            this.city = city;
            ...
    Mais c'est ici que j'ai du mal à comprendre le fonctionnement du "this" dans ce cas, surtout que je dois renvoyer un objet de type Adrress :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       ...
            return this;      
     
        }
    Quelqu'un pourrait il m'éclairer svp?
    Mirchi!

  19. #19
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    dans quelle classe se trouve cette méthode ??

    si c'est dans la classe adresse, le this retournera l'élément actuel, c'est à dire l'objet de classe Adresse qui a été instancié et sur lequel on vient d'exécuter la méthode courante

    pareil dans n'importe quelle classe, le this renvoie toujours une référence sur l'instance courante, celle qui est en train d'être manipulée dans le bout de code courant....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    final Object o = new Object() {
      public String toString(){
        return this == o+""; 
      }
    };
    System.out.println(o); // toujours "true"

  20. #20
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Conception] Mettre a jour tout les champs d'un table lors d'un update
    Par metatron dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/09/2006, 15h29
  2. [Conception] mettre à jour un Select Option via BDD
    Par Skeud007 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/06/2006, 22h22
  3. Réponses: 5
    Dernier message: 21/12/2004, 15h17
  4. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51

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