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

C++ Discussion :

[POO] conception des classes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [POO] conception des classes
    Je suis pas sûr que ce soit le meilleur endroit pour poster ce topic, mais je pense qu'il a sa place ici...

    Dans un but de réutilisabilité de mon code (et surtout pour encore améliorer sa clarté), je souhaite modifier tout mon programme pour l'orienter objet!
    Seulement, le problème qui se pose à moi n'est pas technique, mais plutôt conceptuel...

    En effet, mon problème ne se met pas en forme comme on a l'habitude de le faire: une classe client, une classe serveur, ou encore une classe temps, une classe date !
    Bref, j'ai déjà du mal à définir mes limites!

    Je me pose plusieurs questions:
    1) Dans quels cas faire hériter une classe d'une autre?
    2) Une classe avec une seule variable est-elle abbérante?
    3) Une classe peut-elle contenir des données qui ne pas vraiment propre à elle? (exemple : dans mon cas, une classe Composant qui contiendrait une variable numero_experience...)

    Bref, je vous remercie d'avance d'éclaircir ma lanterne.

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Salut

    Alors, globalement les réponses seraient (à mon avis)

    1°) Quand la seconde classe peut-être considérée comme étant la première avec des améliorations (exemple : un point coloré EST un point AVEC une couleur)

    2°) Non, si la sémantique demande une classe, alors autant en mettre une

    3°) Non... vaut mieux faire deux classes séparées (avec éventuellement l'une qui contient une instance de l'autre), la sémantique n'en souffrira pas au contraire
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Swoög
    3°) Non... vaut mieux faire deux classes séparées (avec éventuellement l'une qui contient une instance de l'autre), la sémantique n'en souffrira pas au contraire
    Une qui contient une instance de l'autre? C'est à dire? Avec un mécanisme d'héritage?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    En fait, ça a sans doute plus sa place dans conception, si ça te dit

    C'est un exemple typique où il faudrait que tu lises un livre sur les design patterns et leurs applications à l'orienté objet. Il y a une critique de livre qui paraîtra mardi sur http://uml.developpez.com/livres/

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Miles
    En fait, ça a sans doute plus sa place dans conception, si ça te dit
    Ok Miles, pas de problème...

    class A
    {
    private :
    B _instance_de_B;

    [...]
    };
    Oui, of course (je suis fatigué aujourd'hui... )

  6. #6
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class A 
    {
       private :
          B _instance_de_B;
     
       [...]
    };
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  7. #7
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Swoög
    Salut

    Alors, globalement les réponses seraient (à mon avis)

    1°) Quand la seconde classe peut-être considérée comme étant la première avec des améliorations (exemple : un point coloré EST un point AVEC une couleur)

    2°) Non, si la sémantique demande une classe, alors autant en mettre une

    3°) Non... vaut mieux faire deux classes séparées (avec éventuellement l'une qui contient une instance de l'autre), la sémantique n'en souffrira pas au contraire
    Je te pose directement mon problème:
    Si je fais une classe Experience qui contient juste comme variable le numéro d'expérience:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Experience {
    private:
    int num_experience;
     
    public:
    [...]
    }
    Et que ma classe Composant va TOUJOURS avoir besoin du numéro d'expérience, est-ce que je peux faire hériter Composant d'Experience???

    Ou est-ce que c'est débile ?

  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Miles, il semble que du coup tu aies répondu à ma question!

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par poukill
    Miles, il semble que du coup tu aies répondu à ma question!
    Ah, génial
    Pour ce genre de chose, regarde comme dit l'index de la rubrique UML mardi prochain

  10. #10
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Miles
    Ah, génial
    Pour ce genre de chose, regarde comme dit l'index de la rubrique UML mardi prochain
    Je regarderai...

    Non, Composant, c'est un composant électronique, bref un truc physique!
    Ca n'a rien à voir avec une expérience, même si chaque expérience nécessite un composant!

    Donc c'est une instance Experience que je devrai mettre dans Composant, c'est bien ça?

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Non, dans Experience, tu auras une instance de Composant - c'est quoi Composant pour toi ? -, car un composant n'est pas une expérience.

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par poukill
    Je me pose plusieurs questions:
    1) Dans quels cas faire hériter une classe d'une autre?
    2) Une classe avec une seule variable est-elle abbérante?
    3) Une classe peut-elle contenir des données qui ne pas vraiment propre à elle? (exemple : dans mon cas, une classe Composant qui contiendrait une variable numero_experience...)

    Bref, je vous remercie d'avance d'éclaircir ma lanterne.
    1) Une classe hérite d'une autre lorsque la nouvelle instance se comportera pour l'extérieur comme la première. Dans les autres cas, il faut voir du côté de la composition, par exemple.
    2) Non, ce n'est pas abbérrant, mais s'il n'y a aucune méthode qui travaille dessus, oui Par exemple pour un refactopring que j'ai fait, j'ai encapsulé une std::map dans une nouvelle classe avec des méthodes pour l'utiliser comme une espèce de liste triée.
    3) Normalement non, c'est à éviter. L'instance de la classe Composant devrait plutôt appartenir à une instance de Experience qui elle aura un numero_experience

  13. #13
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Par défaut
    Rapidement de mon cote:
    1) Dans quels cas faire hériter une classe d'une autre?
    On va partir du principe que tu parles de l'heritage d'implementation et dans ce cas je dirai jamais! Les raisons en vrac: rupture de l'encapsulation, couplage fort, semantique aleatoire, baisse de la flexibilite et complexite augmentee.
    Les alternatives: interface et composition


    2) Une classe avec une seule variable est-elle abbérante?
    Comme Miles, un seul attribut dans la classe, pas abberant, mais une seule methode oui

    3) Une classe peut-elle contenir des données qui ne pas vraiment propre à elle? (exemple : dans mon cas, une classe Composant qui contiendrait une variable numero_experience...)
    Elle peut (tout) mais c'est pas bien mais la dessus les explications de Miles sont claires.

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ouf, j'ai presque pas tout faux

  15. #15
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Merci à tous pour vos réponses!

    Citation Envoyé par Nip
    Rapidement de mon cote:
    On va partir du principe que tu parles de l'heritage d'implementation et dans ce cas je dirai jamais! Les raisons en vrac: rupture de l'encapsulation, couplage fort, semantique aleatoire, baisse de la flexibilite et complexite augmentee.
    Les alternatives: interface et composition
    Je suppose que tu parles là de deux classes bien différentes non???
    Car j'ai jamais vu l'héritage de deux classes faire une rupture d'encapsulation
    Mais bon, je suis loin de tout connaitre sur le sujet !

    Je pourrai avoir juste un soupçon d'explications? Je potasse de mon côté un bouquin de C++!

    Merci!

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Si, en fait tu rompts l'encapsulation de la classe mère car ce qui est protected peut être accédé sans passer par les fonctions publiques de la classe mère, donc à moins que tu ne le veuilles expressément pour des raisons louables, c'est à éviter.

  17. #17
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Tu veux dire, si je redéfinie des méthodes dans la classe fille c'est ça?
    Normalement, la classe fille appelle une méthode de la classe mère... ou alors je comprend plus rien à la programmation ?

  18. #18
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Par exemple, la classe mère a des fonctions protected qui sont appelées dans un ordre avec des préconditions et des postconditions.
    Si tu hérites de cette classe, tu pourrais accéder à ces fonctions directement, ce qui n'est pas forcément judicieux si tu ne sais pas les préconditions et les postconditions.
    Ou pire, tu le sais et tu programmes bien, mais qqn va hériter de TA classe de la même manière et mettre le souc partout...

  19. #19
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Sur la base, je vais partir d'un schéma comme celui de la pièce jointe.

    J'ai donc mis une instance de CFP (composant face au plasma) dans choc (jargon d'une expérience).
    De CFP, je fais hériter deux classes : Antenne et LPT qui sont deux types d'objet face au plasma.

    Ca me parait pas mal, non?

    Je suis en train de me pencher sur l'implémentation des méthodes pour ne pas faire d'erreur...

    EDIT : Le fait de mettre en private CFP est - il souhaitable?
    Schéma mis à jour plus loin!

  20. #20
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ca l'air d'être un bon début

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/01/2010, 08h31
  2. [POO] d’encapsulation des classe
    Par amazircool dans le forum Langage
    Réponses: 6
    Dernier message: 17/09/2007, 18h33
  3. [POO] Héritage des classes
    Par mic79 dans le forum Langage
    Réponses: 27
    Dernier message: 09/03/2007, 20h02
  4. [POO] Organisation des classes PHP
    Par AsQuel dans le forum Langage
    Réponses: 6
    Dernier message: 16/02/2007, 09h09
  5. [POO] faire des classes en php
    Par gromit83 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2006, 16h10

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