[DELPHI] constructor et self ?

constructor et self ? [DELPHI] - Programmation

Marsh Posté le 26-03-2001 à 07:53:25    

voila, je n ai pas du tout compris a quoi pouvait bien servir c est de element, constructor et la methode self ( les deux sont independant ), constructor a un rapport avec l heritage ? ou peut etre self ? enfin si quelqu un pouvait etre clair sur ses points self et contructor ca serait sympa merci :).


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 26-03-2001 à 07:53:25   

Reply

Marsh Posté le 26-03-2001 à 09:29:44    

self c'est l'objet lui même. Comme this en C++.
Pour le constructeur, c'est la méthode qui est appelée quand tu crées l'objet.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 26-03-2001 à 14:56:53    

Le constructeur permet d'initialiser ton objet, peu importe qu'il y ai ou pas d'heritage, Simplement s'il y a heritage les constructeurs sont appelles dans l'ordre de l'heritage.
 
Self c'est une reference a l'objet, qui permet de resoudre les ambiguites, si par exemple une variable locale porte le meme nom qu'une globale ( ce qui est une faute a mon avis), mais surtout qui permet de "signer" les appels de ton objet :
tu passe Self en parametre a l'appeleant (par reference bien sur) et l'appelant peut rappeler ton objet pour obtenir d'autres elements...

Reply

Marsh Posté le 26-03-2001 à 15:02:57    

Oops pardon...
Self n'a rien a voir avec l'heritage. Mais dans le cas d'un methode de l'objet de base appelle sur un autre plus evolue, Self sera du type de l'objet de base, mais pointera sur l'objet reel.
 
Je dis que ca n'a rien a voir parce que on peut faire des systeme d'heritage sans, et on peut les utiliser sans heritage...

Reply

Marsh Posté le 26-03-2001 à 18:54:13    

j ai pas tout compris, niveauprogrammation objet je maitrise pas encore :), mais je vois un peu.
 
dans ce code:
  TTlabel = class (TLabel)
  public
  constructor create (AOwner:Tcomponent);override;
  procedure deplacer(Sender,source:TObject;X,Y:Integer;
      State:TDragState;var Accept:Boolean);
  procedure deposer(Sender,source:TObject;X,Y:Integer);
  end;
 
vous comprenez quoi ?
a part que TTLabel herite de toute les propiete de TLabel, il y a le constructor et le je vois pas trop pourquoi ?
ca serait juste parce que c est un nouvel objet ?
 
et une autre question:
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    function ligne_case_noire (tableau:array [1..4,1..4] of TTlabel):integer;
  private
    { Déclarations privées}
  public
    { Déclarations publiques}
  end;
 
je comprend pas vraiment tout ca, en fait c est surtout l objet sender, je vois pas ce qui fou la, enfin si je crois que c est juste l evenement on envoi un objet sender pour que l evenement s execute non ? je suis un peu paume :D.
 
sinon tout ca ca sort d un jeu de pousse pousse, que je programme avec un pote et avec notre gentil prof qui a pas ete capable de m expliquer pourquoi on tape certain truc :D.
 
sinon prochaine etape jevais matter les bouquin :D.
 
merci :).


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Marsh Posté le 27-03-2001 à 09:37:48    

constructor create (AOwner:Tcomponent);override;
-> tu "écrases" le constructeur de TLabel pour un faire un pour ta nouvelle classe. Je crois que tu es toujours obligé de le faire (j'en mets toujours un :D).
 
procedure FormCreate(Sender: TObject);
-> Sender c'est l'objet qui envoie l'événement ou un truc du genre


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 27-03-2001 à 10:33:29    

Je ne connais pas Delphi et mon Turbo Pascal est bien loin...
 
Tu as toujours interet a faire un constructeur pour initialiser ton objet.
 
Ta construction ressemble a un pattern notifier.
Le principe est le suivant.
Un objet de base Notifier comporte une methode UpDate(Sender *)
Un objet Sender comporte une methode AddNotifier(Notifier *) et une methode RemoveNotifier(Notifier*).
 
Tu surcharge l'objet Notifier pour faire faire ce que tu veux a la methode UpDate. Ensuite  tu enregistre ton Notifier dans le Sender (-> AddNotifier(Self)) qui ajoute ce Notifier a sa liste.
Chaque fois que le Sender est modifie il appelle les methode UpDate de chacun des Notifier en signant l'appel (UpDate(Self))
Lorsque tu ne souhaite plus etre informe des modifs tu desenregistre le Notifier (RemoveNotifier).
 
Le but est de decoupler un objet de sa representation graphique. Imagine un objet compteur, chque fois que sa valeur change il update ses Notifier qui sont en fait ses representation graphiques.
 
Dans ton cas il semble que se soit inverse...

Reply

Marsh Posté le 27-03-2001 à 20:29:03    

je maitrive pas encore, mais je comprend dejamieux :), merci beaucoup :).


---------------
"PAR LE POUVOIR DU CRÂNE ANCESTRAL, JE DETIENS LA FORCE TOUTE PUISSANTE".
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed