POO

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

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
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

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.

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()
Répondre