OOP einfach gemacht
Verfasst: 30.11.2015 21:51
Ich habe von eine einfache Anleitung für OOP im Netz gesehen. Also, all dies hier ist nicht auf meinem Mist gewachsen.
Daraus habe ich ein Beispiel gebastelt, wie man OOP in Purebasic, einfach realisieren kann.
Damit lassen sich Klassen und davon abgeleitete Objekte erzeugen.
Man kann vererben und man kann Methoden Ueberdefinieren.
Es lassen sich Objekte als Pointer auf ein Objekt im Speicher oder als normale Variable erstellen.
Objekte im Speicher kann man wieder freigeben. Die Pointervariable bleibt allerdings bestehen.
Als Konvention habe ich folgendes definiert.
Klassen Methoden beginnen immer mit dem Namen der Klasse: cMyClass_
Private Methoden beginnen immer mit __
Der *self Zeiger ist notwendig, damit die Methode weiss auf welches Objekt sie zugreifen soll.
Ganz aehnlich wie in Python nur muss der Zeiger immer mitgegeben werden.
Private Attribute beginnen immer mit __
Eigentlich kann ma damit beinahe alles was OOP betrifft machen, was in anderen OOP-Sprachen möglich ist.
Es zeigt, wie flexibel Purebasic, als nicht OOP-Sprache, umgesetzt ist.
Viel Spass.
__________________________________________________
Code-Tags hinzugefügt
30.11.2015
RSBasic
Daraus habe ich ein Beispiel gebastelt, wie man OOP in Purebasic, einfach realisieren kann.
Damit lassen sich Klassen und davon abgeleitete Objekte erzeugen.
Man kann vererben und man kann Methoden Ueberdefinieren.
Es lassen sich Objekte als Pointer auf ein Objekt im Speicher oder als normale Variable erstellen.
Objekte im Speicher kann man wieder freigeben. Die Pointervariable bleibt allerdings bestehen.
Als Konvention habe ich folgendes definiert.
Klassen Methoden beginnen immer mit dem Namen der Klasse: cMyClass_
Private Methoden beginnen immer mit __
Der *self Zeiger ist notwendig, damit die Methode weiss auf welches Objekt sie zugreifen soll.
Ganz aehnlich wie in Python nur muss der Zeiger immer mitgegeben werden.
Private Attribute beginnen immer mit __
Code: Alles auswählen
; Objektorientiert programmieren mit PureBasic
; Klassendefinition I --------------------------------------------------------
; Procedureendeklaration
Prototype cMyClass_Show(*self)
Prototype cMyClass_SetX(*self, x)
Prototype cMyClass___Clear(*self)
Structure cMyClass
; Public attributes
x.l
y.l
; Private attributes
__id.l
; Public methods
Show.cMyClass_Show
SetX.cMyClass_SetX
; Private methods
__Clear.cMyClass___Clear
EndStructure
; Methodendefinition
Procedure cMyClass_Show(*self.cMyClass)
Debug *self\x
Debug *self\y
Debug ""
EndProcedure
Procedure cMyClass_SetX(*self.cMyClass, x.l)
*self\x = x
EndProcedure
Procedure cMyClass___Clear(*self.cMyClass)
*self\x = 0
*self\y = 0
EndProcedure
; Konstruktor
Procedure cMyClass(*self.cMyClass)
*self\Show = @cMyClass_Show()
*self\SetX = @cMyClass_SetX()
*self\__Clear = @cMyClass___Clear()
*self\x = 1
*self\y = 2
EndProcedure
; Klassendefinition II mit Vererbung -----------------------------------------
Structure cMyNewClass Extends cMyClass
; Public attributes
z.l
EndStructure
; Metodendefinition
Procedure cMyNewClass_Show(*self.cMyNewClass)
Debug *self\x
Debug *self\y
Debug *self\z
Debug ""
EndProcedure
; Konstruktor
Procedure cMyNewClass(*self.cMyNewClass)
cMyClass(*self) ; Konstruktor der Mutterklasse
*self\z = 3
*self\Show = @cMyNewClass_Show()
EndProcedure
;-----------------------------------------------------------------------------
; Instanzierung
Define.cMyClass *oMyObject
*oMyObject = AllocateMemory(SizeOf(cMyClass))
cMyClass(*oMyObject)
Define.cMyNewClass oMyNewObject
cMyNewClass(oMyNewObject)
; Programmausfuehrung
*oMyObject\Show(*oMyObject)
*oMyObject\SetX(*oMyObject, 99)
*oMyObject\Show(*oMyObject)
oMyNewObject\Show(oMyNewObject)
oMyNewObject\SetX(oMyNewObject, 77)
oMyNewObject\Show(oMyNewObject)
; Objekte freigeben
FreeMemory(*oMyObject)
Eigentlich kann ma damit beinahe alles was OOP betrifft machen, was in anderen OOP-Sprachen möglich ist.
Es zeigt, wie flexibel Purebasic, als nicht OOP-Sprache, umgesetzt ist.
Viel Spass.
__________________________________________________
Code-Tags hinzugefügt
30.11.2015
RSBasic