soutenant modules / collections d'agir comme un espace de noms, l'introspection de classe, la collecte des ordures, l'héritage
Il était vaguement basé sur les méthodes oo de small talk et Objective-C, mais est mis en œuvre avec un format similaire
d'accéder aux objets PB normale, de sorte qu'il offre un moyen assez facile d'utiliser oo, sans tous les échos.
La liaison est réalisée via un tableau indexé dans un module de la gamme se développera si elle est pleine
et utilise une file d'attente pour suivre des emplacements vides dans le tableau, si une classe est libéré de la fente est réutilisé
La classe User est renvoyé en tant normal, il n'y a aucune différence de performance à des liaisons de PB
regard ici http://www.purebasic.fr/english/viewtop ... 27&t=47978
et les source http://www.idlearts.com/OPB.zip
Linux, Mac and Windows
par exemple une procdure de classe, il ya peu de différence de code PBOPB is a runtime binding oo framework for PB
supporting modules/collections to act as a namespace, class Introspection, garbage collection, inheritance
It was loosely based on the oo methods of small talk and objective-c but is implemented with a similar format
to accessing normal PB objects, so it provides a fairly easy means of using oo without all the clutter.
The binding is achieved via an indexed array in a module the array will grow if it becomes full
and uses a queue to keep track of empty slots in the array, so if a class is freed the slot is reused
The User class is returned as normal, there's no difference in performance to PB's bindings
Code : Tout sélectionner
ProcedureDLL ClassVector2DScale(*vec2D.ClassVector2D,sX.f,sY.f)
*vec2D\x* sx
*vec2D\y * sy
ProcedureReturn *vec2D
EndProcedure
Code : Tout sélectionner
Define ClassVector2D
Structure ClassVector2D
x.f
y.f
length.f
normal.f
EndStructure
;Create Private Class Destructor
Procedure _ClassVector2DFree(*members)
ClearStructure(*members,ClassVector2D)
EndProcedure
;Create Public Destructor
ProcedureDLL ClassVector2DFree(Module,*class)
OPBFreeClass(Module,*class)
EndProcedure
;Create a Class Construtor for ClassVector2D
ProcedureDLL NewClassVector2D(Module,name.s,x.f,y.f)
Protected *vec2D.ClassVector2D
;Create a new class instance **Note pass the private destructor function eg @_ClassStuctureFree()
*vec2D = OPBNewClass(Module,name,"ClassVector2D",SizeOf(ClassVector2D),@_ClassVector2DFree())
If *vec2D
;Initilize vars
If x Or y
*vec2D\length = Sqr( x * x + y * y)
*vec2D\normal = 1 / *vec2D\length
*vec2D\x = x * *vec2D\normal
*vec2D\y = y * *vec2D\normal
EndIf
;optional introspection data
ProcedureReturn *vec2D
EndIf
EndProcedure