Dienstag, 15. Februar 2011

OOP und die Realität

Ein Sonntag Morgen im Kreis Familie. Man unterhält sich am Frühstückstisch über den Aufbau eines neuen Programms, beschreibt die verwendeten Klassen und deren Beziehung und prompt hört man von der kleinen Tochter den Einwand, das sei doch alles nicht objektorientiert, sondern lediglich prozedural gedacht.

Sicher, solche Gespräche finden nicht am Frühstückstisch mit Grundschülern statt, aber doch in ähnlich lockerer Form unter Entwicklern und besonders gerne in Foren. Zumindest mir geht es so wenn meine Klassen und Objekte keine Entsprechungen in der Realität haben: Es kommt immer wieder der Vorwurf nicht objektoriertiert, sondern prozedural zu denken und zu entwickeln.

Wer bitte ist "Realität"?

Ich habe sie geliebt, die Abbildung der Wirklichkeit in der objektorientierten Programmierung. Ich war begeistert von den Büchern von Coad und Yourdon über objektorientierte Analyse und Design. Der Gedanke die Realität direkt in Code "gießen" zu können war damals verführerisch, geradezu revolutionär.

Die Ernüchterung kam schnell.
In der Programmierung geht es um die Lösung von Problemen, um Abstraktion und Vereinfachung. Vorgänge werden auf das Wesentliche reduziert und in einem Programm abgebildet. Die Realität aber hat zu viele Aspekte und es macht keinen Sinn alle Facetten in einem Programm abbilden zu wollen.

Sicher, es gibt Fälle geben in denen Klassen und Objekte aus der Realität hergeleitet werden können. Aber wer glaubt wirklich die Prozesse und Arbeitsabläufe der Realität seien grundsätzlich vorteilhaft und erstrebenswert? Im Gegenteil gibt es genug Prozesse, die mit unnötigen Altlasten überfrachtet, vielleicht sogar in sich mangelhaft sind.
Führt eine Abbildung der Realität dann nicht zu suboptimalen Ergebnissen? Leiden Performance oder Speicherauslastung unnötig? Verbaut man sich nicht den Blick für abstraktere, aber dennoch effizientere Lösungen?

Die Realität ist kein Merkmal der OOP

Die Realität kann, muss aber nicht Vorlage der OOP sein. Vor allem aber ist die Abbildung der Realität definitiv kein notwendiges Merkmal der OOP, auch wenn dies immer wieder gerne behauptet wird und sogar in einigen Lehrbüchern zu finden ist.

Aber was ist OOP?

Die wohl schönste Definition, die ich jemals gelesen habe, beschreibt Objekte als eine Art Zellen oder unabhängige Computer, die miteinander kommunizieren, sich Nachrichten senden können und auf diese selbständig reagieren. Daten spielen bei dieser Betrachtung keine Rolle, sie sind gekapselt. Jedes Objekt kann unterschiedliche Funktionen, besser Fähigkeiten haben.

Von der Abbildung irgendeiner Realität ist hingegen keine Rede.

Von wem stammt diese Definition? Von Dr. Alan Kay - dem Mann der den Begriff objektorientierte Programmierung erfunden und geprägt hat. Dem Mann, der maßgeblich an Smalltalk beteiligt war.

Und nun will ich nichts mehr über die Abbildung der Realität in der OOP hören...

Siehe auch:

http://www.purl.org/stefan_ram/pub/doc_kay_oop_en (bitte per Copy&Paste nutzen)
http://c2.com/cgi/wiki?AlanKaysDefinitionOfObjectOriented
http://c2.com/cgi/wiki?HeInventedTheTerm

Keine Kommentare:

Kommentar veröffentlichen