Voilà une discussion intéressante.
Le Pascal Objet (jusqu'à aujourd'hui et jusqu'à preuve du contraire) ne permet pas de créer de variable de classe. Celà n'aurait aucun sens : une classe est assimilée à un concept. Un concept n'est pas fait pour stocker quelque chose. Ce sont les instances de la classe, c'est à dire leur représentation matérialisée en mémoire qui aura la charge de maintenir les valeurs.
Tel que tu as déclaré monAttribut dans ton exemple, tu déclares comme s'il s'agissait d'un simple membre d'une structure de type Record.
Une approche plus orientée objet voudrait que nous utilisions le qualificatif Property :
TMonObjet = class public property MonAttribut : integer; end;
|
A celà, plusieurs raisons :
1/- pouvoir définir finement la portée de ce membre de la classe (public, published, protected, private)
2/- en POO, le programme utilisant cette classe n'a pas à connaitre les détails de l'implémentation ni les valeurs potentiellement utilisables. Une classe doit être en mesure de protéger ses membres de toute valeur qui pourraient créer des effets de bord...
Et comme Delphi met à notre disposition (depuis Delphi 4) un outil hyper pratique sous la forme d'un élément de menu contextuel : "Compléter la classe sous le curseur" (raccourci SHIFT+CTRL+C):
TMonObjet = class private FMonAttribut: integer; procedure SetMonAttribut(const Value: integer); public property MonAttribut : integer read FMonAttribut write SetMonAttribut; end;
|
N'ayant pas précisé d'accesseur en lecture/écriture pour cette propriété, Delphi présume un accès complet et génère les noms et les squelettes de méthode dans l'unité (non reproduits ici).
Je voudrais rappeler aussi qu'il existe des conventions d'écriture (voir notamment :
Delphi coding standards) et qu'il serait bon, dans le cas présent de préfixer le nom de ta classe par la lettre T. Nous avons trop souvent vu de mélanges et d'erreurs à cause d'une confusion entre la classe et l'instance de la classe à cause de celà.
May Delphi be with you-------------------------------
Réponse au message :
-------------------------------
> ça donne :
> MonObjet = class
> monAttribut:integer; //c'est une var de classe
> public
> ...
>
> private
> ...
> end;
>
>
> Enfin je crois si qq'un peut confirmer quand même ???