Tutorial
OOP für Fortgeschrittene
von Stueber | Seite 1 von 1 |
Was du schon können solltest
Du solltest "OOP für Anfänger" schon gelesen und verstanden haben und die dort genannten Voraussetzungen erfüllen.
Private und Public
Private und Public sind die zwei Zugriffstypen die FreeBASIC bisher unterstützt. Public hast du bisher indirekt immer verwendet. Gibst du keinen Zugriffstyp an wird automatisch Public verwendet. Was ist nun der Unterschied zwischen Public und Private? Du kannst auf eine Variable die als Public deklariert ist von außen zugreifen, in etwa so:
type Auto
Geschwindigkeit as double
Farbe as uinteger
Laenge as double
Raeder as integer
end type
dim auto1 as Auto
auto1.Raeder = 4
Wie du siehst kannst du die Variable beliebig ändern. Der folgende Code funktioniert hingegen nicht:
type Auto
private:
Geschwindigkeit as double
Farbe as uinteger
Laenge as double
Raeder as integer
end type
dim auto1 as Auto
auto1.Raeder = 4
Hier werden die Variablen als Private deklariert. Das bedeutet, sie können nur noch von Funktionen und Subs die Teil des Types sind geändert werden. Zugegeben, im Auto-Beispiel macht dies nicht sehr viel Sinn. Doch stell dir die folgende Situation vor:
Du arbeitest an einem Projekt mit mehreren anderen Leuten, jeder hat seinen Teil des Programms die alle am Ende zusammenarbeiten müssen. Jetzt will einer etwas an deinen Type ändern was gar nicht einfach so geändert werden darf. Er weiß dies jedoch nicht und das Problem taucht erst viel später auf wenn es schon weit verbreitet ist. Mit Private wäre das nicht passiert. Jetzt ist der Fall, dass man die Variable ändern muss, aber ziemlich häufig. Wie man das erreicht und trotzdem sicher vor solchen Problemen bleibt wird dir im nächsten Abschnitt erklärt.
Kapselung
Kapselung ist die Lösung für das eben erwähnte Problem. Wird beim Auto die Zahl der Räder erhöht muss es auch neu gezeichnet werden. Das können die anderen Entwickler nicht wissen, du weißt es natürlich. Also schreibst du eine Funktion die den Wert von Räder ändert.
type Auto
public:
declare sub setRaeder(byval r as integer)
private:
Geschwindigkeit as double
Farbe as uinteger
Laenge as double
Raeder as integer
end type
sub Auto.setRaeder(byval r as integer)
Raeder = r
zeichne()
end sub
dim auto1 as Auto
auto1.setRaeder(4)
So müssen die anderen Entwickler die Funktion nehmen und können den Fehler nicht machen. Außerdem kannst du an einer Stelle einfach ändern wie auf das Ändern der Anzahl der Räder reagiert werden soll. Ansonsten müsstest du den ganzen Quelltext absuchen und überall wo die Anzahl der Räder geändert wird etwas ändern. Wie du hier siehst können auch Funktionen und Subs Private und Public sein. Auch Funktionen können damit vor falschem verwenden geschützt werden. Leider verhindert Private auch das der Wert der Variablen abgefragt wird. Die kann man mit einer get-Funktion umgehen. Für gewöhnlich ist das eine Funktion ohne Parameter die den Wert der Variablen zurück gibt. So kann man verhindern, dass jemand der nicht weiß was er tut etwas kaputt macht. Auch du selbst kannst bei einem großen Quelltext leicht durch einander kommen und solche Funktionen helfen dir effizienter zu arbeiten.
Operatoren
Du kennst einige Operatoren in FreeBASIC, zum Beispiel +, -, *, /, =, <, > und viele weitere. Diese kannst du auch für deinen Type verwendbar machen. Nicht bei jedem Type ist jeder Operator geeignet. So sind + und - eher nutzlos bei Autos. Allgemein sind = (Zuweisung), = (Vergleich) und <> (Vergleich) immer nützlich und sollten implementiert werden.
Zuweisungsoperatoren überlädt man im Type, Vergleichsoperatoren außerhalb. Um den Unterschied zwischen = (Zuweisung) und = (Vergleich) klar zu machen, heißt der Zuweisungsoperator "let".
Weitere Informationen gibt es in einem eigenen Tutorial zu Operatoren.
Beispiel
Das Beispiel mit dem Auto war natürlich nur um besser erklären zu können was OOP ist. Es gibt eine riesige Zahl an sinnvollen Types die man sich schreiben kann. Einige Types können unabhängig von Projekt sehr sinnvoll sein, z.B. ein Speichermanager oder eine verkette Liste. Eine Beispiel Implementierung von verketteten Listen findest du hier. Der Inhalt der Funktionen ist gar nicht so wichtig, aber bei diesem Beispiel kannst du dir anschauen wie man OOP in der Praxis verwendet.
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|