Outils pour l'IDE et le développement style objet

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Outils pour l'IDE et le développement style objet

Message par microdevweb »

Bonjour,

Je me suis développé une suite d'outils pour l'ide et pour me facilité la vie pour le développement style objet.

Merci à Falsam pour son excellent tutoriel à ce sujet :wink:
  • Class maker (pour créer la structure d'une classe)
  • Method maker (pour créer la structure d'une méthode)
  • Getter and setter maker (pour créer le getter et le setter d'une membre)
Dowload from Github

Comment installer un outil ?

Image

Comment utiliser class maker

Image

Comment utiliser method maker

Image

Comment utiliser getter and setter maker

Image
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Outils pour l'IDE et le développement style objet

Message par G-Rom »

Yo micro, toujours à fond les ballons dans la pseudo poo ?
une question me taraude cependant , avec tes "classes" peut on appliqué un design pattern ?
style factory ou observer , ou un simple Singleton ?
C'est pas un troll , c'est une vraie question. ;)
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Outils pour l'IDE et le développement style objet

Message par microdevweb »

Bonjour G-ROm,

Tout d'abord, je préfère nettement codé en Java qu'avec mes pseudo class Pb (la c'est de la vrai POO) mais java reste java et il à des avantages comme des inconvénients.

Si je doit codé en C à l'école pour le cour temps réel on est obligé de codé style objet avec beaucoup de limitations pas d'héritage, pas de polymorphisme juste l'encapsulation. Alors que si je code pour un microcontrôleur ce sera du pure procédural avec le moins possible de procédures (selon la pile du microcontrôleur )

Pour mes projets personnels je continue avec Pb, car c'est le seul langage qui me permet de ne pas devoir faire appel à des librairies externe pour l' HMI et qu'il faut reconnaître les exe sont de petite taille et performant. Le jour ou je trouve un autre langage Objet avec les mêmes atouts ben se sera le pied.

Concernant ta question, j'avoue ne m'être jamais posé vraiment la question, la plus connue Singleton oui les autres il faudrait tester.

Maintenant j'avoue qu'avec les petits outils que je me suis fais, faire une classe est aussi rapide que en java, sauf pour le polymorphisme ou il faut un peut russé.

exemple singleton

Code : Tout sélectionner

;{-------------------------------------------
; AUTHOR    : microdev
; DATE      : 2020-03-01
; CLASS     : MY_CLASS
; VERSION   : 
; PROCESS   : 
;}-------------------------------------------
DeclareModule MY_CLASS
  Interface obj
    getName.s()
    setName(name.s)
  EndInterface
	Structure _members
	  *methods
	  name.s
	EndStructure
	Declare _super(*this._members,*s_daughter,*E_daughter)
	Macro super()
		MY_CLASS::_super(*this,?S_MET,?E_MET)
	EndMacro
	; Declare new(; Place your parameters here) for sigleton no constructor
	Global instance.obj
EndDeclareModule

Module MY_CLASS
	; super constructor
	Procedure _super(*this._members,*s_daughter,*E_daughter)
		With *this
			; allocate memory
			Protected motherLen = ?E_MET - ?S_MET,
				daughterLen = *E_daughter - *s_daughter
			\methods = AllocateMemory(motherLen + daughterLen)
			; empilate methods address
			MoveMemory(?S_MET,\methods,motherLen)
			MoveMemory(*s_daughter,\methods + motherLen,daughterLen)
		EndWith
	EndProcedure

	;{-------------------------------------------
	; CONSTRUCTOR   : new
	; PARAMETER     : 
	;}-------------------------------------------
	Procedure new()
		Protected *this._members = AllocateStructure(_members)
		With *this
			\methods = ?S_MET ; remove it if class extends of other class
			;place your code here
			ProcedureReturn *this
		EndWith
	EndProcedure
	
	Procedure.s getName(*this._members)
	  With *this
	    ProcedureReturn \name
	  EndWith
	EndProcedure
	
	Procedure setName(*this._members,name.s)
	  With *this
	    \name = name
	  EndWith
	EndProcedure

  ; create unique instance
	instance = new()
	
	DataSection
		S_MET:
		Data.i @getName()
		Data.i @setName()
		E_MET:
	EndDataSection
EndModule

; test singleton
MY_CLASS::instance\setName("Pierre")
Debug MY_CLASS::instance\getName()
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Outils pour l'IDE et le développement style objet

Message par G-Rom »

Tu as bien penser à rendre privé le constructeur ^^
le premier problème , le constructeur est appelé à l’exécution du programme , peut être réglé en utilisant un pointeur à NULL et avec une méthode publique getinstance() , mais sa ne marche pas en réel.
tout l’intérêt est perdu. bon , un peu indigeste quand même le code , pour un simple singleton , pour ceux qui ce pose la question , mais qu'est ce donc un "singleton" ? c'est un objet qui n'existe qu'une seule fois dans le programme , il est impossible par le code de créer deux objets du même type, en purebasic, un singleton peut être remplacer simplement par une variable globale. ;)
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Outils pour l'IDE et le développement style objet

Message par microdevweb »

@G-Rom,

Oui le constructeur est privé puisque il n'est pas déclaré dans le DeclareModule. Évidement que c'est un peut moins clair que en Java ou C++. Mais bon voila, si l'on veux encapsuler les données cela reste à mon avis le plus simple. Alors pour ceux qui ne savent pas , pourquoi encapsuler les données et passé par des getter et setter plutôt que directement par le membre de la structure. Cela garanti que même si pour raison quelconque ou dois faire des changement dans le class, le programme appelant continuera à fonctionner même si à lieu de modifié la valeur de la variable.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Outils pour l'IDE et le développement style objet

Message par Kwai chang caine »

GRom a écrit : pour ceux qui ce pose la question , mais qu'est ce donc un "singleton"
Si je m'étais posé que celle la :mrgreen:
Merci d'y avoir pensé 8)

@MicroDevWeb
Plus vous expliquez... 8O plus ça me fait peur :oops:
En tout cas merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Outils pour l'IDE et le développement style objet

Message par G-Rom »

Salut KCC , c'est à toi que j'ai pensé en l'écrivant. Pour aller plus loin , un singleton est pratique dans d'autres langage pour n'avoir qu'une seule copie en mémoire de l'objet , par exemple,
Imagine une application quelconque qui écrit dans un .log son activité, comme le fait ogre3D avec PB par exemple , ou n'importe quel programme qui logue tout type d'informations.
et bien , il est pratique dans certain cas de n'avoir qu'une seule instance du logger partout dans le programme , pas besoin de balader des pointeurs partout ou des variables, un simple appel à "Log::GetInstance()" et hop, tu as accès à l'objet
par ex :
Log::GetInstance().write("mon message");
Mais en PB, comme ce n'est pas oo friendly, une simple variable globale fait l'affaire...
un truc propre en PB donnerais ceci :

Code : Tout sélectionner

Prototype Write(message.s)

Structure Logger
  Write.Write
  console.b
EndStructure

Global _LOGGER_.Logger

Procedure Write(message.s)
  Debug message
  If _LOGGER_\console = #True 
    PrintN(message)
  EndIf 
EndProcedure

_LOGGER_\Write = @Write()
Macro GetLoggerInstance():_LOGGER_:EndMacro
  



; Utilisation :

GetLoggerInstance()\Write("Hello KCC")

Avant tout , la poo répond à un besoin , comme en couture , si tu sait coudre , il y a beaucoup de patron de conception , en couture tu en as pour faire des pantalons, des tee shirts , etc... c'est pareil avec la poo. beaucoup de patron de conception répondent à une solution d'un problème donné. Un exemple tout simple : imagine un programme de station météo qui t'alerte dès lors qu'une sonde quelconque descend en dessous d'un certain seuil.
et bien la poo à un patron pour cela , un objet "observable" , la sonde donc, et un objet observateur , qui observe les sondes et agit en fonction, tu pourrais avoir un objet "Email" qui hérite de l'observateur et qui envois un email dès lors qu'un certain seuil est franchi , ou un autre objet "AlerteSonore" qui hérite de l'observateur et qui émet un son , etc...

Par contre en PB, même avec le travail de micro, je ne vois pas comment faire. c'est comme les Modules , j'ai plus l'impression qu'ils ont été créer pour faire plaisir à ceux qui voudrais faire du pseudo objet en PB, même les libs internes de PB n'utilise pas les modules ( à moins que cela ai changé récemment ) , c'est dire...
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Outils pour l'IDE et le développement style objet

Message par Kwai chang caine »

Merci beaucoup GRom de ta longue explication, c'est toujours un plaisir de te lire 8)
A chaque fois que je te lis, je me dis que tu dois être celui de ce forum qui a parcouru le plus de chemin, en te sortant les doigts du "puuuuummmffff" comme tu le disais si poétiquement à l'époque :mrgreen: et je t'admire tant pour ça 8)
Ils savent pas ce qu'ils ont perdus les petits hommes verts :wink:
Maitre GimsRom a écrit :un singleton est pratique dans d'autres langage pour n'avoir qu'une seule copie en mémoire de l'objet
Parce qu'à chaque fois que tu appelle une classe ça créé quelque chose en mémoire qui reste ? 8O je savais pas non plus :oops:
Si c'est le cas, c'est encore une différence fondamentale avec le procédural, car quand on sort d'une procedure, il reste plus rien
Maitre Maitre GimsRom a écrit : un simple appel à "Log::GetInstance()" et hop, tu as accès à l'objet
Ca me fait penser à l'OLE en VB6, le Createobject() et le GetObject() :wink:

Code : Tout sélectionner

Prototype Write(message.s)

Structure Logger
  Write.Write
  console.b
EndStructure

Global _LOGGER_.Logger

Procedure Write(message.s)
  Debug message
  If _LOGGER_\console = #True
    PrintN(message)
  EndIf
EndProcedure

_LOGGER_\Write = @Write()
Macro GetLoggerInstance():_LOGGER_:EndMacro

; Utilisation :
GetLoggerInstance()\Write("Hello KCC")
Quand je vois ce code puissant, cela confirme que la POO n'est là que pour les gros projets ou avec de multiples développeurs
Sinon, en une ou deux lignes on remplace ça
Maitre GRom a écrit : c'est comme les Modules , j'ai plus l'impression qu'ils ont été créer pour faire plaisir à ceux qui voudrais faire du pseudo objet en PB,
Je suis pas sûr que le but ai été de s'approcher de la POO, car FRED a toujours été plus que clair sur ce sujet et il a jamais lâché l'affaire :?
Et le FRED, coté obstination ..... c'est "quinquin" et c'est grâce à ce que l'on pourrait prendre pour un défaut qu'il a pu tenir des décennies à créer, améliorer ses logiciels, alors que bien d'autres ont abandonné :|
FRED il est super gentil, mais c'est un rottweiller de la prog...quand il a une idée en tête .....
Donc, je ne pense pas qu'il ai changé d'idées, je pense qu'il a voulu offrir la possibilité de créer des espèces de librairies open sources, afin que tout le monde puisse s'échanger des parties de codes et les réutiliser a qui mieux mieux, sans jamais se préoccuper des variables et de l'environnement du source maitre.

Ce n'est qu’après que certains développeurs pro OOP, aussi pitbull que lui, se sont mis en tête que les modules pourraient les aider à toucher le Graal :idea:
Moi je pense que FRED a du se dire, ils commencent à me les brouter menu menu avec leur POO, je leur offre un porte clef Ferrari, et ayai... ils parlent déjà de participer à une course F1 alors qu'ils ont même pas la voiture :?
J'en veux pour preuve de ma théorie, une de ses paroles, que je ne retrouve pas, (faut dire que ses paroles.....sont aussi nombreuses que des truffes dans une forêt :mrgreen: ) mais que j'ai en mémoire, disant à propos des interfaces, que c'était le début d'un moyen de s'approcher de la POO, que c'était pas le but recherché et qu'il regrettait presque de les avoir créé :cry: Cette parole m'avait surpris, et comme dab, me demande rien à ce sujet car j'avais rien compris :oops:

Maintenant cette POO, elle aura fait couler beaucoup d'encre.....des long textes, un peu aussi long que ses codes sources :lol:
A mon niveau, j'en reste toujours avec la même question, étant donné que tout est possible de coder en ASM.....qu'est ce qui empêche un génie de créer une bonne fois pour toute une surcouche POO à PB ???
Aprés tout, ceux qui l'on créé sont bien parti du C ou de l'ASM, puisque ça n'existait pas avant.....

Alors comme un génie est arrivé à coder à la mano et en C tout l'OLE Microsoft nommé Dishelper, et qu'un autre, SROD pour ne pas le nommer est arrivé à le transcrire en PB, et quand on voit le niveau du code, ou c'est la valse de vienne des pointeurs .... 8O
Je me dis, que pour ce genre d'Einstein, la POO ne doit pas être plus difficile à coder que ce genre de protocol COM, et que dire de ceux qui ont créé ReactOS ou WINE sur Linux, sans parler de LINUX lui même....ce genre de challenge devrait les faire rire :lol:
Mais bon...arrêtons de rêver....le seul moyen que ce genre de cerveau code en PB, c'est de l'enfermer dans une cave avec une ration de nourriture et d'eau à chaque fonction POO créée :lol:
Et aprés ???? y aura t'il tant d'utilisateur de cette surcouche ??? pas si sûr ....au début pour essayer.....

En tout cas moi ,c'est pas la POO que j'attends, mais le génie qui permettra de pouvoir utiliser les DLL POO dans PB aussi facilement que les procedurales...
Car là, pour PB, y'a du potentiel, imagine toutes ces supers librairies de oufs qui font papa maman et que l'on ne peut pas utiliser dans notre PB d'amour, sans passer par un langage POO :D

Mais bon...SROD m'a dit que coder ce genre de truc ce n'est pas de la roupie de sansonnet :|
Sait on jamais...j'ai attendu 10 ans la gestion des GIFS....patience est mère de toutes les vertus
Comme but j'ai visé l'inatteignable...je prends exemple sur l’Everest FRED .. faut persévérer en PB.....faut persévérer........... :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Outils pour l'IDE et le développement style objet

Message par G-Rom »

Parce qu'à chaque fois que tu appelle une classe ça créé quelque chose en mémoire qui reste ?
Non, c'est exactement comme en procedural , en c++ il y a une chié de librairie opensource , quand des utilisateurs utilise une source quelconque , le créateur de la source peut s'assuré parfois
en mettant à disposition un objet quelconque sous forme de singleton , de manière a ce que le programmeur qui utilise la source, l'utilise correctement, c'est plein de petit mécanisme comme cela...
je t'assure, je pas très compliqué, si tu as du fric et de la bouffe , enferme moi chez toi pendant 15j , je fait de toi un dieu de la prog :mrgreen:
Quand je vois ce code puissant, cela confirme que la POO n'est là que pour les gros projets ou avec de multiples développeurs
Du tout , j'ai codé pas mal de petit outils en PB/c++ , j'ai toujours eu ce genre d'approche, j'ai même pu mettre un programme à jour plus de 10 ans après l'avoir programmer sans galérer à cherché qui fait quoi.
après, il ne faut pas non plus enc**é des mouches, ca ne sert à rien de sortir de l'artillerie pour un programme qui fait moins de 1000 lignes...
FRED il est super gentil, mais c'est un rottweiller de la prog...quand il a une idée en tête .....
A ça... on est bien d'accord :mrgreen:

En tout cas moi ,c'est pas la POO que j'attends, mais le génie qui permettra de pouvoir utiliser les DLL POO dans PB aussi facilement que les procedurales...
Car là, pour PB, y'a du potentiel, imagine toutes ces supers librairies de oufs qui font papa maman et que l'on ne peut pas utiliser dans notre PB d'amour, sans passer par un langage POO
Cela s'appelle faire des wrappers ou binding , cela se fait partout ou il y a besoin de faire des "jonctions" entre les langages.
Quand aux "dll poo" , une fois compilée , elle ne le sont plus vraiment , par exemple :

Code : Tout sélectionner

/* Class.hpp */

#ifndef CLASS_HPP
#define CLASS_HPP

#define API_EXPORT   __declspec( dllexport )


class API_EXPORT Kcc{
public:
    
    Kcc();
    
    ~Kcc();
    
    void Message(int nb);
    
};



#endif



/* Class.cpp */

#include <iostream>
#include "Class.hpp"



 Kcc::Kcc(){
        std::cout << "Kcc est construit !" << std::endl;
    }
    
Kcc::~Kcc(){
    std::cout << "Kcc est détruit" << std::endl;
}

void Kcc::Message(int nb){
    for(int i=0; i<nb; ++nb){
            std::cout << "Hello Kcc !" << std::endl;
    }
}
Quand je compile le code en dll et que je l'ouvre avec PB , j'obtiens ce genre de fonction :
  • ; _ZN3Kcc7MessageEi <- methode
    ; _ZN3KccC1Ev <- constructeur
    ; _ZN3KccC2Ev <- "" de copie
    ; _ZN3KccD1Ev <- destructeur
    ; _ZN3KccD2Ev <- destructeur
Donc, c'est largement exploitable par PB , il faudra tout de même un wrapper pour éviter les problèmes de "name mangling" et obtenir un pointeur sur les objets , pb ne supporte pas les passage par référence, et les _ZN3... etc... , c'est pas des trucs au hasard : https://en.wikipedia.org/wiki/Name_mangling

qu'est ce qui empêche un génie de créer une bonne fois pour toute une surcouche POO à PB
L'utilité ? faire une surcouche reviens quasiment à refaire une partie d'un compilateur , quand tu en est là , autant ne pas convertir ta surcouche en asm comme le fait PB , mais dans un pseudo asm portable ( llvm ir par ex )
tu aurais accès a plus de processeurs , ARM entre autre...
Le travail est titanesque , chronophage , qui seront les utilisateurs ? ceux d'aujourd'hui ? je ne pense pas qu'il y aura beaucoup de client... le pépère de 50 ans ou plus qui code avec PB n'a pas envie de ce faire chier à apprendre des concepts abstrait en poo pour faire la même chose en procédural qu'il maîtrise.
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Outils pour l'IDE et le développement style objet

Message par microdevweb »

Bonjour KCC,

pour un peux mieux expliquer les avantage ou pas de la POO

Voici une exemple qui peut être considéré comme une class, mais qui à l'inconvénient de ne pas encapsuler les données donc n'importe quel utilisateur à accès aux membres.

L'inconvénient est si par exemple on veux rendre la première lettre en majuscule on risque de devoir changer tous le code

Code : Tout sélectionner

Structure person
  name.s
  age.l
EndStructure

Global NewList myPerson.person()

Procedure addPerson(name.s,age)
  AddElement(myPerson())
  With myPerson()
    \age = age
    \name = name
  EndWith
EndProcedure

Procedure displayPerson()
  With myPerson()
  ForEach myPerson()
    Debug \name 
  Next
  EndWith
EndProcedure

addPerson("Pierre",54)
addPerson("julien",24)
addPerson("fred",36)

displayPerson()
Voici une autre exemple ou les donnée sont encapsulée, elle ne sont plus accessible depuis l'extérieur et beaucoup plus autonome (évidement cela demande un peux plus de code) et le problème est que l'on doit chaque fois renseigné le pointeur (dans getName et setName)

Code : Tout sélectionner

DeclareModule person
  Global NewList myPerson()
  Declare addPerson(name.s,age)
  Declare.s getName(*this)
  Declare setName(*this,name.s)
EndDeclareModule
Module person
  Structure _person
    name.s
    age.l
  EndStructure
  
  Procedure addPerson(name.s,age)
    *this._person = AllocateStructure(_person)
    AddElement(myPerson())
    myPerson() = *this
    With *this
      \age = age
      \name = name
    EndWith
  EndProcedure
  
  
  Procedure.s getName(*this._person)
    With *this
      ProcedureReturn UCase(Left(\name,1))+Mid(\name,2,Len(\name)-1)
    EndWith
  EndProcedure
  
  Procedure setName(*this._person,name.s)
    With *this
      \name = name
    EndWith
  EndProcedure
  
EndModule



Procedure displayPerson()
  ForEach person::myPerson()
    Debug person::getName(person::myPerson())
  Next
EndProcedure

person::addPerson("Pierre",54)
person::addPerson("julien",24)
person::addPerson("fred",36)

displayPerson()


Le troisième exemple est la méthode que j'utilise ou la j'utilise les interfaces et qui pour moi est plus propre, maintenant cela plus de code et c'est la raison pour la quel j'ai créer ces petit outils

Code : Tout sélectionner

DeclareModule person
  Interface object ; les méthodes public
    getName.s()
    setName(name.s)
  EndInterface
  Global NewList myPerson.object()
  Declare addPerson(name.s,age) ; le constructeur
EndDeclareModule
Module person
  Structure _person
    *methods ; on va stocker ici les adresses de méthodes (gèrer par interface)
    name.s
    age.l
  EndStructure
  
  Procedure addPerson(name.s,age)
    *this._person = AllocateStructure(_person)
    AddElement(myPerson())
    myPerson() = *this
    With *this
      \methods = ?LABEL
      \age = age
      \name = name
    EndWith
  EndProcedure
  
  
  Procedure.s getName(*this._person)
    With *this
      ProcedureReturn UCase(Left(\name,1))+Mid(\name,2,Len(\name)-1)
    EndWith
  EndProcedure
  
  Procedure setName(*this._person,name.s)
    With *this
      \name = name
    EndWith
  EndProcedure
  
  DataSection
    LABEL: ; on passe ici les adresse dans le même ordre que l'interface
    Data.i @getName()
    Data.i @setName()
  EndDataSection
  
EndModule



Procedure displayPerson()
  ForEach person::myPerson()
    Debug person::myPerson()\getName()
  Next
EndProcedure

person::addPerson("Pierre",54)
person::addPerson("julien",24)
person::addPerson("fred",36)

displayPerson()
maintenant il est certain que l'on peut faire beaucoup de chose en procédural et la poo n'est absolument pas obligatoire, c'est juste une manière de voir les choses. Mais utiliser une class déjà faite en Pb n'est pas compliqué, écrire la class l'est beaucoup plus.

Voila j'espère que cela t'apportera un peux plus de clarté :mrgreen:
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Outils pour l'IDE et le développement style objet

Message par Kwai chang caine »

Grom a écrit :je t'assure, je pas très compliqué, si tu as du fric et de la bouffe , enferme moi chez toi pendant 15j , je fait de toi un dieu de la prog
:lol: :lol:
C'est bien ce que je disais, l'impossible te fais même pas peur :D
La prog c'est comme les voitures...c'est le moteur l'important....et à la distribution restait plus qu'un monocylindre de mobylette pour moi :mrgreen:
Qu'est ce que j'aurais donné pour avoir un voisin comme toi..parce que de la bouffe...j'en ai :lol:
Je sais pas si c'est l'air du nord qui renforce le cerveau...mais au sud .... :oops:
Grom a écrit :le créateur de la source peut s'assuré parfois en mettant à disposition un objet quelconque sous forme de singleton
Aaaahh d'accord !!!! 8)
Donc, c'est largement exploitable par PB , il faudra tout de même un wrapper pour éviter les problèmes de "name mangling" et obtenir un pointeur sur les objets , pb ne supporte pas les passage par référence, et les _ZN3... etc... , c'est pas des trucs au hasard : https://en.wikipedia.org/wiki/Name_mangling
Mouaaaaihh !!! en un mot y'a de l'espoir....c'est déjà ça....mais ça sera pas pour demain que quelqu'un se lancera dans cette aventure, et encore si c'est possible de faire un wrapper qui fonctionne avec toutes les DLL C++
Grom a écrit :dans un pseudo asm portable ( llvm ir par ex )
Passé un temps FRED en avait parlé de ce fameux LLVM...et ça a fait pschiiiit comme aurait dit jacko :|
Grom a écrit :tu aurais accès a plus de processeurs , ARM entre autre...
Aaaiiie !!!!
Oui docteur...là aussi ça fait mal quand vous appuyez !!!! :mrgreen:
Grom a écrit :Le travail est titanesque , chronophage , qui seront les utilisateurs ? ceux d'aujourd'hui ? je ne pense pas qu'il y aura beaucoup de client... le pépère de 50 ans ou plus qui code avec PB n'a pas envie de ce faire chier à apprendre des concepts abstrait en poo pour faire la même chose en procédural qu'il maîtrise.
Tu as malheureusement raison :cry: en tout cas mille mercis de toutes tes explications...je pourrais te lire des heures..... 8) mais pas tes codes .... y'a tellement de pointeurs que même un fakir souffrirait :lol:

