OOP Precompiler

Anfängerfragen zum Programmieren mit PureBasic.
jensknaack
Beiträge: 8
Registriert: 03.01.2017 18:28

OOP Precompiler

Beitrag von jensknaack »

Hallo,

im Forum und auch allgemein im Internet habe ich einige Links und Hinweise auf OOP-Precompiler gefunden. Es scheint mir allerdings, dass es keinen funktionierenden Download-Link gibt.

Täusche ich mich, oder sind sämtliche Projekte eingestellt/deaktiviert?

Herzlichen Dank für eventuelle Auskünfte
Jens
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: OOP Precompiler

Beitrag von ts-soft »

Täusche ich mich, oder sind sämtliche Projekte eingestellt/deaktiviert?
Das wohl nicht, aber nicht unbedingt Sinnvoll, da es jetzt ja Module gibt, die ähnliches leisten, fast.

Da ist OOP wohl noch unpupulärer als es vorher bereits war, vor allem bei Einsteigern.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: OOP Precompiler

Beitrag von mk-soft »

ts-soft hat geschrieben:
Da ist OOP wohl noch unpupulärer als es vorher bereits war, vor allem bei Einsteigern.
Da muss ich Thomas recht geben. Mit der Einführung von Modulen sinn einige Sachen einfacher geworden. Ich selber bin von OOP-Precompiler auf Modul mit OOP Funktionen umgestiegen (Siehe Link).

Aber je nach Anwendungsfall macht es sinn auch ein Object (OOP) zu programmieren. Dazu finde ich aber die PB-Hilfe was ein Objekt ist und wie dieses zu verwenden ist nicht ausreichend.

Manche OOP Implementierung bauen eine komplette neu Syntax für PB auf, was auch gut umgesetzt ist. Ich selber mag es lieber an die Syntax von PB zu halten, wo man auch sehr gut mit Objekten arbeiten kann.

Bei kleinen Projekten sollte man die Objekte komplett selber mit Module programmieren...

Hier mal ein Beispiel wie man mit Modulen rechts einfach Objekte programmieren kann

Code: Alles auswählen

; Module OOP Example by mk-soft

DeclareModule MyObject
  
  Interface iMyObject
    Release()
    Clear()
    Add(Value.i)
    Sub(Value.i)
    Result()
    ResultS.s()
  EndInterface
  
  Declare New(Startwert = 0)
  
EndDeclareModule

Module MyObject
  
  EnableExplicit
  
  ; Objektdaten
  Structure sMyObject
    *vTable ; Immer als erster Eintrag. Systemregel
    summe.i
  EndStructure
  
  ; Object anlegen
  Procedure New(Startwert = 0)
    Protected *object.sMyObject
    *object = AllocateStructure(sMyObject)
    If *object
      ; Virtuelle Funktionstabelle zuweisen
      *object\vTable = ?vMyObject
      ; Daten zuweisen
      *object\summe = Startwert
    EndIf
    ProcedureReturn *object
  EndProcedure
  
  ; Object freigeben
  Procedure Release(*this.sMyObject)
    FreeStructure(*this)
    ProcedureReturn 0
  EndProcedure
  
  ; Object funktionen
  Procedure Clear(*this.sMyObject)
    With *this
      \summe = 0
    EndWith
  EndProcedure
  
  Procedure Add(*this.sMyObject, Value.i)
    With *this
      \summe + Value
    EndWith
  EndProcedure
  
  Procedure Sub(*this.sMyObject, Value.i)
    With *this
      \summe - Value
    EndWith
  EndProcedure
  
  Procedure Result(*this.sMyObject)
    With *this
      ProcedureReturn \summe
    EndWith
  EndProcedure
  
  Procedure.s ResultS(*this.sMyObject)
    With *this
      ProcedureReturn "Result = " + Str(\summe)
    EndWith
  EndProcedure
  
  ; Funktionstabelle. Gleiche Reihenfolge wie das Interface
  DataSection
    vMyObject:
    Data.i @Release()
    Data.i @Clear()
    Data.i @Add()
    Data.i @Sub()
    Data.i @Result()
    Data.i @ResultS()
  EndDataSection
  
EndModule

; Test
Define.MyObject::iMyObject *obj1, *obj2
*obj1= MyObject::New()
*obj2= MyObject::New(100)
*obj1\Add(10)
*obj2\Sub(10)
Debug *obj1\Result()
Debug *obj2\ResultS()
*obj1\Release()
*obj2\Release()
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
jensknaack
Beiträge: 8
Registriert: 03.01.2017 18:28

Re: OOP Precompiler

Beitrag von jensknaack »

Hallo und herzlichen Dank für die Antworten.

Die muss ich jetzt erst einmal durcharbeiten und verstehen.

Ich hatte als Mangel empfunden, dass ich bei der Lösung Interface mit "darunterliegender" Struktur nicht auf die einzelnen Felder/Properties (wie auch immer das richtig in PB genannt wird) zugreifen kann, sondern alles mit Prozeduren erledigen muss. Aber offensichtlich kann dieses Problem gelöst werden, indem ich mir mit einer Prozedur den Zeiger auf die Struktur geben lasse.

Viele Grüße
Jens
Antworten