OOP - PreCompiler (Update)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

OOP - PreCompiler (Update)

Beitrag von mk-soft »

Update v0.45

Alte Beispiel entfernt

FF :wink:

P.S. Schaut auch mal dieses von Inc. an
http://www.purebasic.fr/german/viewtopic.php?t=15229
:allright:
Zuletzt geändert von mk-soft am 25.06.2009 21:01, insgesamt 3-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Tolle Idee.

Ich werd aber weiter meinen PreCompiler für Klassen verwenden und weiterproggen. (für eine Freigabe ist es noch zu früh (Bugs und so))
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Hi,

habe jetzt den OOP-PreCompiler am laufen.

Download OOP-PreCompiler (Window)
Download OOP-PreCompiler (Linux)

Klassenvererbung und volle IncludeFile unterstützung :allright:

Die Einstellungen für die IDE sind:

Bild

[Vergessen] Gleiche Einstellung nochmal mit "Vor dem Erstellen des Executable"

Edit: bereinigt

Bitte mal alles Testen.

FF :wink:
Zuletzt geändert von mk-soft am 15.02.2008 17:01, insgesamt 7-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Update v0.45

Alte Beispiele entfernt

Code: Alles auswählen

; Example Part 1

; Defined first class

Class(MasterClass)
  ; This methods are generate the oop precomiler 
  ;    - QueryInterface(*UIID.iid, *ppv.long)
  ;    - AddRef()
  ;    - Release()
  ; All others methods automatically included
    
  ; Attributes
  LastName.s
  FirstName.s
  Datum.l
EndClass

; Syntax for Method:
; Method [Overwrite] ClassName_Function(*this.ClassName, ...)
;   ...
; EndMethod

; Method for Class MasterClass
Method MasterClass_SetLastName(*this.MasterClass, Name.s)
  *this\LastName = Name
EndMethod

Method MasterClass_SetFirstName(*this.MasterClass, Name.s)
  *this\FirstName = Name
EndMethod

Method MasterClass_SetDatum(*this.MasterClass, Datum.l)
  *this\Datum = Datum
EndMethod

Method.s MasterClass_GetDaten(*this.MasterClass, Separator.s)
  Protected Result.s
  Result = *this\LastName + Separator + *this\FirstName + Separator + FormatDate("%dd.%mm.%yyyy", *this\Datum)
  ProcedureReturn Result
EndMethod

; Test Part 1

Debug "Test Part 1"
Define.IMasterClass *User1 ; <- Object declare - Syntax: I + ClassName
; Create Object
*User1 = NewObject(MasterClass)
; Call Methods any Properties
*User1\SetLastName("Meyer")
*User1\SetFirstName("Hans")
*User1\SetDatum(Date())
Debug "User1: " + *User1\GetDaten(";")
; Release Object
DeleteObject(*User1)
; or *User1\Release()

Debug ""
; ***************************************************************************************

; Example Part 2 - inheritance and overwrite inherited method

; Defined second Class
Class(SubClass, MasterClass) ; <- inheritance method and attributes from MasterClass
  ; Attributes
  Street.s
  Sity.s
EndClass

; Method for Class SubClass
Method SubClass_SetStreet(*this.SubClass, Street.s)
  *this\Street = Street
EndMethod

Method SubClass_SetSity(*this.SubClass, Sity.s)
  *this\Sity = Sity
EndMethod

Method.s SubClass_GetAdresse(*this.SubClass, Separator.s)
  Protected Result.s
  Result = *this\Street + Separator + *this\Sity
  ProcedureReturn Result
EndMethod

Method.s Overwrite SubClass_GetDaten(*this.SubClass, Separator.s) ; <- Overwrite inherited method GetDaten(...)
  Protected *self.ISubClass = *this ; <- declare self methods
  Protected Result.s
  Result = *this\LastName + Separator + *this\FirstName + Separator + FormatDate("%dd.%mm.%yyyy", *this\Datum)
  Result + Separator + *self\GetAdresse(Separator)
  ProcedureReturn Result
