Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

OOP für Fortgeschrittene

von MitgliedStueberSeite 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
  • Das Tutorial wurde am 23.07.2010 von MitgliedStueber angelegt.
  • Die aktuellste Version wurde am 23.07.2010 von MitgliedStueber gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen