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 :

[Génériques]Classes, interfaces, événements, etc.


Sujet :

Langage Java

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    586
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 586
    Points : 1 147
    Points
    1 147
    Par défaut [Génériques]Classes, interfaces, événements, etc.
    Bonjour.
    J'ai besoin de plusieurs classes relativement proches et je me demande dans quelle mesure je pourrais utiliser les génériques pour éviter de répéter N fois la même chose. Je coince un peu sur le sujet.

    En détail:
    1) J'ai une interface PieceListener, décrivant quelques méthodes du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void pieceAjoutee(PieceEvent pe);
    public void pieceChangee(PieceEvent pe);
    public void pieceSupprimee(PieceEvent pe);
    - Une classe PieceEvent pour gérer des événements spécifiques
    - Une classe BasePiece (abstraite) qui ne s'occupe que de la gestion des Listener et définit les méthodes habituelles pour les gérer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public PieceListener addPieceListener(PieceListener pl) { ... }
    public PieceListener removePieceListener(PieceListener pl) { ... }
    protected void firePieceEvent(PieceEvent pe) { ... }
    >>>> Le fonctionnement est des plus simples: j'utilise une EventListenerList dans laquelle j'ajoute (add) ou supprime (remove) les Listener et que je parcours dans la méthode fire.
    - Une classe Piece qui hérite de BasePiece et qui ne s'occupe que des traitements propres aux objets Piece (je sépare ainsi la gestion des Listener dans la classe BasePiece de celle qui est propre aux objets dans la classe Piece)

    La classe qui écoute les événements implémente PieceListener.

    2) J'ai une interface ChronoListener, décrivant des méthodes identiques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void chronoDemarre(ChronoEvent ce);
    public void chronoArrete(ChronoEvent ce);
    - Une classe ChronoEvent qsui décrit les événements
    - Une classe BaseChrono (abstraite) qui s'occupe uniquement de la gestion des Listener, avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public ChronoListener addChronoListener(ChronoListener cl) { ... }
    public ChronoListener removeChronoListener(ChronoListener cl) { ... }
    protected void fireChronoEvent(ChronoEvent ce) { ... }
    - La classe Chrono héritant de BaseChrono et réalisant les traitements propres aux objets Chrono

    La classe qui écoute les événement implémente ChronoListener.

    3) Même chose avec TrucListener, TrucEvent, BaseTruc, Truc

    4) Même chose avec MachinListener, MachinEvent, BaseMachin et Machin.

    A votre avis, comment pourrais-je faire fonctionner tout ça de manière plus simple, sans avoir à réécrire la même chose pour Piece, pour Chrono, pour Truc, pour Machin etc. ?

    J'avais dans l'idée quelque chose comme une interface Listener<T>, une classe Base<T>, mais j'ai des soucis:
    - ça oblige d'avoir défini auparavant les classes T possibles, tout en les faisant hériter de Base<T> et implémenter Listener<T> !
    - comment définir génériquement les méthodes addTTTListener, removeTTTListener, fireTTTEvent ?
    - comment créer génériquement les classes TTTEvent ?

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Bonjour,
    je comprends l'envie de générifé (je sais pas comment on dit proprement ).
    Ceci étant, le fait de rendre générique, aurait un intéret à mon sens, si sur le fireEvent, on appelait une méthode identique quelque soit les listener, et les events. chose que je ne pense pas etre le cas.
    Pour chrono dans le fireEvent, on appel :
    public void chronoDemarre(ChronoEvent ce);
    public void chronoArrete(ChronoEvent ce);
    Des ChronoListener

    et pour piece dans le fireEvent on appel :
    public void pieceAjoutee(PieceEvent pe);
    public void pieceChangee(PieceEvent pe);
    public void pieceSupprimee(PieceEvent pe);

    De ce fait la générification devient difficle.

    Il est possible d'envisager un "simple" fireEvent dans le listener, mais du coup je suis plus sur que ca t'interesses.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    586
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 586
    Points : 1 147
    Points
    1 147
    Par défaut
    Oui, je me suis dit, une fois mon message parti, que ce pourrait être une simplification: je peux m'arranger pour que ça soit génériquement identique partout dans les interfaces... On ne pas "générifier" cette partie.

  4. #4
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Citation Envoyé par Thorna
    je peux m'arranger pour que ça soit génériquement identique partout dans les interfaces...
    Je vois mal comment tu n'as pas toujours le même nombre de méthodes ...

Discussions similaires

  1. [Drupal] diagramme uml des classes/interfaces etc de drupal 8
    Par mapmip dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 01/06/2014, 15h54
  2. [VBA] Module de classe et évènement
    Par Caroline1 dans le forum Access
    Réponses: 9
    Dernier message: 20/03/2013, 23h23
  3. C# => VB.net classe, interface générique
    Par Gr@nd@x dans le forum VB.NET
    Réponses: 2
    Dernier message: 27/10/2008, 13h27
  4. [DC] Modéliser une classe interface + une autre classe
    Par sangei dans le forum Diagrammes de Classes
    Réponses: 11
    Dernier message: 21/12/2005, 22h46
  5. [Language][POO]classe interface
    Par Samanta dans le forum Langage
    Réponses: 9
    Dernier message: 21/06/2005, 15h32

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