Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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 {
<<abstract>>
-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<ConfectioneryEgg> 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<Material> readMaterials(file: File)` soll alle
Materialien der eingehenden Datei zurückgeben.

## Beispielhafter Aufbau der Materialdatei

```
Schokolade;2
Haselnusscreme;1
Marzipan;3
Fruchtsirup;0.5
```
Original file line number Diff line number Diff line change
@@ -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 {
<<enumeration>>
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<Dish> getDishesByType(type: DishType)` soll alle Gerichte
vom eingehenden Typ zurückgeben
- Die Methode `List<Dish> getHighProteinDishes(minProteinsInG: double)` soll
alle Gerichte zurückgeben, die mindestens über den eingehenden Eiweißwert
verfügen
Original file line number Diff line number Diff line change
@@ -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~ {
<<interface>>
+compareTo(o: Terminator) int
}

class RoboterFactory~T extends Roboter~ {
<<record>>
roboters: Map~String, T~
+getRoboterBySerialNumber(serialNumber: String) Optional~T~
+getRobotersByFabricationYear(fabricationYear: int) List~T~
}

class Series {
<<enumeration>>
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<T> getRoboterBySerialNumber(serialNumber: String)` soll
den Roboter zur eingehenden Seriennummer zurückgeben
- Die Methode `List<T> getRobotersByFabricationYear(fabricationYear: int)` soll
alle Roboter zum eingehenden Fabrikationsjahr zurückgeben
85 changes: 85 additions & 0 deletions docs/exam-exercises/exam-exercises-java2/queries/terminators.md
Original file line number Diff line number Diff line change
@@ -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~ {
<<interface>>
+compareTo(o: Terminator) int
}

class TerminatorQueries {
<<record>>
terminators: List~Terminator~
+getAllUniqueSeriesDescriptions() List~String~
+getAllHumanoidTerminatorsSortedByFabricationDate() List~Terminator~
+getAverageWeigthInKg() double
+getTerminatorsByWeightInKg() Map~Double, List~Terminator~~
}

class Series {
<<enumeration>>
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<String> getAllUniqueSeriesDescriptions()` soll die
Serienbeschreibungen aller Terminatoren ohne Dopplungen zurückgeben
- Die Methode
`List<Terminator> 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<Double, List<Terminator>> getTerminatorsByWeightInKg()` soll
alle Terminatoren gruppiert nach ihrem Gewicht zurückgeben
Loading