Naujoks Informatik

Begriffe der objektorientierten Softwareentwicklung

- Diese Seite wird gerade überarbeitet! -


Handhabungs- und Verwendungsarten von Objekten und Objekt-Referenzen

Der folgende Text setzt Grundkenntnisse der objektorientierten Programmierung sowie die Kenntnis grundlegener Begriffe wie Objekt, Variable, Referenz, Stack und Heap voraus. Er definiert Begriffe und Kategorien und stellt keinen ausführlichen Lehrbuchtext dar.

Die berechtigte Frage wozu die Unterscheidung der Arten nützlich ist soll jedoch nicht übergangen werden. Allgemein kann man sagen "Kategorienbildung dient der Ökonomie des Denkens". Konkret ist die Motivation folgende: In der alltäglichen Programmierung stecken immer wieder grundlegende Muster. Im Umgang mit Objekten sind diese Muster durch die Verwendungsarten von Objekten und Objekt-Referenzen bestimmt. Die Handhabungsarten hingegen werden durch die verwendete Programmiersprache vorgegeben. Das Bewusstsein der gewünschten Verwendungsarten ermöglicht eine klare Entscheidung für passende Muster, die dann ggf. auch durch einen Codegenerator erzeugt werden können.

Handhabungsarten von Objekten

Übliche objektorientierte Programmiersprachen handhaben Objekte in der Regel auf eine der folgenden Arten.

Variablen eines Objekttyps enthalten Objekte

Diese Handhabung finden wir in C++. Eine Variable bezeichnet den Speicherbereich eines Objektes. Die Zuweisung zu einer solchen Variablen weist dem Objekt einen neuen Zustand zu. Diese Handhabung führt bei Klassen die Ableitungen mit abweichendem Speicherbedarf haben zum Problem des Slicing. Um sich auf ein Objekt zu beziehen muss eine Referenz gebildet werden.

Objekte können im Stack liegen, in andere Objekte eingebettet werden oder im Heap liegen.

Variablen eines Objekttyps enthalten Objekt-Referenzen

Diese Handhabung finden wir in Java, C# und vielen anderen objektorientierten Programmiersprachen. Eine Variable bezeichnet den Speicherbereich einer Objektreferenz.

Objekte liegen im Heap. Sie können nicht im Stack liegen und nicht in andere Objekte eingebettet werden.

Sprachen wie C# bieten ergänzend die Struktur "struct" an, um frei definierbare Werttypen zur Verfügung zu stellen. Dies verbessert die Entwicklungseffizienz und bei Typen kleineren Speicherbedarfs i.d.R. die Laufzeitperformance. Es kann den Speicherverbrauch verringern und entlastet einen Garbage-Collector i.d.R. Insbesondere wenn der, wie in Java, mit einem Tracing-Verfahren arbeitet.

Verwendungsarten von Objekten

Es gibt drei wesentliche Arten, ein Objekt zu verwenden. Als Modellobjekt, d.h. als Teil eines Objektmodells, als Variablenobjekt oder als Wertobjekt. Das Modellobjekt entspricht der eigentlichen Idee eines Objektes. Variablenobjekte werden wie Variablen verwendet. Wertobjekte repräsentieren einen Wert. Ihre Identität ist jedoch nicht von Interesse, was für ein Objekt atypisch ist.

In der Sprache Java sind Variablen- und Wertobjekte u.a. der Tatsache geschuldet, dass Java keine Konstrukte für programmdefinierte Wertetypen besitzen. In C# gibt es dafür die Struktur "struct". In C++ sind auch Klassen Werttypen. Sie müssen ansonsten explizit referenziert werden. Referenzen von größeren Wertobjekten können eine bessere Laufzeitperformance haben als Wertetypen.

Folgende Tabelle zeigt ein paar wesentliche Eigenschaften der Verwendungsarten:
Objektverwendungsarten

Identität semantisch relevant: Das ist genau dann der Fall wenn es nicht zulässig ist zu einem beliebigen Zeitpunkt statt eines Objektes ein anderes zustandsgleiches Objekt zu verwenden. Dies darf nicht mit der Austauschbarkeit eines nur einmal referenzierten Objektes verwechselt werden.

Identität technisch relevant: Das ist genau dann der Fall wenn es technisch nicht zulässig ist zu einem beliebigen Zeitpunkt statt eines Objektes ein anderes zustandsgleiches Objekt zu verwenden. So ist bei Unikat-Wertobjekten die Identität semantisch nicht relevant, technisch jedoch dann, wenn sie zum Vergleichen verwendet wird. Unikatobjekte werden englisch auch als "interned" bezeichnet

Veränderung erlaubt: Das eine Veränderung nicht erlaubt ist bedeutet nicht, dass sie nicht möglich ist. Zwar sollten Wertobjekte unveränderlich (immutable) sein. Jedoch können auch veränderliche Objekte als Wertobjekte verwendet werden, solange sie nicht verändert werden.

Fremdreferenzierung erlaubt: Andere Variablen dürfen das Objekt referenzieren.

Verwendungsarten von Objekt-Referenzen

So wie nicht jedes Objekt ein Modellobjekt verkörpert, so verkörpert natürlich auch nicht jede Objekt-Referenz eine Modellobjekt-Referenz. Dabei können Referenzen auf Objekte verschiedener Objekt-Verwendungsarten sogar dem gleichen Zweck dienen.

Die Modellobjekt-Referenz

Sie ist einfach eine Referenz eines Modellobjektes.

Die Variable

Sowohl die konstante Referenz auf ein Variablen-Objekt V als auch die veränderliche Referenz auf ein Wertobjekt W können wie eine Variable verwendet werden die den Typ hat den V speichert bzw. W verkörpert.

Die Variablen-Referenz

Eine Referenz auf ein Variablenobjekt kann wie eine Variablenreferenz verwendet werden.

Einzelne Begriffe

Identitätsobjekt und Identitätenklasse

Variablenobjekt und Variablenklasse, konformes bzw. sprachkonformes Variablenobjekt

Wertobjekt und Werteklasse

Datentransferobjekt

Entität (siehe Identitätsobjekt und Identitätenklasse )

Einmaliges Objekt, Unikat und Unikatenklasse









Dieser Text unterliegt dem Urheberrecht. Die Weiterverbreitung, sowie die Übernahme von Passagen die über Zitate hinausgehen ist untersagt. Der Autor gestattet es ihnen, Kopien für den persönlichen privaten und persönlichen kommerziellen Gebrauch zu speichern und zu drucken.

Dieser Text kann jederzeit geändert werden, wird nicht notwendig dauerhaft gespeichert und ist somit nicht zitatfähig.


   Startseite http://www.naujoks-informatik.de        Zur Person        Impressum        Autor und Copyright 2015: Raoul Naujoks, Braunschweig    Stand 6.11.2015