Objektorientierung
Einführung
Objektorientierung (kurz OO) bezeichnet ein Paradigma in der Softwareentwicklung, bei dem komplexe Systeme durch das Zusammenspiel kooperierender Objekte modelliert werden. Objektorientierung kommt vor allem in der objektorientierten Programmierung (z. B. mit Java) zum Einsatz, findet jedoch auch in vorgelagerten Phasen wie der objektorientierten Analyse und dem objektorientierten Entwurf (häufig in UML) Anwendung.
Ein Objekt wird durch definierte Attribute(Eigenschaften) und Methoden (Verhalten) charakterisiert. Objekte können zudem miteinander kommunizieren, indem sie Informationen empfangen oder senden.
Objekte sind konkrete Ausprägungen (Instanzen) von Klassen. Eine Klasse definiert das gemeinsame Verhalten und die Eigenschaften aller ihrer Instanzen und fungiert somit als eine Art Bauplan. Der Prozess der Objekterzeugung aus einer Klasse wird als Instanziierung bezeichnet.
Grundlegende Konzepte
Die Objektorientierung basiert auf vier fundamentalen Konzepten:
Abstraktion
Eine Klasse ist eine Abstraktion eines realen oder konzeptionellen Gegenstands in einem spezifischen Kontext. Es existiert keine universell perfekte Klassen-Definition; sie ist stets abhängig vom Verwendungszweck. So besitzt beispielsweise eine Klasse „Auto“ in einem Fahrzeugmarkt-Kontext Attribute wie „Anzahl Vorbesitzer“ oder „Kennzeichen“, während dieselbe Klasse in einem Produktionskontext Attribute wie „Herstellungskosten“ oder „Arbeitszeit“ haben könnte.
Die Entscheidung, ob eine Eigenschaft als einfaches Attribut oder als Beziehung zu einem anderen Objekt modelliert wird, ist kontextabhängig. So könnte der „Hersteller“ eines Autos sowohl als Textattribut als auch als Verweis auf ein Objekt einer eigenen Klasse „Hersteller“ dargestellt werden. Letzteres wird insbesondere dann notwendig, wenn für den Hersteller zusätzliche Eigenschaften (wie „Firmensitz“ oder „Mitarbeiterzahl“) abgebildet werden müssen.
Kapselung
Kapselung bezeichnet das Verbergen der Implementierungsdetails eines Objekts nach außen. Eine Klasse legt über Sichtbarkeiten fest, welche ihrer Attribute und Methoden von außen zugänglich sind. Nach außen sichtbare Elemente bilden die Schnittstelle des Objekts, während dessen innerer Zustand und die Implementierung der Methoden vor direkter Einflussnahme von außen geschützt sind.
Vererbung
Vererbung ermöglicht es einer Klasse (der abgeleiteten Klasse oder Subklasse), Eigenschaften und Methoden einer anderen Klasse (der Basisklasse oder Oberklasse) zu übernehmen. Die abgeleitete Klasse erbt somit die Struktur und das Verhalten der Basisklasse und kann diese um eigene Attribute und Methoden erweitern oder vorhandene überschreiben. Dies ermöglicht die Wiederverwendung von Code und die Bildung hierarchischer Klassenbeziehungen.
Polymorphie
Polymorphie (Vielgestaltigkeit) ist eng mit der Vererbung verbunden. Sie ermöglicht es, dass Methoden, die in einer Basisklasse definiert sind, in abgeleiteten Klassen eine spezifischere Implementierung erhalten. Ein Methodenaufruf kann sich somit zur Laufzeit auf unterschiedliche Implementierungen derselben Methodensignatur beziehen, abhängig vom tatsächlichen Typ des Objekts.