Programmation orientée objet [Résolu]

Signaler
Messages postés
20
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
24 juin 2005
-
florenth
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
-
Bonjour,
J'aurais voulu savoir comment on déclare un constructeur puis un destructeur dans une application car je n'y arrive pas, j'aimerais créer mon objet puis ensuite le détruire.
Merci d'avance.
Mon code est le suivant :

type
TDBExportation = class(TObject)

public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;

{ ----------------------Variables globales---------------------- }
var
FrmPresentation : TFrmPresentation;

constructor TFrmPresentation.Create(AOwner: TComponent);
begin
inherited;
FrmPresentation := TFrmPresentation.Create(Self);
end;

destructor TFrmPresentation.Destroy;
begin
FrmPresentation.Free;
inherited;
end;

4 réponses

Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008

Salut,

Aïe, aïe, aïe.

Tu nous poste un bout d'une déclaration de classe ( TDBExportation ) et
un bout de l'implémentation de la classe TFrmPresentation (qui est ta
fiche).

Il y a comme un non-sens mais passons.



Pour ton bout de code de la méthode Create, j'ai trois choses à redire:

- Inherited; Cette ligne de code appelle le constructeur hérité de
TFrmPresentation, en l'occurence TForm j'imagine, qui appellera le
constructeur hérité de TForm, TCustomFrom et ainsi de suite jusqu'a
TObject.

Chaque constructeur se charge d'initialiser (et/ou d'allouer) la
mémoire qu'il aura besoin en plus de celle fournie par la classe
ancètre.

Ensuite, chaque destructeur se charge de finaliser de libérer cette memoire précédemment allouée dans les méthodes de la classe.

Tu n'as donc pas besoin de creer ta classe en mettant la ligne FrmPresentation := TFrmPresentation.Create(Self);,



- FrmPresentation := TFrmPresentation.Create(Self); que
fait cette ligne ?? Elle appele le constructeur de TFrmPresentation
pour qu'il crée une instance de cette classe. Dans le cas présent, le
constructeur s'autoappelera indéfinimant.



- Toujours cette ligne de code. Delphi, en tant qu'outil R.A.D. (Rapid
Application Developpment) se charge d'écrire lui-même certains bouts de
code, comme par exemple le comstructeur de chaque Form et son
destructeur. C'est lui aussi qui gère les propriétés que l'on modifie
dans l'inspecteur d'objet. (voir les ficiers .dfm qui contiennent
toutes ces propriétés).

Ce n'est donc pas la peine, à toi, en tant que développeur Delphi, de
t'occuper de la création de tes fiches. Si tu veux intercepter le
constructeur, écris une procédure en réponse à l'evenement OnCreate de
ta fiche et une autre à l'évenement OnDestroy.



Voiula, j'espère avoir été clair sur cette notion de classe qui n'est pas si évidente que cela.

Va visiter ce site, très enrichissant:

http://fbeaulieu.developpez.com/guide/ chapitre X: les objets.



@ ++ Florent


Si tu ne te plantes pas ......
tu ne poussera jamais
Messages postés
20
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
24 juin 2005

salut, tu as raison je me suis trompé c'est bien

Type
TFrmPresentation = class(TForm)
Je me suis embrouillé car j'ai plusieurs unitées, a propos de ca d'ailleur, est ce que je peux créer un constructeur et un destructeur pour les autres unitées, d'après ce que tu me dis je ne suis pas obligé pour ma form mais je peux pour les autres unitées qui sont liées avec...
Messages postés
20
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
24 juin 2005

Pour etre plus précis j'ai une unité qui s'appelle UnitEntites :
unit UnitEntites;
type
{ Création de la classe TDBEntites }
TDBEntites = class(TObject)

public
{ Déclarations publiques }
function Lister(Appli, Table, ClusterRank: Integer) : TClientDataSet;
function ModifierLigne(Appli, Table, ClusterRank, LineRank, InfoColumnRank: Integer; InfoValue: WideString) : Boolean;
function SupprimerLigne(Appli, Table, ClusterRank, LineRank, NbLines: Integer) : Boolean;
end;

Dans ma form TFrmPresentation, est ce que c'est bien de mettre ce bout de code pour créer l'instance de Entites :

procedure TFrmPresentation.FormCreate(Sender: TObject);
begin
// Création de l'instance de Entites
Entites:= TDBEntites.Create;
// Appelle de la fonction OuvertureCatalogue de TFrmPresentation
FrmPresentation.OuvertureCatalogue;
end;

procedure TFrmPresentation.FormDestroy(Sender: TObject);
begin
// Libérer l'espace alloué
Entites.Free;
end;
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008

Oui, c'est très bien de créer sa classe dans le OnCreate puis de la libérer dans le OnDestroy.



Bonne suite ...

Florent

Si tu ne te plantes pas ......
tu ne poussera jamais