Lab-04 — Abtrakte Klassen und Interfaces

Erweitere Lab-03 — Vererbung: Mitarbeiter, Firma um die nachfolgend beschriebenen Themen. Erstelle eine Kopie des Lab-03-Projekts mit neuem Namen. Nimm folgende Ergänzungen vor:

1. Umwandeln aller Fehlermeldungen auf Checked Exceptions

Anstelle von Fehlermeldungen verwende checked Exceptions (BadParamException, bei Bedarf weitere).

Wenn sinnvoll, zur Anreicherung mit Kontext-Information die Exception "rethrow"-en.

Z.B. in Settern ist das betroffene Objekt oft nicht identifizierbar, wenn keine weiteren Attribute gezeigt werden – in aufrufenden Methoden (z.B. Konstruktor) Exception "catchen", neu werfen mit Kontext-Info in der Message. "Cause" liefert die Details zur ursprünglichen Exception.

2. Umwandeln der Klasse 'Mitarbeiter' auf abstrakt, Zusatzattribut 'einstellDatum'

Wandle die Klasse auf abstrakt um und mache Methode berechneGehalt() : float zu einer abstrakten Methode.

Ergänze um das Attribut (Typ java.time.LocalDate) einstellDatum - auch bei toString().

public class DemoLocalDateAndFormat {
    public void formatDemo() {
        // https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Formatter.html
        String s = String.format("String:%s, Ganzzahl:%d, Nichtganzzahl:%f (formatiert: %06.3f), Char:%c, Boolean:%B",
                "Hallo", -999, 3.1415926, Math.sqrt(2), 'x', true);
        System.out.println(s);
    }
    public void localDateDemo() {
        LocalDate now = LocalDate.now();
        LocalDate someDate = LocalDate.of(2002, 02, 22);
        System.out.format("Jahre zwischen %TF und %TF: %d%n", // T .. time-prefix, F .. Full ISO Date
                now, someDate, (now.getYear() - someDate.getYear()));
        System.out.println("Heute ist %TF".formatted(LocalDate.now()));
    }
}

3. Definition von Interface 'Fachgebiete', Implementieren durch Mitarbeiterklassen

Die Mitarbeiterklassen sind um eine Schnittstelle Fachgebiete zu erweitern, die es ermöglicht für einen Mitarbeiter fachliche Erfahrungen, Kurse, … zu speichern bzw. abzufragen und folgende Methoden vorsieht:

  • besucheSchulung(String fachgebiet) … erweitert die Kenntnisse des Mitarbeiters um ein Fachgebiet

  • alleFachgebiete() : String[] … liefert alle Fachgebiete (Qualifikationen) des Mitarbeiters

  • qualifiziertFuer(String fachgebiet) : boolean … prüft, ob ein bestimmtes Fachgebiet zu den Qualifikationen eines Mitarbeiters gehört.

    Achtung

    Dafür erforderliche Attribute / Methoden sind in den obigen Klassen so einzufügen, dass möglichst wenige Erweiterungen erforderlich sind.

4. Definition von Interface 'Sonderform', Implementieren durch 'TeilzeitAngestellter' und 'WerksvertragsAngestellter'

Dieses Interface definiert keinerlei eigene Zusatzmethoden oder Konstante, es ist ein Marker-Interface.

5. Nutzung von String.format(..) oder "text.formatted(..)" bei Text-Ausgaben