Springe zum Inhalt oder Footer
SerloDie freie Lernplattform

Kurs

Referenzattribute deklarieren(in Java)

1 Übersicht

In diesem Kurs lernst du, wie du in Java Referenzattribute anlegst (deklarierst). Dabei ist der Fokus noch nicht auf der Verwendung, sondern auf dem Verständnis, wie Referenzen in Programmiersprachen funktionieren. Als Programmierumgebung wird BlueJ verwendet.

Benötigtes Vorwissen:

  • Attribute deklarieren

2 Ausrüstung eines Spielecharakters

In sogenannten RPGs (Rollenspiel-Spielen) wie Skyrim haben Helden häufig verschiedene Felder für ihre Gegenstände. Als Spieler kannst du dann die entsprechenden Gegenstände an die passenden Stellen im Charaktermenü ziehen. Kopfbedeckungen können zum Beispiel nur auf dem Kopf getragen werden (oder in Kisten und Rucksäcken gammeln) und bieten Rüstungsschutz, können aber nicht zum Kämpfen verwendet werden.

Ausrüstungsslots eines Spielecharakters

Doch was bedeuten diese Gegenstandslots aus Programmierperspektive? Wie kann man diese umsetzen? Das erfährst du in diesem Kurs!

3 Alles in Einem

Stell dir vor, du programmierst ein solches RPG und hast bereits angefangen, die Klasse HELD zu modellieren. Er hat wahrscheinlich einen Namen, ein Alter, Größe und Gewicht und und und...

Das sind alles Attribute der Klasse und die zugehörige Java-Datei könnte beispielsweise so aussehen:

public class HELD{
   private String name;
   private int alter;
   private double groesse;
   private double gewicht;
   //... Es könnten noch weitere Attribute folgen
   //Dann folgen noch der Konstruktor und die Methoden...
}

Jetzt gibst du deinem Helden eine Waffe in die Hand. Du hast nur die eine Klasse zu Verfügung und möchtest darin den Waffenbesitz abbilden.

Das kann ziemlich unübersichtlich werden!

Außerdem muss der Held die ganzen Eigenschaften gar nicht unbedingt wissen und sollte sie sicherlich nicht selbst einfach verändern können ("Ich setze meinen Bogen jetzt auf eine Stärke von 1000").

4 Extra Klasse, extra Objekt

Anders ist die Situation, wenn man sagt ein Objekt der Klasse HELD benutzt ein Objekt der Klasse WAFFE. Im Klassendiagramm wird das durch einen gestrichelten Pfeil angezeigt.

(Ein Objekt der Klasse HELD kann ein Objekt der Klasse WAFFE benutzen)

Eine Klasse HELD hat ein Attribut der Klasse WAFFE

Die Objekte sind hier unabhängig voneinander. Die Waffe zauberstab337 existiert auch ohne den Helden Kurtnix, aber der Held hat in seinem Code so etwas wie einen kleinen Spickzettel, auf den er schreiben kann, dass diese Waffe gerade mit ihm in Kontakt steht (in seiner Hand liegt).

Es wird also nicht der zauberstab337 im Helden gespeichert, sondern ein Verweis (eine Referenz) auf ihn.

5 Darstellung in BlueJ I

Nur mit Sprache ist das gar nicht so leicht zu verstehen! Dafür hat BlueJ den sogenannten Objektinspektor, der einer Objektkarte ähnelt und die einzelnen Attributwerte eines Objekts sichtbar machen kann.

(Um den Code kümmerst du dich erstmal nicht, das lernst du später)

Erzeugt man ein Objekt der Klasse HELD, so erscheint unten in der Objektansicht ein roter Kasten.

Klickt man doppelt auf diesen, so öffnet sich der Objektinspektor.

Objekt erzeugen in BlueJ

In dieser Objektkarte sieht man, dass das Attribut waffe aktuell null ist. Der "Wert" null bedeutet, dass kein Wert vorhanden ist. Der Held verfügt aktuell also über keine Waffe.

Auch, wenn man außerhalb ein Objekt der Klasse Waffe anlegt, bleibt dieser Wert.

Objektinspektor zur Klasse HELD

6 Darstellung in BlueJ II

Durch etwas Code-Magie (in Form eines Methodenaufrufs oder einer ergänzten Codezeile z.B. im Konstruktor) kann ein Objekt der Klasse WAFFE mit dem Objekt der Klasse HELD "bekannt gemacht werden":

Statt null siehst du in der Objektkarte jetzt einen Pfeil. Nach wie vor steht hier also kein Name oder gar ein ganzer Block an Waffen-Infos.

Klickst du auf diesen Pfeil, so öffnet sich eine weitere Objektkarte.

Objektkarte mit Referenz

Obwohl unten in der Leiste kein weiteres Objekt angezeigt wurde, sieht man die Objektkarte eines Objekts waffe. In dieser Objektkarte stehen jetzt die erwarteten Informationen und dieses Objekt verfügt nun über passende Methoden.

zwei Objektkarten der verbundenen Objekte

Kurz, wie bereits erwähnt: Gespeichert wird in der Klasse HELD nicht das Objekt der Klasse WAFFE, sondern ein Verweis, wo dieses im Speicher zu finden ist.

7 Referenzattribute

Die Attribute, die man benötigt, um einen solchen Verweis - oder eine solche Referenz - anzulegen, nennt man auch Referenzattribute. Die Attributwerte sind Speicheradressen, also eine Folge von Zeichen, die dem Programm dabei hilft, das richtige Objekt im Speicher herauszusuchen und den Kontakt für eine Kommunikation herzustellen.

Das Referenzattribut wird gleich deklariert (angelegt) wie alle anderen Attribute auch, nur dass der Datentyp jetzt nicht mehr String oder int ist, sondern angibt, von welcher Klasse das zu verlinkende Objekt sein wird:

private WAFFE waffe;
/*erst die Zugriffsrechte (private), 
dann der Name der Klasse, 
dann der Bezeichner des Attributs*/

Dabei ist der Name beliebig und es kann beliebig viele Referenzattribute geben:

private WAFFE erstwaffe;
private WAFFE reservewaffe;

8 Zusammenfassung

Nun hast du gesehen, wie man Referenzattribute deklarieren kann, also dem Computer sagen kann, dass ein Objekt von einer anderen Klasse mit einem Objekt der eigenen Klasse verlinkt werden kann.

Wie du ein Referenzattribut initialisierst und damit kommunizierst, wird Inhalt eines weiteren Kurses sein.

9 Übersicht

In diesem Kurs lernst du, wie du in Java Referenzattribute anlegst (deklarierst). Dabei ist der Fokus noch nicht auf der Verwendung, sondern auf dem Verständnis, wie Referenzen in Programmiersprachen funktionieren. Als Programmierumgebung wird BlueJ verwendet.

Benötigtes Vorwissen:

  • Attribute deklarieren

10 Ausrüstung eines Spielecharakters

In sogenannten RPGs (Rollenspiel-Spielen) wie Skyrim haben Helden häufig verschiedene Felder für ihre Gegenstände. Als Spieler kannst du dann die entsprechenden Gegenstände an die passenden Stellen im Charaktermenü ziehen. Kopfbedeckungen können zum Beispiel nur auf den Kopf getragen werden (oder in Kisten und Rucksäcken gammeln) und bieten Rüstungsschutz, können aber nicht zum Kämpfen verwendet werden.

Ausrüstungsslots eines Spielecharakters

Doch was bedeuten diese Gegenstandslots aus Programmierperspektive? Wie kann man diese umsetzen? Das erfährst du in diesem Kurs!

11 Alles in Einem

Stell dir vor, du programmierst ein solches RPG und hast bereits angefangen, die Klasse HELD zu modellieren. Er hat wahrscheinlich einen Namen, ein Alter, Größe und Gewicht und und und...

Das sind alles Attribute der Klasse und die zugehörige Java-Datei könnte beispielsweise so aussehen:

public class HELD{
   private String name;
   private int alter;
   private double groesse;
   private double gewicht;
   //... Es könnten noch weitere Attribute folgen
   //Dann folgen noch der Konstruktor und die Methoden...
}

Jetzt gibst du deinem Helden eine Waffe in die Hand. Du hast nur die eine Klasse zu Verfügung und möchtest darin jetzt den Waffenbesitz abbilden.

Das kann ziemlich unübersichtlich werden!

Außerdem muss der Held die ganzen Eigenschaften gar nicht unbedingt wissen und sollte sie sicherlich nicht selbst einfach verändern können ("Ich setze meinen Bogen jetzt auf eine Stärke von 1000").

12 Extra Klasse, extra Objekt

Anders ist die Situation, wenn man sagt ein Objekt der Klasse HELD benutzt ein Objekt der Klasse WAFFE. Im Klassendiagramm wird das durch einen gestrichelten Pfeil angezeigt.

(Ein Objekt der Klasse HELD kann ein Objekt der Klasse WAFFE benutzen)

Eine Klasse HELD hat ein Attribut der Klasse WAFFE

Die Objekte sind hier unabhängig voneinander. Die Waffe zauberstab337 existiert auch ohne den Helden Kurtnix, aber der Held hat in seinem Code so etwas wie einen kleinen Spickzettel, auf den er schreiben kann, dass diese Waffe gerade mit ihm in Kontakt steht (in seiner Hand liegt).

Es wird also nicht der zauberstab337 im Helden gespeichert, sondern ein Verweis (eine Referenz) auf ihn.

13 Darstellung in BlueJ I

Nur mit Sprache ist das gar nicht so leicht zu verstehen! Dafür hat BlueJ den sogenannten Objektinspektor, der einer Objektkarte ähnelt und die einzelnen Attributwerte eines Objekts sichtbar machen kann.

(Um den Code kümmerst du dich erstmal nicht, das lernst du später)

Erzeugt man ein Objekt der Klasse HELD (Rechtsklick auf die Klasse und new HELD()), so erscheint unten in der Objektansicht ein roter Kasten.

Klickt man doppelt auf diesen, so öffnet sich der Objektinspektor.

Objekt erzeugen in BlueJ

In dieser Objektkarte sieht man, dass das Attribut waffe aktuell null ist. Der "Wert" null bedeutet, dass kein Wert vorhanden ist. Der Held verfügt aktuell also über keine Waffe.

Auch, wenn man außerhalb ein Objekt der Klasse Waffe anlegt, bleibt dieser Wert.

Objektinspektor zur Klasse HELD

14 Darstellung in BlueJ II

Durch etwas Code-Magie (in Form eines Methodenaufrufs oder einer ergänzten Codezeile z.B. im Konstruktor) kann ein Objekt der Klasse WAFFE mit dem Objekt der Klasse HELD "bekannt gemacht werden":

Statt null siehst du in der Objektkarte jetzt einen Pfeil. Nach wie vor steht hier also kein Name oder gar ein ganzer Block an Waffen-Infos.

Klickst du auf diesen Pfeil, so öffnet sich eine weitere Objektkarte.

Objektkarte mit Referenz

Obwohl unten in der Leiste kein weiteres Objekt angezeigt wurde, sieht man die Objektkarte eines Objekts waffe. In dieser Objektkarte stehen jetzt die erwarteten Informationen und dieses Objekt verfügt nun über passende Methoden.

zwei Objektkarten der verbundenen Objekte

Kurz, wie bereits erwähnt: Gespeichert wird in der Klasse HELD nicht das Objekt der Klasse WAFFE hinterlegt, sondern ein Verweis, wo dieses im Speicher zu finden ist.

15 Referenzattribute

Die Attribute, die man benötigt, um einen solchen Verweis - oder eine solche Referenz - anzulegen, nennt man auch Referenzattribute. Sie speichern keine sinnvolle Zahl oder keinen sinnvoll verwendbaren Text, sondern eine Speicheradresse, also eine Folge von Zeichen, die dem Programm dabei hilft, das richtige Objekt im Speicher herauszusuchen und den Kontakt für eine Kommunikation herzustellen.

Das Referenzattribut wird gleich deklariert (angelegt) wie alle anderen Attribute auch, nur dass der Datentyp jetzt nicht mehr String oder int ist, sondern angibt, von welcher Klasse das zu verlinkende Objekt sein wird:

private WAFFE waffe;
/*erst die Zugriffsrechte (private), 
dann der Name der Klasse, 
dann der Bezeichner des Attributs*/

Dabei ist der Name beliebig und es kann beliebig viele Referenzattribute geben:

private WAFFE erstwaffe;
private WAFFE reservewaffe;

16 Zusammenfassung

Nun hast du gesehen, wie man Referenzattribute deklarieren kann, also dem Computer sagen kann, dass ein Objekt von einer anderen Klasse mit einem Objekt der eigenen Klasse verlinkt werden kann.

Wie du ein Referenzattribut initialisierst und damit kommunizierst, wird Inhalt eines weiteren Kurses sein.


Dieses Werk steht unter der freien Lizenz
CC BY-SA 4.0Was bedeutet das?