Zurück   Weiter

3 Grundlagen Objektorientierter Programmierung

3.1 Hintergrund

Der Ursprung des objektorientierten Programmier-Paradigmas liegt ähnlich wie die Grundideen von Java schon länger zurück. Die ersten objektorientierten Sprachen waren Simula und Smalltalk und wurden schon 1967 bzw. in den 70er Jahren entwickelt. Es ging den Entwicklern damals um eine einfachere Modellierung von Problemen der realen Welt in Programmen. Die meisten Computerprogramme sind dazu da, ein Problem der normalen bzw. realen Welt zu lösen und müssen daher diese Welt mit ihren Strukturen beschreiben. Herkömmliche Programmiersprachen, die prozedural oder funktionsorientiert arbeiteten, haben eine relativ hohe konzeptionelle Entfernung von Problemen der realen Welt. Ihnen und der Art wie damals Software konzipiert und entwickelt wurde, gab man die Schuld an der sogenannten Softwarekrise. Mit der objektorientierten Programmierung, die sich in den Programmkonzepten an der realen Welt orientiert, versuchte man bessere und vor allem besser wartbare Programme zu entwicklen.

3.2 Das Konzept

In der objektorientierten Programmierung besteht die Grundidee darin, Objekte der realen Welt abzubilden. Das Konzept der objektorientierten Programmierung sieht Objekte vor, die nur über sogenannte Botschaften miteinander kommunizieren können. Jedes Objekt reagiert in seiner spezifischen Weise auf die Botschaften. Ein charakteristisches Beispiel für diese Denkweise wäre eine Anweisung wie >>Frau, bring mir Bier<<. Hier wird der Frau(Objekt) vom Mann(Objekt) eine Botschaft(bring mir Bier) geschickt. Je nach realer Frau kann es sein, das der Mann aber eher eine Ohrfeige, denn ein Bier bekommt. Da Objekte Gegenstand der Computerprogrammierung sind, muss es natürlich Möglichkeiten geben, einen Zustand in Form von Daten zu speichern. Daher können Objekte Felder besitzen, die Daten aufnehmen. Puristisch gesehen, gehören Felder aber nicht zum Grundkonzept der objektorientierten Programmierung, sondern sie sind bereits ein Implementierungsteil von Objekten auf Computern. Diese Felder sind für dem Benutzer eines Objekts unsichtbar. Er kann sie daher auch nicht direkt manipulieren.

3.3 Botschaften

Die einzige Möglichkeit etwas mit einem Objekt anzufangen, besteht darin, ihm eine Botschaft zu senden und gegebenenfalls die Antwort auf diese Botschaft auszuwerten. Ein Objekt reagiert aber nur auf Botschaften, die es versteht. Botschaften, die es nicht versteht werden ignoriert. Anders ausgedrückt: Mit einem Objekt kann man nur diejenigen Aktionen ausführen, die es nach aussen hin zur Verfügung stellt. Als Beispiel für ein solches Objekt kann man z.B. einen Fernseher mit Fernbedienung betrachten. Mit der Fernbedienung sendet man Botschaften an den Fernseher, welcher dann auf die Botschaften reagiert. Benutzt man die Fernbedienung eines anderen Fernsehers, nimmt er die Botschaften nicht an.

3.4 Kapselung

Nimmt man wieder den Fernseher und betrachtet dessen Lautstärkeregelung. Der Benutzer kann dem Fernseher nur die Botschaften lauter und leiser senden. Ob die Lautstärke kontinuierlich oder in Abstufungen, ob die Abstufung in kleinen oder grossen Schritten geschieht, darauf hat der Benutzer keinen Einfluss. Es gibt also grundsätzlich keine Möglichkeit die Interna des Objekts Fernseher direkt zu manipulieren. Das Prinzip, die Interna eines Objekts nach aussen hin unsichtbar zu machen und für die Aussenwelt nur das zur Verfügung zu stellen, was nötig ist, wird in der Terminologie der objektorientierten Programmierung als Kapselung bezeichnet.

