■ Objectif : Créer une classe Rectangle contenant les procédures :
- Perimetre()
- Surface()
- Destroy()

Code : Tout sélectionner
MonTerrain.NewRectangle = RectangleInit(20,10)
Code : Tout sélectionner
Debug MonTerrain\Surface()
Code : Tout sélectionner
Interface NewRectangle
Perimetre.i()
Surface.i()
Destroy.i()
EndInterface
Code : Tout sélectionner
;Définition des parametres du rectangle
Structure Rectangle
*DSVT ;Data Section Virtual Table
Longueur.i
Largeur.i
EndStructure
Code : Tout sélectionner
DataSection
Class:
Data.i @Perimetre()
Data.i @Surface()
Data.i @Destroy()
EndDataSection
■ Instancier notre classe rectangle consiste à l'initialiser avec des valeurs. Il s'agira de lui fournir la longueur et la largeur de notre rectangle via une procédure. Nous appellerons cette procédure RectangleInit()
Code : Tout sélectionner
;Initialisation d'un rectangle (Instancialisation)
Procedure.i RectangleInit(Longueur=0, Largeur=0)
Protected *Object.Rectangle
;Allocation mémoire pour un nouveau modèle de classe.
*Object = AllocateMemory(SizeOf(Rectangle))
;L'objet est prêt : Quels sont les pointeurs de procédures ?
If *Object
*Object\DSVT = ?Class
;Initialise la longueur et la largeur d'un rectangle.
*Object\Longueur = Longueur
*Object\Largeur = Largeur
EndIf
;Retourne un pointeur de notre objet.
ProcedureReturn *object
EndProcedure
Pour le moment on va juste créer les 3 procédures juste avec un débug de passage dans chacune d'elle.
Code : Tout sélectionner
Procedure Perimetre()
Debug "Hello de périmetre"
EndProcedure
Procedure Surface()
Debug "Hello de Surface"
EndProcedure
Procedure Destroy()
Debug "Hello de Destroy"
EndProcedure
L'initialisation d'un rectangle de longueur 3 et de largeur 2 va s'effectuer de cette manière :
Code : Tout sélectionner
Rectangle.NewRectangle = RectangleInit(3, 2)
Code : Tout sélectionner
Rectangle\Perimetre()
Rectangle\Surface()
Rectangle\Destroy()
Code : Tout sélectionner
;Définition d'une interface contenant les procédures
Interface NewRectangle
Perimetre.i()
Surface.i()
Destroy.i()
EndInterface
;Définition des parametres du rectangle
Structure Rectangle
*DSVT ;Data Section Virtual Table
Longueur.i
Largeur.i
EndStructure
;Initialisation d'un rectangle (Instancialisation)
Procedure.i RectangleInit(Longueur=0, Largeur=0)
Protected *Object.Rectangle
;Allocation mémoire pour un nouveau modèle de classe.
*Object = AllocateMemory(SizeOf(Rectangle))
;L'objet est pret : Quels sont les pointeurs de procédures ?
If *Object
*Object\DSVT = ?Class
;Initialise la longueur et la largeur d'un rectangle.
*Object\Longueur = Longueur
*Object\Largeur = Largeur
EndIf
;Retourne un pointeur de notre objet.
ProcedureReturn *object
EndProcedure
;Les procédures référencées dans l'interface NewRectangle (Les méthodes)
Procedure Perimetre()
Debug "Hello de périmetre"
EndProcedure
Procedure Surface()
Debug "Hello de Surface"
EndProcedure
Procedure Destroy()
Debug "Hello de Destroy"
EndProcedure
;Reférencement des adresses de procédures disponibles pour cette classe
DataSection
Class:
Data.i @Perimetre()
Data.i @Surface()
Data.i @Destroy()
EndDataSection
;Zone de test
;Initialisation d'un nouveau rectangle
MonTerrain.NewRectangle = RectangleInit(2,3)
;Test des procédure disponible pour cette class
MonTerrain\Perimetre()
MonTerrain\Surface()
MonTerrain\Destroy()