Hinweis: Dies ist die vollständige deutsche Übersetzung des Kapitels. Codebeispiele sind sprachunabhängig gültig.
Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, das „Objekte“ zur Strukturierung von Anwendungen verwendet. Obwohl Harbour aus xBase stammt, bietet es ein leistungsfähiges OOP-System, das mit der Clipper-Syntax kompatibel ist.
In diesem Kapitel lernst du die grundlegenden Konzepte der OOP und wie du sie in Harbour anwendest.
Bevor wir zur Syntax kommen, hier die Grundpfeiler der OOP:
Auto
mit Attributen marke
, modell
und Methoden beschleunigen()
, bremsen()
.meinAuto
mit marke = "Ford"
, modell = "Mustang"
.VAR
deklariert.METHOD
deklariert.Klassen werden mit CREATE CLASS ... ENDCLASS
definiert. Beispiel:
CREATE CLASS MeineKlasse
VAR sName
VAR nAlter
METHOD New( cName, nAlter ) CONSTRUCTOR
METHOD Begrüßen()
METHOD Geburtstag()
ENDCLASS
METHOD New( cName, nAlter ) CLASS MeineKlasse
::sName := cName
::nAlter := nAlter
RETURN Self
METHOD Begrüßen() CLASS MeineKlasse
? "Hallo, ich heiße", ::sName
RETURN Nil
METHOD Geburtstag() CLASS MeineKlasse
::nAlter++
? "Alles Gute! Ich bin jetzt", ::nAlter, "Jahre alt."
RETURN Nil
Wichtige Punkte:
VAR
: Definiert ObjektvariablenMETHOD
: Definiert MethodenCONSTRUCTOR
: Wird beim Erstellen automatisch ausgeführt::
: Zugriff auf Objektvariablen (wie this
in anderen Sprachen)Self
: Referenz auf das Objekt selbstObjekte werden mit Klasse():New(...)
erstellt:
PROCEDURE Main()
LOCAL oPerson1 := MeineKlasse():New( "Max", 35 )
LOCAL oPerson2 := MeineKlasse():New( "Anna", 28 )
oPerson1:Begrüßen()
oPerson2:Begrüßen()
oPerson1:Geburtstag()
? "Alter von Anna:", oPerson2:nAlter
WAIT
RETURN
Bemerkungen:
:
ist der Nachrichtenoperator, um Methoden aufzurufen oder Attribute zu lesen.Vererbung erlaubt es, dass eine Klasse (Kind) Eigenschaften und Methoden einer anderen Klasse (Elternklasse) übernimmt.
In Harbour wird dies mit FROM
oder INHERIT
gemacht:
CREATE CLASS Fahrzeug
VAR nRäder
VAR cFarbe
METHOD New( nRäder, cFarbe ) CONSTRUCTOR
METHOD Beschreiben()
ENDCLASS
METHOD New( nRäder, cFarbe ) CLASS Fahrzeug
::nRäder := nRäder
::cFarbe := cFarbe
RETURN Self
METHOD Beschreiben() CLASS Fahrzeug
? "Fahrzeug mit", ::nRäder, "Rädern in", ::cFarbe
RETURN Nil
CREATE CLASS Auto FROM Fahrzeug
VAR sMarke
METHOD New( cFarbe, sMarke ) CONSTRUCTOR
METHOD Beschreiben()
ENDCLASS
METHOD New( cFarbe, sMarke ) CLASS Auto
Super:New( 4, cFarbe )
::sMarke := sMarke
RETURN Self
METHOD Beschreiben() CLASS Auto
Super:Beschreiben()
? " -> Marke:", ::sMarke
RETURN Nil
PROCEDURE Main()
LOCAL oMeinAuto := Auto():New( "Rot", "Ferrari" )
oMeinAuto:Beschreiben()
WAIT
RETURN
Ausgabe:
Fahrzeug mit 4 Rädern in Rot
-> Marke: Ferrari
Merkpunkte:
FROM
: definiert VererbungSuper:
: greift auf Methoden der Elternklasse zuDamit hast du eine solide Grundlage für objektorientiertes Programmieren in Harbour. Du kannst dadurch deinen Code modularer, wiederverwendbarer und wartbarer gestalten.