Interface - Exemple simple
Publié : dim. 22/mai/2005 20:18
comme j'ai un peu galéré avec le tuto de Heis, je poste un exemple plus simple, pour ceux qui auraient aussi du mal... En tout cas sans le tuto je n'aurais pas compris comment faire... Et puis c'est tout de même intéressant de comprendre le fonctionnement bas niveau d'un concept haut niveau...
(avec un exemple simple ca s'est éclairci pour moi...)
Dri 
(avec un exemple simple ca s'est éclairci pour moi...)
Code : Tout sélectionner
Interface Compteur
getValeur()
setValeur(v.l)
incrementer()
decrementer()
EndInterface
Structure CompteurTable
getValeur.l
setValeur.l
incrementer.l
decrementer.l
EndStructure
Structure Compteur_
*fonctions.Compteur
valeur.l
EndStructure
Procedure Compteur_getValeur(*this.Compteur_)
ProcedureReturn *this\valeur
EndProcedure
Procedure Compteur_setValeur(*this.Compteur_, valeur.l)
If valeur >= 0
*this\valeur = valeur
EndIf
EndProcedure
Procedure Compteur_incrementer(*this.Compteur_)
*this\valeur + 1
EndProcedure
Procedure Compteur_decrementer(*this.Compteur_)
If *this\valeur > 0
*this\valeur - 1
EndIf
EndProcedure
Global CompteurTable.CompteurTable
CompteurTable\getValeur = @Compteur_getValeur()
CompteurTable\setValeur = @Compteur_setValeur()
CompteurTable\incrementer = @Compteur_incrementer()
CompteurTable\decrementer = @Compteur_decrementer()
Procedure Compteur() ;constructeur
*ptr.Compteur_
*ptr = AllocateMemory( SizeOf(Compteur_) )
;méthodes
*ptr\fonctions = CompteurTable
;variables
*ptr\valeur = 0
ProcedureReturn *ptr
EndProcedure
Procedure _Compteur(*cpt.Compteur) ;destructeur
If *cpt <> #Null
FreeMemory(*cpt)
EndIf
EndProcedure
cpt.Compteur = Compteur()
cpt\decrementer()
For i = 1 To 10
cpt\incrementer()
Next i
Debug cpt\getValeur()
_Compteur(cpt)
