From d32441aaf6db71540589be20d450f804cb84f866 Mon Sep 17 00:00:00 2001 From: "daniel.appenmaier@gmail.com" Date: Mon, 29 Jun 2026 07:07:25 +0200 Subject: [PATCH] New Exam Exercises from WWIBE23 and WWIBE24 --- .../class-diagrams/easter-basket.md | 101 ++++++++++++++++++ .../class-diagrams/restaurant.md | 66 ++++++++++++ .../class-diagrams/roboter-factory.md | 83 ++++++++++++++ .../queries/terminators.md | 85 +++++++++++++++ 4 files changed, 335 insertions(+) create mode 100644 docs/exam-exercises/exam-exercises-java1/class-diagrams/easter-basket.md create mode 100644 docs/exam-exercises/exam-exercises-java1/class-diagrams/restaurant.md create mode 100644 docs/exam-exercises/exam-exercises-java2/class-diagrams/roboter-factory.md create mode 100644 docs/exam-exercises/exam-exercises-java2/queries/terminators.md diff --git a/docs/exam-exercises/exam-exercises-java1/class-diagrams/easter-basket.md b/docs/exam-exercises/exam-exercises-java1/class-diagrams/easter-basket.md new file mode 100644 index 0000000000..b522ef697c --- /dev/null +++ b/docs/exam-exercises/exam-exercises-java1/class-diagrams/easter-basket.md @@ -0,0 +1,101 @@ +--- +title: Osterkorb +description: '' +tags: [oo, abstract-and-final, polymorphism, io-streams] +--- + +Setze das abgebildete Klassendiagramm vollständig um. Erstelle zum Testen eine +ausführbare Klasse. + +## Klassendiagramm + +```mermaid +classDiagram + EasterBasket o-- Egg + Egg <|-- ConfectioneryEgg : extends + Egg <|-- ChickenEgg : extends + ConfectioneryEgg o-- Material + + class EasterBasket { + -eggs: List~Egg~ #123;final#125; + +EasterBasket() + +addEgg(egg: Egg) void + +getConfectioneryEggs() List~ConfectioneryEgg~ + +getTotalWeightInG() double + } + + class Egg { + <> + -color: String #123;final#125; + +Egg(color: String) + +getWeightInG() double* + } + + class ConfectioneryEgg { + -shellMaterial: Material + -shellMaterialUnits: int + -fillingMaterial: Material + -fillingMaterialUnits: int + +ConfectioneryEgg(color: String) + +setFilling(material: Material, units: int) void + +setShell(material: Material, units: int) void + +getWeightInG() double + } + + class ChickenEgg { + -weightInG: double #123;final#125; + +ChickenEgg(color: String, weightInG: double) + +getWeightInG() double + } + + class Material { + -name: String #123;final#125; + -weightPerUnitInG: double #123;final#125; + +Material(name: String, weightPerUnitInG: double) + } + + class MaterialReader { + +readMaterials(file: File)$ List~Material~ + } +``` + +## Allgemeine Hinweise + +- Aus Gründen der Übersicht werden im Klassendiagramm keine Object-Methoden + dargestellt +- So nicht anders angegeben, sollen Konstruktoren, Setter, Getter sowie die + Object-Methoden wie gewohnt implementiert werden + +## Hinweise zur Klasse _ConfectioneryEgg_ + +- Der Konstruktor soll die Farbe des Genusseis initialisieren +- Die Methode `void setFilling(material: Material, units: int)` soll das + Material sowie die Einheiten der Füllung initialisieren +- Die Methode `void setShell(material: Material, units: int)` soll das Material + sowie die Einheiten der Hülle initialisieren +- Die Methode `double getWeightInG()` soll das Gewicht des Genusseis gemäß der + Formel _(Gewicht pro Einheit der Hülle × Einheiten der Hülle) + (Gewicht pro + Einheit der Füllung × Einheiten der Füllung)_ berechnen und zurückgeben + +## Hinweise zur Klasse _EasterBasket_ + +- Die Methode `void addEgg(egg: Egg)` soll der Eierliste das eingehende Ei + hinzufügen +- Die Methode `List getConfectioneryEggs()` soll alle + Genusseier zurückgeben +- Die Methode `double getTotalWeightInG()` soll das Gesamtgewicht aller Eier + zurückgeben + +## Hinweis zur Klasse _MaterialReader_ + +Die statische Methode `List readMaterials(file: File)` soll alle +Materialien der eingehenden Datei zurückgeben. + +## Beispielhafter Aufbau der Materialdatei + +``` +Schokolade;2 +Haselnusscreme;1 +Marzipan;3 +Fruchtsirup;0.5 +``` diff --git a/docs/exam-exercises/exam-exercises-java1/class-diagrams/restaurant.md b/docs/exam-exercises/exam-exercises-java1/class-diagrams/restaurant.md new file mode 100644 index 0000000000..e95f19194e --- /dev/null +++ b/docs/exam-exercises/exam-exercises-java1/class-diagrams/restaurant.md @@ -0,0 +1,66 @@ +--- +title: Restaurant +description: '' +tags: [enumerations, lambdas, java-stream-api] +--- + +Setze das abgebildete Klassendiagramm vollständig um. Erstelle zum Testen eine +ausführbare Klasse und/oder eine Testklasse. + +## Klassendiagramm + +```mermaid +classDiagram + Restaurant o-- Dish + Dish o-- DishType + Dish o-- NutritionValues + + class Restaurant { + -name: String #123;final#125; + -menu: List~Dish~ #123;final#125; + +Restaurant(name: String) + +addDish(dish: Dish) void + +getDishesByType(type: DishType) List~Dish~ + +getHighProteinDishes(minProteinsInG: double) List~Dish~ + } + + class Dish { + -name: String #123;final#125; + -priceInEuro: double + -type: DishType #123;final#125; + -nutritionValues: NutritionValues #123;final#125; + +Dish(name: String, type: DishType, nutritionValues: NutritionValues) + } + + class NutritionValues { + -carbohydratesInG: double #123;final#125; + -fatsInG: double #123;final#125; + -proteinsInG: double #123;final#125; + +NutritionValues(carbohydratesInG: double, fatsInG: double, proteinsInG: double) + } + + class DishType { + <> + APPETIZER + MAIN_COURSE + DESSERT + DRINK + } +``` + +## Allgemeine Hinweise + +- Aus Gründen der Übersicht werden im Klassendiagramm keine Object-Methoden + dargestellt +- So nicht anders angegeben, sollen Konstruktoren, Setter, Getter sowie die + Object-Methoden wie gewohnt implementiert werden + +## Hinweise zur Klasse _Restaurant_ + +- Die Methode `void addDish(dish: Dish)` soll dem Menü das eingehende Gericht + hinzufügen +- Die Methode `List getDishesByType(type: DishType)` soll alle Gerichte + vom eingehenden Typ zurückgeben +- Die Methode `List getHighProteinDishes(minProteinsInG: double)` soll + alle Gerichte zurückgeben, die mindestens über den eingehenden Eiweißwert + verfügen diff --git a/docs/exam-exercises/exam-exercises-java2/class-diagrams/roboter-factory.md b/docs/exam-exercises/exam-exercises-java2/class-diagrams/roboter-factory.md new file mode 100644 index 0000000000..5ac00e60ce --- /dev/null +++ b/docs/exam-exercises/exam-exercises-java2/class-diagrams/roboter-factory.md @@ -0,0 +1,83 @@ +--- +title: Roboterfabrik +description: '' +tags: + [ + enumerations, + inheritance, + comparators, + records, + maps, + optionals, + dates-and-times, + ] +--- + +Setze das abgebildete Klassendiagramm vollständig um. Erstelle zum Testen eine +ausführbare Klasse und/oder eine Testklasse. + +## Klassendiagramm + +```mermaid +classDiagram + Roboter <|-- Terminator : extends + Terminator ..|> Comparable~Terminator~ : implements + Terminator o-- Series + RoboterFactory~T extends Roboter~ ..> Roboter : uses + + class Roboter { + -serialNumber: String #123;final#125; + -fabricationDate: LocalDate #123;final#125; + +Roboter(serialNumber: String, fabricationDate: LocalDate) + } + + class Terminator { + -series: Series #123;final#125; + +Terminator(serialNumber: String, fabricationDate: LocalDate, series: Series) + +compareTo(other: Terminator) int + } + + class Comparable~Terminator~ { + <> + +compareTo(o: Terminator) int + } + + class RoboterFactory~T extends Roboter~ { + <> + roboters: Map~String, T~ + +getRoboterBySerialNumber(serialNumber: String) Optional~T~ + +getRobotersByFabricationYear(fabricationYear: int) List~T~ + } + + class Series { + <> + T1 = 1 series, false, 2000 + T800 = 800 series, true, 500 + T1000 = 1000 series, true, 100 + ... + -description: String #123;final#125; + -isHumanoid: boolean #123;final#125; + -weightInKg: double #123;final#125; + } +``` + +## Allgemeine Hinweise + +- Aus Gründen der Übersicht werden im Klassendiagramm keine Getter und + Object-Methoden dargestellt +- So nicht anders angegeben, sollen Konstruktoren, Setter, Getter sowie die + Object-Methoden wie gewohnt implementiert werden + +## Hinweis zur Klasse _Terminator_ + +Die Methode `int compareTo(other: Terminator)` soll so implementiert werden, +dass Terminatoren absteigend nach ihrem Gewicht sortiert werden können. + +## Hinweise zur Klasse _RoboterFactory_ + +- Die Schlüssel-Werte-Paare des Assoziativspeichers `roboters` beinhalten als + Schlüssel die Seriennummer sowie als Wert den dazugehörigen Roboter +- Die Methode `Optional getRoboterBySerialNumber(serialNumber: String)` soll + den Roboter zur eingehenden Seriennummer zurückgeben +- Die Methode `List getRobotersByFabricationYear(fabricationYear: int)` soll + alle Roboter zum eingehenden Fabrikationsjahr zurückgeben diff --git a/docs/exam-exercises/exam-exercises-java2/queries/terminators.md b/docs/exam-exercises/exam-exercises-java2/queries/terminators.md new file mode 100644 index 0000000000..afc0c495d5 --- /dev/null +++ b/docs/exam-exercises/exam-exercises-java2/queries/terminators.md @@ -0,0 +1,85 @@ +--- +title: Terminatoren +description: '' +tags: + [ + enumerations, + inheritance, + comparators, + java-stream-api, + exceptions, + records, + maps, + ] +--- + +Setze das abgebildete Klassendiagramm vollständig um. Erstelle zum Testen eine +ausführbare Klasse und/oder eine Testklasse. + +## Klassendiagramm + +```mermaid +classDiagram + Roboter <|-- Terminator : extends + Terminator ..|> Comparable~Terminator~ : implements + Terminator o-- Series + TerminatorQueries o-- Terminator + + class Roboter { + -serialNumber: String #123;final#125; + -fabricationDate: LocalDate #123;final#125; + +Roboter(serialNumber: String, fabricationDate: LocalDate) + } + + class Terminator { + -series: Series #123;final#125; + +Terminator(serialNumber: String, fabricationDate: LocalDate, series: Series) + +compareTo(other: Terminator) int + } + + class Comparable~Terminator~ { + <> + +compareTo(o: Terminator) int + } + + class TerminatorQueries { + <> + terminators: List~Terminator~ + +getAllUniqueSeriesDescriptions() List~String~ + +getAllHumanoidTerminatorsSortedByFabricationDate() List~Terminator~ + +getAverageWeigthInKg() double + +getTerminatorsByWeightInKg() Map~Double, List~Terminator~~ + } + + class Series { + <> + T1 = 1 series, false, 2000 + T800 = 800 series, true, 500 + T1000 = 1000 series, true, 100 + ... + -description: String #123;final#125; + -isHumanoid: boolean #123;final#125; + -weightInKg: double #123;final#125; + } +``` + +## Allgemeine Hinweise + +- Aus Gründen der Übersicht werden im Klassendiagramm keine Getter und + Object-Methoden dargestellt +- So nicht anders angegeben, sollen Konstruktoren, Setter, Getter sowie die + Object-Methoden wie gewohnt implementiert werden + +## Hinweise zur Klasse _TerminatorQueries_ + +- Die Methode `List getAllUniqueSeriesDescriptions()` soll die + Serienbeschreibungen aller Terminatoren ohne Dopplungen zurückgeben +- Die Methode + `List getAllHumanoidTerminatorsSortedByFabricationDate()` soll + alle menschenähnlichen Terminatoren absteigend sortiert nach ihrem + Fabrikationsdatum zurückgeben +- Die Methode `double getAverageWeigthInKg()` soll das durchschnittliche Gewicht + aller Terminatoren zurückgeben. Für den Fall, dass kein durchschnittliches + Gewicht berechnet werden kann, soll die Ausnahme `Exception` ausgelöst werden +- Die Methode `Map> getTerminatorsByWeightInKg()` soll + alle Terminatoren gruppiert nach ihrem Gewicht zurückgeben