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 :

Héritage et contraintes d'aggregation


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut Héritage et contraintes d'aggregation
    Bonjour,
    Sur un projet en cours (java 1.5), je suis en train d'écrire un package doté de 2 hiérarchies de classes :
    - Les contenants, qui héritent d'une classe abstraite "Contenant"
    - Les contenus, qui héritent d'une classe abstraite "Contenu"
    Un contenant est associé à plusieurs contenus, et la relation est bidirectionnelle. Je souhaite utiliser la généricité de java 1.5.

    Un exemple bateau de cette hiérarchie est présentée dans l'image jointe :


    Le problème est que je souhaite mettre en place des contraintes entre contenants et contenus : dans l'exemple ci dessus, un disquaire ne doit contenir que des disques, et un libraire que des livres.

    Pour cela, les associations doivent elles nécéssairement être placées dans les classes filles ? (CF image : )

    Ou y a t-il une solution possible en utilisant des contraintes de généricité avec java 1.5 ?
    Images attachées Images attachées   

  2. #2
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Moui.... on pourrait écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class Librairie< L extends Livre> extends Boutique<L> { ...
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public abstract class Boutique<T extends ObjetAVendre> {
    }
    mais je ne conseille pas ce genre d'implantation pour diverses raisons
    .... en particulier pour une raison fonctionelle: (j'appelle ça l'argument "FNAC") il ne va pas falloir longtemps avant que le magasin vende autre chose que des Livres!

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut
    Merci !

    1)Donc d'après ce que tu me dis, il vaut mieux en général garder une modélisation assez générale, sans contraintes, et laisser l'implémentation se charger de s'assurer que les types ajoutés dans les vecteurs sont corrects. C'est ça ?

    2)Sinon si on garde le choix des contraintes de généricité, qu'est ce que cela donnerait du côté des ObjetsAVendre ? Comment typer de manière générique un disque pour qu'il ne soit vendu que chez un disquaire ?

    J'ai essayé mais sans succès de rendre générique la classe ObjetAVendre à ta manière pour lui rajouter des contraintes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public abstract class ObjetAVendre<T extends SegmentedFile>{...}
    Mais là eclipse me demande de typer SegmentedFile dans l'expression "<T extends SegmentedFile>".
    Après correction, ceci devient "<T extends SegmentedFile<FilePart>>", et eclipse me demande de typer FilePart, qui après correction donne etc...
    bref, on tourne en rond.

    Comment faire pour s'en sortir ? (Si ce n'est pas complètement abrerrant/idiot)

  4. #4
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par phil512 Voir le message
    Comment faire pour s'en sortir ? (Si ce n'est pas complètement abrerrant/idiot)
    déclarer le type SegmentedFile avant ....
    mais après ça va compliquer encore la déclaration de Boutique<T extends ObjetaVendre<?>>...

    (euh voilà une paramétrisation étrange .... c'est quoi l'idée de SegmentedFile?)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut
    Pardon c'est un copier coller un peu abusif. Voilà le message corrigé.

    Merci !

    1)Donc d'après ce que tu me dis, il vaut mieux en général garder une modélisation assez générale, sans contraintes, et laisser l'implémentation se charger de s'assurer que les types ajoutés dans les vecteurs sont corrects. C'est ça ?

    2)Sinon si on garde le choix des contraintes de généricité, qu'est ce que cela donnerait du côté des ObjetsAVendre ? Comment typer de manière générique un disque pour qu'il ne soit vendu que chez un disquaire ?

    J'ai essayé mais sans succès de rendre générique la classe ObjetAVendre à ta manière pour lui rajouter des contraintes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public abstract class ObjetAVendre<T extends Boutique>{...}
    Mais là eclipse me demande de typer SegmentedFile dans l'expression "<T extends SegmentedFile>".
    Après correction, ceci devient "<T extends Boutique<ObjetAVendre>>", et eclipse me demande de typer FilePart, qui après correction donne etc...
    bref, on tourne en rond.

    Comment faire pour s'en sortir ? (Si ce n'est pas complètement abrerrant/idiot)

  6. #6
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Si tu tiens absolument à mettre une contrainte, tu aurais intérêt à ne la mettre que sur l'une des classes.

    1. Fonctionnellement, parce que sinon tes livres ne peuvent être vendus que dans des librairies ; tu me diras, c'est pas grave, je ferai du extends Librairie. Soit, mais si tu dois aussi vendre des Disques, tu es dans l'impasse Moralité, tu aurais tout à recoder.

    2. D'un point de vue technique ça lie beaucoup trop fortement tes deux classes (au point où ça devient cyclique).

Discussions similaires

  1. [2008R2] Contrainte pour héritage exclusif
    Par Kropernic dans le forum Administration
    Réponses: 6
    Dernier message: 31/05/2013, 13h17
  2. Contrainte sur héritage
    Par nsanabi dans le forum Diagrammes de Classes
    Réponses: 4
    Dernier message: 05/06/2012, 17h41
  3. [Toutes versions] contraintes avec héritage
    Par philipp06 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/04/2010, 19h05
  4. Héritage multiple avec la contrainte XOR :
    Par choko83 dans le forum UML
    Réponses: 10
    Dernier message: 04/06/2008, 14h29
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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