question POO

question POO - C#/.NET managed - Programmation

Marsh Posté le 27-11-2006 à 10:41:46    

J'ai une classe fille F qui hérite d'une classe mère M
 
Je change le corps d'une méthode de la classe F, héritée de la classe M
Mais je ne change pas la liste des paramètres envoyés à cette méthode.
 
Au final la méthode effectue le meme travail, mais j'affine dedans certains variables et requetes SQL, car
sinon la requete plante.
 
Ce changement est a considérer comme de la surcharge ou du polymorphisme ?
 
j'aurai tendance a dire :
- que c'est pas de la surcharge car bien que la méhode redéfinie porte le meme nom que dans la classe M, je ne touche à pas a la liste des parametres envoyés, ni en nombre ni en typage
- que c'est du polymorphisme, car je redéfinis le corps de la méthode.
 
C'est cela ?

Reply

Marsh Posté le 27-11-2006 à 10:41:46   

Reply

Marsh Posté le 27-11-2006 à 11:04:33    

oui
 
la méthode en question est bien virtuelle ?

Reply

Marsh Posté le 27-11-2006 à 11:05:21    

tu veux dire abstraite ?

Reply

Marsh Posté le 27-11-2006 à 11:13:09    

yep

Reply

Marsh Posté le 27-11-2006 à 11:20:46    

ah zut j'avais pas fait gaffe que je suis dans la section .Net
mais bon ma question porte sur la POO , pas sur un langage en particulier
 
Non ma méthode est pas virtuelle car je travaille en PHP5.
mais si je travaillais en C# oui elle serait virtuelle.

Reply

Marsh Posté le 27-11-2006 à 11:38:55    

donc si la méthode de la classe M était abstraite et que je la définis dans la classe F (forcément)
c'est donc du polymorphisme.
c ca ?


Message édité par jokaritaff le 27-11-2006 à 11:39:43
Reply

Marsh Posté le 27-11-2006 à 11:42:39    

tu peux aussi la définir dans M

Reply

Marsh Posté le 27-11-2006 à 11:56:53    

non le corps de la méthode dans M est trop générique
J'ai mis tout ce qui pouvait etre commun a toutes les classes filles
 
Mais chaque classe fille a ses spécificités (c pour de la persistance d'objet)
 
D'ou l'interet d'abstraire la méthode dans M.
 
En C# je suppose qu'il n'est pas possible de modifier seulement le corps d'une méthode polymorphée, si on indique pas que la méthode dans M est abstract
 
Au fait 2 questions sur C# :
- dans la pratique ya une différence entre abstract et virtual ?
 
- si je veux surcharger une méthode, je dois obligatoirement préciser le mot clé override avant le nom de la méthode, ou le compilateur déduit la  surcharge en voyant que ya plusieurs méthodes avec le meme nom, mais avec des parametres en nombre et type différent ?

Reply

Marsh Posté le 27-11-2006 à 14:09:38    

jokaritaff a écrit :

non le corps de la méthode dans M est trop générique
J'ai mis tout ce qui pouvait etre commun a toutes les classes filles


Ce que je voulais dire c'est que tu peux avoir une implémentation dans M ET dans F
 

jokaritaff a écrit :

Au fait 2 questions sur C# :
- dans la pratique ya une différence entre abstract et virtual ?


abstrat pour les classes, virtual pour les méthodes
 

jokaritaff a écrit :

- si je veux surcharger une méthode, je dois obligatoirement préciser le mot clé override avant le nom de la méthode, ou le compilateur déduit la  surcharge en voyant que ya plusieurs méthodes avec le meme nom, mais avec des parametres en nombre et type différent ?


Essayes

Reply

Marsh Posté le 27-11-2006 à 14:17:36    

Citation :

Ce que je voulais dire c'est que tu peux avoir une implémentation dans M ET dans F


effectivement : un implementtation générique dans l
 
abstrat pour les classes, virtual pour les méthodes
 
 
Essayes

Reply

Marsh Posté le 27-11-2006 à 14:17:36   

Reply

Marsh Posté le 27-11-2006 à 14:20:47    

Citation :

Ce que je voulais dire c'est que tu peux avoir une implémentation dans M ET dans F


effectivement : un implementation générique dans M, et une implémentation plus spécique dans F
 

Citation :

abstrat pour les classes, virtual pour les méthodes


ok, merci
 
 

Citation :

Essayes


j'ai pas Visual Studio au boulot, mais je vais un peu m'amuser sur SharpDevelop

Reply

Sujets relatifs:

Leave a Replay

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