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 :

[Conception] Classe interne ou externe


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    storm_2000
    Invité(e)
    Par défaut [Conception] Classe interne ou externe
    Bonjour, j'aimerais avoir des conseils sur la programmation de l'une de mes classe.

    J'ai une classe A qui contient un JTree.
    J'aimerais rajouter des écouteurs
    Un Renderer
    Une classe qui permet de charger ou enregistrer un arbre.

    Donc le meilleur moyen est il de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class A herite JTree implements Ecouteur, Renderer {
       methode load() {
       }
       methode save() {
       }
       ....
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class A herite JTree {
       class RendererX implements Renderer {
       }
       class EcouteurX implements Ecouteur {
       }
       class SaveLoad {
       }
    }
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class A herite JTree {
    }
    class RendererX implements Renderer {
    }
    class EcouteurX implements Ecouteur {
    }
    class SaveLoad {
    }

    merci de votre aide

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Tout dépend si ton Ecouteur et/ou ton Renderer sont intimement liés à la classe A ou non, si la définition d'un ou de plusieurs constructeurs s'avère utile, si le volume de code pour l'impléméntation des interfaces est conséquent, etc.
    Dans le premier cas, tu ne peux pas partager l'implémentation de Ecouteur/Renderer entre plusieurs classes.
    Dans le second cas, tu définis des classes internes RendererX et EcouteurX liées à la classe englobante A, donc non partageables également.
    J'utilise rarement le 3ème cas, définition de plusieurs classes au sein d'un même source Java, la visiblité des classes RendererX, EcouteurX étant limitée à celle du package de la classe publique A.
    Par contre, je ne vois pas bien l'intérêt de définir une classe SaveLoad.
    En conclusion, je ferai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class A herite JTree implements Ecouteur, Renderer {
       methode load() {
       }
       methode save() {
       }
       ....
    }
    si l'implémentation de Ecouteur/Renderer est spécifique à A.
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class A herite JTree {
       private class RendererX implements Renderer {
       }
       private class EcouteurX implements Ecouteur {
       }
    }
    si l'implémentation de Ecouteur/Renderer est spécifique à A et nécessite un constructeur et/ou un volume de code conséquent.
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    A.java :
    public class A herite JTree {
    }
     
    RendererX.java :
    public class RendererX implements Renderer {
    }
     
    EcouteurX.java :
    public class EcouteurX implements Ecouteur {
    }
    si l'implémentation de Ecouteur/Renderer est suffisamment générale pour être réutilisée dans d'autres contextes que celui de la classe A.

  3. #3
    storm_2000
    Invité(e)
    Par défaut
    D'accord, je te remercie.
    Donc le mieux serait de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class A herite JTree {  
    private class RendererX implements Renderer {  }  
    private class EcouteurX implements Ecouteur {  } 
    methode load() { }
    methode save() { }
    Sinon niveau volume de code. pour ma classe je pense avoir 300 lignes avec les commentaire JAVADOC etc...

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Je vote également pour cette solution qui a l'avantage également de te permettre d'étendre le renderer par defaut plutôt qu'implémenter de zéro.

    Ton écouteur peut également implémenter différents type d'écouteur pour te permettre de n'avoir qu'une classe EcouteurX.

    Par contre je ne suis pas fan de l'héritage de JTree (à tord ou à raison je ne sais pas vraiment...). Mais je trouve ça dangereux (alors qu'étendre JFrame, JDialog ou JPanel ne me dérange absolument pas).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class A {
        private JTree tree;
        load() { }
        save() { }
        private class RendererX extends DefaultTreeCellRenderer {  }  
        private class EcouteurX implements SelectionListener, MouseListener {  } 
    }
    Perso je préfère mettre mes classes internes à la fin. Question de lisibilité (ces classes sont des outils et pas le code le plus important de la classe) et question de goûts bien sûr.

Discussions similaires

  1. Classe interne, classe externe
    Par mathieu_t dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 23/09/2009, 20h58
  2. Réponses: 14
    Dernier message: 10/02/2007, 14h27
  3. [Conception] Class interne ou externe ?
    Par TTKiBosse dans le forum Langage
    Réponses: 13
    Dernier message: 10/01/2007, 11h36
  4. [Conception] classes internes ou gestion des events
    Par TTKiBosse dans le forum Général Java
    Réponses: 2
    Dernier message: 06/12/2006, 19h25
  5. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 16h45

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