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 :

[Manipulation d'objets] Transférer un objet sous une classe homonyme


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut [Manipulation d'objets] Transférer un objet sous une classe homonyme
    Salut,

    Soient des paquets A et B contenant chacun une classe Machin, les deux classes Machin étant identiques.

    Existe-t-il un moyen pour qu'un objet machin créé dans le paquet A et envoyé au paquet B soit géré par la classe Machin de celui-ci sans importer la classe Machin du paquet A ?

    Le transtypage ne semble pas fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	public void metMachin(Object m) {
    		machin=(Machin)m;
    	}
    dans le paquet B lève une ClassCastException.

  2. #2
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    Pour quelle bonne raison tu as besoin de faire cela? je ne comprend pas l'utilité de ta démarche!

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Il y a deux raisons :

    Rendre le paquet B relativement indépendant de la structure de l'environnement où on l'immerge (à cela près que Machin doit y exister bien sûr)

    Machin étant un petit utilitaire dont je saupoudre un peu tout, éviter d'avoir à l'importer dans la plupart des classes du paquet B (comme c'est la seule classe "collatérale" à importer, ça fait vraiment verrue).

  4. #4
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Non, tu ne peut pas...

    Si tu as deux classes Machin même exactement pareilles dans deux packages différents, ce sont deux classes différentes. Tu ne peut donc pas transtyper une dans le type de l'autre...

    Tu seras obligé d'importer Machin de la classe 2 dans la classe 1 pour qu'il puisse travailler avec...

    C'est quand même bizarre d'avoir 2 classes Machin qui sont les mêmes

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par janef
    Rendre le paquet B relativement indépendant de la structure de l'environnement où on l'immerge (à cela près que Machin doit y exister bien sûr)
    La solution pour ce probleme de conception s'appele le DIP pour Dependency Inversion Principle. (En fait, un "double" DIP dans ton cas)

    Afin d'eviter le couplage fort entre les paquets A et B, il faut:

    1. créer un nouveau paquet "Machin"
    2. créer une interface "Machin" dans le paquet "Machin" qui sera utilisée par les classes de A et B
    3. créer une classe "MachinImpl" dans le paquet "Machin" qui implemente l'interface "Machin"

    Ensuite pour recuperer une instance de l'interface "Machin" dans les classes de A et B, on peut soit l'injecter (constructeur, setter) ou utiliser une factory (une classe "MachinFactory" avec une methode statique dans le paquet "Machin")

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Bon, c'est moins radical que ce que j'envisageais puisque la position du paquet "Machin" doit toujours être connue, mais ta solution peut avoir son intérêt. A étudier donc.

    Merci pour vos réponses.

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/07/2007, 15h34
  2. Accéder aux objets de la form1 depuis une class
    Par Jimmy_S dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/03/2007, 22h47
  3. Réponses: 5
    Dernier message: 15/03/2007, 18h44
  4. 2 objets de même type dans une classe
    Par _R3nO_ dans le forum Hibernate
    Réponses: 2
    Dernier message: 28/02/2007, 16h12
  5. Objet vector<Type> membre d'une classe
    Par Chewbi dans le forum SL & STL
    Réponses: 3
    Dernier message: 16/02/2006, 17h12

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