Les Classes

Avec Delphi 1, Borland introduit la notion de classe dans le langage Pascal.
Il n'y pas de différence fondamentale entre un Object et une Class, mais tout un tas de facilités grandement apréciables.


{ Déclaration d'une Class simple en Borland Delphi }

Type
 TMonObjet=class
  X:integer;
  procedure Initialise(I:integer);
  function Calcul(Y:integer):integer;
 end;

procedure TMonObjet.Initialise(I:integer);

begin
 X:=I;
end;

function TMonObjet.Calcul(Y:Integer):integer;
begin
 Calcul:=X*Y;
end;

Var

 Obj:TMonObjet;
begin
 Obj:=TMonObjet.Create;
 Obj.Initialise(2);
 WriteLn(Obj.Calcul(4));
 Obj.Free;
end.
Premier grand changement, la class est implicitement un pointeur (et sous Delphi le caractère "^" est optionnel).

Tous les objets (en fait, les classes, mais par abus de langage je parle ici d'objet) descendent de la classe TObject; celle-ci possède
  • un Constructor
  • un Destructor
  • et une méthode Free qui vérifie la validité de SELF avant d'appeler le destructor...
    c'est en un peu plus fin un "if Obj<>nil then Obj.Destroy".
On trouve également une série de méthodes de class (contrairement aux méthodes, elles s'appliquent à la class objet et pas à l'objet lui-même); on trouve notamment ClassName, ClassParent et ClassType qui permettent d'identifier la classe d'un objet.

On trouve aussi des méthodes permettant d'obtenir des infos sur l'objet lui-même, comme FieldAddress, MethodAddress et MethodName qui retournent des infos sur les variables et méthodes de l'objet.

On trouve enfin des méthodes de gestion de message qui permettent la gestion des "Messages de Microsoft Windows".

Les Composants

Avec Delphi, Borland introduit aussi tout une bibliothèque d'objets, la VCL pour Visual Component Library.
Le "Composant" est le premier niveau d'objet de la VCL, il est manipulable à la souris lors de la conception d'un projet delphi mais reste invisible pendant l'execution du programme...on trouve à ce niveau, les composants d'accès Base de donnée, de communication, de traitement...tout ce qui ne comprend pas d'interface utilisateur.
Le composant possède un propriétaire : Owner; cette propriété assure que lors de la destruction du propriétaire d'un objet, l'objet est lui-même détruit; elle est attribué à la création du composant:
Constructor TComposant.Create(AOwner:TComponent);

Un point d'Owner:

la valeur de Owner peut prendre quelques valeurs remarquables :
  • Application, c'est l'objet de plus haut niveau d'une application Delphi, en créant un composant dont le propriétaire est "application", vous vous assurez qu'il sera détruit en quittant votre programme (fin de l'application).

  • Form1, ou tout autre composant de type TForm, sur une application contenant différentes fenêtres, vous vous assurez de la destruction du composant à la fermeture de la fenêtre à qui vous attribuer le composant.

  • SELF, ce paramètre parfois mal compris indique tout simplement que l'objet créé depuis une méthode objet aura pour propriétaire l'objet à qui appartient la méthode en cours ! Revoir l'explication de SELF dans le chapitre Object

  • nil, il est tout à fait valide d'indiquer que le composant ne possède pas de propriétaire (nil = 0), mais il vous appartiendra alors de le détruire en temps util, personne ne le fera à votre place.

Les Controls

Quand un objet est apparant à l'écran (un bouton, un zone de saisie...) c'est qu'il dérive de TControl, TControl dérive lui-même de TComponent et tout ce que l'on vient de dire reste valide.
Une autre notion qui porte souvent à confusion est celle du Parent, le Parent d'un control, est le control dans lequel il se situe... le bouton peut être sur un TPanel qui lui même est sur un TForm, qui lui même est sur un TApplication.
Le Parent détermine donc directement la relation visuelle entre un parent et son enfant. Contrairement à l'Owner, le Parent n'est pas spécifié dans le constructor, il faut le faire à la main :


{ Création maniuelle d'un object visuel }
begin
 Button1:=TButton.Create(Form1);
 Button1.Parent:=Panel1;
 Button1.Show;
end.
Ici, on crée un bouton qui sera géré par Form1 (notamment le click, par Form1.Button1Click) alors qu'il sera affiché à l'intérieur de Panel1.

Je sais, vous n'avez jamais écrit ce code; en fait Delphi le fait pour vous quand vous placez à la souris un TButton sur un TForm; c'est l'objet des fichiers DFM qui stockent toutes ces informations pour que vous n'ayez pas à la faire à la main...pour plus d'info sur les DFM, voir TPersistent, TReader et TWriter.