Objektorientierung

In der prozeduralen Programmiersprache C gab es eine Trennung von Daten und Prozeduren. Prozeduren wurden Daten zur Bearbeitung übergeben und sie lieferten ein Ergebnis zurück (das EVA-Prinzip - Eingabe - Verarbeitung - Ausgabe).

Paradigmen der Programmierung

In einer objektorientierten Sprache wie C++ wird die grundlegende Struktur des Programms durch sogenannte Klassen festgelegt. Eine Klasse beschreibt dabei Objekte durch ihre Attribute (Eigenschaften, Daten) und Methoden (Funktionalität, Prozeduren). 

Die Attribute einer Klasse sind also, grob gesprochen, Daten, die zu einem Objekt gehören. Hätten wir z.B. die Klasse "Apfel", so würden zu den Attributen sicherlich das Gewicht und die Farbe eines Apfels zählen.

Methoden einer Klasse dienen zur Veränderung der internen Attribute eines Objekts und der Kommunikation zwischen den Objekten miteinander. Hätten wir z.B. zusätzlich die Klasse "Wurm", so hätte dieses Objekt die Funktionalität, den Apfel zu essen, also vom Gewicht des Apfels etwas abzuziehen und seinem eigenen Gewicht hinzuzurechnen.

Paradigmenwechsel

Viel geändert hat sich also anscheinend nicht. Es gibt immer noch Daten und Prozeduren. Durch die Umstrukturierung der Programme in Daten mit zugehöriger Funktionalität ändert sich allerdings das gesamte Paradigma der Programmierung. Wir haben es plötzlich mit "intelligenten" Daten zu tun, die ihre eigene Funktionalität bereits mitbringen.

Die Entwicklung der objektorientierten Sprachen ist eventuell vergleichbar mit der Entwicklung der Computer selbst. Vor den sogenannten "von Neumann Rechnern" besaßen die Computer getrennte Speicher für Programm und Daten. Inzwischen gibt es nur noch einen Hauptspeicher, den sich Maschinenbefehle und Daten teilen. In der Entwicklung der Computer bedeutete dies eine Effizienzsteigerung und machte u.a. selbstmodifizierende Programme möglich.

In der Entwicklung der Computersprachen lieferte die Objektorientierung einen neuen Denkansatz, der ermöglichte, komplexere Probleme in den Griff zu bekommen. Anstatt sich einer Vielzahl von unzusammenhängenden Funktionen und Daten gegenüber zu sehen, gab es jetzt die Struktur klar voneinander getrennte Einheiten, den Klassen. Mit Klassen als in sich geschossenen Moduln eines Programms erhöhte sich die Wiederverwendbarkeit und Lesbarkeit des Codes.

Es tauchte z.B. nicht mehr das Problem auf, jeder komplexeren Funktion eine unmenge von Parametern immer aufs Neue übergeben zu müssen, da jede Funktion einer Klasse Zugriff auf die internen Attribute der Klasse besaß. Insofern könnten wir statt von "intelligenten" Daten auch von Funktionen sprechen, die ihre eigenen Daten bereits mitbringen.

Abgesehen davon besitzen objektorientierte Sprachen Konzepte der Generalisierung und Spezialisierung, die das wiederholte Schreiben von Code unnötig machen. Dadurch werden weitere Konzepte wie Polymorphie möglich, zu denen wir aber später noch kommen.

zurück