Aufgabe Vorschlag A - 2 · Abitur Hessen Praktische Informatik LK 2022
Thema: Klassen und Methoden implementieren · Aus der Prüfung LK (2022)
Aufgabenstellung
Material 3
UML-Klassendiagramm Zuchtmanagement
Hinweise: Die Einheit aller Längenmaße ist Zentimeter. Auf alle Attribute kann mittels get-Methoden zugegriffen werden.
2.3
Überführen Sie die Klassen Aquarium, Lebewesen und Fischart in Anweisungen einer objektorientierten Programmiersprache und implementieren Sie die dargestellten Methoden.
Hinweise: Die Methode ermittleHerkunft() der Klasse Aquarium gibt die Herkunft des ersten Lebewesens oder einen leeren String bei einem leeren Aquarium zurück. Die Methode pruefeFreiesVolumen() gibt true zurück, wenn das Volumen des Aquariums für die Gruppe der übergebenen Fischart ausreicht, ansonsten false. Die Methode besetzeAquarium() fügt die übergebene Art dem Container lebewesen hinzu. Bei Fischarten ist das nur möglich, wenn das freie Volumen des Aquariums ausreichend ist. Sie können davon ausgehen, dass der Methode besetzeAquarium() nur verträgliche Fischarten übergeben werden. Die Dokumentation der Klasse List ist in Material 5 zu finden.
2.4
Die Methode findeAquarium() der Klasse Zuchtmanagement gibt ein Aquarium für die übergebene Fischart zurück, wobei folgende Festlegungen zu berücksichtigen sind:
Es ist immer mindestens ein leeres Aquarium vorhanden.
Ein Aquarium muss über ausreichend freien Platz für die Gruppengröße der Fischart verfügen.
In einem Aquarium haben alle Lebewesen dieselbe Herkunft.
Die Fischarten in einem Aquarium müssen untereinander verträglich sein. Eine Fischart, die mit keiner anderen verträglich ist, wird als einzige in einem Aquarium gehalten.
Ein Aquarium wird nur einmal mit derselben Fischart besetzt.
Der Besatz einer Fischart in ein bereits mit Lebewesen gleicher Herkunft belegtes Aquarium ist bei ausreichendem Platz vorzuziehen. Wenn das nicht möglich ist, wird das erste leere Aquarium des Containers aquarien zurückgegeben.
Entwickeln und zeichnen Sie ein Struktogramm für die Methode.

Lösung
Nach den offiziellen Korrekturhinweisen
2.3 Überführen Sie die Klasse Aquarium in Java und implementieren Sie die dargestellten Methoden.
Lösung: ```java public class Aquarium { private int nr; private int laenge; private int breite; private int hoehe; private int nettoVolumenInLiter; private int literBelegt; private int anzahlFischArten; private static int autowert = 1; private List<Lebewesen> lebewesen; public Aquarium(int laenge, int breite, int hoehe) { this.nr = autowert++; this.laenge = laenge; this.breite = breite; this.hoehe = hoehe; this.nettoVolumenInLiter = (int) ((laenge * breite * hoehe / 1000) * 0.875); this.literBelegt = 0; this.anzahlFischArten = 0; this.lebewesen = new List<>(); } public String ermittleHerkunft() { String s = ""; if (lebewesen.size() > 0) s = lebewesen.get(0).herkunft; return s; } public boolean pruefeFreiesVolumen(Fischart art) { int literBedarf = art.getLaengeInCM() * art.getGruppengroesse() * 2; if (literBedarf + literBelegt <= nettoVolumenInLiter) return true; return false; } public boolean besetzeAquarium(Lebewesen art) { boolean ok = true; if (art instanceof Fischart) { Fischart f = (Fischart) art; if (pruefeFreiesVolumen(f)) { lebewesen.add(art); anzahlFischArten++; literBelegt += f.getLaengeInCM() * f.getGruppengroesse() * 2; } else { ok = false; } } else { lebewesen.add(art); } return ok; } } ```
2.3 Überführen Sie die Klasse Lebewesen in Java und implementieren Sie die dargestellten Methoden.
Lösung: ```java public abstract class Lebewesen { protected String name; protected String herkunft; protected int minTemp; protected int maxTemp; public Lebewesen(String name, String herkunft, int minTemp, int maxTemp) { this.name = name; this.herkunft = herkunft; this.minTemp = minTemp; this.maxTemp = maxTemp; } } ```
2.3 Überführen Sie die Klasse Fischart in Java und implementieren Sie die dargestellten Methoden.
Lösung: ```java public class Fischart extends Lebewesen { private int laengeInCM; private int gruppengroesse; private List<Fischart> vertraeglichMit; public Fischart(String name, String herkunft, int minTemp, int maxTemp, int cm, int gruppengroesse) { super(name, herkunft, minTemp, maxTemp); this.laengeInCM = cm; this.gruppengroesse = gruppengroesse; vertraeglichMit = new List<>(); } public void hinzufuegenVertraeglichMit(Fischart art) { this.vertraeglichMit.add(art); } } ```
2.4 Entwickeln und zeichnen Sie ein Struktogramm für die Methode findeAquarium().
Lösung: Das Struktogramm beschreibt den Ablauf von `findeAquarium(art: Fischart)`: 1. Initialisierung: `gesuchtesAquarium := null`, `leeresAquarium := null`. 2. Iteration über alle Aquarien `a` in `aquarien`: - Prüfe `genugPlatz := a.pruefeFreiesVolumen(art)`. - Falls `leeresAquarium == null` und Aquarium leer (`anzahlFischArten == 0`) und `genugPlatz`, merke `leeresAquarium := a`. - Prüfung der Herkunft: `a.ermittleHerkunft() == art.herkunft`. - Wenn Herkunft übereinstimmt: Prüfung der Verträglichkeit aller im Aquarium vorhandenen Lebewesen mit der neuen Art. Falls unverträglich oder dieselbe Art bereits vorhanden, `ok := false` und Abbruch der inneren Schleife. - Wenn `ok und genugPlatz`: `gesuchtesAquarium := a`, Abbruch der Aquarienschleife. 3. Nach der Schleife: Wenn kein passendes besetztes Aquarium gefunden wurde (`gesuchtesAquarium == null`), wird `gesuchtesAquarium := leeresAquarium` gesetzt. 4. Rückgabe von `gesuchtesAquarium`.
Die ausführliche Erklärung Schritt für Schritt (mit KI) gibt es mit Premium. Premium
Löse sie direkt hier: automatische Korrektur, Hinweise und Lösung Schritt für Schritt.
Aufgabe Vorschlag A - 2.5.1 · LK 2022 ›
Mehr Aufgaben zu Klassen und Methoden implementieren
- Aufgabe Vorschlag A - 2.5.1 · LK 2022
- Aufgabe Vorschlag B - 1.5 · LK 2022
- Aufgabe Vorschlag C - 1.2 · LK 2022
- Aufgabe Vorschlag C - 1.6 · LK 2022
- Aufgabe Vorschlag A - 1 - Klassen und Methoden implementi… · LK 2021
- Aufgabe Vorschlag B - 1 - Klassen und Methoden implementi… · LK 2021
- Aufgabe Vorschlag C - 1 - Klassen und Methoden implementi… · LK 2021