CS_LEVEL_4_SOLUTION - OnlyCook/abitur-elite-code GitHub Wiki
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.
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.
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.
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.
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) |
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.
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.