hierarchie polymorphique , instanciation dynamique sans if

hierarchie polymorphique , instanciation dynamique sans if - C++ - Programmation

Marsh Posté le 29-05-2009 à 19:55:51    

Hello,

 

Question architecture logicielle.

 

Soit une architecture classique mère et deux filles.

 

le choix de la fille dépend d'un paramètre contenu dans un fichier.

 

Ma question c'est, suis-je obliger d'avoir recours à un vilain if pour instancier corectement le pointeur sur la classe de base ?

 

if(param =1)
new fille1
else
new fille2

 


je peux pas m'en sortir avec des templates ou autrechose ?

 

Merci


Message édité par Glock 17Pro le 29-05-2009 à 20:02:05
Reply

Marsh Posté le 29-05-2009 à 19:55:51   

Reply

Marsh Posté le 29-05-2009 à 21:36:13    

c une question con?

Reply

Marsh Posté le 29-05-2009 à 22:20:03    

les templates c'est pour les valeurs constantes connues à la compilation, ici tu lis des variables depuis un fichier.
 
Si ton paramètre est un entier, tu as le switch ou le tableau de pointeurs de fonctions, mais bon c'est lourd pour pas grand chose. Quel est le problème avec les if ?

Reply

Marsh Posté le 29-05-2009 à 23:20:23    

fais une abstract factory quoi

Reply

Marsh Posté le 30-05-2009 à 00:34:52    

oui c'est ce que je fais mais t'as toujours besoin de if

Reply

Marsh Posté le 30-05-2009 à 00:59:17    

jesus_christ a écrit :

Quel est le problème avec les if ?


je sais pas je touve pas ça top/élégant

Reply

Marsh Posté le 30-05-2009 à 08:44:08    

une AF avec des if ? ton implantation est foireuse car ca devrait etre basé sur une association id->fonction de generation


Message édité par Joel F le 30-05-2009 à 08:44:51
Reply

Marsh Posté le 31-05-2009 à 22:01:48    

je suis toujours obliger de ifé en sorti de l'AF pour savoir quel type d'objet je veux construire

 

if(param1)
AF<baseCLass,DerivedClass>.create
else
AF<baseClass,Derived2class>.create

Message cité 1 fois
Message édité par Glock 17Pro le 31-05-2009 à 22:03:07
Reply

Marsh Posté le 31-05-2009 à 22:31:46    

Un choix qui dépend d'une condition, tu peux tourner ça comme tu veux, c'est soit:
- template, spécialisation
- if

Reply

Marsh Posté le 01-06-2009 à 01:51:57    

Glock 17Pro a écrit :

je suis toujours obliger de ifé en sorti de l'AF pour savoir quel type d'objet je veux construire
 
if(param1)
AF<baseCLass,DerivedClass>.create
else
AF<baseClass,Derived2class>.create


 
ton code d'appel à ta factory devrait plutôt ressembler à ca :
BaseClass* instance = AF<BaseClass>::Create( param1 );
 
param1 étant l'id (par exemple une string) et tes deux classes dérivées ayant été au préalable enregistrées dans ta factory en donnant l'association id / classe dérivée. Du coup, ton if inélégant se transforme en recherche dans une map de ta factory, et là, tout est beau et joyeux


---------------
last.fm
Reply

Marsh Posté le 01-06-2009 à 01:51:57   

Reply

Marsh Posté le 02-06-2009 à 20:25:24    

exact en faite le code que j'ai fournit me sert à enregistrer. et pour créer je fais comme ton code. Cependant je n'avais pas forcément envie d'enregistrer dans ma factory une classe qui ne sera jamais créer, d'où mes if

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed