Konzept Klasse vs. Instanz

 
Erstellt von Seraina Hohl

Beim objektorientierten Programmieren wird der zu einer Software gehörende Code auf verschiedene Module, sogenannte «Klassen» verteilt. Üblicherweise entspricht eine Klasse einer Datei, die den entsprechenden Programmiercode enthält.

Genau genommen gibt es meist zwei Varianten dieser Datei – die eine enthält Text, nämlich genau den vom Programmierer formulierten Code in einer höheren Programmiersprache wie Java (z.B. kara.java), die andere enthält eine ausführbare Version desselben Codes in der Maschinensprache des Prozessors (z.B. kara.class). Den (automatisierten) Übersetzungsprozess, der die ausführbare Version erzeugt, nennt man compilieren.

Im Programmcode wird die Funktionalität einer Klasse definiert, also welche Instanzvariablen (auch Eigenschaften, Attribute oder Felder genannt) sie kennt und welche Methoden (auch Fähigkeiten oder Funktionen genannt) sie besitzt. An dieser Stelle geht es aber wirklich nur um die Definition – um den Code tatsächlich auszuführen, braucht es eine Instanz.

Eine Instanz (engl: object) ist eine konkrete Umsetzung der in der Klasse festgelegten Definitionen. Nur in einer Instanz kann eine Variable einen bestimmten Wert annehmen oder eine Methode ausgeführt werden.

Der Aufwand zur Erstellung einer Instanz ist minimal, man muss lediglich den Konstruktor aufrufen. Andererseits ergibt sich aus der Unterscheidung zwischen Klasse und Instanz ein wesentlicher Vorteil: Es können beliebig viele Instanzen von ein und derselben Klasse erstellt werden. Multiple Instanzen teilen sich natürlich die grundlegende Definition ihrer Funktionalität, sie sind aber dennoch nicht genau gleich: Weil sich die Werte der jeweiligen Instanzvariablen unterscheiden (können), ergeben sich auch Unterschiede in der Ausführung des Programmcodes – etwa so, wie in Massenproduktion hergestellte Waren zwar exakte Kopien voneinander sind, aber doch bei unterschiedlichen Besitzern landen und auf verschiedene Weisen benutzt werden.

Die inhärenten Vorteile der zumindest potentiellen Massenproduktion haben dazu geführt, dass die meisten modernen Programmiersprachen (mindestens optional) objektorientiert sind.

Analogie

Auch wenn es für eine bestimmte Sorte von Wecker (=Klasse) nur einen Bauplan gibt, können baugleiche Exemplare (=Instanzen) zu verschiedenen Zeiten klingeln – und vielleicht sieht der Bauplan auch vor, dass der Klingelton wählbar ist.
 
Erstellt von Seraina Hohl