Objektorientierung

Mit der Objektorientierung werden einzelne Sachverhalte nicht mehr nur auf ihrer Einzelteile reduziert, sondern das integrierte Ganze im Zusammenhang – mit allen Verbindungen und Abhängigkeiten – wird betrachtet.

Objektorientiertes Modellieren

Programmablaufpläne (PAP), Struktogramme oder Ereignisgesteuerte Prozessketten (EPK) sind typische Modellierungsinstrumente in der Prozessgestaltung. Diese Darstellungsformen sind jedoch nicht objekt-, sondern rein prozessorientiert. Objektorientierte Modellierung bedeutet, nicht nur Daten und Funktionen zu beschreiben, sondern auch die Beziehungen und Strukturen von Klassen bzw. Objekten zu berücksichtigen. Als eine sehr objektorientierte Modellierungssprache gilt die UML.

Objektorientierte Programmierung

Die objektorientierte Programmierung ist aus der heutigen Software-Entwicklung nicht mehr weg zu denken. Die meisten relevanten Hochsprachen unter den Programmiersprachen erlauben oder erzwingen eine ganz oder teilweise objektorientierte Programmierung. Die ersten erfolgreichen Programmiersprachen, wie beispielsweise Assembler, C oder Basic, waren rein prozessorientiert nach Ablaufschemen, welche oftmals auf Programmablaufplänen oder Struktogrammen basieren. Die Programmiersprache C ist auch heute noch aktuell, wenn auch nicht mehr für allgemeine Anwendungsprogramme, sondern für eingebettete Systeme (Embedded Systems), also die Mikrocontroller-Programmierung.

In der Software-Entwicklung für komplexe Anwendungen mit vielen Anwendungsfällen werden heute beinahe ausschließlich objektorientierte Programmiersprachen verwendet, da sich große Software-Projekte in objektorientierter Umsetzung besser verstehen und verwalten lassen. Außerdem lässt sich objektorientierte Software besser modularisieren und wiederverwenden.

Es gibt drei Abgrenzungsmöglichkeiten für objektorientierte Sprachen:

  • Hybride Sprachen: Einige Programmiersprachen unterstützen sowohl die rein prozessorientierte Programmierung als auch die objektorientierte Perspektive. Beispielsweise ist C++ eine hybride Sprache, welche einen Mix aus Prozessorientierung und Objektorientierung erlaubt. Dabei sind mit C++ sogar objektorientierte Verfahren möglich, die mit nur wenigen anderen objektorientierten Sprachen möglich sind, wie die Mehrfachvererbung. Dennoch gehören hybride Sprachen auch zu den nicht vollständig objektorientierten Sprachen.
  • Nicht vollständig objektorientierte Sprachen: Die meisten erfolgreichen objektorientierten Sprachen erlauben zwar keine rein prozessorientierte Herangehensweise, sind jedoch im Detail auch nicht strikt objektorientiert. Die Programmiersprachen C# und Java gehören beispielsweise dieser Gruppe an. In C# und Java lassen sich Programme nur mit Klassen realisieren, die Grunddatentypen (Zahlen, boolesche Datentypen etc.) sind jedoch nicht strikt objektorientiert als Klassen vorhanden, sondern liegen als sogenannte primitive Datentypen wie in den prozessorientierten Programmiersprachen vor.
  • Vollständig objektorientierte Sprachen: Einige Programmiersprachen sind vollständig objektorientiert aufgebaut, wie beispielsweise die Programmiersprache Smalltalk.

Orientierung über Objekte

Die ganze Welt besteht aus Objekten. Objekte können Materialien, Gegenstände, Lebewesen oder auch Teilchen wie Moleküle oder Atome sein. Objekte können aus Objekten bestehen, beispielsweise besteht ein Auto (Objekt) aus mehreren Teilen (Objekte). Objekte können erzeugt, referenziert und zerstört werden.

Jedes Objekt hat Merkmale (Features), die aus Eigenschaften (Attribute) und Verhalten (Methoden) bestehen, welche in einer Klasse beschrieben werden. Jedes Objekt gehört genau einer Klasse an. Klassen geben die Struktur des Objekts der Klasse (Klassenobjekt) vor, sind demnach sowas wie Muster oder leere Formhüllen für ihre Objekte. Ein Objekt ist eine konkrete Ausprägung einer Klasse: die Instanz einer Klasse. Der Vorgang der Objekterstellung heißt daher auch Instanziierung.

