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

ALM Discussion :

Heritage et cle primaire


Sujet :

ALM

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut Heritage et cle primaire
    Bonjour,

    J'étudie en ce moment un standard de communication dans lequel est défini un modèle de données.
    Dans le modèle, il y a une classe abstraite A avec certains attributs et une classe B qui hérite de A avec de nouveaux attributs. Ce qui me gêne, c'est que l'ensemble d'attributs qui permet d'identifier de manière unique une instance de B contient des attributs de A mais aussi des attributs de B.
    Et je me posais la question de savoir est ce qu'il y a la une erreur de conception?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    Je ne suis pas très point sur la question, mais, perso, ça ne me pose pas de problème.

    Puisque tu veux identifier une classe B, tu ne peux te servir que d'attributs appartenant à la classe B. Que ces attributs soient hérités de A ou pas, ils font partie intégrante de B.

    De plus, A est une classe abstraite. C'est à dire que ce n'est pas vraiment une classe. A est plus à voir comme un modèle, un moule avec lequel tu va fabriquer des classes, B en l'occurrence.

    De faire hériter B de A, tu préfabrique ta classe, il ne te reste plus qu'à rajouter quelques petites modif pour en faire ta classe B spécifique. Au final, tu obtient une classe B comme si tu l'avais fabriquer de toute pièce en partant de 0.

    Ceci dit, c'est mon interprétation, et je ne suis pas forcément un expert en la matière.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Merci pour la reponse mais dans ce cas, comment est ce qu'on represente ca en UML ?

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    comme sevyc64 avec les infos dont on dispose je ne vois pas où serait le problème, si un ensemble d'attributs de A permet d'identifier de manière unique une instance de A alors en fait on se moque pas mal des attributs propres à B au niveau identification

    qu'elle est la question relative à UML ? définir deux classes ayant des attributs et une relation d'héritage c'est très basique, ajouter une contrainte indiquant que les valeurs de attributs x, y ... z définissent de façon unique une instance n'est pas très compliqué non plus.

    en fait ce qui me gène c'est le concept même d'un ensemble d'attributs définissant de façon unique une instance, qu'elle est le but de la chose ? [edit]je n'avais pu vu le titre [/edit]
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    qu'elle est la question relative à UML ?
    Je pense que le problème doit plutot être "Comment identifier en UML, une classe comme étant abstraite, et comment la lier aux classes réelles qui en découleront ? "

    Ceci dit, ne connaissant rien à l'UML, mon énoncé n'a peut-être aucune pertinence
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  6. #6
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    la propriété isAbstract indique si une classes est ou non abstraite, dans un diagramme une classe abstraite a son nom en italique

    un héritage/ généralisation se représente via une flèche ----|> dans le cas standard, dans le cas présent il s'agit de réalisation et le trait est en pointillé - - - - -|>
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    l'ensemble d'attributs qui permet d'identifier de manière unique une instance de B contient des attributs de A mais aussi des attributs de B
    Il faudrait peut être clarifier un peu.
    Est ce que plusieurs B pourront être "accrochés" au même A ou est-ce que la relation est univoque: tous les B ont des identifiants différents sur la partie A.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    ouhai, je confirme, on en comprend pas quel est ton problème

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Merci pour les reponses,

    Ma question est tout simplement, dans le cas ou l'on a une classe A abstraite et une classe B heritant de A, est ce qu'il est necessaire que les attributs se trouvant dans A seulement permettent d'identifier de maniere unique une instance qui herite de A. Ou est ce que pour identifier une instance qui herite de A, on peut utiliser des attributs de A et de B.

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je ne comprends pas plus la question mais je vois "clé primaire" dans le titre de la file de discussion.

    Quand on parle de clé primaire, je ne sais pas si ça s'applique à autre chose mais chez moi on parle de clé primaire d'une table de BDD SQL.

    Un héritage de tables s'implémente en BDD de la façon suivante :

    MCD :
    B -(1,1)---Etre----0,1- A

    Tables :
    A (a_id...)
    B (b_id_a...)

    La clé primaire de la table B est portée par la colonne b_id_a qui est une clé étrangère faisant référence à la clé primaire de A.

    Mon passage douloureux sur la planète Seam me remet en mémoire que pour mapper ce modèle avec Hibernate,il ne faut pas mettre de propriété b_id_a dans la classe B mais utiliser les @nnotations pour figurer la dépendance.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Miko95 Voir le message
    Ma question est tout simplement, dans le cas ou l'on a une classe A abstraite et une classe B heritant de A, est ce qu'il est necessaire que les attributs se trouvant dans A seulement permettent d'identifier de maniere unique une instance qui herite de A. Ou est ce que pour identifier une instance qui herite de A, on peut utiliser des attributs de A et de B.
    Le problème est que la relation d'héritage est une relation entre classes.
    Si B hérite de A, rien n'interdit d'avoir plusieurs instances de B associées à un même A.
    Regardez par exemple le "composite pattern" ou considérez une hiérarchie de répertoires contenant des fichiers et des répertoires.

    La question reste de savoir quelles sont les réalités qu'on a voulu représenter.
    - W
    PS: Pardon Cinephil, oui tu as raison, mais entre UML et DDL le chemin est assez sinueux surtout lorsqu'on parle de concept "objets" tels que l'héritage.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    Le problème est que la relation d'héritage est une relation entre classes.
    Si B hérite de A, rien n'interdit d'avoir plusieurs instances de B associées à un même A.
    Regardez par exemple le "composite pattern" ou considérez une hiérarchie de répertoires contenant des fichiers et des répertoires.
    ATTENTION, il ne faut pas perdre de vue les termes employés.

    A est une classe abstraite.
    Le terme "Classe" est ici trompeur même si c'est le terme officiel. A n'est pas et ne sera jamais une classe, c'est juste un modèle de fabrication. Il n'existera jamais d'instance de A

    B hérite de A.
    Ici aussi "hérite" est un terme trompeur même si c'est là aussi le terme officiel. B n'héritera jamais de A puisque A n'existera jamais. B sera construit de toute pièce sur un modèle de base A.

    Donc on n'aura jamais "plusieurs instances de B associées à un même A", car même si elles prennent le terme de classe filles, les instances de la classe B seront techniquement toujours des classes mères, donc totalement indépendante.
    Selon le même principe de terminologie on devrait plutôt appeler les classes B, classes mère réelle, et les classes A, classe mère abstraite ou classe mère virtuelle.

    Donc à la question
    est ce qu'il est nécessaire que les attributs se trouvant dans A seulement permettent d'identifier de maniere unique une instance qui herite de A. Ou est ce que pour identifier une instance qui herite de A, on peut utiliser des attributs de A et de B.
    La réponse pourra être la suivante :
    Les attributs identifiants une instance de B seront toujours de B. Ceux-ci, pouvant être des attributs d'origine de A, spécifique de B, ou un mélange des 2.

    A noter que les méthodes présentent dans la classe abstraite A ne peuvent faire appel qu'à des attributs de la classe A. Si ces méthodes doivent aussi faire appel à des attributs de la classe B, il faudra alors surcharger la dite méthode dans l'implémentation de B.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    La réponse pourra être la suivante :
    Les attributs identifiants une instance de B seront toujours de B. Ceux-ci, pouvant être des attributs d'origine de A, spécifique de B, ou un mélange des 2.
    C'est bien mais la question est côté "identifiants" et mutabilité.

    Maintenant imaginez un C qui hérite de A sans être un B.
    Instancions:
    c = (id_a, ..., id_c, ....)
    b = (id_a,..., id_b,...)
    Les ... représentent des attributs "mutables" de l'instance provenant de A et de B ou C.
    Si une instance de B est identifiée par (id_a, id_b), id_a n'identifie rien du tout puisque plusieurs B pourront être associés aux mêmes id_a ayant des attributs différents.
    Autrement dit, id_a n'est pas, dans ce cas, un "identifiant" (i.e. une clé associée à un uple d'attributs de valeurs identiques).

    Pire, en disant "attribut", on ne précise pas vraiment ce qu'ils sont: valeur ou "pointeur" vers un agrégat - qui pourrait être partagé...

    ATTENTION, il ne faut pas perdre de vue les termes employés.
    L'héritage nous permet de dire que B et C sont des A.
    A étant "abstraite", on ne pourra pas l'instancier "directement".
    Les termes employés ne nous disent rien de plus sur la nature des attributs de A et de B et encore moins sur les propriétés que pourrait avoir un "identifiant".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Heritage et cle primaire
    Par Miko95 dans le forum Requêtes
    Réponses: 4
    Dernier message: 21/03/2011, 14h41
  2. Heritage et cle primaire
    Par Miko95 dans le forum JPA
    Réponses: 1
    Dernier message: 20/03/2011, 14h47
  3. [debutant]cle primaire particuliere
    Par christophebmx dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/08/2004, 13h27
  4. [ db2 ] cle primaire autoincrement
    Par hocinema dans le forum DB2
    Réponses: 4
    Dernier message: 25/02/2004, 14h20
  5. XSD, Cle primaire...
    Par Goupil dans le forum Valider
    Réponses: 3
    Dernier message: 21/10/2003, 09h04

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