Publié : dim. 06/févr./2005 10:56
Ca permet souvent des optimisations au niveau des variables. En POO bien programmée, il n'y a quasiment plus besoin de globales, et les appelles de variables sont beaucoup moins fréquents.
Code : Tout sélectionner
;-********************
;-Auteur : Heis Spiter
;-Date : 23/12/2004
;-ID : 172312040301
;-Version de PB : 3.92
; Forum Français : http://purebasic.hmt-forum.com/viewtopic.php?t=2089
;
; Cet exemple montre comment les class fonctionnent.
; Il est basé sur un code GreB, mais est plus facile ;)
;-********************
; Interface avec les fonctions
Interface Count
SetCounter(Number.l)
UpCrease()
DownCrease()
CounterReturn()
FreeCounter()
EndInterface
; Structure avec les variables qui vont être partagées.
Structure Count_Vars
*VirtualTable.l
Number.l
EndStructure
; Première fonction, pour défnir le compteur.
Procedure SetCounter(*this.Count_Vars, Number.l)
*this\Number = Number
EndProcedure
; Seconde fonction pour rajouter un au nombre donné au compteur.
Procedure UpCrease(*this.Count_Vars)
*this\Number = *this\Number+1
EndProcedure
; Troisième fonction pour enlever un au nombre donné au compteur.
Procedure DownCrease(*this.Count_Vars)
*this\Number = *this\Number-1
EndProcedure
; Fonction pour retourner le nombre.
Procedure CounterReturn(*this.Count_Vars)
ProcedureReturn *this\Number
EndProcedure
NewList Instances.Count_Vars()
; Fonction pour libérer le compteur (destruct)
Procedure FreeCounter(*this.Count_Vars)
*this\Number = 0
DeleteElement(Instances())
EndProcedure
; Structure avec l'énumération des fonctions.
Structure Count_Functions
SetCounter.l
UpCrease.l
DownCrease.l
NumberReturn.l
FreeCounter.l
EndStructure
Count_Functions.Count_Functions
Count_Functions\SetCounter = @SetCounter()
Count_Functions\UpCrease = @UpCrease()
Count_Functions\DownCrease = @DownCrease()
Count_Functions\NumberReturn = @CounterReturn()
Count_Functions\FreeCounter = @FreeCounter()
; Fonction pour créer une instance du compteur (construct)
Procedure.l InitCounter()
Shared Count_Functions
AddElement(Instances())
Instances()\VirtualTable = @Count_Functions
Instances()\Number = 0
ProcedureReturn @Instances()
EndProcedure
; Exemples pour tester ;).
Counter.Count = InitCounter()
Counter2.Count = InitCounter()
Counter\SetCounter(5)
Counter2\SetCounter(5)
Counter\UpCrease()
Counter\UpCrease()
Counter2\DownCrease()
Counter2\DownCrease()
Counter\DownCrease()
Counter2\UpCrease()
Debug Counter\CounterReturn()
Debug Counter2\CounterReturn()
Counter\FreeCounter()
Debug Counter\CounterReturn()
Debug Counter2\CounterReturn()
Counter2\FreeCounter()
Debug Counter\CounterReturn()
Debug Counter2\CounterReturn()