Jedes Objekt enthält den kompletten Satz der Objektvariablen seiner Klasse (und ihrer Oberklassen). Bei der Erzeugung jedes Objekts wird vom Operator new auf der Halde so viel Speicherplatz belegt, wie viele (und wie große) Objektvariablen vereinbart worden sind[1]. Jedes Objekt einer Klasse hat also immer dieselbe Größe und dieselbe Struktur (d.h. denselben Inhalt, die globalen Variablen der Klasse).
Die Objektvariablen werden mit ihren Namen und aktuellen Werten (falls bekannt) in den Objekten dargestellt:
Abbildung7: Inhalt von Objekten
Manchmal ist es wichtig zu unterscheiden, welche Variablen aus der Unterklasse und welche aus der Oberklasse (evtl. aus einem Trait) stammen. Dann kann das Objekt aufgeteilt werden:
Abbildung 8: Objekt mit geerbten Attributen
In vielen Fällen werden Objekte von Klassen erzeugt, deren Programmtext nicht vorliegt oder nicht relevant ist (z.B. von Standardklassen), die aber vermutlich bestimmte Variablen enthalten, um bestimmte Werte zu speichern. Dann darf über die Objektstruktur spekuliert werden; die Objektvariablen haben dann keinen Namen.
Beispielsweise kann die Auswirkung der Programmzeile (innerhalb einer Methode)
var i: Integer = 5 // [2]
folgendermaßen[3] dargestellt werden:
Abbildung 9: Objektvariable ohne Namen
Wenn sich die obige Programmzeile in der Klasse außerhalb einer Methode befindet, dann ist die Variable i global; sie ist die Objektvariable einer Klasse, z.B. EineKlasse:
Abbildung 10: Globale Referenz
Die dritte Möglichkeit ist, dass sich die Programmzeile in einem Modul (object) außerhalb der Methoden befindet; dann liegt die Variable im Modulbereich:
Abbildung11: Globale Referenz im Modulbereich
[1] zusätzlich auch Platz für Verwaltungsinformation, wie z.B. eine Referenz auf die Klasse
[2] Scala’s Int ist ein Wertetyp, während java.lang.Integer ist ein Referenztyp; in diesem Aufsatz setzen wir dafür überall import java.lang.Integer voraus
[3] ebenso für Konstanten (val)
Version: 5. Dezember 2010
© Prof. Solymosi, 2010, Beuth-Hochschule für Technik Berlin