Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Polymorphe Gehaltsabrechnung mit Geburtstagsbonus: Ein Java-Tutorial für CSCI 470/502

Lerne, wie du in Java eine polymorphe Gehaltsabrechnung mit Geburtstagsbonus implementierst – inspiriert durch aktuelle Trends wie Spotify Wrapped und Gaming-Battle-Pässe.

Java Polymorphie Tutorial Geburtstagsbonus Java CSCI 470 Assignment 5 CSCI 502 Assignment 5 Payroll Birthday Bonus App Polymorphe Gehaltsabrechnung Java OOP Übung Employee Klasse Geburtsdatum Date Klasse Java Gehaltsabrechnung mit Bonus Polymorphie Beispiel Java Java Array von Employee Geburtstagsbonus Programmierung Java LocalDate aktueller Monat OOP Polymorphie Anwendung Java Gehaltsabrechnung Tutorial

Einführung: Warum Polymorphie und Geburtstage? Ein Trend-Vergleich

Stell dir vor, du entwickelst eine App wie Spotify Wrapped, die personalisierte Zusammenfassungen erstellt – aber für die Gehaltsabrechnung eines Unternehmens. Jeder Mitarbeiter (Angestellter, Manager, Vertriebler) hat eine andere Berechnungslogik, aber alle bekommen im Geburtsmonat einen Bonus von 100 $. Genau das lernst du in dieser Aufgabe: Polymorphie in Java, kombiniert mit einer Geburtstagsbonus-Logik. Ähnlich wie bei einem Battle Pass in einem Spiel (z. B. Fortnite), wo jeder Spieler individuelle Belohnungen erhält, aber der Mechanismus zur Freischaltung gleich ist.

Grundlagen: Die Employee-Klasse und das Date-Objekt

Zunächst musst du die vorhandene Employee-Klasse um eine private Instanzvariable birthDate vom Typ Date erweitern. Die Date-Klasse ist bereits gegeben – sie repräsentiert ein Datum mit Tag, Monat und Jahr. Füge Getter-Methoden hinzu, um auf Monat und Tag zuzugreifen. Warum ist das wichtig? Weil der Monat des Geburtsdatums mit dem aktuellen Monat (z. B. Juni 2026) verglichen wird, um den Bonus zu vergeben.

public class Employee {
    private String firstName;
    private String lastName;
    private String socialSecurityNumber;
    private Date birthDate; // neu

    public Employee(String first, String last, String ssn, Date birth) {
        firstName = first;
        lastName = last;
        socialSecurityNumber = ssn;
        birthDate = birth;
    }

    public Date getBirthDate() {
        return birthDate;
    }

    // andere Methoden...
}

In der Date-Klasse benötigst du eine Methode getMonth(), die den Monat als int zurückgibt (1–12). Stelle sicher, dass der Konstruktor von Date die Werte validiert.

Polymorphie in Aktion: Die Gehaltsabrechnung

Das Kernstück der Aufgabe ist die polymorphe Berechnung. Du erstellst ein Array von Employee-Referenzen, das verschiedene Unterklassen enthält (z. B. SalariedEmployee, HourlyEmployee, CommissionEmployee, BasePlusCommissionEmployee). Jede Unterklasse überschreibt die Methode earnings(), um ihr spezifisches Gehalt zu berechnen. In einer Schleife rufst du für jedes Element earnings() auf – das ist Polymorphie: Zur Laufzeit wird die richtige Methode ausgeführt.

Employee[] employees = new Employee[4];
employees[0] = new SalariedEmployee("John", "Smith", "111-11-1111", new Date(6, 15, 1990), 800.00);
employees[1] = new HourlyEmployee("Karen", "Price", "222-22-2222", new Date(3, 22, 1985), 16.75, 40);
employees[2] = new CommissionEmployee("Sue", "Jones", "333-33-3333", new Date(6, 1, 1992), 10000, .06);
employees[3] = new BasePlusCommissionEmployee("Bob", "Lewis", "444-44-4444", new Date(12, 10, 1988), 5000, .04, 300);

for (Employee currentEmployee : employees) {
    System.out.println(currentEmployee);
    double earnings = currentEmployee.earnings();
    int currentMonth = java.time.LocalDate.now().getMonthValue(); // Juni = 6
    if (currentEmployee.getBirthDate().getMonth() == currentMonth) {
        earnings += 100.00;
        System.out.println("Geburtstagsbonus von 100 $ hinzugefügt!");
    }
    System.out.printf("Verdienst: $%.2f%n%n", earnings);
}

Integration des Geburtstagsbonus

Der Bonus wird nur hinzugefügt, wenn der Monat des Geburtsdatums mit dem aktuellen Monat übereinstimmt. Da die Aufgabe annimmt, dass die Gehaltsabrechnung einmal pro Monat erfolgt, reicht ein einfacher Vergleich. In unserem Beispiel mit aktuellem Monat Juni 2026 erhalten also John (Geburtstag 15. Juni) und Sue (Geburtstag 1. Juni) den Bonus. Achte darauf, dass du den Bonus nicht in der earnings()-Methode einbaust, sondern erst in der Schleife – so bleibt die Methode unverändert und der Bonus wird nur bei der Abrechnung berücksichtigt.

Trend-Beispiel: Wie Netflix personalisierte Empfehlungen nutzt

Stell dir vor, Netflix würde jedem Nutzer im Geburtsmonat einen speziellen Film empfehlen. Die Empfehlungslogik ist polymorph: Für einen Serienfan wird eine andere Empfehlung generiert als für einen Dokumentarfilm-Fan. Der Geburtsmonat ist der Auslöser – genau wie in deiner Aufgabe. Dieses Pattern findest du auch in Gaming-Apps, die zum Geburtstag des Spielers besondere Skins oder Boni freischalten.

Häufige Fehler und Tipps

  • Vergiss nicht, die Date-Klasse zu importieren – wenn sie im selben Package liegt, reicht die einfache Referenz.
  • Getter-Methoden in Date: Stelle sicher, dass getMonth() und getDay() public sind.
  • Array-Typ: Verwende Employee[] und nicht Object[], sonst musst du casten.
  • Aktuellen Monat ermitteln: Nutze java.time.LocalDate.now().getMonthValue() (gibt 1–12 zurück).
  • Bonus nicht in earnings() einbauen – sonst wird er bei jedem Aufruf von earnings() addiert, was falsch ist.

Erweiterungsmöglichkeiten: Wie in der Fintech-Welt

In der Fintech-Branche (z. B. bei Klarna oder N26) werden ähnliche Mechanismen genutzt, um Kunden zum Geburtstag einen Cashback-Bonus zu gewähren. Du könntest deine App erweitern, indem du verschiedene Bonustypen einführst (z. B. 200 $ für Manager) – das wäre dann eine weitere Polymorphie-Ebene. Oder du speicherst die Geburtstage in einer Datenbank und rufst sie mit JDBC ab.

Fazit

Mit dieser Aufgabe lernst du nicht nur Polymorphie und die Integration einer externen Klasse, sondern auch, wie man zeitbasierte Logik in ein OOP-System einbaut. Der Geburtstagsbonus ist ein einfaches, aber wirkungsvolles Beispiel für reale Geschäftslogik. Wenn du die Aufgabe erfolgreich abgeschlossen hast, kannst du stolz sein – du hast ein Fundament für komplexere Systeme wie personalisierte Rabattaktionen oder dynamische Gehaltsmodelle gelegt.