PureBasic

Forums PureBasic
Nous sommes le Sam 23/Nov/2019 4:16

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 75 messages ]  Aller à la page 1, 2, 3, 4, 5  Suivante
Auteur Message
 Sujet du message: Purebasic et concepts de POO
MessagePosté: Mer 25/Juil/2018 19:57 
Hors ligne

Inscription: Ven 04/Mai/2018 21:04
Messages: 12
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Mer 25/Juil/2018 21:20 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 16/Juil/2006 21:44
Messages: 197
Code:
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


Avec les interfaces peut-être ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Jeu 26/Juil/2018 8:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6659
Localisation: Isere
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 ?

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Jeu 26/Juil/2018 10:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6857
Localisation: IDF (Yvelines)
Kwai chang caine a écrit:
Pour l'adresse des procédures on est obligé de passer par une datasection ?
Oui

Tuto sur ce théme : viewtopic.php?f=21&t=15656

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Jeu 26/Juil/2018 11:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1662
Localisation: Belgique
Note il vaut mieux utiliser
Code:
Protected *this._struct = AllocateStructure(_struct)


Et non pas
Code:
AllocateMemory(SizeOf(_classe))


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

Code:
Procedure myProcedure()
  Debug "hello"
EndProcedure
Structure _struct
  *myProc
EndStructure
myStruct._struct\myProc = @myProcedure()

CallFunctionFast(myStruct\myProc)


Malheureusement pour que les interfaces fonctionnent il faut que toutes les procédures soit stockée dans un même pointeur.

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Jeu 26/Juil/2018 21:54 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 16/Juil/2006 21:44
Messages: 197
microdevweb a écrit:
Note il vaut mieux utiliser
Code:
Protected *this._struct = AllocateStructure(_struct)


Et non pas
Code:
AllocateMemory(SizeOf(_classe))


Car avec AllocateMemory la structure ne pourra pas contenir de list


En fait j'ai pris la mauvaise habitude de faire un
Code:
allocatememory
et un
Code:
InitializeStructure
après. L'
Code:
allocatestructure
fait les 2 d'un coup.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Sam 28/Juil/2018 7:26 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6659
Localisation: Isere
@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 8O
Merci Kwandjeen 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Mar 07/Aoû/2018 20:48 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3426
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:
PrototypeC Func()

Structure Foo
  Func.Func
EndStructure

Procedure Any()
  Debug #PB_Compiler_Procedure
EndProcedure


A.Foo
A\Func = @Any()

A\Func()


Bonjour, voila la manière de faire. l'inconvénient, c'est d'adresser manuellement la fonction après l'initialisation.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Mer 08/Aoû/2018 8:11 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6659
Localisation: Isere
Bonjour GRom 8)
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 :D

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Mer 08/Aoû/2018 18:49 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3521
falsam a écrit:
Kwai chang caine a écrit:
Pour l'adresse des procédures on est obligé de passer par une datasection ?
Oui

Tuto sur ce théme : viewtopic.php?f=21&t=15656
???
Kwai chang caine a écrit:
Pour l'adresse des procédures on est obligé de passer par une datasection ?
Non : on peut passer par un tableau, voire une zone mémoire.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Mer 08/Aoû/2018 18:58 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6857
Localisation: IDF (Yvelines)
Ollivier a écrit:
Non : on peut passer par un tableau, voire une zone mémoire.
N'hésite pas à donner un code validant ce que tu viens de dire !!

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Mer 08/Aoû/2018 19:23 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3426
Ollivier a écrit:
Non : on peut passer par un tableau, voire une zone mémoire.


Code:
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()
 



Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Mer 08/Aoû/2018 19:25 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3426
Kwai chang caine a écrit:
Bonjour GRom 8)
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 :D


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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Mer 08/Aoû/2018 20:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6857
Localisation: IDF (Yvelines)
En attendant que ce soit en natif, ma préférence est la déclaration des procédures en DataSection. Voir viewtopic.php?f=21&t=15656

Un exemple pour KCC en tenant compte du premier code de G-Rom
Code:
; 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)


_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic et concepts de POO
MessagePosté: Mer 08/Aoû/2018 22:58 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3521
@G-Rom

C'est bien, c'est beau, c'est propre. Il y a beaucoup de pédagogie.
Vraiment merci.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 75 messages ]  Aller à la page 1, 2, 3, 4, 5  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye