Unter Objektorientierung, kurz OO, versteht man eine Sichtweise auf komplexe Software-Systeme, bei der ein Programm durch das Zusammenspiel kooperierender Objekte beschrieben wird. Objektorientierung wird hauptsächlich bei der objektorientierten Programmierung (z.B. Java) verwendet. Der Begriff existiert jedoch auch für der Programmierung vorgelagerte Phasen der Softwareentwicklung, wie die objektorientierte Analyse und den objektorientierten Entwurf von Software in UML.
Objekte werden bestimmt durch definierte Attribute (Eigenschaften) und Methoden (Verhalten). Zudem sind Objekte in der Lage, Informationen von anderen Objekten zu empfangen beziehungsweise an diese zu senden.
Objekte sind konkrete Ausprägungen von Klassen. Klassen definieren das Verhalten und die Eigenschaften ihrer Instanzen. Klassen sind also so etwas wie die Idee von etwas oder eine Art Bauplan. Eine Instanz ist ein Objekt einer Klasse. Instanzen folgend dem Bauplan der Klasse und sind ein konkretes Objekt. Die Erzeugung eines Objektes nennt man Instanziierung.
Die Objektorientierung richtet sich nach folgenden grundlegenden Konzepten:
Eine Klasse ist eine Abstraktion der realen Welt in einem ganz speziellen Kontext. Es wird also niemals die perfekte, einzig gültige Klasse geben. Eine Klasse ist immer abhängig vom Ziel, das erreicht werden soll. Während beispielsweise eine Klasse „Auto“ im Kontext einer Autobörse wie mobile.de möglicherweise Attribute wie Anzahl Vorbesitzer, Kennzeichen, Hubraum oder Hersteller besitzen wird, hat eine Klasse „Auto“ im Kontext eines Autobauers wie VW möglicherweise Attribute wie Kosten und Arbeitszeit und wird seine Bauteile (in Form von Attributen oder Beziehungen) kennen.
Es ist nicht immer eindeutig entscheidbar, ob eine Eigenschaft in Form eines Attributes des Objektes oder in Form einer Beziehung zu einem anderen Objekt dargestellt werden sollte. So kann etwa die Eigenschaft „Hersteller “ des Autos aus obigem Beispiel entweder als Textattribut oder als Beziehung zur Klasse „Hersteller“ modelliert werden. Dies ist sinnvoll, wenn für die Klasse Hersteller spezielle Eigenschaften benötigt werden.
Gerade dieser letzte Aspekt ist oftmals vom Zeitpunkt abhängig: Die Vereinfachung, die heute noch zur Lösung eines Problems ausreichend ist, ist morgen möglicherweise nicht mehr ausreichend. Bezogen auf das Beispiel bedeutet dies, dass es erst später notwendig ist Eigenschaften wie z.B. Firmensitz oder Anzahl Mitarbeiter eines Herstellers abzubilden.
Eine Klasse definiert über sogenannte Sichtbarkeiten, welche Eigenschaften und welches Verhalten nach außen sichtbar wird. Die nach außen sichtbaren Eigenschaften sind die definierten Schnittstellen, über die auf das Objekt selbst zugegriffen werden kann. Das Innenleben bleibt verborgen. Diese Abschottung der Implementierungsdetails bezeichnet man als Kapselung.
Klassen können von anderen Klassen Verhalten (Methoden) und Eigenschaften (Attribute/Datenstruktur) erben. Dabei erbt die Klasse von der vererbenden Klasse (Basisklasse). Vererbung heißt vereinfacht, dass eine abgeleitete Klasse die Methoden und Attribute der Basisklasse ebenfalls besitzt, also „erbt“. Somit kann die abgeleitete Klasse auch darauf zugreifen. Neue Arten von Objekten können auf der Basis bereits vorhandener Objekt-Definitionen festgelegt werden. Es können neue Bestandteile hinzugenommen oder vorhandene überlagert werden.
Die Polymorphie (Vielgestaltigkeit) ist eng mit dem Konzept der Vererbung verwoben und bewirkt, dass Methoden auf unterschiedlichen Ebenen der Vererbungshierarchie anders Implementiert sind; also die vermeidlich gleiche Methode in "andere Gestalt daherkommt".