[Delphi] Différence class / object

Différence class / object [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 13-02-2003 à 17:40:26    

Dans mon bouquin sur le pascal ils parlaient uniquement des object. bon pas de problème, j'ai bien pigé. par contre dans delphi si les objets marchent sans problème, apparement c'est plutot les class qui semblent être utilisées mais le problème c'est que je ne vois pas la différence entre les 2.
si qqun pouvait m'eclaircir un peu ce point...

Reply

Marsh Posté le 13-02-2003 à 17:40:26   

Reply

Marsh Posté le 13-02-2003 à 17:56:31    

Si je me souviens bien, l'ambiguité vient du fait que pour définir une classe, Delphi utilise le mot-clé "object"...
 
Mais tu n'as pas à t'en faire. Quand tu définis un type de données comme étant "object", tu définis une classe. Et quand tu déclares une variable de ce type-là, tu déclares un objet (de cette classe).


Message édité par BifaceMcLeOD le 13-02-2003 à 17:58:24
Reply

Marsh Posté le 13-02-2003 à 17:58:53    

Un objet est une instance d'une classe:
 
Objet := Classe.Create;
 
Dans le temps on utilisait le mot clé object à la place de class pour les déclarations, mais c'est dépassé.


Message édité par antp le 13-02-2003 à 17:59:27
Reply

Marsh Posté le 13-02-2003 à 18:04:27    

donc là j'ai déclaré un objet avec un code comme ça


    CCuboid = object
      m_pD3DDevice : IDIRECT3DDEVICE8;
      m_pVertexBuffer : IDIRECT3DVERTEXBUFFER8;


 
donc en fait c'est une classe sauf que j'utilise un mot-clé déprécié ?

Reply

Marsh Posté le 13-02-2003 à 18:07:59    

En fait les object sont comme des class sauf qu'ils ne descendent pas de TObject, donc pas de constructeur/destructeur par défaut.
D'après la doc vaut mieux pas les utiliser :

Citation :


As an alternative to class types, you can declare object types using the syntax
 
type objectTypeName = object (ancestorObjectType)
 
  memberList
end;
 
where objectTypeName is any valid identifier, (ancestorObjectType) is optional, and memberList declares fields, methods, and properties. If (ancestorObjectType) is omitted, then the new type has no ancestor. Object types cannot have published members.
Since object types do not descend from TObject, they provide no built-in constructors, destructors, or other methods. You can create instances of an object type using the New procedure and destroy them with the Dispose procedure, or you can simply declare variables of an object type, just as you would with records.
 
Object types are supported for backward compatibility only. Their use is not recommended.


 
en plus ça a l'air chiant à gérer :D (New/Dispose pour la création/destruction)

Reply

Marsh Posté le 13-02-2003 à 18:14:54    

les classes Object sont héritées du Pascal, Class est propre à Delphi
 
les classes Object (donc Pascal) supporte 3 niveaux de confidentialité : private, protected et public
 
Delphi y ajoute : published et Automated
 

Reply

Marsh Posté le 13-02-2003 à 18:20:06    

ok, merci pour ces précisions ;)

Reply

Marsh Posté le 14-02-2003 à 14:33:12    

zion a écrit :


Comme l'a copié/collé antp, les "object" ce sont des records avec des adresses de fonctions sans être vraiment des objets vu qu'ils ne sont pas instanciés et donc que dans la fonction tu sais pas déterminer pour quel record (objet) tu l'as apellé.
 
si tu veux toujours pouvoir apeller des fonctions sans instancier une classe tu peux faire des class methods:
 
TPlop = class
private
  FPlop: Integer;
public
  class function Plop: Integer;
end;
 
Tu pourras alors faire
 
a := TPlop.Plop;
 
Mais pas moyen dans la fonction d'aller chercher FPlop.
 
 :hello:  


 
Donc on peut faire ? :
var
  MyPlop: TPlop;
begin
  MyPlop.Plop
end;
 
mais la fonction plop peut bien accéder à FPlop
genre
class function TPlop.Plop: Integer;
begin
  result := FPlop
end;
 
ça fait une classe statique en gros non ?


Message édité par [SDF]Poire le 14-02-2003 à 14:34:14

---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 14-02-2003 à 14:53:15    

zion a écrit :


Tu nous fait quoi la sylvain?
 
 

Citation :

[Error] Unit1.pas(35): Instance variable 'FPlop' inaccessible here

 
 
ca me parait clair non?
 
En déclarant une classe tu as juste déclaré le type, si tu as pas de code à la classe ca représentera 0byte dans ton exe vu que ce n'est qu'un type et non en Delphi y a pas de classe ni de variable statique [:tapai]
 
Et oui tu peux faire FPlop.Plop mais ca n'a aucun intérêt vu que la fonction n'est pas associée à l'instance, c'est juste un moyen de grouper des fonctions d'un même type sans devoir instancier un objet.
 
