Page 1 sur 1

OOP maker

Publié : ven. 07/sept./2018 10:27
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

Re: OOP maker

Publié : sam. 08/sept./2018 0:05
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

Re: OOP maker

Publié : sam. 08/sept./2018 21:21
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 ^-^

Re: OOP maker

Publié : sam. 08/sept./2018 22:09
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.

Re: OOP maker

Publié : sam. 08/sept./2018 22:14
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.