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

Langage Java Discussion :

Composition et agregation


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut Composition et agregation
    Bonjour, débutant en java j'ai un souci avec mes classes lorsque j'implante par agrégation ma classe enfant sur ma classe Salarié.

    Classe SALARIE
    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 Salarie {
    	private static int compteur = 0;
    	protected int matricule;
    	protected int categorie;
    	protected int service;
    	protected String nom;
    	protected double salaire;
    	private Vector listeEnfants = new Vector ();
                 private Adresse adrSal = new Adresse();
     
    public Salarie(int inMatricule, int inCategorie, int inService,
    	String inNom, double inSalaire) throws SalaireException,
    	CategorieException {
    	compteur++;
    	if (inSalaire < 0)
    	throw new SalaireException(inSalaire);
    	if ((inCategorie != 1)&&(inCategorie!=2)&& (inCategorie != 3)) 
    	throw new CategorieException(inCategorie);
    	else {
    	this.matricule = inMatricule;
    	this.categorie = inCategorie;
    	this.service = inService;
    	this.nom = inNom;
    	this.salaire = inSalaire;
    	adrSal.setNomRue("Don");
    	adrSal.setCodePostal(59240);
    	Vector listeEnfants = new Vector ();
    	listeEnfants.add(new Enfant("www","zzzz","124528",this));
    	}
    public String toString() {
    return matricule + ", " + categorie + ", " + service + ", " + nom+", "+adrSal.toString()+ ", " + salaire +", "+ listeEnfants.toString() ;
    	}
    }
    Classe ENFANT

    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
     
    public class Enfant {
    	private static int compteur = 0;
    	private String nom;
    	private String prenom;
    	private String dateNaiss;
    	private Salarie refSalarie;
     
    	public Enfant(String inNom, String inPrenom, String inDateNaiss,
    	Salarie inRefSalarie) {
    	compteur++;
    	this.nom = inNom;
    	this.prenom = inPrenom;
    	this.dateNaiss = inDateNaiss;
    	this.refSalarie = inRefSalarie;
    	}
    	public String toString()
    	{
    	return nom+", "+prenom+", "+dateNaiss;
    	}
    }
    mon class test avec main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import java.util.*;
    public class TestSalarie {
    	public static void main(String[] argv) throws SalaireException, CategorieException {
     
    Salarie sal1= new Salarie(2, 2, 7, "forum", 35000.00);
    System.out.println("TO STRING SALARIE : "+sal1);
    }
    }
    Quand je teste, voici le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TO STRING SALARIE : 2, 2, 7, forum- Don- 59240, 35000.0, []
    le constat est que il m'afiiche [] au lieu de me donner l'information sur la classe enfant lié à notre salarié.
    et si vous avez remarquer, mon vector que j'ai déclaré plus, il a été déclaré 2 fois. en private et ensuite dans mon constructeur d'initialisation de ma classe Salarie. quand je rétire mon vector dans mon constructeur d'inistialisation, j'ai des erreurs et des tonnes d'exceptions. je vous donne en résulat.
    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
     
    Exception in thread "main" java.lang.StackOverflowError
    	at sun.misc.FloatingDecimal.dtoa(Unknown Source)
    	at sun.misc.FloatingDecimal.<init>(Unknown Source)
    	at java.lang.AbstractStringBuilder.append(Unknown Source)
    	at java.lang.StringBuilder.append(Unknown Source)
    	at Object.Salarie.toString(Salarie.java:132)
    	at java.lang.String.valueOf(Unknown Source)
    	at java.lang.StringBuilder.append(Unknown Source)
    	at Object.Enfant.toString(Enfant.java:34)
    	at java.lang.String.valueOf(Unknown Source)
    	at java.lang.StringBuilder.append(Unknown Source)
    	at java.util.AbstractCollection.toString(Unknown Source)
    	at java.util.Vector.toString(Unknown Source)
    	at Object.Salarie.toString(Salarie.java:132)
    	at java.lang.String.valueOf(Unknown Source)
    	at java.lang.StringBuilder.append(Unknown Source)
    	at Object.Enfant.toString(Enfant.java:34)
    	at java.lang.String.valueOf(Unknown Source)

  2. #2
    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 cashmoney Voir le message
    et si vous avez remarquer, mon vector que j'ai déclaré plus, il a été déclaré 2 fois. en private et ensuite dans mon constructeur d'initialisation de ma classe Salarie.
    Ton problème vient de là : tu modifies une variable locale qui sera détruite à la fin du constructeur, et qui n'a rien à voir avec ton attribut d'instance...

    Citation Envoyé par cashmoney Voir le message
    quand je rétire mon vector dans mon constructeur d'inistialisation, j'ai des erreurs et des tonnes d'exceptions. je vous donne en résulat.
    Avec le code que tu nous as donné ? Je ne reproduit pas l'erreur !

    Tu es sûr que tu n'affichais pas le "Salarie" dans le toString() de "Enfant" ? Car on se retrouverait alors avec une récursivité infini... ce qui rendrait cohérent le StackOverflowError !


    a++

  3. #3
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    en fait mon tostring de ma classe Enfant, j'ai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Enfant {
     
    private Salarie refSalarie;
    .
    .
    .
     
    public String toString()
    	{
    		return " et son enfant "+nom+", "+prenom+", "+dateNaiss+", "+refSalarie;
    	}
    et ma variable refSalarie est de type ma classe Salarie. mon but c'est que ma variable refSalarie soit le matricule de Salarie.

    ensuite dans classe Salarie avec mon vector j'ai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    .
    .
    .
    listeEnfants.add(new Enfant("www","zzzz","124528",this));
    et le avec "this", je n'arrive pas à référencer le matricule. alors j'ai laissé ça ainsi pour observer le comportement.
    voilà

  4. #4
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Comment évité la récursivité infinie alors que ma "refSalarie" de ma classe "Enfant "est de type ma classe "Salarie"??

    je réfléchi mais je n'arrive pas à me décoincer cette récursivité, sachant que j'avais pour but avec ma "refSalarie" pointé sur le matricule de ma classe "Salarie". Merci pour vos suggetsions

  5. #5
    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
    Ben tu affiches les infos en boucle :

    1. Dans toString de Salarie tu affiches les Enfants
    2. Dans toString de Enfant tu affiches le Salarie, ce qui te ramène en 1


    Limite les informations affichées par toString().

    a++

  6. #6
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Merci adiGuba, ça fonctionne quand j'enlève "refSalarie" du toString de ma classe "Enfant", mais en faisait celà, je pourrais pas savoir à quel salarié mon enfant appartient, vu qu'il n'y a plus de "refSalarie". L'enfant peut appartenir à n'importe quel salarié.

    Merci

Discussions similaires

  1. Agregation ou composition de classe ?
    Par saidhamga dans le forum C++
    Réponses: 6
    Dernier message: 07/02/2015, 15h41
  2. différence agregation composition
    Par marlene2110 dans le forum Débuter
    Réponses: 7
    Dernier message: 04/01/2011, 22h03
  3. Agregation dans un sens et composition dans l'autre ?
    Par blitz_ dans le forum Diagrammes de Classes
    Réponses: 6
    Dernier message: 03/05/2010, 19h36
  4. Agregation ou Composition ?
    Par flatron dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 13/03/2007, 23h10
  5. Réponses: 1
    Dernier message: 02/05/2006, 02h04

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