UML KD Sample
UML Klassen-Diagramm
GPT5 Q
erstelle ein plantuml klassendiagramm für erstelle für eine mobile eisverkaufsstelle für einen eiskaufer und verkäufer
A
Hier ist ein sauberes PlantUML-Klassendiagramm für eine mobile Eisverkaufsstelle mit den Rollen Eiskäufer (Kunde) und Verkäufer. Du kannst den Code 1:1 in jeden PlantUML-Renderer einfügen.
@startuml
title Mobile Eisverkaufsstelle – Klassendiagramm
skinparam classAttributeIconSize 0
skinparam linetype ortho
package "Akteure" {
class Eiskäufer {
+bestelle(menu: Menü): Bestellung
+bezahle(b: Bestellung, art: Zahlungsart): Zahlung
}
class Verkäufer {
+nehmeBestellungAuf(k: Eiskäufer): Bestellung
+storniere(b: Bestellung)
+tagesabschluss(): Bericht
}
}
package "Verkaufssystem" {
class MobileEisverkaufsstelle {
+start()
+shutdown()
}
class Kasse {
isOffen: boolean
+öffnen()
+schließen()
+tagesabschluss(): Bericht
}
class Bestand {
+menge(p: Produkt): int
+reduziere(p: Produkt, n: int)
+auffüllen(p: Produkt, n: int)
}
class Menü {
+produkte: List<Produkt>
+toppings: List<Topping>
+preiseFür(größe: Größe): Map<Produkt, Geldbetrag>
}
}
package "Bestellung" {
enum Bestellstatus { Offen; Bezahlt; Storniert }
enum Größe { Klein; Mittel; Groß }
class Bestellung {
#id: String
datumZeit: DateTime
status: Bestellstatus
summe(): Geldbetrag
+addPosition(p: Produkt, anzahl: int, gr: Größe)
+addTopping(pos: Bestellposition, t: Topping)
}
class Bestellposition {
anzahl: int
einzelpreis: Geldbetrag
gesamt(): Geldbetrag
}
}
package "Produktkatalog" {
class Produkt {
name: String
basispreis: Geldbetrag
verfügbar: boolean
}
class Topping {
name: String
preis: Geldbetrag
}
}
package "Zahlung" {
enum Zahlungsart { Bar; Karte; Mobil }
abstract class Zahlung {
betrag: Geldbetrag
zeitpunkt: DateTime
+ausführen(): boolean
}
class Barzahlung extends Zahlung {
gegeben: Geldbetrag
rückgeld(): Geldbetrag
}
class Kartenzahlung extends Zahlung {
kartentoken: String
authCode: String
}
class MobilesZahlen extends Zahlung {
provider: String
txId: String
}
class Quittung {
nummer: String
summe: Geldbetrag
art: Zahlungsart
zeitpunkt: DateTime
+alsPDF(): Binary
}
}
' -------- Beziehungen / Kardinalitäten --------
MobileEisverkaufsstelle "1" o-- "1" Kasse
MobileEisverkaufsstelle "1" o-- "1" Bestand
MobileEisverkaufsstelle "1" o-- "1" Menü
Eiskäufer "1" -- "0..*" Bestellung : erstellt >
Verkäufer "1" -- "0..*" Bestellung : bearbeitet >
Bestellung "1" *-- "1..*" Bestellposition
Bestellposition "1" --> "1" Produkt
Bestellposition "0..*" --> "0..*" Topping : optional
Bestellung "1" --> "0..1" Zahlung : bezahlt mit >
Bestellung "1" --> "0..1" Quittung : erzeugt >
Zahlung <|-- Barzahlung
Zahlung <|-- Kartenzahlung
Zahlung <|-- MobilesZahlen
Kasse "1" --> "0..*" Zahlung : verbucht >
Bestand "1" --> "0..*" Produkt : führt >
Menü "1" --> "0..*" Produkt : bietet an >
Menü "1" --> "0..*" Topping : bietet an >
' -------- Notizen / Designentscheidungen --------
note right of Bestellung
Preisbildung:
Summe = Σ(Positionspreis + Σ Toppings)
nach Größe (Klein/Mittel/Groß)
+ evtl. Rundung
end note
note bottom of Kartenzahlung
Keine Kartendaten speichern
(DSGVO-konform) – nur Token/AuthCode
end note
@enduml
Hinweise zur Nutzung
-
Rollen (Eiskäufer, Verkäufer) sind hier als Klassen/Actor-Klassen modelliert, damit Abläufe (Methoden) sichtbar werden.
-
Komposition (
*--) zwischenBestellungundBestellpositiondrückt aus, dass Positionen ohne Bestellung nicht existieren. -
Aggregation (
o--) verbindet die Verkaufsstelle mitKasse,Bestand,Menü. -
Du kannst das Diagramm bei Bedarf um Preisregeln, Rabatte oder Steuern erweitern (z. B. eine
Preisstrategie-Schnittstelle mit konkreten Implementierungen).PLantuml
Problem Enum

