Les Classes :-)

Les Classes :-) - Delphi/Pascal - Programmation

Marsh Posté le 01-10-2004 à 23:42:32    

Salut les amis,
 
Bon, il est temps pour moi d'utiliser les classes pour passer à des choses  nouvelles...bonne résolution n'est-ce pas ;)
 
Première confrontation, premier problème.  
 
Soit une classe TMaClasse. Sans aller trop loin, on va dire qu'elle contient 2 variables Var1 et Var2 de type String.  
 
Bon maintenant grosse question existentielle : Je met un bouton sur ma fiche et à l'événement OnClick, je met cela :
 


procedure TfrmTest.btTestClick(Sender: TObject);
var
    aTest: TMaClasse;
begin
 
    aTest := TMaClasse.Create;    
    Showmessage('Objet créé');
    aTest.Free;
end;


 
Donc à partir de là, je peux accéder au contenu de mon objet aTest, c'est à dire aTest.Var1 ou aTest.Var2. Ma question est donc, est-ce que je peux y accéder à partir de n'importe quel endroit de mon programme ? A mon avis non, car l'instance se trouve dans la procédure btTestClick.
 
Dans ce cas, je voudrai savoir comment utiliser les classes dans le cadre d'un programme qui, par exemple, ouvre un fichier, charge des données à partir de celui-ci et qu'ailleur dans le programme on utilise ces données chargées...
 
Moi jusqu'au jour d'aujourd'hui j'utilise des variables globales dans lesquelles je met tout ce que je veux et que je peux récupérer à tout moment n'importe où dans le programme.
 
C'est cet aspect que j'arrive pas à comprendre avec les classes... :??:  
 
A moins que la solution se trouve dans la déclaration d'un objet de ma classe dans les variables globales du programme ??
 
Beaucoup de questions pour lesquelles j'attends une réponse de votre part.
 
Merci à tous.
 
Inekman.


Message édité par Inekman le 01-10-2004 à 23:42:54
Reply

Marsh Posté le 01-10-2004 à 23:42:32   

Reply

Marsh Posté le 02-10-2004 à 15:39:37    

En Delphi, une variable d'instance de classe est un pointeur.
aTest n'est donc pas l'instance de la classe mais un pointeur vers cette instance.
Ton instance existe tant que tu ne fais pas le Free dessus. Dans ce cas-ci tu détruis l'objet juste après sa création, donc il n'est pas utilisable ailleurs.
Mais tu pourrais par exemple faire :
UnObjet := aTest;
avec UnObjet qui est déclaré en global, ou dans la Form.
Si tu détruits aTest le pointeur qui est dans UnObjet ne sera plus valide par contre (vu qu'ils pointaient tous deux vers la même chose). C'est comme ça qu'on attrappe des "Access violation xxx at address yyy" :D

Reply

Marsh Posté le 02-10-2004 à 16:04:34    

Juste un conseil qui un jour te sauvera la vie, utilise FreeAndNil(aTest) plutôt que aTest.free

Reply

Marsh Posté le 02-10-2004 à 16:10:34    

Ça n'aidera pas dans le cas où plusieurs variables pointent vers un même objet...

Reply

Marsh Posté le 02-10-2004 à 17:29:28    

Donc, je récapépète et vous me dites si j'ai compris ou si je suis à côté de la plaque :)
 
Si je déclare une variable aTest, qui est un pointeur vers une instance de ma classe, en global alors je pourrai accéder à celle-ci partout dans mon programme.
 
Dans ce cas, une question me taraude...Pourquoi on entends des personnes dire que les variables globales c'est caca ?

Reply

Marsh Posté le 02-10-2004 à 17:31:06    

Ça compte pas vraiment comme des variables globales ça je pense.

Reply

Marsh Posté le 02-10-2004 à 17:34:12    

en fait, elles sont nommées à la création du logiciel mais pas vraiment créées c'est ça ?  
 
Elles seront réellement créées quand on fera  
aTest := TMaClasse.Create;
 
c'est bien ça ?

Reply

Marsh Posté le 02-10-2004 à 19:32:37    

Oui, mais ce que je voulais dire c'est que quand on parle de variables globales qui sont pas bien, on désigne plutôt les variables ordinaires, comme des entiers, chaînes etc.
Il faut bien que les objets "parents" soient définis quelque part (la fenêtre principale, l'objet qui gère les autres objets dans ton soft, etc.)


Message édité par antp le 02-10-2004 à 19:32:52
Reply

Marsh Posté le 02-10-2004 à 20:02:37    

aaaaahhhh ben voilà, tu me rassures :D
 
Tu sais quoi, j'ai utilisé un logiciel qui s'appelle Ant Renamer intensivement ces derniers jours. Qu'est ce que ça m'a fait bizarre (surtout plaisir) quand j'ai vu que c'était toi son papa. Vraiment magnifique ce logiciel, chapeaubonnet bas m'sieur. ;)

Reply

Marsh Posté le 02-10-2004 à 20:10:54    

:D
En plus les sources Delphi sont disponibles, donc tu peux voir comment j'ai fait avec les classes et objets en global :whistle:

Reply

Marsh Posté le 02-10-2004 à 20:10:54   

Reply

Marsh Posté le 02-10-2004 à 23:01:23    

ah ben crois-moi que je vais le dévorer ton code source. J'adore la programmation, ce qu'on fait en cours c'est pas tip top alors je m'amuse chez moi, vive la prog ! et vive les programmeur comme toi qui nous apprennent des éléments de programmation..ça tue :)


Message édité par Inekman le 02-10-2004 à 23:01:40
Reply

Marsh Posté le 02-10-2004 à 23:26:52    

Au cours on apprend surtout à apprendre ;)
On apprend énormément en programmant par soi-même, et ensuite au boulot :D (d'après ma maigre expérience)


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

Marsh Posté le 04-10-2004 à 14:14:16    

hahahahahah juste en decu de implentation  
uses nom de l'uniter ou ta class il y est

Reply

Marsh Posté le 04-10-2004 à 14:16:16    

sunboy a écrit :

hahahahahah juste en decu de implentation  
uses nom de l'uniter ou ta class il y est


 
Et en français ça donne quoi ? :??:


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

Marsh Posté le 04-10-2004 à 14:18:11    

quoi en française je suis mauvais , je t'indique l'astuce c'est tout

Reply

Marsh Posté le 04-10-2004 à 14:21:31    

- Ta "phrase" est pas vraiment compréhensible
- Ça n'a pas grand chose à voir avec la question que posait l'auteur, je ne vois pas où est l'"astuce"


Message édité par antp le 04-10-2004 à 14:23:06

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

Marsh Posté le 04-10-2004 à 14:24:10    

j'en déjas fait des classes achaque unite je suis obliger d'implenté la source de la classe comme je pourait l'appeller ou je veux ,

Reply

Marsh Posté le 04-10-2004 à 14:56:13    

Il parlait pas de rendre la classe connue de toutes les units, mais de pouvoir utiliser l'instance de la classe (l'objet) de n'importe où.


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

Marsh Posté le 04-10-2004 à 17:58:56    

t'as tout compris antp ;-), t'as pas tout compris sunboy :D

Reply

Sujets relatifs:

Leave a Replay

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