OOP maker

Programmation d'applications complexes
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

OOP maker

Message par microdevweb »

Bonjour à tous.

Voici un projet qui est en développement pour pouvoir implémenté rapidement et facilement une structure de programme avec une philosophie objet en PureBasic.

Ce projet sera en deux phases et en philosophie objet.
  • Une phase model (engine) fonctionnel
  • Une phase Ui (user interface) qui utilisera le model (engine)
En voici une petite vidéo de présentation

https://youtu.be/L0tQ9jHVvqU

Github project

Wiki doc

Vidéo tutoriel (un petit logiciel de dessin) :

Partie 1

Partie 2

Partie 3

Code source du tutoriel
Dernière modification par microdevweb le dim. 09/sept./2018 12:17, modifié 5 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: OOP maker

Message par microdevweb »

Premier teste :

Code : Tout sélectionner

IncludePath "Modules/"
XIncludeFile "Model.pbi"
UseModule Model
Global.Project drawingProject = newProject("drawing")
mModel.Package = drawingProject\addPackage(newPackage("Model"))


mForm.AbstractClass = mModel\addClass(newAbstractClass("Form"))
mForm\addMember(newPublicMember("posX",#MB_TYPE_LONG))
mForm\addMember(newPublicMember("posY",#MB_TYPE_LONG))
mForm\addMethod(newAbstractMethod("draw"))

mCircle.PublicClass = mModel\addClass(newPublicClassEtendsOf("cCircle",mForm))
mCircle\addMember(newPublicMember("radius",#MB_TYPE_LONG))

mRectangle.PublicClass = mModel\addClass(newPublicClassEtendsOf("Rectangle",mForm))
mRectangle\addMember(newPublicMember("width",#MB_TYPE_LONG))
mRectangle\addMember(newPublicMember("heigth",#MB_TYPE_LONG))

mDrawing.PublicClass = mModel\addClass(newPublicClass("Drawing"))
mDrawing\addMember(newPrivateMember("myFormes",mForm,Model::#LIST_COLLECTION))
mDrawing\addMember(newPrivateMember("_Formes",Model::#MB_POINTER,Model::#MAP_COLLECTION))
mDrawing\addMethod(newPublicMethod("draw"))
mDrawing\addMethod(newPublicMethod("addForm"))
mDrawing\addMethod(newPublicMethod("removeForm"))

drawingProject\build("C:\Users\microdevweb\OneDrive\POO_MAKER\Teste")
Les fichiers sont générés automatiquement, quelques petites modifications doivent leur être apportées.


Voici maintenant un exemple de l'utilisation de l'export :

Code : Tout sélectionner

IncludePath "Packages/"
XIncludeFile "Model.pbi"

UseModule Model

Global.Drawing mDrawing = newDrawing()
Global.Rectangle rec1,rec2
Global.CCircle cer1,cer2
rec1 = mDrawing\addForm(newRectangle(60,10,100,20))
rec2 = mDrawing\addForm(newRectangle(180,10,50,120))

cer1 = mDrawing\addForm(newCCircle(60,300,30))
cer2 = mDrawing\addForm(newCCircle(150,300,50))

Enumeration 
  #FORM
  #CANVAS
EndEnumeration

Procedure Exit()
  End
EndProcedure

OpenWindow(#FORM,0,0,800,600,"Teste",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CanvasGadget(#CANVAS,0,0,800,600)
StartDrawing(CanvasOutput(#CANVAS))
mDrawing\draw()
StopDrawing()
BindEvent(#PB_Event_CloseWindow,@Exit(),#FORM)

Repeat
  WaitWindowEvent()
ForEver
Voici ce que cela donne
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: OOP maker

Message par falsam »

Mon avis ne sera pas objectif car tu sais ce que je pense de ton obsession addictive à l'OOP :mrgreen:

J'ai testé ton "OOP Maker" je m'attendais à un wizard qui pose des tas de questions pour générer ta fameuse structure de programme.
microdevweb a écrit :pouvoir implémenté rapidement et facilement une structure de programme
Et en fait rien : Ton code génère une application de dessin.

Je ne comprends pas l'interet de faire

Code : Tout sélectionner

mForm.AbstractClass = mModel\addClass(newAbstractClass("Form"))
mForm\addMember(newPublicMember("posX",#MB_TYPE_LONG))
mForm\addMember(newPublicMember("posY",#MB_TYPE_LONG))
mForm\addMethod(newAbstractMethod("draw"))
etc ...
pour générer le code suivant

Code : Tout sélectionner

DeclareModule Model
    Interface Form
      getPosX.l()
      setPosX(posX.l)
      getPosY.l()
      setPosY(posY.l)
    EndInterface
    Interface CCircle Extends Form
      getRadius.l()
      setRadius(radius.l)
    EndInterface
    Interface Rectangle Extends Form
      getWidth.l()
      setWidth(width.l)
      getHeigth.l()
      setHeigth(heigth.l)
    EndInterface
    Interface Drawing
     draw()
     addForm()
     removeForm()
    EndInterface
    Declare newCCircle(posX.l,posY.l,radius.l)
    Declare newRectangle(posX.l,posY.l,width.l,heigth.l)
    Declare newDrawing()
EndDeclareModule
Module Model
  EnableExplicit
  IncludePath "Model_classes\"
 XIncludeFile "structures.pbi"
  XIncludeFile "Form.pbi"
  XIncludeFile "cCircle.pbi"
  XIncludeFile "Rectangle.pbi"
  XIncludeFile "Drawing.pbi"
EndModule
Autant le coder directement car c'est bien moins compliqué que ta façon de faire.

Je crois qu'il faut vraiment arrêter avec l'OOP et PureBasic mais aussi avec l'utilisation intensive des modules quand ceux ci ne sont pas réutilisables pour d'autres projets.

:idea: Make simple with PureBasic est LA bonne idée ^-^
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%
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: OOP maker

Message par microdevweb »

falsam,

Comme je l'ai expliqué se projet en deux Phases, la première étant un moteur qui en effet s'utilise en ligne de code et permet de poser les Classes, membres et méthodes le programme génère en suite le code des dites classes.

La deuxième sera la partie graphique, ou on créera une analyse de type uml et le moteur générera le code de la même manière.

Maintenant je connais ton aversion pour l'oop et la encore une fois chacun son choix.

La je fait un petit tuto vidéo qui montre la conception en effet d'un petit soft de dessin. Ce qui permettra de mieux comprendre le raisonnement du moteur.

Ensuite je ferais l'ui et ceci en utilisant mon module pour poser mes class, car se dernier sera composé de partie nettement réutilisable comme un treeview perso, un moteur de nodes etc.

J'avais déjà fait un treeview en procédural et cela rendait son utilisation complexe donc on vera si se sera mieux

Remarque :

Code : Tout sélectionner

mForm.AbstractClass = mModel\addClass(newAbstractClass("Form"))
mForm\addMember(newPublicMember("posX",#MB_TYPE_LONG))
mForm\addMember(newPublicMember("posY",#MB_TYPE_LONG))
mForm\addMethod(newAbstractMethod("draw"))
etc ...
Fait beaucoup plus que de créer une simple interface, cela crée le contructeur les getters les setters les prototype de fonction etc.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: OOP maker

Message par falsam »

microdevweb a écrit :Maintenant je connais ton aversion pour l'oop et la encore une fois chacun son choix.
je n'ai pas d'aversion. Je l'utilise avec d'autres langages comme php et JavaScript par exemple.
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%
Répondre