Tu nous ferais pas un peu trop de VB pour le moment toi?  :sarcastic:  


m'en parle pas  :cry:  
saloperie de VB
 
euh donc le seul moyen C celui dont on parlait l'aut jour... instancier ds l'initialise... mais bon C pas top top top, et des fois C chiant de se taper une classe l'initialisation, etc.. mais en même temps C pratique  :D  
 
Donc ton truc C complétement inutile :p Domage, je croyais avoir mal compris pour le FPlop, mais non


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 14-02-2003 à 14:57:28    

zion a écrit :


C'est pas parce que tu comprends pas que c'est pas utile mon choubichou :whistle:  
 
C'est très très utile au contraire  :o  


Explicite alors...
un exemple d'utilisation ?


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 14-02-2003 à 14:57:28   

Reply

Marsh Posté le 14-02-2003 à 15:05:36    

t'as raison j'pige pas, enfin j'vois pas
Edit : pas drôle ta signature  :cry:


Message édité par [SDF]Poire le 14-02-2003 à 15:06:57

---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 18-02-2003 à 18:06:31    

antp a écrit :

En fait les object sont comme des class sauf qu'ils ne descendent pas de TObject, donc pas de constructeur/destructeur par défaut.
D'après la doc vaut mieux pas les utiliser :


 
 
???!!!!!
 
Bertrand Meyer s'en arracherais les cheveux !!!
bon, c'est peut être une définition Delphi...
 
(alors, tend, j'ouvre mon ti cours d'objet Sophie©)
 
Classe : "Entité conceptuelle dévrivant un ensemble d'objets et chargée de les générer." En gros, c'est la description de tes objets (comportement (méthodes) et données (attributs))
 
Objet : "Un objet est une instance, à l'exécution, d'une classe."
 
 
Donc, en gros :  
 
var
   mon_objet: ma_classe;
 
begin
  // instanciation :
  mon_objet := ma_classe.create(tonQLeparametre);
...
end;
 
 
 
pour ce qui est de Delphi, je n'ai jamais utilisé le mot clé Object... mais plutôt :
petit exple sorti de mon dev :
 

Code :
  1. ASpecScroller = class(TObject)
  2.       procedure init; virtual; abstract;
  3.       procedure addBmp(bmp: TBitmap); virtual; abstract;
  4.       function canScroll: boolean; virtual; abstract;
  5.       function scroll(direction: SmallInt): TBitmap; virtual; abstract;
  6.       function scrollByValue(value: integer): TBitmap; virtual; abstract;
  7.    end;


 
(fait pas attention aux virtual et abstract... , c'est encore une autre histoire : le principe d'héritage et de polymorphisme et les classes abstraites...)
 
 
vouala pour ce qui est de la définition plus "universitaire".
 

Reply

Marsh Posté le 18-02-2003 à 18:10:46    

(au temps pour moi, antp, j'avais jamais vu le mot clé object) :/
 
dweis : n'utilise pas le type "object", c'est SAL.

Reply

Marsh Posté le 18-02-2003 à 18:12:21    

zion a écrit :


 
 
Chapeau, tu as rien lu du topic et tu viens nous sortir un discours de 2 pages...  :pfff:  


 
c'était pas important de connaitre la différence fondamentale entre un objet et une classe ?  
pour faire de la POO... ça me parait indispensable...  
et ds le topic, j'avais pas compris qu'il parlait des mots clés... alors au tps pour moi...

Reply

Marsh Posté le 18-02-2003 à 18:13:55    

zion a écrit :


 
merci mais moi ce sera zion si tu permets  :D  


 
 
LOL, je te répondais pas en fait ...  
 
c'était un petit ajout à  

Citation :


???!!!!!
 
Bertrand Meyer s'en arracherais les cheveux !!!
bon, c'est peut être une définition Delphi...
 


 
que j'avais écrit en regardant la ré&ponse d'antp...
 
et j'avais pas encore vu ta réponse à ce moment là :)))

Reply

Marsh Posté le 18-02-2003 à 18:16:46    

zion a écrit :


 
benh on l'a dit aussi ca déjà  :heink:  


 
heu... j'viens de relire... j'vois po. :heink:
enfin, bref, j'arrête de polluer.
j'avoue que je me suis un peu précipité pour répondre en voyant la réponse d'antp et sans avoir vraiment compris la question de dweis (j'pensais qu'il avait un pb de concept plus que de mot clés)
 :jap:  
 
mille pardons pour ce dérangement :/

Reply

Marsh Posté le 18-02-2003 à 18:31:31    

Moi, j'utilises des object pour definir des objets que je veux allouer sur la pile et non sur le tas. J'utilises class pour tous les autres cas ...

Reply

Sujets relatifs:

Leave a Replay

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