Polymorphisme et surcharge [Résolu]

missNour83 7 Messages postés jeudi 19 mars 2009Date d'inscription 9 avril 2009 Dernière intervention - 29 mars 2009 à 18:05 - Dernière réponse : missNour83 7 Messages postés jeudi 19 mars 2009Date d'inscription 9 avril 2009 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

7 réponses

f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 29 mars 2009 à 23:33
+3
Utile
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).

 

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 29 mars 2009 à 23:43
+3
Utile
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.

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 29 mars 2009 à 18:51
0
Utile
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 !
Commenter la réponse de Bacterius
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 29 mars 2009 à 20:17
0
Utile
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 )
Commenter la réponse de Nicolas___
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 29 mars 2009 à 23:24
0
Utile
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.

Commenter la réponse de f0xi
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 29 mars 2009 à 23:34
0
Utile
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
Commenter la réponse de Bacterius
missNour83 7 Messages postés jeudi 19 mars 2009Date d'inscription 9 avril 2009 Dernière intervention - 30 mars 2009 à 00:18
0
Utile
Merci tout le monde pour votre aide :-)
Commenter la réponse de missNour83

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.