Grundlagen der Objektorientierung

Im letzten Kapitel haben wir gelernt aus welchen Elementen ein Programm im Prinzip besteht und haben das Element Klasse angesprochen das Teil der objektorientierten Programmierung ist. Eine Klasse ist im Prinzip nichts anderes als eine Beschreibung wie bestimmte Daten verarbeitet werden sollen. Mit dieser Art von Beschreibung wollen wir uns gleich beschäftigen. Dazu machen wir uns noch kurz Gedanken worum es eigentlich beim Programmieren geht. Im Endeffekt geht es immer darum, irgendwelche Daten zu manipulieren. Oder exakt definiert: Dateneingabe > Datenverarbeitung > Datenausgabe Bestes Beispiel ist hierfür ein Taschenrechner. Ich gebe eine Zahl ein, drücke die Wurzeltaste und schon habe ich das Ergebnis. Allerdings sind die meisten Programme nicht so einfach aufgebaut. Meist wird erst eine Oberfläche, auch GUI (Graphic User Interface) geladen, die dann darauf wartet das vom Benutzer Daten eingegeben werden. Auf bestimmte Dateneingaben werden dann vorher festgelegte Aktionen durchgeführt und gegebenenfalls erfolgt eine Ausgabe z.B. am Bildschirm oder Drucker. In BASIC, einer der ersten leicht erlernbaren Programmiersprachen, würde das in vereinfachtem Pseudocode ungefähr so aussehen: (Mit // markierte Bereiche stellen Kommentare dar. Kommentare werden vom Compiler nicht berücksichtigt)
// Menü bauen 
CREATEBUTTON aktion1 = "Erster Button";
CREATEBUTTON aktion2 = "zweiter Button";
CREATEBUTTON abbruch = "Abbruch;

// Teil des Programms der in einer Schleife ständig wiederholt wird 
REPEAT
 IF aktion1 = TRUE THEN 
  PRINT "Button 1 gedrückt";
 ENDIF
 IF aktion2 = TRUE THEN 
  PRINT "Button 2 gedrückt";
 ENDIF
UNTIL abbruch = true


Das Programm würde drei nebeneinanderliegende Buttons erstellen. Nach dem Befehl oder besser Schlüsselwort CREATEBUTTON  steht die Variable unter welcher der Button im Computerspeicher zur Verfügung steht. Die Zeichenkette nach dem ‚=‘ gibt die Beschriftung vor. REPEAT bezeichnet den Schleifenanfang. Das Schlüsselwort IF leitet eine Bedingung ein, ENDIF beendet sie. TRUE kennen wir bereits, ein sogenannter Boolean. Bei dem Prinzip das Java verfolgt würde das ganze etwas anders aussehen. Auch hier verwenden wir zum besserem Verständnis erstmal Pseudocode: (Kommentare über mehrere Zeilen wie in diesem Beispiel werden mit /* */ gebildet und werden ebenfalls nicht vom Compiler ausgeführt).
PROGRAMMANFANG: /* Der Compiler erstellt nacheinander drei Objekte. Wobei er jedesmal die Beschreibung kopiert und und mit den Daten befüllt die in der KONSTRUIERE-Anweisung zu finden ist. */

button1 = OBJECT BUTTON, KONSTRUIERE("Button eins");
button2 = OBJECT BUTTON, KONSTRUIERE("Button zwei"); 
button3 = OBJECT BUTTON, KONSTRUIERE("Abbruch");

BESCHREIBUNG eines Objekts vom Datentyp BUTTON: 
 DATENBLOCK:
  TYP TEXT MeineBeschriftung
 DATENBLOCK ENDE

 KONSTRUKTIONSBLOCK:
  erwartet: TYP TEXT
  übergabe an Variable: MeineBeschriftung
 KONSTRUKTIONSBLOCK ENDE

 MINIPROGRAMM: 
  IF I TRUE: 
   IF MeineBeschriftung = Abbruch THEN EXIT; 
    ELSE PRINT "Dies ist " + MeineBeschriftung; 
   ENDIF
  ENDIF 
 MINIPROGRAMM ENDE 

BESCHREIBUNGSENDE
Schon ganz anders oder? Beim Klick auf den Button1 würde „Dies ist Button eins“ ausgegeben werden. Die Buttons enthalten alle in sich selbst eine eigenes kleines Mini-Programm in Form einer If-Schleife. Diese Mini-Programme werden in Java Methoden genannt, da es sich jeweils um eine bestimmte Methode handelt um mit den im Datentyp vorhandenen Daten umzugehen bzw. diese zu manipulieren. Es entstehen drei Objekte mit jeweils anderen Eigenschaften, in diesem Fall, andere  Beschriftungen. Die Beschreibung des Objekts nennt man normalerweise KLASSE. Zum besseren Verständnis hab ich es in dem Beispiel BESCHREIBUNG genannt da hier beschrieben wird was ein Objekt vom Typ Button enthalten muss. Im richtigen Quellcode wird dann später das Wort class benutzt. Praktischerweise müssen die einzelnen Buttons nicht mehr nacheinander wie in Basic abgefragt werden. Die Buttons überprüfen sich durch die integrierte IF-Abfrage praktisch ständig ob sie gerade angeklickt werden. Dies geschieht mit IF I TRUE. Das Objekt frägt sich sozusagen selbst. In JAVA wird das dann später alles etwas anders formuliert. Z.B. wird das eigene Objekt nicht mit I sondern mit THIS angesprochenTHIS oder deutsch DIES bezieht sich immer auf das direkt umgebende Objekt. Ich habe in dem Beispiel deswegen I geschrieben, damit deutlich wird das man in JAVA Objekte möglichst eigenständig „denkend“ und handelnd ansehen sollte. Letztlich ist es das Ziel diese Objekte so zu programmieren. Damit kann man sie später auch in anderen Programmen problemlos wiederverwenden. Bei dieser Art zu programmieren wird das Paradigma der Objektorientierung  angewandt. Ein Paradigma in der Informatik bezeichnet den Programmierstil, also die Art und Weise wie man programmiert. BASIC ist wie Assembler eine rein imperative Programmiersprache, d.h. es wird ein Befehl nach dem anderem ausgeführt. Der Programmierer legt die Reihenfolge fest in der der Computer die Daten abarbeitet. In einer objektorientierten Sprache wie JAVA dagegen legt der Programmierer nur fest um welche Daten es sich handelt und was bei welcher Aktion sich ändern soll. Die Reihenfolge (ob jetzt zuerst der Zustand des Button 1 oder Button 2 gemessen wird) überlässt er dem Computer. Intern wird daraus ganz am Ende natürlich immer eine langer imperativer Assemblercode. Die Vorteile der Objektorientierung sind unter anderem:
  • Die KLASSEN der Objekte (im obigen Beispiel BESCHREIBUNG später in Java class genannt) können in anderen Programmen leicht wiederverwendet werden.
  • Besonders bei vielen Objekten spart man Quellcode, da man die If-Abfragen nicht selbst anlegen muss.
  • Objektorientiertes Programmieren ist bei richtiger Anwendung eine sehr saubere und übersichtliche Art zu programmieren.
Zusammenfassung
  • Eine Klasse ist die Beschreibung eines Datentyps.
  • Ein Objekt ist ein aus einer Klasse gebildeter Datentyp.
  • Eine Methode ist ein kleines Mini-Programm das mit den Daten im Objekt arbeitet.
  • Eine Variable ist der Verweis oder Referenz auf einen Speicherbereich in dem wir Daten ablegen können.
Des weiteren enthält jede Klasse auch noch einen sogenannten Konstruktor. Ein Konstruktor ist eine Methode die aufgerufen wird sobald aus einer Klasse ein neues Objekt gebildet wird.

Aber genug der Theorie. Damit wissen wir bereits genug um mit dem programmieren anzufangen. Dabei werden wir das alles ganz nebenbei auch noch besser verstehen lernen. Installieren wir jetzt das JDK.