OPB v0.53 (objective PB)

Programmation d'applications complexes
idle
Messages : 63
Inscription : ven. 30/juil./2010 2:31

OPB v0.53 (objective PB)

Message par idle »

OPB est un oo runtime binding pour PB
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
OPB 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
par exemple une procdure de classe, il ya peu de différence de code PB

Code : Tout sélectionner

ProcedureDLL ClassVector2DScale(*vec2D.ClassVector2D,sX.f,sY.f)
 *vec2D\x* sx
 *vec2D\y * sy 
  ProcedureReturn *vec2D 
 EndProcedure  
une classe est fabrique

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 
Dernière modification par idle le mar. 01/nov./2011 11:15, modifié 1 fois.
idle
Messages : 63
Inscription : ven. 30/juil./2010 2:31

Re: OPB v0.51 (objective PB)

Message par idle »

mis à jour et retravaillées à l'ABI, il est beaucoup plus propre maintenant
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Re: OPB v0.51 (objective PB)

Message par case »

merci pour ce module ,)
ImageImage
idle
Messages : 63
Inscription : ven. 30/juil./2010 2:31

Re: OPB v0.53 (objective PB)

Message par idle »

Mise à jour
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: OPB v0.53 (objective PB)

Message par Kwai chang caine »

Bonjour IDLE,

Tout d'abord merci de nous faire partager ton savoir sur le site français 8)

Maintenant comme dab, on change pas une équipe qui perd, j'ai pas compris grand chose :oops:
Je crois avoir compris que cela permet de programmer en objet avec PB :roll:

C'est vraiment interessant, mais plus je regarde et moins je comprend, y'aurait pas un exemple tout simple, qui permettrait de montrer comment utiliser ???
Ou alors si "quinquin" a compris ....ne pourrait il pas penser à ceux qui dorment au fond de la classe prés du radiateur :(
En expliquant avec des mots bien français, ce dont il retourne ???
Car l'anglais + l'OOP c'est vraiment too much pour le cerveau à KCC :(

Merci d'avance

Hello IDLE

First, i thank you to sharing your great knowledge on the french site 8)
But like usually, i have not really understand the way to use your great code. :oops:

I have just understand, your code is for programing object with PB, it is good ??? :roll:

It's very interesting, but more i see, more i not understand, if someone on this site can create a very simple example, for show how to use it ???
Or if someone have understand...he could not think of them, that sleep in the back of the room, near the radiator :cry:
Explaining with words very French, what it returns ?? , because english + Object is really too much for the little brain of KCC :oops:


Thanks in advance
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
idle
Messages : 63
Inscription : ven. 30/juil./2010 2:31

Re: OPB v0.53 (objective PB)

Message par idle »

Maybe someone here can explain it to you in French! I will try but my French isn't good!

il n'y a pas de différence en utilisant une classe qui a été faite avec le cadre.
Le cadre rend beaucoup plus simple de créer des classes, les règles sont très faciles

rendre la structure

Code : Tout sélectionner

structure Classfoo 
  x.i
  y.i
  list je_besoin_clearStructure.i()
EndStructure 
déclare un destructeur privé qui est nécessaire pour les objets PB peut être effacé

Code : Tout sélectionner

procedure _ClassFooFree(class)
   ClearStructure(class,Foo)  
endprocedure 


Créer un destructeur public pour les utilisateurs d'appeler

Code : Tout sélectionner

 
procedure ClassFooFree(module,class) 
   OPBFreeClass(module,class)
endprocedure 


Ecrire le constructeur

Code : Tout sélectionner

 
procedure NewFoo(module,name)
Protected *myfoo.ClassFoo 
*myFoo = OPBNewClass(Module,name,"ClassFoo",SizeOf(ClassFoo),@_ClassFooFree())   


Ce n'est pas vrai oo. le point est que vous n'avez pas à perdre son temps avec des interfaces et datasections. les données sont vraiment la seule chose qui a besoin d'être isolé
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: OPB v0.53 (objective PB)

Message par Kwai chang caine »

Merci beaucoup IDLE de ton aide 8)

Mais je crois que ça depasse mes pauvres competences :oops:
Si seulement c'était la premiere fois :lol: :lol:

Thanks a lot IDLE for your help
But i think, your code transcend my poor knowledge :(
Don't worry for me, it's not the first, and again certainly not the last time :lol: :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
idle
Messages : 63
Inscription : ven. 30/juil./2010 2:31

Re: OPB v0.53 (objective PB)

Message par idle »

tous pouvez utiliser une liste PB et la carte, il n'ya pas différence! La différence est la façon dont que tous créez les objets qui se comportent comme objets PB sans écrire beaucoup de code ou s'inquiéter la mémoire.

you can use a PB list and map, there's no difference! The difference is how you create objects that behave just like PB objects without having to write lots of code or worry about the memory.

I will see if I can make a better or real world example
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: OPB v0.53 (objective PB)

Message par Kwai chang caine »

Encore merci IDLE 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
idle
Messages : 63
Inscription : ven. 30/juil./2010 2:31

Re: OPB v0.54 (objective PB)

Message par idle »

J'ai étendu la classe de fenêtre à travailler avec écran fenêtré
Ajouter une interface FFI pour appeler des fonctions dans les bibliothèques. VarArgs

Code : Tout sélectionner

file.s = OpenFileRequester("FFI","","*.*",1)
;open a lib loads it's exported functions
Global mlib = FFI_OpenLibrary(file,@enumfuncs())

;make wrapper functions to call the library functions
Procedure.f Foof(a.f,b.f)
  Static fn
  If Not fn   ;get the named function and set the number of parameters *this can be variable 
    fn = FFI_GetFunction(mlib,"foof",2)
  EndIf   
  FFI_PushF(fn,a) ;push the parameters by type
  FFI_PushF(fn,b)
  ProcedureReturn FFI_CallF(fn)   ;call the function via the required return type
EndProcedure

Procedure.s Foos()
  Static fn
  If Not fn
    fn = FFI_GetFunction(mlib,"foos",0)
  EndIf
  ProcedureReturn PeekS(FFI_CallL(fn))
EndProcedure

;call the functions
Debug StrF(Foof(5.5,4.3))
Debug foos()

;free the library
FFI_FreeLibrary(mlib)  
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: OPB v0.53 (objective PB)

Message par Kwai chang caine »

Bonjour IDLE :D

J'ai téléchargé ton ZIP et lancé le code "testfoo.pb"
http://www.idlearts.com/OPB.zip
J'ai un MsgBox "Could'nt open LibOPB" sous XP et v4.51 :(
Peut etre quelque chose que j'ai encore pas installé correctement :oops:

Hello IDLE

I have downloaded your ZIP and running the code "testfoo.pb"
http://www.idlearts.com/OPB.zip
I obtain a MsgBox "Could'nt open LibOPB" under XP and v4.51 :(
Maybe something i have again not installed correctly :oops:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
idle
Messages : 63
Inscription : ven. 30/juil./2010 2:31

Re: OPB v0.53 (objective PB)

Message par idle »

pardon, il nest pas clair!

you need to either

A) compile opb54.pbi to a dll

or change the include in the class examples

b) from IncludeFile "OPBInc.pbi" to IncludeFile "opb54.pbi"

and then compile testfoodll.pb to a dll and load it from testfoo.pb

you can use OPB from either source or from a library, the examples are based on it from being compiled
so you will have to change it to suit.
Répondre