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 :

POO : problème de visibilité


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Par défaut POO : problème de visibilité
    Bonjour,

    Je souhaite fournir aux packages clients du mien une liste de méthodes globales et spécifiques. Voici un exemple pour illustrer (comme le petit robert) :

    Soit Book, un bean.

    Soit IBookBusiness une interface donnant accès aux opérations spécifiques disponible sur un Book.

    Soit IGlobalBusiness une interface donnant accès aux opérations génériques que l'ont peut faire dans l'absolu.

    Je voudrais que mes clients en utilisant une implémentation de l'interface IBookBusiness aient accès à la fois aux méthodes de celle-ci mais aussi à celles de IGlobalBusiness.

    Il va de soit que mon implémentation de IBookBusiness ne doit pas implémenter elle même les méthodes de IGlobalBusiness (cela ne serait plus global du tout )

    Je bloque après avoir essayé pas mal de trucs car au final, seules les méthodes de IBookBusiness sont visibles par le client.

    Exemple par le code :

    L'interface IBook et son implémentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public interface IBookBusiness {
    	void reserverBook();
    }
     
    public class BookBusinessImpl implements IBookBusiness {
     
    	public void reserverBook() {
    		// Specific book stuff here
    	}
     
    }
    L'interface IGlobal et son implémentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public interface IGlobalBusiness {
    	void globalSutff();
    }
     
    public class GlobalBusinessimpl implements IGlobalBusiness{
     
    	public void globalSutff() {
    		// Global stuff here
    	}
    }
    Le code d'appel par le client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public testBook(){
    	IBookBusiness bookBusiness = new BookBusinessImpl();
    	bookBusiness.globalSutff(); // ne marche pas actuellement
    }
    En espérant avoir été clair, merci d'avance.

  2. #2
    Membre chevronné Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Par défaut
    Bah c'est normal, IBookBusiness n'étend pas IGlobalBusiness

    Si tu veux que les méthodes de l'interface global soit accéssible par l'interface spécifique, il faut que cette dernière étende (hérite) de l'interface global.

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public interface IBookBusiness extends IGlobalBusiness
    Après, au niveau des classes les implémentants, soit tu les fait hérité également, ou bien tu ré implémente les méthode de l'interface globale.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Proposition 1 :
    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
     
    public interface IGlobalBusiness {
    	void globalStuff();
    }
    public class GlobalBusinessImpl implements IGlobalBusiness{
    	public void globalStuff() {}
    }
     
    public interface IBookBusiness extends IGlobalBusiness {
    	void reserverBook();
    }
    public class BookBusinessImpl extends GlobalBusinessImpl implements IBookBusiness {
    	public void reserverBook() {}
    }
     
    public testBook(){
    	IBookBusiness bookBusiness = new BookBusinessImpl();
    	bookBusiness.reserverBook();
    	bookBusiness.globalStuff();
    }
    Proposition 2 :
    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
     
    public interface IGlobalBusiness {
    	void globalStuff();
    }
    public class GlobalBusinessImpl implements IGlobalBusiness{
    	public void globalStuff() {}
    }
     
    public interface IBookBusiness {
    	void reserverBook();
    }
    public class BookBusinessImpl extends GlobalBusinessImpl implements IBookBusiness, IGlobalBusiness {
    	public void reserverBook() {}
    }
     
    public testBook(){
    	BookBusinessImpl bookBusiness = new BookBusinessImpl();
    	((IBookBusiness)bookBusiness).reserverBook();
    	((IGlobalBusiness)bookBusiness).globalStuff();
    }


    Différence entre les deux propositions :
    - dans la première on dit que l'interface IBookBusiness doit contenir toutes les méthodes de IGlobalBusiness
    - dans la deuxième les deux interfaces sont indépendantes ; mais du coup, ensuite, on ne peut pas manipuler un IBookBusiness comme un IGlobalBusiness !
    Etant donné que tu veux du code générique, je suppose que quand tu écris "IBookBusiness bookBusiness = new BookBusinessImpl();" c'est pour simplifier le code et qu'en fait le client ne saura jamais quel est le type réel de l'objet implémentant IBookBusiness. Il vaut donc mieux, je pense, réunir toutes les méthodes proposées dans une seule interface comme indiqué dans la première proposition.



    Dans les deux cas, étant donné que :
    Citation Envoyé par brainstorm Voir le message
    Il va de soit que mon implémentation de IBookBusiness ne doit pas implémenter elle même les méthodes de IGlobalBusiness (cela ne serait plus global du tout )
    il faut que la classe BookBusinessImpl hérite d'une classe (éventuellement abstraite) qui définit les traitements communs : ici c'est GlobalBusinessImpl.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Par défaut
    Merci pour vos réponses, reste plus qu'a rajouter les génériques et ce sera parfait.

    On aura un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class BookBusinessImpl<T extends Book> extends GlobalBusinessimpl<T> implements IBookBusiness<T> {
     
    	public void reserverBook(T t) {
    		// Specific book stuff here
    	}
     
    }
    Bonne fêtes de fin d'année à tous

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

Discussions similaires

  1. [AS2] [POO] Problème de duplication d'un MovieClip
    Par segphault dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 11/01/2006, 15h44
  2. problème de visibilité des variables dans un include
    Par d1g-2-d1g dans le forum Langage
    Réponses: 6
    Dernier message: 28/11/2005, 09h35
  3. [EasyPHP] problème de visibilité des variable dans les includes
    Par d1g-2-d1g dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 23/10/2005, 01h55
  4. [POO] Problème de paramètre passé par référence
    Par dug dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/08/2005, 20h29
  5. [POO] Problème lors de l'appel d'une propriété d'un objet.
    Par akecoocoo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/08/2005, 08h51

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