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 :

[Langage] Classe avec un grand nombre de méthode


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut [Langage] Classe avec un grand nombre de méthode
    Bonjour,

    Je dois créer un objet contenant plusieurs centaines de membre. Chacun de ces membres doit avoir un getter et un setter.
    Si ma classe compte 500 membres, je vais donc devoir définir 500*2=1000 méthodes (pouvant elles-même être redéfinit et/ou surchargées dans les classes dérivées)
    Ma question est donc la suivante : est ce problématique d'avoir autant de méthodes dans une seule classe ? Je parle uniquement en terme de performances, je suis conscient que ce n'est probablement pas l'idéal en terme de conception mais je n'ai pas le chois sur ce point.
    Je précise que ma classe de base sera ensuite dérivée en de nombreuses sous classes et que mon programme peut manipuler simultanément plusieurs centaines d'instances de ces classes.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Et ensuite tu te retrouves avec des monstres du type des classes Swing à la maintenabilité plutôt douteuses, voir pas évidente du tout.

    Bon sinon en ce qui concerne les limitations de la VM sur ce plan là: http://java.sun.com/docs/books/jvms/...doc.html#88659

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut
    comme je l'ai indiqué, je suis bien conscient que ce n'est pas une conception idéale...

    Je ne cherche pas connaitre les limitations (je n'atteindrais jamais le nombre max de méthodes) mais à savoir quelle est le coût de ce type d'architecture en terme de performance (occupation mémoire, temps de création des objets, vtables, etc.)

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il faudra très probablement faire attention à ton PermGen Space, qui correspond à l'endroit où est stocké le code sous sa forme compilée. Ensuite tu dois toujours être bien loin du volume utilisé par des monstres du genre Eclise/Websphere & cie eu niveau du volume de code occupé. A priori pas de problème en soit.

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 905
    Billets dans le blog
    54
    Par défaut
    A la rigueur plutôt que de décrire chacun des 500 membres de la classe je délèguerai plutôt le stockage a une Map<String, Object> ce qui permet assez facilement d'automatiser la gestion de l'envoi de propertyChange(PropertyChangeEvent). Mais bon ça oblige a gérer certains cas spéciaux comme la pré-initialisation de membre sensé être des littéraux (pour eviter des NullPointerException).

    Libre a toi après d’écrire les 500 setters + 500 getters mais je pense que tu auras du mal a aller aussi loin (déjà moi au bout de 10...).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    +1 pour la map. Puis après rien ne t'empeche de faire un générateur de code pour les getters / setters qui vont se baser sur la map. au moins, tu évitera les 500 lignes de déclaration de champs dans la méthode.

    Si tu as déjà une interface avec les 500 getters / setters, tu peux créer tes instances, éventuellement, avec une classe Proxy:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123
     
    InvocationHandler handler = new MyInvocationHandler(); // handler qui convertis getters/setter en un appel à une map
         MonInterface f = (MonInterface) Proxy.newProxyInstance(MonInterface.class.getClassLoader(), new Class[] { MonInterface.class },newInstance(new Object[] { handler });

  7. #7
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par bouye Voir le message
    Libre a toi après d’écrire les 500 setters + 500 getters mais je pense que tu auras du mal a aller aussi loin (déjà moi au bout de 10...).
    Bon ensuite il y a les flemmards qui laissent l'IDE les générer ceux là...

    Mais bon, rien qu'écrire les 500 variables, c'est déjà über pénible...

Discussions similaires

  1. pagination avec de grands nombres de pages
    Par biggyboy dans le forum Langage
    Réponses: 4
    Dernier message: 12/06/2009, 09h48
  2. [AJAX] Actualiser un div avec un grand nombre de paramètres
    Par yoshï dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/11/2008, 11h43
  3. [STL] Classe avec une Pile , problème de méthode
    Par camumu dans le forum SL & STL
    Réponses: 3
    Dernier message: 16/05/2007, 14h14
  4. Réponses: 15
    Dernier message: 21/01/2007, 11h28
  5. Réponses: 8
    Dernier message: 21/11/2005, 17h18

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