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

Langages de programmation Discussion :

POO : comment bien sous-classer ?


Sujet :

Langages de programmation

  1. #1
    Invité1
    Invité(e)
    Par défaut POO : comment bien sous-classer ?
    Bonjour à tous,

    J'ai un problème de conception objet, pour lequel j'aurai besoin de vos lumières.

    Je souhaite écrire une librairie traitant des flux RSS, Atom, ... qui sont autant de formats (XML) de diffusion de "news".

    Pour cela, j'aimerai écrire quelque chose de propre et de générique me permettant d'ajouter facilement par exemple une nouvelle version de RSS.

    J'avais prévu à l'origine de créer une classe parente "Feed", et de la sous-classer en "RSS", "Atom", ...

    Le problème, c'est que j'initialise mon objet à partir de données XML, sans savoir à l'avance si ce sont des données RSS, Atom ou autre. Résultat, je ne sais pas quel constructeur appeler. Et si j'appelle le constructeur "parent", il faudrait pouvoir "spécialiser" l'objet après avoir découvert son type.

    Quelle(s) sont la ou les méthodes propres pour faire cela ?

    J'espère avoir été clair dans mon explication.

    Merci d'avance

    zejames

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Il faut que tu soit le plus tôt possible indépendant du format de donnée. C'est le but que semble remplir ta classe Feed qui donne une interface commune à tout les types de flux.

    Ton problème, si j'ai bien compris, est que quand tu ouvre un flux, tu ne connais pas forcément son format.

    Pour règler le problème, il faut faire une classe emballage. Tu as donc une classe virtuelle Feed dont hérite les classes spécialisées RSS, Atom, etc. Ensuite, tu créés une classe avec un pointeur vers Feed et qui initialise ce pointeur avec la bonne classe fille dès que l eformat est connu.


    Voici en gros ce que donne l'interface:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    
    // Abstraction des données à la source.
    class Feed
    {
    pubilc:
    	virtual Get() = 0;
    
    };
    
    
    class FeedRSS : public Feed
    {
    pubilc:
    	Get();
    
    };
    
    
    
    // Voici la classe utilisateur.
    class News
    {
    	Feed* feed;
    
    public:
    
    	NewsFormat GetFormat();
    
    	// Par exemple.
    	News( )
    	{
    
    		switch ( GetFormat() )
    		{
    		case RSS: feed = new FeedRSS; break;
    		case Atom: feed = new FeedAtom; break;
    		}
    	}
    
    };

    Ce n'est bien sûr qu'une idée parmis d'autre, mais elle me parait assez usuelle.


    [edit]C'est du C++, je ne sais pas en quoi tu programme. J'avais oublier qu'on était sur Langages en Général[/edit]

  3. #3
    Invité1
    Invité(e)
    Par défaut
    Merci de ta réponse tout à fait intéressante...

    Pour compliquer un peu la tâche, je programme en ... objective C. La diffculté que je vois apparaître est qu'il n'y a pas de vrai constructeur en objective C.

    Qu'en pensent les experts dans l'assistance ?

    zejames

    Edit : je relis le post, et je pense en fait que ceci est tout à fait applicable, même en Objective-C.[/b]

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    normalement, le principe d'hériatge te permet de faire celà ...

    par exemple un type A parent d'un type B.
    si tu a :
    A a
    a = new B

    ton objet de type A est aussi un B. (enfin par héritage un B est un A). Donc normalement, pas de problème avec ce que tu veux faire.

    mais peut etre n'ai-je pas bien compris le probleme ...



    edit : en fait selenite te dis ça aussi. desolé je n'apporte rien de nouveau en fait
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

Discussions similaires

  1. POO - Comment bien faire un setter et getter
    Par tidus_6_9_2 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 23/01/2013, 16h01
  2. [VisualSVN] [Netbeans] comment bien utiliser Subversion sous Netbeans
    Par uetac dans le forum Subversion
    Réponses: 3
    Dernier message: 22/09/2009, 14h44
  3. Réponses: 8
    Dernier message: 30/06/2006, 14h56

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