Unter der Bezeichnung Objektorientierung (kurz: OO) wurde in der Softwaretechnik ein Ansatz entwickelt, der insbesondere die Erstellung, Weiterentwicklung und Wartung von komplexen betrieblichen IT-Systemen unterstützt. Dabei dient die Objektorientierung als eine Sichtweise auf komplexe Systeme, bei der diese als ein Zusammenspiel von abstrakten oder realen Einheiten - eben den Objekten - aufgefasst werden.
Es gibt Sprachen, Methoden und Datenbanken, welche die objektorientierte Sichtweise gezielt unterstützen.
Ausschlaggebend für die großflächige Verbreitung der Objektorientierung in den frühen 1990er Jahren waren u.a. die sehr hohen Kosten für die Wartung und Weiterentwicklung von großen IT-Systemen. So steigt gemeinsam mit dem Funktionsumfang von IT-Systemen der Umfang der programmierten Programmcodezeilen (Lines of Code, LOC).
Die Objektorientierung ist ein Programmierparadigma.
Übersicht über die geschichtliche Entwicklung von Programmierkonzepten:
| Programmierkonzept | Typische Elemente | Einsatzgebiete |
| Maschinencode | 1001001; 1 und 0 als einzige Ausdrucksmöglichkeit | Heute keine Einsatzgebiete mehr |
| Assemblercode | movb $0x61; Prozessorbefehle und direktes Ansprechen von technischen Speicheradressen | Steuerung für elektrotechnische Geräte, reaktive Systeme, hardwarenahe Programmierung |
| Imperative Programmierung | WHILE, FOR, GOTO; Weiterentwicklung von Assemblercode, erlauben Schleifen und gezielte Sprünge | Kleine Programme zur Lösung einfacher Aufgaben |
| Strukturierte Programmierung | Prozeduren; Strukturierung eines Programms in Prozeduren (Funktonen) und Unterprozeduren (Unterfunktionen) | Einfache Webanwendungen, technische Steuerkomponenten |
| Objektorientierte Programmierung | Klassen, Objekte, Beziehungen; ein Programm besteht aus kooperierenden Objekten | Große und komplexe industrielle Softwaresysteme |
| Komponentenbasierte Entwicklung | Komponenten, Schnittstellen; Teile eines Systems werden als eine Komponente zusammengefasst, die ganz bestimmte Aufgaben erfüllt |
Wiederverwendung von bereits programmierten Funktionen; einzelne Komponenten sind in der Regel objektorientiert programmiert |
| Modellgetriebene Entwicklung | Modelle, Code-Generatoren; Programmcode wird mit Hilfe von Code-Generatoren aus Software-Modellen automatisch erzeugt |
Wiederverwendung von einfacher Anpassbarkeit von Querschnittsfunktionen, der generierte Programmcode kann den Konzepten der Objektorientierung entsprechen |
Der Begriff Objekt bezeichnet einen Bestandteil eines Systems. Für die objektorientierte Programmierung bedeutet dies, dass ein Objekt Bestandteil eines Programms ist und auch, dass ein objektorientiert entwickeltes Programm nahezu ausschließlich aus Objekten besteht. Ein Objekt selber kann wiederum Attribute und Methoden enthalten. Mithilfe von Attributen (auch: Eigenschaften) können in einem Objekt Informationen (z.B. aktuelle Werte von Variablen) gespeichert werden. Die Attribute eines Objekts werden vor einem direkten Zugriff von anderen Objekten versteckt und damit geschützt. Das bedeutet, dass die aktuell in einem Objekt gespeicherten Werte nicht von anderen Objekten geändert werden können (Prinzip der Datenkapselung).
Das Lesen und Ändern von Attributen eines Objekts geschieht durch den Einsatz von Methoden eines Objekts. Mit den Methoden (auch: Funktionen, Operationen) bietet ein Objekt anderen Objekten des Systems die Möglichkeit, auf die eigenen Attribute zuzugreifen, sie auszulesen, zu verändern, zu aktualisieren oder Berechnungen durchzuführen. Ein Objekt greift auf ein anderes Objekt zu, indem es eine Methode auf dem Objekt aufruft.
Bevor mit der eigentlichen Programmierung von komplexen IT-Systemen begonnen werden kann, müssen alle Entwickler genau verstehen
Darüber hinaus muss die grobe Struktur des Systems in Form einer Systemarchitektur durch den Systemarchitekten vorgegeben werden.
Bevor mit der Programmierung begonnen werden kann, muss man das Problem beziehungsweise die Aufgabenstellung analysieren und sich überlegen, aus welchen Objekten das System bestehen soll. Das Durchlaufen dieser verschiedenen Phasen nennt man Software-Entwicklungsprozess (auch: SW-Prozess). Ziel eines SW-Entwicklungsprozesses ist ein lauffähiges System, das die Anforderungen der Auftraggeber hinsichtlich Funktionalität, Qualität und Entwicklungsaufwand zufriedenstellend erfüllt.
In einem objektorientierten Entwicklungsprozess lassen sich drei verschiedene Phasen unterscheiden:
Während der objektorientierten Analyse wird bestimmt, was ein System tun soll. Ziel der Analyse ist ein umfassendes Verständnis der fachlichen Zusammenhänge des zu bauenden Systems. Hierzu werden Objekte der realen Welt in einem fachlichen Modell nachgebildet und nur die für das System relevanten Eigenschaften (Attribute) berücksichtigt. Sie bildet den Ausgangspunkt für die nächste Phase: das objektorientierte Design.
Das objektorientierte Design bildet die Brücke zwischen der Analyse und der Implementierung. Hierzu wird auf Basis des Analysemodells das Design des Systems festgelegt: das fachliche Analysemodell wird dahin gehend um technische Informationen erweitert. Dabei wird festgelegt, welche Arten von Objekten es geben soll, welche Attribute und Methoden sie haben und auf welche Art welche Objekte miteinander kooperieren. Die Qualität des Designs hat dabei in der Regel maßgeblichen Einfluss auf die Qualität des programmierten Systems sowie auf alle zukünftigen Aktivitäten zur Erweiterung und Anpassung des Systems.
Bei den Aktivitäten der objektorientierten Programmierung wird ein Systemdesign in funktionierenden Programmcode übersetzt. Analyse und Design sind notwendige Vorarbeiten, das eigentliche IT-System jedoch ergibt sich ausschließlich durch die implementierten Programmcodes. Fehler aus der Analyse und dem Design pflanzen sich im Programmcode fort.
Die Erfahrungen der letzten Jahre Software Engineering haben gezeigt, dass es bei konsequenter Anwendung der Objektorientierung weniger Probleme mit der Skalierung, der Stabilität und der Erweiterbarkeit von IT-Systemen gibt. Daher kann Objektorientierung bei der Softwareentwicklung als Prinzip und Mittel verstanden werden, um die Komplexität von Softwaresystemen in den Griff zu bekommen.
Insbesondere die Qualitätsziele
Durch die klare Kapselung von Zuständigkeiten in ganz bestimmte Objekte und die klare Definition von Schnittstellen können Objekte später ausgetauscht oder erweitert werden, ohne die Stabilität und Funktionalität des gesamten Systems zu beeinflussen. Das erleichtert wiederum die Maßnahmen zur Qualitätssicherung, da nicht das ganze System komplett neu getestet werden muss, sondern nur die betroffenen Teile des Systems.