studyklar
GdI 2 · Übungsblatt 5 · Aufgabe 3

Studierende und Studiengänge: static-Zähler und Objekte in Attributen

Acht Studierende, drei Studiengänge: In fünf Schritten wächst ein kleines Verwaltungsprogramm. Es geht um Arrays von Objekten, ein gemeinsames static-Attribut und Objekte, die andere Objekte enthalten. Rechts steht die Datei, die der aktuelle Teil vor allem ändert. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 3

Gegeben sind die Klassen „StudierendePerson“ und „StudiumApp“.

Erweitern Sie diese Klassen folgendermaßen:

a) Speichern Sie in der Klasse „StudiumApp“ die StudierendePerson-Objekte in einem Array und geben Sie alle Informationen zu jeder studierenden Person aus.

b) Im Moment haben alle Studierenden die Matrikelnummer 0. Es soll jedes Studierendenobjekt beim Anlegen automatisch eine eigene Matrikelnummer erhalten. Die Matrikelnummern werden in fortlaufender Reihenfolge vergeben (1, 2, 3, …).

Zum Generieren der Nummern könnte es nützlich sein, ein Klassenattribut (d. h. ein als „static“ gekennzeichnetes Attribut) zu verwenden.

c) Neben Studierenden soll es auch Studiengänge geben, wobei jeder Studiengang über eine Bezeichnung, einen Abschluss (z. B. „Bachelor“) und das Jahr der letzten Reakkreditierung verfügt. Erstellen Sie die Klasse „Studiengang“.

Jedes Studierendenobjekt bekommt einen Studiengang zugeordnet. Erweitern Sie die Klasse StudierendePerson und ergänzen Sie ggf. die Konstruktoraufrufe in „StudiumApp“.

d) Erweitern Sie die toString-Methode der Klasse „StudierendePerson“ so, dass auch die Bezeichnung ihres Studiengangs, sowie der zugehörige Abschluss und das Jahr der letzten Reakkreditierung mit ausgegeben werden.

Die toString-Methode in „StudierendePerson“ soll keine getter-Methoden aufrufen und auch nicht direkt auf Attribute von Studiengang zugreifen.

e) Nun soll es weiterhin möglich sein, das Jahr der letzten Reakkreditierung eines Studiengangs zu ändern. Erweitern Sie den Code entsprechend und zeigen Sie, dass eine Änderung des Reakkreditierungsjahres für alle Studierenden des jeweiligen Studiengangs wirksam ist.

Die vorgegebenen Klassen liegen uns nicht vor. Wir bauen sie aus der Musterlösung nach: StudierendePerson hat Matrikelnummer, Vorname, Nachname, Geschlecht und Startsemester. Der Konstruktor setzt die Matrikelnummer auf 0. Rechts steht jede Datei schon in ihrer fertigen Form.

Eine Reakkreditierung ist die wiederholte offizielle Prüfung eines Studiengangs. Gespeichert wird nur ihr Jahr.

Merke: Eine Variable vom Typ einer Klasse enthält nicht das Objekt selbst, sondern einen Verweis darauf. Mehrere Variablen können auf dasselbe Objekt verweisen.
  1. a) Personen in ein Array, alle ausgeben.
  2. b) Fortlaufende Matrikelnummern mit einem static-Zähler.
  3. c) Klasse Studiengang; jede Person bekommt einen.
  4. d) toString gibt auch den Studiengang aus.
  5. e) Jahr ändern: alle Studierenden des Studiengangs sehen es.

Ein Array für acht Personen

        StudierendePerson[] studierende = new StudierendePerson[8];

Eine Klasse ist auch ein Typ. Darum kann ein Array Objekte dieser Klasse aufnehmen. new StudierendePerson[8] legt acht leere Felder an. Leer heißt: Jedes Feld enthält null, also noch keinen Verweis auf ein Objekt.

Aus Vorlesung 5, Folie 8 („Array mit Objekten einer Klasse“): LKW[] lkws = new LKW[3]; legt ein Array an, in dessen Felder LKW-Objekte passen.

Jede Person in ein Feld

        studierende[0] = new StudierendePerson("Anna", "Müller", "weiblich", "WS 2023/24");        studierende[1] = new StudierendePerson("Ben", "Schmidt", "männlich", "SS 2024");        studierende[2] = new StudierendePerson("Chris", "Fischer", "männlich", "WS 2022/23");        studierende[3] = new StudierendePerson("David", "Lehmann", "männlich", "WS 2023/24");        studierende[4] = new StudierendePerson("Elena", "Schneider", "weiblich", "SS 2023");        studierende[5] = new StudierendePerson("Felix", "Wagner", "männlich", "WS 2024/25");        studierende[6] = new StudierendePerson("Gina", "Becker", "weiblich", "SS 2022");        studierende[7] = new StudierendePerson("Leon", "Meyer", "männlich", "WS 2021/22");

Jede Zeile legt mit new eine Person an und speichert sie im nächsten Feld, von Index 0 bis Index 7.

So sieht der Code nach Teil a) aus, darum stimmen die Zeilennummern hier nicht mit der fertigen Datei rechts überein. Rechts kommt in jedem Aufruf noch ein fünfter Wert dazu, der Studiengang. Er folgt erst in Teil c).

Noch 11 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

StudiumApp.java

das Hauptprogramm

Abbildung 1StudiumApp.java

das Hauptprogramm

public class StudiumApp {     public static void main(String[] args) {         Studiengang dmm = new Studiengang("Digital Media Marketing", "Bachelor", 2018);        Studiengang mi = new Studiengang("Medieninformatik", "Bachelor", 2018);        Studiengang medi = new Studiengang("Medizininformatik", "Bachelor", 2018);         StudierendePerson[] studierende = new StudierendePerson[8];         studierende[0] = new StudierendePerson("Anna", "Müller", "weiblich", "WS 2023/24", dmm);        studierende[1] = new StudierendePerson("Ben", "Schmidt", "männlich", "SS 2024", mi);        studierende[2] = new StudierendePerson("Chris", "Fischer", "männlich", "WS 2022/23", mi);        studierende[3] = new StudierendePerson("David", "Lehmann", "männlich", "WS 2023/24", medi);        studierende[4] = new StudierendePerson("Elena", "Schneider", "weiblich", "SS 2023", dmm);        studierende[5] = new StudierendePerson("Felix", "Wagner", "männlich", "WS 2024/25", dmm);        studierende[6] = new StudierendePerson("Gina", "Becker", "weiblich", "SS 2022", mi);        studierende[7] = new StudierendePerson("Leon", "Meyer", "männlich", "WS 2021/22", medi);         for (StudierendePerson studi : studierende) {            System.out.println(studi);            System.out.println();        }         dmm.setJahrLetzteReakkreditierung(2024);        System.out.println("--- Digital Media Marketing neu akkreditiert ---");        System.out.println();         for (StudierendePerson studi : studierende) {            System.out.println(studi);            System.out.println();        }    }}
LegendeDie ganze Klasse StudiumApp.