POO
-
- Messages : 1092
- Inscription : mer. 28/janv./2004 16:22
- Localisation : 76
- Contact :
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.
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL

Petite remarque :
Il n’est pas nécessaire de répéter la table pointant les procédures (= méthodes de l’objet)
Il suffit de la créer une fois et de s'en servir à chaque nouvelle « instanciation » via InitCounter().
Il n'est pas besoin non plus que *VirtualTable soit de type Count_Functions.
Il n’est pas nécessaire de répéter la table pointant les procédures (= méthodes de l’objet)
Il suffit de la créer une fois et de s'en servir à chaque nouvelle « instanciation » via InitCounter().
Il n'est pas besoin non plus que *VirtualTable soit de type Count_Functions.
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()