Enseignement > Programmation orientée objet > Delphi > Introspection  

" Connais-toi toi-même " Platon

1. Les méthodes de TObject

La classe TobjetPossède les méthodes permettant de créer, gérer et détruire une instance en allouant, initialisant et libérant la mémoire nécessaire à cet objet.
Elle possède également plusieurs méthodes permettant de consulter les informations sur le type de classe et l'instance d'un objet

  • Function ClasseName : string    renvoie le nom de la classe d'un objet
  • Function ClassParent : TClass   renvoie le type de l'ancêtre immédiat d'une classe
  • Function InheritsFrom(C: TClass): Boolean;   renvoie vrai si l'objet hérite de la classe
  • Opérateur IS

Exemple :

if monVehicule.ClassName = 'TVelo' then writeln('c''est un vélo') ;

monVehicule.ClassParent retourne TBicyle

monVehicule.InheritsFrom(TVehicule) est vrai

if monVehicule IS TVelo then writeln('c''est un vélo');

NB : Si monVehicule IS TVelo est vrai alors monVehicule IS TBicycle est également vrai ainsi que put tous ses ancetres

2. Affectations d'objet

Une référence désigne un objet appartenant à une classe

var monVehicule : TVehicule
monVehicule
désigne un objet de la classe TVehicule

Mais une référence peut désigner un objet appartenant à une classe qui héritent de la classe spécifiée.

Exemple

var monVehicule : TVehicule ;
var monVelo : TVelo ;
begin
  monVelo := TVelo.Create ;
  monVehicule := monVelo ;
  writeln(monVehicule.ClassName) è
TVelo

En mémoire, monVehicule et monVelo désigne le même objet

L'inverse n'est pas (directement) possible

monVelo := monVehicule ; è Erreur de compilation

3. Transtypage

Possibilité pour un objet d'utiliser les attributs et les méthodes d'une classe descendante
grâce à l'opérateur AS

if monVehicule IS TVelo then (monVehicule AS TVelo).Pedaler()

ATTENTION, il faut bien être sûr de la relation d'héritage avant d'effectuer le transtypage.
Aucune vérification ne peut être faite à la compilation.
Erreur de transtypage è Comportement erratique, plantage, message d'erreur...