Polymorphisme et surcharge

Résolu
missNour83 Messages postés 7 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 9 avril 2009 - 29 mars 2009 à 18:05
missNour83 Messages postés 7 Date d'inscription jeudi 19 mars 2009 Statut Membre Derniè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.

7 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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).

 

3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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;

voila.

3
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
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 ...

Cordialement, Bacterius !
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
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 )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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.

0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
29 mars 2009 à 23:34
Interessant ... donc on s'en sert tous les jours sans forcément s'en rendre compte :)

Cordialement, Bacterius !

PS : au fait f0xi, j'utilise Opera maintenant c'est déroutant au début mais ça va drôlement plus vite que IE6 ... lol
0
missNour83 Messages postés 7 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 9 avril 2009
30 mars 2009 à 00:18
Merci tout le monde pour votre aide :-)
0
Rejoignez-nous