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 :

Arbres dont les noeuds et les feuilles sont de types différents


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Arbres dont les noeuds et les feuilles sont de types différents
    Bonjour,

    J'ai un problème dans le choix d'implémentation d'un arbre. Si je veux juste définir un arbre d'un type unique, pas de soucis a priori j'utilise la définition suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class ArbreDeType{
    private Type valeur;
    private List<ArbreDeType> enfants;
    ...
    }
    Je n'ai pas mis les méthodes. La liste d'enfants sera éventuellement une référence égale à null dans le cas où il s'agit d'une feuille de l'arbre.

    Là où j'ai un soucis c'est que je souhaite avoir deux objets différents dans le cas où mon nœud est ou n'est pas une feuille. Plus précisément je veux implémenter des catégories et des produits sous forme d'arbre. Une catégorie n'aura que son nom tandis qu'un produit aura l'attribut prix, une quantité, et des méthodes supplémentaires par rapport à la catégorie. Du coup j'ai défini la classe catégorie ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Category {
    	String name;
    	List<Category> children;
    ...
    }
    (Pareil, je n'ai pas précisé les méthodes ici)

    et j'ai fait hériter la classe produit de la classe Category. Du coup si je veux afficher la liste des prix des produits d'une catégorie je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void afficherPrix(Category c){
    		if(c.getChildren().size()==0){
    			Product p = (Product)c;
    			System.out.println(p.getPrice());
    		}
    		else{
    			for(Category cat:c.getChildren()){
    				afficherPrix(cat);
    			}
    		}
    	}
    Seulement on m'a dit que sémantiquement le fait de faire cet héritage n'était pas terrible. Auriez-vous une idée d'implémentation plus propre qui ne me fasse pas perdre en efficacité?

    Merci d'avance pour votre aide!

    Arthur

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par arthurB17 Voir le message
    Seulement on m'a dit que sémantiquement le fait de faire cet héritage n'était pas terrible. Auriez-vous une idée d'implémentation plus propre qui ne me fasse pas perdre en efficacité?
    Trois classes, pas deux.

    Une classe qu'on va appeler "Entrée" et qui servira de parente aux deux autres : "Catégorie" et "Produit."
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Arf je me sens bête! Merci en tout cas!

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

Discussions similaires

  1. [Arbre de decision] Problème avec les noeuds
    Par hollowdeadoss dans le forum R
    Réponses: 2
    Dernier message: 11/03/2013, 11h33
  2. Réponses: 13
    Dernier message: 22/04/2009, 16h43
  3. Réponses: 3
    Dernier message: 06/09/2007, 14h31

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