@MICRODEVWEB
Merci aussi MicroDevWeb de prendre encore le temps d'expliquer à des cas perdus comme moi
C'est vrai cette POO, j'en ai pas du tout l'utilité, mais ça donne envie de comprendre pourquoi il y a tant d’aficionados 8O

Et puis aussi, le fait que l'open source est de plus en plus présent, même Bilou le roi des propriétaires il a lâché 60 000 codes à LINUX
https://www.clubic.com/pro/entreprises/ ... linux.html
J'ai même lu qu'il voulait lâcher le source de XP, alors là...bonjour le hacking pour tous ceux qui l'utilisent encore...et yen a :|

Bref.....au début j'étais super content...mais en fin de compte c'est encore plus frustrant....car quand on a pas le source c'est de la faute au vilain créateur qui est une burne :?
Mais quand on lit le source tout en POO, et qu'on comprends même pas le titre.....la burne c'est celui qui dit...qui est :mrgreen:

Dernièrement, j'ai essayé de juste lire une variable dans le source de CEF (Chromium Embedded Framework) pour essayer de me sortir le coude (Oui GRom.....moi c'est le coude :oops: ) du troufignard, je suis même pas arrivé à récupérer une string dans tous ce fatras de classes et en plus de format différents de variable du C :?
Donc en fin de compte....tout est open source....mais à partir de maintenant...ça sera comme d'habitude :oops:

En tout cas je vous admire d'évoluer et de vous sentir bien dans cette complexité, qui au final n'a rien à envier à l'ASM que des centaines de programmeurs ont essayé de simplifier pendant des années pour retourner dans une autre complexité....c'est l'effet de la roue qui tourne....bientôt les pantalons "pattedef" :mrgreen:

Encore merci à vous deux
Un suppo le KCC...et au lit :cry:

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

PureBasic Forum Officiel - Site PureBasic
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Outils pour l'IDE et le développement style objet

Message par Ollivier »

G-Rom a écrit :je t'assure, je pas très compliqué, si tu as du fric et de la bouffe , enferme moi chez toi pendant 15j , je fait de toi un dieu de la prog
Ah ben voilà... Des années de négociation à tenter de négocier une cave chez KCC, et paf... Niqué par la concurrence en moins de deux minutes...

C'est désoeuvrant, c'est pas possible...
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Outils pour l'IDE et le développement style objet

Message par G-Rom »

et encore si c'est possible de faire un wrapper qui fonctionne avec toutes les DLL C++
un wrapper générique n'existe pas, tu fait un wrapper des methodes que tu veut importer :

voici une classe basique en c++ :

Code : Tout sélectionner

class MaClasseCplusplus{
public:
	
	float add(float A, float B){
		return A+B;
	}
	