3.5 Klassen und Instanzen

Objekte, die dieselben Botschaften verstehen, dieselben Merkmale aufweisen und sich nur in der Ausprägung der Merkmale unterscheiden, bilden eine Klasse von Objekten. Eine Klasse legt in gewisser Analogie zum Datentyp einer Variable den Typ des Objekts fest. Daher wird synonym zum Begriff der Klasse auch der Begriff Objekttyp gebraucht. Als Beispiel können wir hier ein Telefon verwenden. Jedes Telefon hat als Merkmal, dass es einen Lautsprecher und ein Mikrofon hat und man damit ein anderes Telefon anwählen kann. Genau so wie man bei einer Variablenvereinbarung zwischen der Variable und ihrem Typ unterscheidet, unterscheidet man ein Objekt von einer Klasse. Eine Instanz ist ein Objekt einer Klasse, mit dem man konkret arbeiten kann. Übersetzt in das Telefonbeispiel bedeutet dies: Es ist zwar gut wenn ich weiss was ein Telefon(das Objekt) ist und wie es funktioniert, aber wenn ich jemanden anrufen möchte, dann muss ich eines in der Hand haben, d.h. ich brauche eine 'Instanz eines Telefons'.

3.6 Methoden

Die Möglichkeit Botschaften zu empfangen wird in der objektorientierten Programmierung durch sogenannte Methoden realisiert. Das Senden einer Botschaft an ein Objekt geschieht durch den Aufruf der entsprechenden Methode. Eine Methode implementiert(realisiert) das Verhalten eines Objekts, wenn es eine bestimmte Botschaft erhält. Für jede Botschaft, auf die ein Objekt reagieren will, muss es daher eine Methode definieren. Man kan sich z.B. vorstellen, dass in jedem Telefon eine Methode 'anrufKommtAn' definiert ist, die dafür sorgt, dass das Telefon klingelt.

3.7 Vererbung

Unter Vererbung versteht man die Möglichkeit, ein neues Objekt von einem vorhandenen Objekt abzuleiten, wobei das neue Objekt alle Merkmale und Fähigkeiten des alten besitzt. Dem neuen Objekt können dann weitere charakteristische Merkmale hinzugefügt werden. Objekte(Klassen), die von einem bestimmten Basisobjekt(Superklasse) abgeleitet sind, werden Subklassen oder Nachfahren des Objekts(Klasse) genannt. Im Telefonbeispiel ist das Telefon als abstrakter Begriff die Superklasse. Mögliche Nachfahren sind ein Tischtelefon, ein Wandtelefon oder ein Handy. Alle diese Telefone haben mindestens gemeinsam, dass sie einen Lautsprecher und ein Mikrofon haben. Ausserdem besitzen sie alle die Methode 'anrufKommtAn'. Diese Eigenschaft haben sie von der Superklasse Telefon geerbt. Zusätzlich haben sie dann noch die eigenen Eigenschaften, dass man sie auf den Tisch stellen oder an die Wand hängen kann oder dass sie kein Kabel benötigen und man sie überall mit hin nehmen kann.

3.8 Polymorphismus

Die Polymorphie macht es möglich, dass verschiedene Subklassen dieselbe Botschaft verstehen, obwohl die technische Umsetzung der Reaktion auf die Botschaft völlig unterschiedlich sein kann. Polymorphie wird dadurch realisiert, dass ein Objekt eine geerbte Methode abändern kann, um in der gewünschten Weise zu reagieren. Diesen Vorgang wird Überschreiben einer Methode genannt. Jedes Telefon kann die Methode 'anrufKommtAn' überschreiben. So ist z.B. im Wandtelefon eine mechanische Klingel eingebaut, im Tischtelefon eine elektronische und im Handy ein Vibrationsalarm. Jedes Telefon hat von der Superklasse die Methode 'anrufKommtAn' geerbt und jedes Telefon überschreibt diese in einer speziellen Form.

Created with Vim Zurück   Weiter