Design Patterns: Dekorierer - UML-Klassendiagramm

Maria2Y

Newbie
Registriert
Mai 2019
Beiträge
5
Hallo ich versuche grad ein Dekorierer/ zu modellieren mit folgenden Eigenschaften.

• Ein Mitarbeiter ist eine Person mit einem Namen und einem Grundgehalt.
• Ein Mitarbeiter kann Zusatzaufgaben übernehmen. Zusatzaufgaben sind:
• Projektleitung: Für jede Projektleitung wird eine Zulage gezahlt.
• Kundenbetreuung: Ein Kunde hat eine Nummer und einen Umsatzwert.
Für jede Kundenbetreuung wird ein Bonus von 10% des Umsatzwertes gezahlt.
• Veranstaltungsorganisation: Für das Organisieren gibt es keine besondere Vergütung.

Ich habe jetzt grob ein erstellt und wollte mal fragen ob die Beziehungen und der Aufbau stimmt.

Es soll ein UML-Klassendiagramm für ein Dekorierer Entwurfsmuster werden.


version 5.png
 
Hi,
sieht für mich fast korrekt aus.
Folgendes fehlt aber IMHO noch:
  • Eine Möglichkeit das Gehalt abzufragen. Das ist ja das Ergebnis aus Grundgehalt + Zulagen zu einem bestimmten Zeitpunkt.
  • Eine Möglichkeit/Klasse, die man nach dem Mitarbeiter in der korrekten Ausprägung fragen kann.


Möglich wäre eine Klasse "Abrechnung" welche die korrekte Dekoration vornimmt.
z.b. mit einer Methode "holeMitarbeiter" und den Parametern "name" (da Mitarbeiter außer den Werten von Person kein Identifizierungsmerkmal hat) und den Parametern "Jahr" und "Monat" - angenommen, alle Zulagen werden dem Monatsgehalt hinzugefügt.

Evtl. gibt es also noch Probleme mit Intervallen, z.b. Projektleitung ist monatlich, aber die Zulage für die Kundenbetreuung könnte erst am Ende des Projektes ausgezahlt werden.

hth
 
Da kommen wir zu meinen wesentlichen Problem wenn mein Diagramm stimmen sollte.

Für das oben modellierte Dekorierer-Muster soll ich die Methode int gehalt() anlegen. Die Methode gehalt soll für den mit Hilfe der Objekte des Dekorierer Musters beschriebenen Mitarbeiter das insgesamt zu zahlende Gehalt ermitteln. Wie würde den für sowas die Java Implementierung Aussehen.

Ich muss für das ganze keine Intervalle beachten. Es kann alles aufeinmal einfach ausgelesen werden und zusammen gefasst werden.
 
Dekorieren funktioniert, wenn alle Implementierungen ein gemeinsames Interface haben.
Das kann hier die Klasse "Zusatz" sein.

d.h. der Aufrufer bekommt eine Implementierung von "Zusatz" zurück und weiss nicht, ob es sich darum um einen "Mitarbeiter", oder einen "Mitarbeiter" mit Projektverantwortung und/oder Kundebetreuung handelt.

Da ich dir die Antwort aber nicht direkt liefern will, erstmal diese Frage:
Warum kann es die Klasse "Zusatz" aber nicht sein, welche die Methode "int gehalt" hat?
 
Mitarbeiter hätte doch eigentlich kein Zugriff druaf
nyromant schrieb:
Da ich dir die Antwort aber nicht direkt liefern will, erstmal diese Frage:
Warum kann es die Klasse "Zusatz" aber nicht sein, welche die Methode "int gehalt" hat?

Ich hab bis jetzt gedacht es muss da rein, da du aber erwähnt hast das "Mitarbeiter", oder einen "Mitarbeiter" mit Projektverantwortung und/oder Kundebetreuung nicht unterschieden werden können, kann es deshalb nicht gehen?
 
Nachdem ich jetzt mein UML Diagramm geändert habe, was vorher nicht wirklich korrekt war.
version 6.png


Muss die Methode int gehalt() in Person rein, damit sie für alle benötigten Klassen auch vorhanden wäre.
Jedoch kann ich mir nicht vorstellen wie das codiert aussehen kann.
Hat da jemand eine Idee`?
 
Maria2Y schrieb:
kann es deshalb nicht gehen
Genau, weil sonst eine einzelner Mitarbeiter keine Methode "int gehalt" hat, da dieser ja nicht "Zusatz" realisiert.

Wenn ich das Diagram richtig lese, erbt "Zusatz" jetzt die Eigenschaft "Name" von "Person"?
Was wäre, wenn die die Generalisierung von "Zusatz" und "Person" umgedreht wäre?


Im Diagram steht, dass "Zusatz" von "Person" abhängig ist. Welcher Wert wird für die Realisierungen von "Zusatz" benötigt, um den Bonus oder eine Zulage zu berechnen? Welche Klasse liefert diesen Wert?
Tipp: Das hattest du im ersten Diagram


bzgl. dem Code:
Code wäre nur eine Widerholung des Diagrams, nur in einer anderen Sprache.
Je nach Programmiersprache mit mehr Syntax die meiner Erfahrung nach zu sehr ablenken kann.

Wenn dir Java-Code aber hilft das Diagram zu verdeutlichen, dann nur los :)
Ergänzung ()

Vielleicht hilft auch erstmal, das Diagram auf das Wesentliche zu reduzieren:

design-pattern.png
 
Zuletzt bearbeitet:
Ah ich verstehe, Zusatz benötigt den Wert grundgehalt von Mitarbeiter um den bonus zu berechnen. Macht ja auch Sinn.
 
Zu welchem Ergebnis bist du gekommen?
Interessiert vlt den Nächsten der diesen Thread findet.
 
Zurück
Oben