Klassenbildung

Gleiche Eigenschaften und Verhaltensweisen werden in Klassen gebündelt, aus denen “lebende” Objekte instanziiert werden können. Klassen definieren die Objektstruktur (Attribute) und das Verhalten (Methoden) der Objekte. Die Klassenstruktur wird mit einem Klassendiagramm (UML) modelliert.

Objektidentität

Jedes Objekt stammt zwar aus nur einer bestimmten Klasse, ist jedoch ein eindeutig identifizierbares Individuum im objektorientieren System. Zwar können Objekte die gleichen Merkmale haben (auch Kopien sind möglich), jedoch ist jedes einzelne Objekt für sich ein Individuum. Objekte können in einem Objektdiagramm dargestellt werden.

Lokalitätskonzept

Wie in prozessorientierten Programmiersprachen, sind auch in objektorientierten Sprachen Attribute (Eigenschaften) und Funktionen (Verhalten) von wesentlicher Bedeutung. Funktionen werden in objektorientieren Sprachen jedoch in der Regel als Methoden bezeichnet. Attribute und Methoden liegen jedoch nach objektorientiertem Schema nicht irgendwo im Programmcode, sondern nur beim Objekt (bzw. bei der Klasse) vor.

Abstraktionskonzept

Die Merkmale (Attribute und Methoden) der Klassen sind zu überdenken und auf ein zielführendes Minimum zu halten, so dass mit einem möglichst effizienten Schema möglichst viele Aufgaben erfüllt werden können.

Vererbung (Generalisierung)

Klassen können mit einer Superklasse generalisiert werden. Die Superklasse ist die Generalisierung ihrer Subklasse. Eine Subklasse ist die Spezialisierung ihrer Superklasse. Subklassen erben alle Merkmale der der allgemeineren Superklassen. Subklassen können zusätzliche Attribute und Methoden definieren. Auch können Merkmale (Attribute/Methoden) der Superklasse in der Subklasse überschrieben werden. Geerbte Merkmale müssen in der Subklasse nicht neu definiert werden.
In manchen Programmiersprachen ist die Mehrfachvererbung (eine Subklasse hat mehrere Superklassen) erlaubt.

Kommunikation

Objekte derselben und unterschiedlicher Klassen kommunizieren untereinander. Ein Objekt ruft dazu eine Methode eines anderen Objektes auf. Die Kommunikation wird in Klassendiagrammen durch Assoziationen dargestellt.

Kapselung

Die Daten eines Objekts werden vor seiner Umwelt (dem System) verborgen und bestimmte Kommunikationswege festgelegt. Der Zugriff auf die Daten erfolgt nur über Methoden (Schnittstellen) des Objekts, so dass nur die Art der Schnittstelle, nicht aber die genauer innere Struktur des Objekts bekannt sein muss. Es gibt in der Software-Technik drei Zugriffmodifizierer (Access Modifiers):

  • public: Methoden, die für andere Objekte sichtbar und nutzbar sein sollen, sind als public zu deklarieren. Attribute sollten möglichst nicht public sein. Merkmale (Attribute/Methoden), die public sind, sind für jedes andere Objekt sichtbar!
  • private: Methoden, die rein objekt-internen Prozessen dienen und nicht für andere Objekte zugreifbar sein sollen, sind als private zu deklarieren. Auch Attribute sollten als private deklariert werden, sofern keine Notwendigkeit besteht, dass Attribute für andere Objekte sichtbar sind. Merkmale, die private sind, stehen nur intern im Objekt zur Verfügung und sind nach außen hin für andere Objekte unsichtbar.
  • protected: Eine schwächere Form von private. Merkmale sind nur objektintern sowie für Subklassen (spezialisierte Klassen) sicht- und nutzbar.

Die Zugriffsmodifizierer dienen dem Geheimnisprinzip. Es kann bestimmt werden, welche Merkmale von außen angesprochen werden können und welche nicht. Zudem steht die Kapselung ganz im Sinne der Unabhängigkeit bei der Software-Entwicklung, gerade bei Team-Entwicklung. Die Modellierung und Realisierung kann ganz ohne Rücksicht auf andere Klassen geschehen, solange nur die Schnittstellen abgestimmt sind.

Polymorphismus

Der gleiche Methodenname kann in verschiedenen Ausprägungen der Parametrisierung vorkommen. Erst der Aufruf entscheidet, welche Ausprägung der Methode aufgerufen wird.