Purebasic et concepts de POO
Purebasic et concepts de POO
Bonjour,
Dans une structure et si vous ajoutiez .p pour procedure. Cela ferait un pas de géant à purebasic tout en restant procedural.
Cordialment.
Abdel.
Dans une structure et si vous ajoutiez .p pour procedure. Cela ferait un pas de géant à purebasic tout en restant procedural.
Cordialment.
Abdel.
Re: Purebasic et concepts de POO
Code : Tout sélectionner
Interface MonObjet
Deplacer(x,y)
Detruire()
EndInterface
Structure _classe
*proc
x.i
y.i
EndStructure
Procedure CreationObjet()
Protected *this._classe
*this = AllocateMemory(SizeOf(_classe))
*this\x = 0
*this\y = 0
*this\proc = ?data_proc
ProcedureReturn *this
EndProcedure
Procedure Deplacer(*this._classe, x, y)
*this\x = x
*this\y = y
Debug "objet : " + Str(*this) +" -> position : " + x + " : " + y
EndProcedure
Procedure Detruire(*this.MonObjet)
FreeMemory(*this)
EndProcedure
Objet1.MonObjet = CreationObjet() ; un objet
Objet2.MonObjet = CreationObjet() ; un deuxième
Objet1\Deplacer(10, 20)
objet1\Deplacer(45,23)
Objet1\Detruire()
Objet2\Deplacer(20, 30)
Objet2\Detruire()
DataSection
data_proc:
Data.i @Deplacer()
Data.i @Detruire()
EndDataSection
- Kwai chang caine
- Messages : 6962
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Purebasic et concepts de POO
Bonjour Kwandjeen
Cool ton code, j'ai presque compris
juste une question de newbies
Pour l'adresse des procédures on est obligé de passer par une datasection ?
Cool ton code, j'ai presque compris
juste une question de newbies
Pour l'adresse des procédures on est obligé de passer par une datasection ?
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Purebasic et concepts de POO
OuiKwai chang caine a écrit :Pour l'adresse des procédures on est obligé de passer par une datasection ?
Tuto sur ce théme : https://www.purebasic.fr/french/viewtop ... 21&t=15656
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Purebasic et concepts de POO
Note il vaut mieux utiliser
Et non pas
Car avec AllocateMemory la structure ne pourra pas contenir de list
Il est déjà très facile d'intégrer une procédure à une structure avec un pointeur
Malheureusement pour que les interfaces fonctionnent il faut que toutes les procédures soit stockée dans un même pointeur.
Code : Tout sélectionner
Protected *this._struct = AllocateStructure(_struct)
Code : Tout sélectionner
AllocateMemory(SizeOf(_classe))
Il est déjà très facile d'intégrer une procédure à une structure avec un pointeur
Code : Tout sélectionner
Procedure myProcedure()
Debug "hello"
EndProcedure
Structure _struct
*myProc
EndStructure
myStruct._struct\myProc = @myProcedure()
CallFunctionFast(myStruct\myProc)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Purebasic et concepts de POO
En fait j'ai pris la mauvaise habitude de faire unmicrodevweb a écrit :Note il vaut mieux utiliserEt non pasCode : Tout sélectionner
Protected *this._struct = AllocateStructure(_struct)
Car avec AllocateMemory la structure ne pourra pas contenir de listCode : Tout sélectionner
AllocateMemory(SizeOf(_classe))
Code : Tout sélectionner
allocatememory
Code : Tout sélectionner
InitializeStructure
Code : Tout sélectionner
allocatestructure
- Kwai chang caine
- Messages : 6962
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Purebasic et concepts de POO
@kwandjeen
Je me doutais un peu de la réponse, mais je voulais être sûr
Si c'est possible avec les datas c'est bizarre que fred n'est pas prévu la fonction @procedure() pour pouvoir capter le pointeur de procédure
Merci Kwandjeen
Je me doutais un peu de la réponse, mais je voulais être sûr
Si c'est possible avec les datas c'est bizarre que fred n'est pas prévu la fonction @procedure() pour pouvoir capter le pointeur de procédure
Merci Kwandjeen
Re: Purebasic et concepts de POO
Fels a écrit :Bonjour,
Dans une structure et si vous ajoutiez .p pour procedure. Cela ferait un pas de géant à purebasic tout en restant procedural.
Cordialment.
Abdel.
Code : Tout sélectionner
PrototypeC Func()
Structure Foo
Func.Func
EndStructure
Procedure Any()
Debug #PB_Compiler_Procedure
EndProcedure
A.Foo
A\Func = @Any()
A\Func()
- Kwai chang caine
- Messages : 6962
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Purebasic et concepts de POO
Bonjour GRom
C'est pas simple et pas vraiment plus facile à comprendre
Mais ça a le mérite d’exister, je sais pas si c'est parce que c'est compliqué ou impossible pour FRED à faire, mais un simple retour comme en DataSection dans l'exemple de kwandjeen mais sans la DataSection, ça aurait été cool
C'est pas simple et pas vraiment plus facile à comprendre
Mais ça a le mérite d’exister, je sais pas si c'est parce que c'est compliqué ou impossible pour FRED à faire, mais un simple retour comme en DataSection dans l'exemple de kwandjeen mais sans la DataSection, ça aurait été cool
Re: Purebasic et concepts de POO
???falsam a écrit :OuiKwai chang caine a écrit :Pour l'adresse des procédures on est obligé de passer par une datasection ?
Tuto sur ce théme : https://www.purebasic.fr/french/viewtop ... 21&t=15656
Non : on peut passer par un tableau, voire une zone mémoire.Kwai chang caine a écrit :Pour l'adresse des procédures on est obligé de passer par une datasection ?
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Purebasic et concepts de POO
N'hésite pas à donner un code validant ce que tu viens de dire !!Ollivier a écrit :Non : on peut passer par un tableau, voire une zone mémoire.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Purebasic et concepts de POO
Ollivier a écrit :Non : on peut passer par un tableau, voire une zone mémoire.
Code : Tout sélectionner
Global *Ptr = AllocateMemory(8)
Global Dim Tableau.i(2)
Interface MonObjet
Deplacer(x,y)
Detruire()
EndInterface
Structure _classe
*proc
x.i
y.i
EndStructure
Procedure CreationObjet()
Protected *this._classe
*this = AllocateMemory(SizeOf(_classe))
*this\x = 0
*this\y = 0
;*this\proc = @Tableau()
*this\proc = *Ptr
ProcedureReturn *this
EndProcedure
Procedure Deplacer(*this._classe, x, y)
*this\x = x
*this\y = y
Debug "objet : " + Str(*this) +" -> position : " + x + " : " + y
EndProcedure
Procedure Detruire(*this.MonObjet)
FreeMemory(*this)
EndProcedure
PokeI(*Ptr,@Deplacer())
PokeI(*Ptr+4,@Detruire()) ; +4 en x86 ! +8 en x64 !
Tableau(0) = @Deplacer()
Tableau(1) = @Detruire()
Objet1.MonObjet = CreationObjet() ; un objet
Objet2.MonObjet = CreationObjet() ; un deuxième
Objet1\Deplacer(10, 20)
objet1\Deplacer(45,23)
Objet1\Detruire()
Objet2\Deplacer(20, 30)
Objet2\Detruire()
Re: Purebasic et concepts de POO
Bonjour KCC, c'est exactement la même chose que pour importé une lib. j'utilise des prototypes. c'est pas plus compliqué qu'autre chose.Kwai chang caine a écrit :Bonjour GRom
C'est pas simple et pas vraiment plus facile à comprendre
Mais ça a le mérite d’exister, je sais pas si c'est parce que c'est compliqué ou impossible pour FRED à faire, mais un simple retour comme en DataSection dans l'exemple de kwandjeen mais sans la DataSection, ça aurait été cool
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Purebasic et concepts de POO
En attendant que ce soit en natif, ma préférence est la déclaration des procédures en DataSection. Voir https://www.purebasic.fr/french/viewtop ... 21&t=15656
Un exemple pour KCC en tenant compte du premier code de G-Rom
Un exemple pour KCC en tenant compte du premier code de G-Rom
Code : Tout sélectionner
; Declaration d'un callback avec parametre
Prototype Callback(Parameter)
; Déclaration de la structure d'un rectangle
Structure NewRectangle
Longueur.i
largeur.i
perimetre.Callback
surface.Callback
EndStructure
; Les procédures uitilisées dans la struture
Procedure Perimetre(*this.NewRectangle)
ProcedureReturn (*this\Longueur + *this\Largeur) * 2
EndProcedure
Procedure Surface(*this.NewRectangle)
ProcedureReturn *this\Longueur * *this\Largeur
EndProcedure
; Et maintenant le test
Define Terrain.NewRectangle
With Terrain
\largeur = 10
\Longueur = 20
\perimetre = @Perimetre()
\surface = @Surface()
EndWith
; Resultat
Debug "Perimetre " + Terrain\perimetre(Terrain)
Debug "Surface " + Terrain\surface(Terrain)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Purebasic et concepts de POO
@G-Rom
C'est bien, c'est beau, c'est propre. Il y a beaucoup de pédagogie.
Vraiment merci.
C'est bien, c'est beau, c'est propre. Il y a beaucoup de pédagogie.
Vraiment merci.