Einführung in die objektorientierte Programmierung mit Java


Java wird aus unterschiedlichen Gründen von vielen Leuten abgelehnt wobei vermutlich die strikte Orientierung an objektorientierter Programmierung dasjenige Feature sein dürfte, was am meisten Unwillen erzeugt sich näher mit dieser Programmiersprache auseinanderzusetzen. Gleichzeitig gibt es in der Fachliteratur einen Mangel bezüglich darin, diese Programmiermethode einsteigerfreundlich zu erläutern. Deshalb im folgenden eine kleine Übersicht wie OOP mit Java funktioniert.

Zunächst einmal sollte man sich frei machen von der üblichen Vorstellung, objektorientierte Programmierung hätte etwas mit Objekten zu tun (Objekte im Sinne von Klassen zur Beschreibung von Autos, Gebäuden usw) Bei der Programmierung geht es niemals um konkrete Objekte aus dem richtigen Leben, sondern es geht um Computercode, das ist etwas grundlegend verschiedenes. Um das besondere an OOP zu verstehen, zunächst ein kleiner Exkurs zu dessen Gegenteil, der strukturierten Programmierung.

Bei der strukturierten Programmierung werden Sub-Funktionen definiert, an die Variablen übergeben werden:

void function1 (int a, int b, int c) {

}

void function2 (int a) {

}

void function3 (int b, int c) {

}

Zusätzllich dürfen keine globale Variablen verwendet werden, weil dadurch das Unterteilen in Unterprobleme ausgehebelt werden würde. Ein Nachteil der strukturierten Programmierung besteht darin, dass bei größeren Problemen die Liste an zu übergebenden Variablen immer länger wird. Wenn man in einem Computerspiel beispielsweise eine Pfadplanung durchführen möchte, muss man neben einem Array was die Karte enthält auch noch weitere Arrays übergeben welche die aktuelle Punktzahl und den Aufenthaltsort der Gegner enthalten. Gleichzeitig gibt es in Sprachen wie C das Problem, dass man übergebende Variablen nicht abändern darf. Will man dies tun, müssen stattdessen Pointer auf die Variablen übergeben werden, die dann in der Funktion verändert werden. Wie man sieht stößt das Konzept relativ schnell an seine Grenzen.

Die Alternative dazu besteht in der Verwendung von globalen Variablen:

int a; 
int b;
int c;

void function1 () {

}

void function2 () {

}

void function3 () {

}

Man kann jetzt von jeder Funktion aus auf die Variablen zugreifen. Aus Sicht der strukturierten Programmierung wäre das ein Verstoß gegen die Regel „Verwende keine globalen Variablen“. Aber anstatt das ganze als schlechten Stil zu bezeichnen ist es in der Fachlitatur unter einem anderen Namen bekannt geworden: objektorientierte Programmierung. Das ganze kann man weiter vereinfachen, indem man die einzelnen Variablen zu einem Struct zusammenfasst:

class Class1 {
  struct Spielstand {
    int a; 
    int b;
    int c;
  }

  void function1 () {
    Spielstand.b = 5;
  }

  void function2 () {
    Spielstand.a=10;
  }

  void function3 () {

  }
}

Der Sinn des ganzen ist es, dass man die Übergabe von einer oder mehrerer Variablen an die Unterfunktionen einspart und auch nicht mit Zeigern hantieren muss, wenn man die Variablen in der Funktion verändern möchte. Das ist der ganze Sinn der objektorientierten Programmierung.

Man kann das ganze noch weiter ausbauen, hin zu Vererbung, Kommunikation der Objekte untereinander usw. Das würde den Rahmen dieser Einführung jedoch sprengen.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s