missNour83
Messages postés7Date d'inscriptionjeudi 19 mars 2009StatutMembreDernière intervention 9 avril 2009
-
29 mars 2009 à 18:05
missNour83
Messages postés7Date d'inscriptionjeudi 19 mars 2009StatutMembreDernière intervention 9 avril 2009
-
30 mars 2009 à 00:18
Salut,
Je travaille avec Turbo delphi 2006 en mode console.
Est ce que le polymorphisme et la surcharge s'agit de lamême notion ou ils sont différents?
Est ce que vous pouvez me donner un exemple.
Merci d'avance.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 29 mars 2009 à 23:33
exemple de polymorphisme :
var
S : TStrings;
begin
S := TStringList.Create;
end;
explication :
S est declaré en tant que variable de type TString, mais a la creation, nous utilisons la classe TStringList qui elle est descendante de TStrings.
Cela fonctionne dans ce sens. le polymorphisme ne fonctionne que dans le sens Ancetre > Descendant
autre exemple de polymorphisme :
var
Objets : array[0..1] of TObject;
begin
Objets[0] := TButton.Create;
Objets[1] := TPanel.Create;
end;
L'exemple le plus flagrant etant les propriétés Components et Controls (tableaux) de la classe TWinControl.
classe ancetre de tout les composants visibles pouvant contenir d'autres composants visible (TForm, TPanel).
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 29 mars 2009 à 23:43
exemple de surcharge (surcharge forcée) :
j'ai une classe a deriver, par exemple, je cherche a créer un Timer qui sera definit a 10 000 ms par defaut plutot qu'a 1000.
je crée donc une classe derivée de TTimer et je surcharge la propriété Interval dans sa declaration :
type
T10Timer = class(TTimer)
public
constructor Create(AOwner: TComponent); override; // surcharge de Create
published
property Interval; default 10000; // surcharge de la declaration
end;
constructor T10Timer.Create(AOwner: TComponent);
begin
inherited Create(AOwner); // appel du constructeur anceter (TTimer)
interval := 10000; // forcage de la nouvelle valeur de mon timer
end;
Autre exemple de surcharge (surcharge de priorité) :
nous allons ici surcharger une fonction existante dans l'unité Math (Max) qui ne sera surchargée qu'aprés une certaine portion de code.
uses Math;
function Test1 : integer;
begin
result := max(10,5); // on utilise la fonction max de l'unité Math (retoune 10)
end;
function Max(const A, B : integer): integer; // nouvelle methode Max
begin
result := 0;
if B > A then
result := 1
end;
function Test2: integer;
begin
result := Max(10,5); // on utilise la nouvelle fonction Max (retourne 0)
end;
function Test3 : integer;
begin
result := Math.Max(66, 99); // on réutilise la fonction Max de l'unité Math!
end;
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 29 mars 2009 à 18:51
Par définition, le polymorphisme c'est une méthode qui fait deux actions différentes, alors que la surcharge c'est par exemple :
L'objet ancêtre fait son action
||
L'objet descendant fait son action après celle de l'objet ancêtre
||
Un autre objet descendant du précédent continue de la même façon
Etc ...
Enfin je pense en tout cas, c'est ce que les mots "polymorphisme" et "surcharge" m'évoquent ...
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 29 mars 2009 à 20:17
surcharge = redéfinition
une sous-classe peut adapter une méthode héritée qui ne conviendrait pas totalement , ou pas du tout
Pour ca , il suffit de prévoir dans la sous classe une méthode possédant un même nom que la méthode héritée à redéfinir
2 facons possibles : soit on remplace la fonction , soit on récupère et on étend le code
polymorphisme :
on parle de polymorphisme quand ce n'est qu'a l'execution qu'on sait déterminer quelle méthode executée , quand la même méthode existe dans plusieurs classes
(tout au moins en Java , mais je pense que c'est la même chose en delphi )
Vous n’avez pas trouvé la réponse que vous recherchez ?
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 29 mars 2009 à 23:24
Polymorphisme = "plusieurs formes" est la possibilité d'utiliser une instance d'objet sans forcement en connaitre le type exact.
pour la mettre en oeuvre, il suffit par exemple de regarder les gestionnaires d'evenement de tout objets ou le parametre Sender est toujours de type TObject (ancetre commun de tout objets en delphi).
on peu alors definir dans la methode un type a notre objet avec cette methode (as) :
Sender as TButton
La surcharge permet quand a elle de "surplomber" un element (une propriété, methode, classe ou unité) en "remplacant" ces elements par de nouveaux elements ayant le même nom. la surcharge intervient a diferents niveaux :
par priorité de declaration, par visibilité dans une classe, par forcing grace a des directives, etc.