CS_LEVEL_2_SOLUTION - OnlyCook/abitur-elite-code GitHub Wiki
Level 2 – Musterlösung: Kapselung und Validierung
Lösung
public class Tier
{
private int alter;
public int GetAlter()
{
return alter;
}
public void SetAlter(int neuesAlter)
{
if (neuesAlter > alter)
{
alter = neuesAlter;
}
}
}
Tipp: Getter, die nur einen Wert zurückgeben, lassen sich in C# kürzer mit einer Lambda-Schreibweise ausdrücken:
public int GetAlter() => alter;Beide Varianten sind gleichwertig – die Lambda-Schreibweise ist kompakter, aber optional.
Erklärung
Getter – Kontrollierter Lesezugriff
Da das Attribut alter private ist, kann von außen nicht direkt darauf zugegriffen werden. Ein Getter stellt einen öffentlichen Lesezugriff bereit, ohne die Kapselung zu brechen.
public int GetAlter()
{
return alter;
}
Die Namenskonvention im Abitur (Hessen) ist getAttribut() in Java – in C# wird derselbe Name verwendet, aber mit großem Anfangsbuchstaben: GetAlter(). Beide Varianten können jedoch in der App sowie in den Abitur-Klausuren verwendet werden.
Der Rückgabetyp (int) muss mit dem Typ des Attributs übereinstimmen. Das Schlüsselwort return gibt den Wert zurück und beendet die Methode sofort.
Setter – Kontrollierter Schreibzugriff mit Validierung
Ein Setter ermöglicht das Ändern eines Attributs von außen – aber mit der Möglichkeit, dabei Regeln durchzusetzen. Das ist der eigentliche Kern der Kapselung: nicht nur verstecken, sondern auch schützen.
public void SetAlter(int neuesAlter)
{
if (neuesAlter > alter)
{
alter = neuesAlter;
}
}
Hier gilt die Regel: Das Alter darf nur erhöht, nie verringert werden. Der Setter prüft das mit einer if-Bedingung, bevor er den Wert überschreibt. Ist die Bedingung nicht erfüllt, passiert einfach nichts.
Der Rückgabetyp ist void, weil der Setter keinen Wert zurückgibt – er verändert nur den internen Zustand des Objekts.
Vergleich mit Level 1: In Level 1 war
this.name = namenötig, weil Parameter und Attribut gleich hießen. Hier heißt der ParameterneuesAlterund das Attributalter– es gibt keine Namenskollision,thisist also nicht zwingend erforderlich, aber weiterhin erlaubt.
Kapselung im Überblick
Das Zusammenspiel aus private-Attribut, Getter und Setter nennt sich Datenkapselung (Encapsulation). Sie sorgt dafür, dass ein Objekt seinen eigenen Zustand kontrolliert und Außenstehende ihn nicht beliebig manipulieren können.
von außen: tier.SetAlter(10) → Setter prüft Regel → alter wird gesetzt
von außen: tier.GetAlter() → Getter gibt Wert zurück
von außen: tier.alter → ❌ Compilerfehler (private)