	float sub(float A, float B){
		return A-B;
	}

};
sont utilisation en c++ est simple :

Code : Tout sélectionner

MaClasseCplusplus Test;
float resultat = Test.add(4,5);
Et si tu veut l'importé pour une utilisation sous PB , le wrapper ressemblerais à cela :

Code : Tout sélectionner

EXPORT MaClasseCplusplus* CreateMaClasse(){
	return new MaClasseCplusplus();
}

EXPORT void FreeCreateMaClasse(MaClasseCplusplus* Objet){
	delete Objet;
}

EXPORT float Add(MaClasseCplusplus* Objet, float x, float y){
	return Objet->add(x,y);
}

EXPORT float Sub(MaClasseCplusplus* Objet, float x, float y){
	return Objet->Sub(x,y);
}
en gros, le wrapper "aplati" la classe , tu ne passe plus par l'objet directement, mais l'objet par des fonctions en paramètre.
càd :

au lieu de cela

Objet->Methode()

ça deviens :

Fonction(Objet)

Passé un temps FRED en avait parlé de ce fameux LLVM...
C'est du taf , après il faut aussi prendre en considération le fait que PB n'apporte rien économiquement, donc le gain n'en vaut surement pas la peine. Après , pour sortir un peu du sujet ,
il y a peu être une carte à jouer, on est dans le made in France avec tout un tas de produit, les circuits court etc... de plus , l'éducation nationale "forme" en informatique les plus jeune à la programmation.
Fred à donc 2 cartes à jouer, le made in France & la programmation.
parce que de la bouffe...j'en ai
Ca ne me fait pas peur :mrgreen:
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Outils pour l'IDE et le développement style objet