EndMethod

; Test Part 2

Debug "Test Part 2"
Define.ISubClass *User2, *User3
; Create Object
*User2 = NewObject(SubClass)
*User2\SetLastName("Smith")
*User2\SetFirstName("Jon")
*User2\SetDatum(Date())
*User2\SetStreet("Linenstr. 44")
*User2\SetSity("Irgendwo")
Debug "User2: " + *User2\GetDaten(";")
; Release Object
*User2\Release()
; or DeleteObject(*User2)
Debug ""

; ***************************************************************************************

; Example Part 3 - avoidance of memory leak with method InitObject and DestroyObject

Class(MemClass)
  *mem1
  *mem2
EndClass

; Init memory
Method MemClass_InitObject(*this.MemClass) ; <- NewObject calling InitObject
  With *this
    Debug "InitObject: AllocateMemory."
    \mem1 = AllocateMemory(10*1024)
    \mem2 = AllocateMemory(20*1024)
  EndWith
EndMethod

Method MemClass_GetMemPointer(*this.MemClass, number.l)
  Select number
    Case 1 : ProcedureReturn *this\mem1
    Case 2 : ProcedureReturn *this\mem2
    Default : ProcedureReturn 0
  EndSelect
EndMethod

Method MemClass_DestroyObject(*this.MemClass) ; <- DeleteObject or Release calling DestroyObject
  
  Debug "DestroyObject: Free Memory."
  FreeMemory(*this\mem1)
  FreeMemory(*this\mem2)
  
EndMethod

; Test Part 3
Debug "Test Part 3"
Debug ""
Debug "Mem Test 1"
*mem.IMemClass = NewObject(MemClass)
Debug "Address of Obj : " + Str(*mem)
Debug "Address of mem1: " + Str(*mem\GetMemPointer(1))
Debug "Address of mem2: " + Str(*mem\GetMemPointer(2))
DeleteObject(*mem)
;*mem\Release()
Debug ""

Debug "Mem Test 2"
*mem.IMemClass = NewObject(MemClass)
Debug "Address of Obj : " + Str(*mem)
Debug "Address of mem1: " + Str(*mem\GetMemPointer(1))
Debug "Address of mem2: " + Str(*mem\GetMemPointer(2))
DeleteObject(*mem)
;*mem\Release()
Debug ""

Debug "Mem Test 3"
*mem.IMemClass = NewObject(MemClass)
Debug "Address of Obj : " + Str(*mem)
Debug "Address of mem1: " + Str(*mem\GetMemPointer(1))
Debug "Address of mem2: " + Str(*mem\GetMemPointer(2))
DeleteObject(*mem)
;*mem\Release()
Debug ""

Debug "Mem Test 4"
*mem.IMemClass = NewObject(MemClass)
Debug "Address of Obj : " + Str(*mem)
Debug "Address of mem1: " + Str(*mem\GetMemPointer(1))
Debug "Address of mem2: " + Str(*mem\GetMemPointer(2))
DeleteObject(*mem)
;*mem\Release()
Debug ""
Zuletzt geändert von mk-soft am 25.06.2009 20:59, insgesamt 3-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Entfernt
Zuletzt geändert von mk-soft am 25.06.2009 21:02, insgesamt 2-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Entfernt
Zuletzt geändert von mk-soft am 25.06.2009 21:03, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Geht das auch unter Linux? Sonst kann ich es nicht benutzen oder testen.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Opps,

Der Link zur Linuxversion fehlte. War nur im englischen Forum.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Info zur aktuellen Version:

Update v0.37

Neu:
- InitObject Method
- Pointer auf Parent Object

http://www.purebasic.fr/english/viewtopic.php?t=30774

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Update v0.43

Hat sich einiges getan :wink:

http://www.purebasic.fr/english/viewtopic.php?t=30774

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten