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 :

question concernant la visibilité de classes


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Points : 595
    Points
    595
    Par défaut question concernant la visibilité de classes
    Bonjour à tous.

    Cette question est postée dans la section JAVA mais elle aurait bien sur sa place en C++ ou autres langages de POO.

    Je me pose pas mal de questions concernant la visibilité des classes.

    Voici un exemple simple pour illustration:
    Disons que j'ai une classe ZOO qui contient elle meme des objets de type CAGE qui eux meme contienent un ou plusieurs objets de type ANIMAL.

    2 dépendances entres les classes apparaissent de facon assez naturelle :
    - la classe ZOO qui a une visibilité sur la classe CAGE.
    - la classe CAGE qui a une visibilité sur la classe ANIMAL.

    Pour limiter la dépendances entre les classes, il ne faut donc pas permettre une visibilité directe entre la classe ZOO et ANIMAL ou encore de CAGE vers ZOO ...

    Or lorsque j'ai créé un package que l'on nommera ZOOSOFT qui contient les 3 classes, toutes les classes ont une dépendances entre elles.
    Je peux par exemple créer un objet de type ZOO avec la classe CAGE alors que seul l'inverse devrait etre possible selon les regles de dépendances de départ.

    D'ou ma question, quelqu'un serait il de quelle manière procédée pour remedier à ce type de problème ?
    Mise à part le fait de créer un package pour chaque classe, je n'en vois hélas pas...

    Merci par avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Il n'y a aucun moyen d'empêcher qu'une classe Zoo soit instanciée dans une classe Cage, sauf si Zoo est encapsulé dans une autre classe, ce qui ne semble pas être une solution appropriée dans ton cas. Même si ces deux classes étaient dans des packages différents, rien n'empêcherait d'importer le package idoine.

    Le seul risque est celui d'une mauvaise interprétation de la logique de ton api lors d'une évolution future. C'est à toi de documenter ta classe pour éviter ce risque, sachant qu'il s'agit bien sûr de commentaires réservés uniquement aux développeurs de l'api.

  3. #3
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Java ne propose que 4 visibilités, qui permettent de gérer "en gros" les visibilités importantes, mais ça ne peut pas exprimer tous les droits détaillés de chaque classe...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Points : 595
    Points
    595
    Par défaut
    Citation Envoyé par had35
    Il n'y a aucun moyen d'empêcher qu'une classe Zoo soit instanciée dans une classe Cage, sauf si Zoo est encapsulé dans une autre classe, ce qui ne semble pas être une solution appropriée dans ton cas. Même si ces deux classes étaient dans des packages différents, rien n'empêcherait d'importer le package idoine.

    Le seul risque est celui d'une mauvaise interprétation de la logique de ton api lors d'une évolution future. C'est à toi de documenter ta classe pour éviter ce risque, sachant qu'il s'agit bien sûr de commentaires réservés uniquement aux développeurs de l'api.
    Je suis d'accord sur le principe, il suffirait simplement d'importer le package idoine pour permettre la visibilité totale du package entre les classes.

    J'en conclu que les dépendances entres classes doivent donc,apres etre etablies pendant la conception, être appliquées par le développeur lui meme si il désire ne pas donné un "coupling" trop fort entre les classes.

    En tous les cas merci pour ta réponse très constructive.
    Par aiileurs, ta remarque sur les commentaires destinés aux importateurs du package est tout à fait pertinente.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Points : 595
    Points
    595
    Par défaut
    Citation Envoyé par ®om
    Java ne propose que 4 visibilités, qui permettent de gérer "en gros" les visibilités importantes, mais ça ne peut pas exprimer tous les droits détaillés de chaque classe...
    Je comprends.
    C'est peut être dommage.
    Merci de ta réponse

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Je pondère ce que j'ai écris dans ma première réponse car je suis parti de l'idée que tes classes étaient des éléments publiques de ton api. C'est-à-dire que tu peux empêcher Zoo d'être instancié dans Cage si ces deux classes sont dans des packages différents et que Zoo n'est pas une classe publique. Mais dans ce cas, Zoo n'est plus visible hors de son package et ne constitue plus une classe publique de ton api.

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

Discussions similaires

  1. P'tite question concernant les Class ou Module
    Par arnofly dans le forum VB.NET
    Réponses: 15
    Dernier message: 18/04/2009, 17h01
  2. [Servlet + Class] question concernant plusieurs connections
    Par ShinJava dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 29/11/2004, 16h39
  3. Réponses: 7
    Dernier message: 10/09/2004, 14h28
  4. [Indy] Questions concernant l'envoi de mail
    Par delphicrous dans le forum Web & réseau
    Réponses: 3
    Dernier message: 24/06/2004, 15h06
  5. Question concernant l'API "WaitforSingleObject
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 29/03/2003, 07h26

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