Message par Ollivier »

Peut-être que Kcc, ce qu'il a besoin surtout, c'est sa retraite en paix, qui risque de lui glisser sous les ailes à cause d'un virus, comme d'autres d'ailleurs.


On sait bien que ça ne sert à rien de faire de la POO. MicroDevWeb montre un développement (Dev). La POO reste une surcouche et c'est au plus vendeur qui gagne, et tout le reste perd : les concurrents, les utilisateurs des concurrents, les utilisateurs directs qui doivent payer, et encore payer, sinon ils mettent à poil leurs propres clients, etc...

Business à tous les niveaux. Et les plus techniques ET vendeurs sont les "gagnants", jusqu'au jour où "on" leur met bien en face la m... qu'ils ont générée.

@G-Rom

Tu dis c'est simple les mangling. Je suis d'accord, mais là, tu montres un standard. Si Fred devaient se coltiner tous les standards, déjà ils faudrait faire payer des droits pour certains, alors que d'autres sont dans un système de donation.

Et dans le système de donation, certains sont tyvoïsés, tandis que d'autres sont en réseau jusqu'à ce que mort s'en suive.

Si tu veux vraiment suivre certaines licences, il faut fabriquer, autant que programmer. Ce n'est que mon humble avis, d'un humble emmerdé.

Le côté positif de l'informatique, c'est le progrès technique : les batteries (quand elles n'explosent pas, ne contaminent pas, ne brûlent pas), la possibilité de fabriquer ses propres processeurs, l'arrivée du quantique qui va économiser de la matière conductrice entre les portes calculatoires.

C'est le premier qui fera une percée locale dans un segment de marché avant de se faire épingler par un brevêt !! Bref, il y a de l'avenir côté POO ou autre...
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Outils pour l'IDE et le développement style objet

Message par G-Rom »

Bonjour Ollivier, pour le mangling, c'était juste pour faire voir comment est une DLL contenant une classe et importé "brut de pomme" , on peu bien aussi exporté en virant le mangling.
l'exemple n'était là que pour démontré que derrière des "classes" , il ne reste en réalité que des fonctions au final.
Répondre