groovy-lecture/yuliya/aufgaben.md

5.1 KiB

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:

  1. Hinzufügen von Mitarbeitern mit Name und Gehalt.
  2. Aktualisieren des Gehalts eines Mitarbeiters.
  3. Entfernen eines Mitarbeiters.
  4. Durchführen von Gehaltsanpassungen für alle Mitarbeiter basierend auf einer Closure, die eine Gehaltsanpassungslogik definiert.
  5. 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 }