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 :

Conception de classe


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut Conception de classe
    Voila, je me pose souvent une question.

    Si je veux faire des objets pour représenter des fruits par exemple.

    Faut-il mieux que je fasse une classe fruit et que pour chaque objet je mette un nom différent avec des caractéristiques différentes. A la rigueur, en faisant des objets constants pour chaque type de fruits.

    Ou alors faut-il mieux faire une classe de base fruit avec des classes dérivées différentes pour chaque fruit ?


    Peut-être suivant la complexité des classes une technique vaut mieux qu'une autre ?

  2. #2
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    Salut,

    Personnellement j'opterais toujours pour l'heritage.

    - Un Interface Fruit
    - Eventuellement des sous categories (Agrumes, baies, etc...)
    - Puis les implémentations spéicifiques a chaque fruit (Pomme, Poire , orange etc ...)

    XXiemeciel

  3. #3
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut
    J'opterais aussi pour l'héritage dans ce cas là. Voir aussi ici : http://c.developpez.com/faq/cpp/?pag..._encapsulation

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Pour quoi faire ?

    On ne peut à mon sens faire un design d'une classe que dans le cadre d'un cadre d'application bien défini, et non dans l'absolu.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Points : 121
    Points
    121
    Par défaut
    +1 pour JolyLoic.

    En effet, tant que tu n'as pas répondu à cette question :
    - L'important c'est le nom du fruit ou le type ?
    impossible de dire s'il y a héritage ou non.

    tu peux très bien écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Fruit {
     
     private :
     string nomdufruit;
     int tailledufruit;
     etc...
     
     }
    tout comme faire des héritages comme proposé ci-dessus.


    Il te faut donc une application précise.

  6. #6
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    Pour être plus précis, je voudrais savoir pour des objets se comportant de manière identique, d'où l'exemple de mes fruits, mais au lieu d'avoir 5 propriétés, si il y en a une vingtaine par exemple et que chaque fruit différent ai des valeurs pour chaque propriété différente.

    Faut-il mieux faire une classe gérant chaque valeur pour chaque fruit différent, ou bien une seule classe en faisant des constantes du types :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const Fruit _Banane("Banane", 10, 20, 12, 13, 14.2f, 'F', ....., 0);
    const Fruit _Pomme("Pomme", 8, 5, 17, 12, 7.5f, 'R', ....., 1);
    Puis si on veut instancier une pomme on a plus qu'à faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fruit unFruit = _Pomme;
    Alors qu'avec l'héritage, sa aurait donné :

    Et c'est le constructeur de pomme qui initialise le fruit. L'avantage de l'héritage, c'est que si on veux plus tard spécialiser la pomme, c'est facile.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Points : 121
    Points
    121
    Par défaut
    Vu l'exemple que tu proposes, il s'agit simplement d'instances d'une même classe.

    Autre question : Quelles sont les fonctions-membres et propriétés de tes classe banane et pomme ? Si ce sont les mêmes, pas besoin d'héritage et vu l'exemple donné, les seules différences concernent les valeurs des attributs ce qui n'est rien d'autre que le fonctionnement normal d'une classe.

    Il semble quand même que le nom du fruit soit important et qui lui ne changera pas. Tu peux faire une map du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map<string,Fruit> repfruit
    avec en clef primaire le nom du fruit et dans la classe 'Fruit' tu mets tout tes attributs ainsi que les fonctions-membres.
    Bon, y'a redondance entre clef primaire et la donnée-membre 'nomdufruit' mais je trouve que c'est plus explicite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    repfruit["PommeReinette"] = Fruit("PommeReinette",10, ....) 
             repfruit["Banane"] = Fruit("Banane",5,   ....)  par exemple.
     
             cout << repfruit['Pomme'].prix();         
    (pourquoi pas, avec la méthode prix() explicité dans 'Fruit')

    Si ceci te semble insuffisant, il faut que nous indiquer ce qu'une pomme a (ou sait faire) de plus qu'une banane.
    Même si tu as admettons plusieurs type de pommes, tu peux t'orienter sur une multi-map... Si besoin je te donnerai un exemple.


    Donc, selon moi, toujours rien en faveur d'un héritage ))

  8. #8
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    Salut,

    Personnellement je maintiens mon premier avis de l'heritage. Il me semble beaucoup plus pratique de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Fruit* fruit01 = new Pomme();
    Fruit* fruit02 = new Banane();
    et que chaque instanciation connaisse ces propres capacités. Mais bon ça doit etre une question de gout

    XXiemeciel

  9. #9
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par xxiemeciel
    Personnellement je maintiens mon premier avis de l'heritage
    Personnellement, je considere que la situation n'a pas evolue depuis la remarque de Loic: il n'y a pas assez d'info pour savoir quelle est la bonne solution.

  10. #10
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    C'est bon, avec une map ca devrait bien marcher, ca permet d'avoir une instanciation d'objets bien plus simple, il faut juste que je me mette à étudier un peu les maps.

    Merci.

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

Discussions similaires

  1. Probleme de conception de classes
    Par Seth77 dans le forum C#
    Réponses: 11
    Dernier message: 31/01/2007, 09h40
  2. Conception de classes
    Par Seth77 dans le forum Général Dotnet
    Réponses: 8
    Dernier message: 15/01/2007, 15h57
  3. [POO] conception des classes
    Par poukill dans le forum C++
    Réponses: 229
    Dernier message: 19/07/2006, 08h28
  4. [conception] reprise classes mal pensées
    Par in dans le forum Général Java
    Réponses: 8
    Dernier message: 05/06/2006, 13h45
  5. probleme de conception de classe
    Par NhyMbuS dans le forum C++
    Réponses: 2
    Dernier message: 08/05/2005, 17h10

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