Seite 5 von 9
Verfasst: 24.10.2007 19:51
von X0r
So, beide "Fehler" behoben:
http://www.forgesoft.net/Resources/OOP-Precompiler.zip
Was gibts sonst noch zu meckern?
Kann man das nun ansatzweise als OOP bezeichnen? Vielleicht können wir diesen Precompiler ja weiterentwickeln, wenn bisher alles richtig ist.
Beispiel:
;- Classes
Class OBJECT
a.l
b.w
Declare DummyProc(a,b,c)
EndClass
Class ObjectA
n.l
d.w
Declare TestProc(a,b,c,d)
EndClass
;- Methods
Method DummyProc(a,b,c)
Debug "Summe: "+Str(a+b+c)
EndMethod
Method TestProc(a,b,c,d)
Debug "Summe: "+Str(a+b+c+d)
EndMethod
;------------------------------------
New MyObject.OBJECT
MyObject\DummyProc(1,1,0)
New Test.ObjectA
Test\TestProc(4,1,1,1)
Test\TestProc(4,1,1,1)
Verfasst: 24.10.2007 22:12
von Leo
Irgendwie hab ich das Gefühl, dass deinem Precompiler etwas wichtiges fehlt:
Den Methoden wird keine Instanz der Klasse übergeben (this-Variable).
Verfasst: 24.10.2007 22:18
von X0r
Wie meinst du das jetzt(Beispielcode wäre tolll....)?
Verfasst: 24.10.2007 22:23
von Leo
X0r hat geschrieben:Wie meinst du das jetzt(Beispielcode wäre tolll....)?
Deine Klassen haben doch Member-Variablen.
Wie sollen die Methoden jetzt auf diese Zugreifen können, wenn sie nicht die Adresse der Instanz (MyObject.OBJECT / Test.ObjectA) per Parameter übergeben bekommen?
Verfasst: 24.10.2007 22:35
von milan1612
Ich hab mal schnell eine Beispielklasse geschrieben. Das ist was ich unter OOP
verstehe:
Code: Alles auswählen
Class XString
Public:
s.string
Constructor(str.s)
XLeft.s(len)
XRight.s(len)
XMid.s(pos, len)
XTrim.s()
EndClass
Procedure XString\Constructor(str.s)
*this\s = str
EndProcedure
Procedure.s XString\XLeft(len)
ProcedureReturn Left(*this\s, len)
EndProcedure
Procedure.s XString\XRight(len)
ProcedureReturn Right(*this\s, len)
EndProcedure
Procedure.s XString\XMid(pos, len)
ProcedureReturn Mid(*this\s, pos, len)
EndProcedure
Procedure.s XString\XTrim()
ProcedureReturn Trim(*this\s)
EndProcedure
;Example
var.XString = New XString(" hello world ")
Debug var\XLeft(3)
Debug var\XRight(5)
Debug var\XMid(7, 5)
Debug var\XTrim()
Verfasst: 24.10.2007 22:40
von X0r
@Leo:
Stimmt. Wie würde man das in PB realisieren?
Hier ein Code, der vom PreCompiler erstellt wurde. Vielleicht kannst du mir ja helfen:
Code: Alles auswählen
Prototype OBJECT_DummyProc(a,b,c)
Prototype ObjectA_TestProc(a,b,c,d)
Structure OBJECT
a.l
b.w
DummyProc.OBJECT_DummyProc
EndStructure
Structure ObjectA
n.l
d.w
TestProc.ObjectA_TestProc
EndStructure
Procedure DummyProc(a,b,c)
MyObject\a=a
Debug "Summe: "+Str(a+b+c)
EndProcedure
Procedure TestProc(a,b,c,d)
Debug "Summe: "+Str(a+b+c+d)
EndProcedure
MyObject.OBJECT
MyObject\DummyProc=@DummyProc()
MyObject\DummyProc(1,1,0)
MyObject\DummyProc(1,1,0)
Test.OBJECT
Test\DummyProc=@DummyProc()
Test\DummyProc(1,1,0)
; IDE Options = PureBasic 4.10 Beta 4 (Windows - x86)
; CursorPosition = 27
; FirstLine = 5
; Folding = -
Verfasst: 24.10.2007 22:58
von Leo
X0r hat geschrieben:@Leo:
Stimmt. Wie würde man das in PB realisieren?
Hier ein Code, der vom PreCompiler erstellt wurde. Vielleicht kannst du mir ja helfen:
So ungefähr:
Code: Alles auswählen
Prototype OBJECT_DummyProc(a,b,c,*This.OBJECT)
Prototype ObjectA_TestProc(a,b,c,d,*This.ObjectA)
Structure OBJECT
a.l
b.w
DummyProc.OBJECT_DummyProc
EndStructure
Structure ObjectA
n.l
d.w
TestProc.ObjectA_TestProc
EndStructure
Procedure DummyProc(a,b,c,*This.OBJECT)
*This\a=a
Debug "Summe: "+Str(a+b+c)
EndProcedure
Procedure TestProc(a,b,c,d,*This.ObjectA)
Debug "Summe: "+Str(a+b+c+d)
EndProcedure
MyObject.OBJECT
MyObject\DummyProc=@DummyProc()
MyObject\DummyProc(1,1,0,@MyObject)
MyObject\DummyProc(1,1,0,@MyObject)
Test.OBJECT
Test\DummyProc=@DummyProc()
Test\DummyProc(1,1,0,@Test)
; IDE Options = PureBasic 4.10 Beta 4 (Windows - x86)
; CursorPosition = 27
; FirstLine = 5
; Folding = -
Verfasst: 24.10.2007 23:03
von X0r
Ja, würde ich auch so meinen.
Dachte es funktioniert, aber irgendwie macht der Precompiler Probleme..
Edit: Ich arbeite dran. Muss jetzt erstmal ein Weg finden, wie ich ne LinkedList in einer LinkedList erstelle

Verfasst: 24.10.2007 23:23
von X0r
Ok, funktioniert jetzt auch:
http://www.forgesoft.net/Resources/OOP-Precompiler.zip
Beispielcode:
Code: Alles auswählen
Class OBJECT
a.l
b.w
Declare DummyProc(a,b,c)
Declare SecondDummyProc(objp)
EndClass
Method DummyProc(a,b,c)
Debug "Summe: "+Str(a+b+c)
EndMethod
Method SecondDummyProc(*this.OBJECT)
Debug *this\a
EndMethod
New MyObject.OBJECT
MyObject\DummyProc(1,1,0)
MyObject\a=1
MyObject\SecondDummyProc(MyObject)
; IDE Options = PureBasic 4.10 Beta 4 (Windows - x86)
; CursorPosition = 21
; Folding = -
So, was fehlt noch?
Verfasst: 24.10.2007 23:34
von Hroudtwolf
So, was fehlt noch?
Fehlerermittlung,
Verarbeitung von inkludierten Sources,
Vererbung,
die Möglichkeit zum Composing,
zeilengenaue Fehler-Ausgabe,
das Senden der Source an den Compiler unter adäquater Weitergabe von Commandline-Argumenten,
Ein Delete Keyword (sollte VTable und Object killen),
eine direkte Möglichkeit zum Call von Methoden innerhalb von Methoden.
(Wobei ich da auf ThisVar und This bauen würde, denn anders ist es schwer in PB umzusetzen).
Bis jetzt ist es vom Augenschein geschlossen, nur ein kleiner Konverter.
Willste das nicht lieber Rings und ein paar andere Progger machen lassen die zudem noch Ahnung von OOP haben ?
Nicht dass du dir da jetzt unlösbare Aufgaben auflastest.
MfG
Wolf