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 :

Héritage


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 62
    Par défaut Héritage
    Bonjour,
    J'ai un programme avec des classes dont la hiérariche est assez flagrante. COmme au début les différences entre les sous classes étaient très petites et que le nombre de sous classes etait grand (environ 20), j'ai décidé de ne pas faire d'héritage et à ajouter une variable int type. Le problème c'est que petit à petit des différences apparaissent, et que je commence a avoir des switch(type) un peu partout. Au dela des considérations habituelles sur la présentation du code, je me demandais si de cette facon mon code était plus lent ou pas, puisque la je dois faire en moyenne 10 comparaisons pour trouver le bon type, et je ne sais pas combien de temps il faut pour trouver la bonne sous classe (accès direct?).
    Je sais pas si j'ai été très clair, pourtant je sais que c'est assez clair dans ma tête

    Qu'en dites vous?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca me paraît pas terrible (et pas maintenable, flexible, ...) comme design Niveau performances je pense que c'est pas terrible non plus, même si dans 99% des cas ce sera de toute façon négligeable.

    Habituellement on essaye de jouer avec le polymorphisme, mais bien entendu ça dépend du contexte. Tu peux décrire un peu plus ton problème ainsi que ta hiérarchie de classes ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 62
    Par défaut
    Ma hiérarchie c'est une classe Controle et des sous classes "Bouton", "Liste", "Edit"...
    Ces sous classes ont toutes les mêmes types de données jusqu'à maintenant, c'est pour ca que je n'ai pas fait de sous classe.
    Par contre j'ai plein de tableau de type:
    char* defaultText[] = {"Bouton", "Liste", "Zone d'édition"};
    int defaultSize[] = {70, 100, 100};
    et
    #define BUTTON 0
    #define LIST 1
    #define EDIT 2

    et une donnée type parmis {BUTTON, LIST, EDIT}, de telle sorte que je fais par exemple defaultText[type] ou defaultSize[type] pour avoir la valeur appropriée.

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Ici, le switch est définitivement un mauvais désign. Surtout quand on commence à avoir besoin d'autant de widgets spécialisés.
    Au fait, pourquoi réinventer la roue ? Ce n'est pas comme si il en manquait (QT, GTK+, win32gui, Adam & Eve, wxWidgets, plus tous les frameworks payants et propriétaires)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Pkoi utiliser le c++ si c'est pour faire une telle horreur .
    Je plaisante mais quand on utilise un langage objet autant profiter de ses qualités.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 62
    Par défaut
    Je ne réinvente rien, j'utilise ceux de Windows mais comme fais un editeur de Dialogue, j'ai besoin de sous-classer tous les contrôles
    Comme je l'ai dit au début, le design je m'en fous un peu, ce qui m'intéresse c'est juste la performance de mon code

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 62
    Par défaut
    Vous avez raison, j'ai décidé d'utiliser l'héritage. Il me reste un truc assez lourd, savez vous s'il y a un moyen de faire ca plus proprement:

    Window* w;
    switch(n)
    {
    case 1:
    w = new Button();
    break;
    case 2:
    w = new Edit();
    break;
    ...
    }

    (je veux parler d'une sorte de tableau t de classes, pour faire w = new t[n]())

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Une factory ?

    (Pour ce qui est des vitesses, inutile de faire des optimisations sans avoir mesurer lesquelles devaient être mises en place. De toutes façons, un code maintenable est 100 fois préférable à un code rapide.)
    (Et sinon, google -> "n1359 C++", pour ce qui est des performances des constructions du C++)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 62
    Par défaut
    Une factory? Ca me dit rien du tout, tu peux préciser ou me diriger quelque part?
    Merci

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    C'est discuté de temps à autres (-> recherche avancée). Il faut regarder du côté des design patterns. C'est classique et à connaitre.
    Loulou a un tutoriel qui présente les flyweight factory de sûr, pour les plus générales, je ne sais plus.
    Dans un coin de mon site, j'ai une implémentation à 3/4 finie (il manque les créateurs flyweight) et dont la doc doit être réécrite. Elle est inspiré de celle présentée dans Modern C++ Design par Andrei Alexandrescu (et donc dans loki) et d'un vieil article du défunt C++ Report. factory.hpp (fichiers de tests); elle vaut ce qu'elle vaut.

    La version simple correspond à un switch. La plus complexe (traitée dans les liens que j'ai donnés) consiste à enregistrer des créateurs d'objets dans une map (ou assimilé).
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 62
    Par défaut
    Merci

Discussions similaires

  1. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  2. [Héritage] Vos commentaires....
    Par Fyna dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 03/05/2005, 22h10
  3. [XML Schemas]héritage multiple
    Par nicolas_jf dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 12h55
  4. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  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