5.1 KiB
Übungsaufgaben
Aufgabe 1
Aufgabenstellung:
Erstellen Sie eine Klasse Person, die eine Instanzvariable name vom Typ String und eine Instanzvariable age vom Typ int hat. Implementieren Sie einen entsprechenden Kostruktor, der die Instanzvariablen initialisiert. Fügen Sie außerdem eine Methode introduce() hinzu, die eine Vorstellung der Person auf der Konsole ausgibt. Erstellen Sie eine Instanz der Klasse und rufen Sie die Methode introduce() auf.
Lösung
class Person {
String name
int age
Person(String name, int age) {
this.name = name
this.age = age
}
def introduce() {
println("Hello, my name is ${name} and I am ${age} years old.")
}
}
// Verwendung der Klasse Person
def person = new Person("Alice", 30)
person.introduce()
Aufgabe 2
Aufgabenstellung:
a) Erstelle eine Klasse Calculator, die Methoden für die Grundrechenoperationen Addition, Subtraktion, Multiplikation und Division bereitstellt. Implementiere die Methoden add(int a, int b), subtract(int a, int b), multiply(int a, int b) und divide(int a, int b). Die Methoden sollen die beiden übergebenen Zahlen entsprechend der Operation verarbeiten und das Ergebnis zurückgeben.
b) Erweitere die Klasse um eine Methode performOperation(int a, int b, Closure operation), die eine Closure als Parameter akzeptiert. Diese Closure soll eine Berechnung mit den beiden Zahlen durchführen und das Ergebnis zurückgeben. Zeige, wie man diese Methode verwendet, indem du verschiedene Closures übergibst.
Lösung
class Calculator {
def add(int a, int b) {
return a + b
}
def subtract(int a, int b) {
return a - b
}
def multiply(int a, int b) {
return a * b
}
def divide(int a, int b) {
if (b == 0) {
println("Error: Division by zero!")
return
}
return a / b
}
def performOperation(int a, int b, Closure operation) {
return operation(a, b)
}
}
// Verwendung der Klasse Calculator
def calc = new Calculator()
// Grundrechenoperationen
println("Addition: ${calc.add(5, 3)}")
println("Subtraction: ${calc.subtract(10, 7)}")
println("Multiplication: ${calc.multiply(4, 6)}")
println("Division: ${calc.divide(12, 4)}")
// Closures definieren
def addClosure = { int a, int b -> a + b }
def subtractClosure = { int a, int b -> a - b }
def multiplyClosure = { int a, int b -> a * b }
def divideClosure = { int a, int b ->
if (b == 0) {
println("Error: Division by zero!")
return
}
return a / b
}
// Verwendung von performOperation mit Closures
println("Addition mit Closure: ${calc.performOperation(5, 3, addClosure)}")
println("Subtraction mit Closure: ${calc.performOperation(10, 7, subtractClosure)}")
println("Multiplication mit Closure: ${calc.performOperation(4, 6, multiplyClosure)}")
println("Division mit Closure: ${calc.performOperation(12, 4, divideClosure)}")
Aufgabe 3
Aufgabenstellung
Erstellen Sie eine Klasse EmployeeManager, die die Verwaltung von Mitarbeitern ermöglicht. Die Klasse soll folgende Funktionen bieten:
- Hinzufügen von Mitarbeitern mit Name und Gehalt.
- Aktualisieren des Gehalts eines Mitarbeiters.
- Entfernen eines Mitarbeiters.
- Durchführen von Gehaltsanpassungen für alle Mitarbeiter basierend auf einer Closure, die eine Gehaltsanpassungslogik definiert.
- Abrufen einer Liste von Mitarbeitern, die nach einem bestimmten Kriterium gefiltert wurden (basierend auf einer übergebenen Closure).
class Employee {
String name
double salary
Employee(String name, double salary) {
this.name = name
this.salary = salary
}
String toString() {
return "Name: ${name}, Salary: ${salary}"
}
}
class EmployeeManager {
List<Employee> employees = []
void addEmployee(String name, double salary) {
employees << new Employee(name, salary)
}
void updateSalary(String name, double newSalary) {
employees.find { it.name == name }?.salary = newSalary
}
void removeEmployee(String name) {
employees.removeAll { it.name == name }
}
void adjustSalaries(Closure adjustmentLogic) {
employees.each { it.salary = adjustmentLogic(it.salary) }
}
List<Employee> filterEmployees(Closure criteria) {
return employees.findAll(criteria)
}
}
// Beispielnutzung der Klasse EmployeeManager
def manager = new EmployeeManager()
// Hinzufügen von Mitarbeitern
manager.addEmployee("Alice", 50000)
manager.addEmployee("Bob", 60000)
manager.addEmployee("Charlie", 55000)
// Aktualisieren des Gehalts eines Mitarbeiters
manager.updateSalary("Alice", 52000)
// Entfernen eines Mitarbeiters
manager.removeEmployee("Charlie")
// Durchführen von Gehaltsanpassungen für alle Mitarbeiter
manager.adjustSalaries { salary -> salary * 1.1 } // 10% Gehaltserhöhung
// Filtern von Mitarbeitern basierend auf einem Kriterium
def highEarners = manager.filterEmployees { it.salary > 55000 }
println("Alle Mitarbeiter:")
manager.employees.each { println it }
println("\nHigh Earners:")
highEarners.each { println it }
``