begin process at 2010 02 10 12:34:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Débutant(e)

 > 

class ( besoin d'aide )


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

class ( besoin d'aide )

mercredi 18 juillet 2007 à 18:48:03 | class ( besoin d'aide )

popo_joe

bonjour tt le monde!
voila je suis debutant en delphi j'ai les bases ( les pointeurs les procedures les fonctions les variables etc ) seulement j'ai de gros soucis avec les class et aussi avec les NULL terminated string (je ne sais pas quand il faut les utiliser) d'abord le probleme avec les class, j'ai compris leur structure ( jutilise un bouquin qui est assez detaillés et justement ils indiquent ceci pour les class :
imaginons qu'on veuille faire une classe creer  un rectangle :
TRect = class
private
      gauche:= integer;
      droite:= integer;
      haut:= integer;
      bas:= integer;
public
      function  GetWidth : Integer;
      function  GetHeight : Integer;
      procedure SetRect(Ahaut,Abas,Agauche,Adroite : Integer);
      Constructor CreeValeur(Ahaut,Abas,Agauche,Adroite : Integer);
      destructor Destroy ; override;
end;
Constructor TRect.CreeValeur(Ahaut,Abas,Agauche,Adroite : Integer);
begin
      inherited Create
      gauche:= Agauche;
      droite:= Adroite;
      haut:= Ahaut;
      bas:= Abas;
(utilisation des A avant les variables pour eviter la confusion entre les variables de la class et celles obtenues par les procedures)

voici ma question :
 les procedures etablies dans la partie Public tel la procedure SetRect est-elle ici declarée comme faisant partie de la class ou est-elle executée par la class?( mon bouquin ne dis rien la dessu )
et aussi je voudrai savoire , pour les constructor , ils permettent d'initialiser n'importe quel variable d'une class ( lui attribuer une valeur ) ou d'attribuer de la place dans la memoire ( pour la class )  mais le constructor a-til une autre fonction dans la class? peut-il faire appel a des procedures externes a la class?

dsl si ce sujet a deja été abordé seulement je n'ai pas trouvé de reponses... si quelqu'un pouvait bien m'aider ce serai cool de sa part! merci!

mercredi 18 juillet 2007 à 21:23:05 | Re : class ( besoin d'aide )

florenth

Membre Club
Réponse acceptée !
Salut et bienvenue dans le fabuleux monde de la programmation objet !

Avant de répondre à ta question, je vais préciser quelques points.
Une classe, peut être considérée comme une machine à fabriquer des objets.
Un objet, c'est que que l'on obtient en instanciant une classe (un objet est l'instance d'une classe), c'est à dire, le produit fini.

Prenons une classe :
TVoiture = class
private
  FMarque: string;
  FModele: string;
  FPoids: string;
public
  constructor Create(...);
  // etc...
  procedure Roule(NombreDeKilometres: Integer);
end;

Cette classe, TVoiture, te permet de fabriquer des voitures.

var
  Voiture: TVoiture;
begin
  Voiture := TVoiture.Create;
  ...
end;

Ce code permet de créer la voiture.




mercredi 18 juillet 2007 à 21:42:23 | Re : class ( besoin d'aide )

florenth

Membre Club
Réponse acceptée !
[Mon ordi a foiré - ce qui explique ce message en deux parties]

A partir de là, ta voiture est fonctionnelle, tu peux appeler Voiture.Roule(2100) pour ajouter 2100 Km au compteur (par exemple).
Quand tu as fini d'utiliser ta voiture, tu la détruit. Ceci se fait généralement** avec Voiture.Free.

Ne surtout pas confondre: Classe et objet.

Maintenant, je vais répondre à ta question.
Le constructeur sert à initialiser l'objet, c'est à dire à créer tous les sous-objets qu'elle contiendrait et à leur affecter des valeurs correctes. Il peut donc initialiser n'importe quel membre de l'objet.
Pour ce qui est de l'allocation mémoire que tu évoques, c'est aussi son rôle. Mais il faut savoir que Delphi fait tout cela automatiquement pour toi (par le biais de la méthode TObject.NewInstance). Si tu as un Integer, tu n'auras pas à te soucier de l'allocation mémoire pour pouvoir l'utiliser.
Par contre, si tu as des pointeurs, c'est toi qui va devoir faire des appels à New() ou GetMem() pour réserver la mémoire.

Oui, le constructeur peut faire appel à des méthode externes à la classe. Sinon, ce serait très gênant ! Tu peux utiliser n'importe quelle fonction, comme StrToInt() par exemple.

Autre point important: le destructeur. Tout ce que tu as crée dans le constructeur DOIT être détruit dans le destructeur. Donc, tout appel à Create() à son appel à Free(), comme tout GetMem() se voit lié à un FreeMem() et tout New() à un Dispose().

Encore un point important, les règles de nommage. Comme tu l'as fait, le nom d'une classe doit être préfixé de la lettre "T".
Chaque membre interne doit être préfixé de "F" (regarde ma classe TVoiture).
Attention, tu as fait une faute (que Delphi te signalera): il faut écrire "gauche: integer" et non pas "gauche:= integer". Pas de signe égal donc.
De même, on nomme le constructeur Create et le destructeur Destroy. On peut en théorie donner n'importe quel autre nom pour le constructeur (TFileStream possède deux constructeurs qui ont donc deux noms différents) mais cela n'est pas conseillé, surtout si tu partages ton code avec d'autres.
Pas d'exception pour le destructeur. "Destroy" et c'est tout. Sinon ça plante !

Bon, j'arrête ici mon propos, ça te fait déjà pas mal de choses à digérer... Si tu as encore des interrogations, n'hésites surtout pas.

A+
Florent

PS: n'oublie pas le bouton "réponse acceptée"...


**: dans certains cas, la destruction est implicite comme avec les composants. C'est alors le propriétaire qui détruit l'objet et tu n'as pas à t'en charger toi même.



jeudi 19 juillet 2007 à 00:32:54 | Re : class ( besoin d'aide )

popo_joe

merci beaucoup! tout est clair maintenant!


Cette discussion est classée dans : class, integer, procedures, ahaut, abas


Répondre à ce message

Sujets en rapport avec ce message

probleme de class abstraite [ par mavric ] Bonjour,j'ai un petit probleme sur des class abstraites.voici mes declarations :type TCreature = class private FName : string;< probelme de boucle [ par thone08 ] bonjour quel est le probleme ? car quand je compile il me fait que pour la premiere lettre et la derniere ?meric d'avanceprocedure TForm1.Button2Click Composant... [ par yoghisan ] Bonjour,Voila je suis entrain de m'essayer a la création de composant et pour cela, je suis entrain d'essayer de faire une table de vérité. Le composa Fichier texte formaté avec TstringGrid [ par jm30 ] Salut à tousj'en ai marre de ramer pour trouver la solution, alors help!!!!j'essaies d'écrire un code capable de sauver un stringgridavec un format du Types incompatibles Integer et PInteger [ par Kruger ] QQn peut me dire où y'a une erreur, comme le dis le titre à la compilation j'ai un message d'incompatibilité:{======================================== Application console et procedure [ par MoveX ] dans mon appli je suis oblige d ecrire les procedures avant quelles ne soient appelees sinon ca plante sachant que ma structure est :program ...;{$APP Function test chaine en integer [ par cbu ] Salut,je voudrais savoir comment on peux tester une chaine passe en parametre et savoir si c'est un entier ou non ...Quelqu'un pourrait me trouver cel Erreur: Class TXP Manifest non trouvé [ par stigmate101 ] Salut, Lorsque, j'ouvre certains sources, je me retrouve avec une fenetre qui s'ouvre : " Erreur de lecture de la fiche", "Classe TXP Manifest non tro difference de date en integer [ par sonia79 ] Bonsoir a tous,J'ai un petit souci. J'ai une date : DateNaiss et je voudrai recupere l'age grace a la date du jour : date()N'ayant que peu de connais limitation type edit [ par kick007 ] est il possible de limiter le type de valeur entré dans un Edit?? je voudrai que mon edit me donne un integer...Ou autre solution a mon probleme conve


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales