CS_LEVEL_4_SOLUTION - OnlyCook/abitur-elite-code GitHub Wiki

Level 4 – Musterlösung: Gehege-Verwaltung mit List

Lösung

public class Gehege
{
    private List bewohner;

    public Gehege()
    {
        this.bewohner = new List();
    }

    public void Hinzufuegen(Tier t)
    {
        bewohner.Add(t);
    }

    public int AnzahlTiere()
    {
        return bewohner.Count;
    }
}

public class Tier
{
    public Tier() {}
}

Tipp: Wer bereits verstanden hat, dass new List<Tier>() den Konstruktor der Liste aufruft, kann in C# auch die Kurzform verwenden:

this.bewohner = new();

C# erkennt den Typ automatisch aus der Deklaration (List<Tier> bewohner) und ergänzt ihn selbst. Das spart besonders beim Schreiben mit Stift und Papier etwas Zeit.


Erklärung

List<T> – Eine Liste für Objekte

Eine Liste ist eine Datenstruktur, die beliebig viele Objekte eines bestimmten Typs speichern kann – anders als ein Array wächst sie automatisch mit.

Das T in List<T> ist ein Platzhalter für den konkreten Typ, den die Liste speichern soll. In diesem Level ist das Tier:

private List bewohner;

Das bedeutet: bewohner ist eine Liste, die ausschließlich Tier-Objekte (oder Objekte von Unterklassen) aufnehmen kann. Der Zugriffsmodifikator ist private, da die Liste ein internes Attribut der Klasse ist.

Hinweis: List<T> kommt aus Java – in C# funktioniert die Syntax identisch. Das Diagramm in der App zeigt die Java-Dokumentation, da das Abitur Java-Notation verwendet.


Die Liste im Konstruktor initialisieren

Eine Liste muss erst erstellt werden, bevor man sie benutzen kann. Das geschieht im Konstruktor mit new:

public Gehege()
{
    this.bewohner = new List();
}

new List<Tier>() ruft den Konstruktor der Klasse List<Tier> auf und erstellt eine neue, leere Liste. Ohne diesen Schritt wäre bewohner noch null – jeder Zugriff darauf würde zur Laufzeit einen Fehler erzeugen.


Elemente hinzufügen mit Add()

public void Hinzufuegen(Tier t)
{
    bewohner.Add(t);
}

Die Methode Add() hängt ein Objekt ans Ende der Liste an. Das übergebene Tier t wird direkt weitergereicht – Gehege selbst erstellt keine Tiere, es verwaltet nur die, die von außen übergeben werden.


Anzahl der Elemente mit Count

public int AnzahlTiere()
{
    return bewohner.Count;
}

Count ist eine Eigenschaft der Liste, die die aktuelle Anzahl der enthaltenen Elemente zurückgibt. In der Java-Dokumentation (und im Diagramm) steht dafür size() – in C# ist es Count, ohne Klammern, da es sich um eine Eigenschaft und keine Methode handelt.

Java C#
liste.size() liste.Count
liste.add(x) liste.Add(x)

Die Klasse Tier

public class Tier
{
    public Tier() {}
}

In diesem Level ist Tier bewusst einfach gehalten – es ist eine normale (nicht abstrakte) Klasse ohne Attribute, da der Fokus auf der Listenverwaltung in Gehege liegt. Der leere Konstruktor public Tier() {} ist explizit angegeben, wie es das Diagramm vorschreibt.


Zusammenspiel der Klassen

Gehege
└── private List<Tier> bewohner    ←── enthält beliebig viele Tier-Objekte
    ├── Hinzufuegen(Tier t)             bewohner.Add(t)
    └── AnzahlTiere() : int             bewohner.Count

Gehege besitzt die Liste – Tier weiß nichts davon. Diese Richtung der Abhängigkeit (nur Gehege kennt Tier, nicht umgekehrt) spiegelt sich auch im UML-Diagramm wider.

⚠️ **GitHub.com Fallback** ⚠️