Q : Fix - dont use enum
A
Alles klar — hier ist die bereinigte PlantUML-Version ohne Enums. Ich habe die bisherigen Enums durch Klassen/Assoziationen ersetzt:
-
Bestellstatus → eigene Klasse
Status(mit Allowed-Values-Hinweis). -
Größe → eigene Klasse
Größe(mitpreisFaktor). -
Zahlungsart → keine Enum; stattdessen die bereits vorhandene Vererbungshierarchie von
Zahlung(Bar/Karte/Mobil). Methoden signieren jetzt mitZahlungstattZahlungsart.
@startuml
title Mobile Eisverkaufsstelle – Klassendiagramm (ohne Enums)
skinparam classAttributeIconSize 0
skinparam linetype ortho
package "Akteure" {
class Eiskäufer {
+bestelle(menu: Menü): Bestellung
+bezahle(b: Bestellung, z: Zahlung): Zahlung
}
class Verkäufer {
+nehmeBestellungAuf(k: Eiskäufer): Bestellung
+storniere(b: Bestellung)
+tagesabschluss(): Bericht
}
}
package "Verkaufssystem" {
class MobileEisverkaufsstelle {
+start()
+shutdown()
}
class Kasse {
isOffen: boolean
+öffnen()
+schließen()
+tagesabschluss(): Bericht
}
class Bestand {
+menge(p: Produkt): int
+reduziere(p: Produkt, n: int)
+auffüllen(p: Produkt, n: int)
}
class Menü {
+produkte: List<Produkt>
+toppings: List<Topping>
+preiseFür(größe: Größe): Map<Produkt, Geldbetrag>
}
}
package "Bestellung" {
class Bestellung {
#id: String
datumZeit: DateTime
statusWechseln(s: Status)
summe(): Geldbetrag
+addPosition(p: Produkt, anzahl: int, gr: Größe)
+addTopping(pos: Bestellposition, t: Topping)
}
class Bestellposition {
anzahl: int
einzelpreis: Geldbetrag
gesamt(): Geldbetrag
}
class Status {
name: String ' z.B. "Offen", "Bezahlt", "Storniert"
}
class Größe {
name: String ' z.B. "Klein", "Mittel", "Groß"
preisFaktor: decimal
}
}
package "Produktkatalog" {
class Produkt {
name: String
basispreis: Geldbetrag
verfügbar: boolean
}
class Topping {
name: String
preis: Geldbetrag
}
}
package "Zahlung" {
abstract class Zahlung {
betrag: Geldbetrag
zeitpunkt: DateTime
+ausführen(): boolean
}
class Barzahlung extends Zahlung {
gegeben: Geldbetrag
rückgeld(): Geldbetrag
}
class Kartenzahlung extends Zahlung {
kartentoken: String
authCode: String
}
class MobilesZahlen extends Zahlung {
provider: String
txId: String
}
class Quittung {
nummer: String
summe: Geldbetrag
zeitpunkt: DateTime
+alsPDF(): Binary
}
}
' -------- Beziehungen / Kardinalitäten --------
MobileEisverkaufsstelle "1" o-- "1" Kasse
MobileEisverkaufsstelle "1" o-- "1" Bestand
MobileEisverkaufsstelle "1" o-- "1" Menü
Eiskäufer "1" -- "0..*" Bestellung : erstellt >
Verkäufer "1" -- "0..*" Bestellung : bearbeitet >
Bestellung "1" *-- "1..*" Bestellposition
Bestellposition "1" --> "1" Produkt
Bestellposition "1" --> "1" Größe
Bestellung "1" --> "1" Status
Bestellung "1" --> "0..1" Zahlung : bezahlt mit >
Bestellung "1" --> "0..1" Quittung : erzeugt >
Zahlung <|-- Barzahlung
Zahlung <|-- Kartenzahlung
Zahlung <|-- MobilesZahlen
Kasse "1" --> "0..*" Zahlung : verbucht >
Bestand "1" --> "0..*" Produkt : führt >
Menü "1" --> "0..*" Produkt : bietet an >
Menü "1" --> "0..*" Topping : bietet an >
' -------- Notizen / Constraints --------
note right of Status
Erlaubte Werte (fachlich):
"Offen", "Bezahlt", "Storniert"
Übergänge:
Offen -> Bezahlt | Storniert
Bezahlt -> (final)
Storniert -> (final)
end note
note right of Größe
Beispiele:
Klein: 0.9
Mittel: 1.0
Groß: 1.2
Preis = basispreis * preisFaktor (+ Toppings)
end note
note bottom of Kartenzahlung
Keine Roh-Kartendaten speichern
(DSGVO-konform) – nur Token/AuthCode
end note
@enduml
Wenn du möchtest, kann ich die Status-Übergänge zusätzlich als Zustandsdiagramm liefern — ebenfalls ohne Enums.
KD Diagram
