# Kurze Meinung zu UML Modellierung



## TommyK. (25. Okt 2010)

Hallo!

Vorneweg: Das ist eine Hausaufgabe. Ihr sollt und dürft diese wahrscheinlich nicht für mich lösen, aber ich wäre für Tipps, die mich richtig leiten, sehr dankbar!

In unserer Aufgabe steht folgendes:


> Kunden und Entwickler sind Personen. Eine Person kann auch beides sein, ein Kunde und ein Entwickler.
> 
> Anmerkung: Wenn Sie die Beschreibung nicht wörtlich nehmen, dann gibt es eine elegantere Lösung als Vererbung



Das ganze gilt es nun in UML zu modellieren. An sich klingt das ja nicht schwer. Missachtet man die Anmerkung, könnte man einfach eine Klasse "Person" machen und die Klassen "Kunde" und "Entwickler" davon erben lassen. Allerdings kann dann eine Person nicht Entwickler UND Kunde gleichzeitig sein...

Wie wärs, wenn man ein Interface "Kunde" und ein Interface "Entwickler" macht, und eine Klasse "Person" beides implementiert? Doch dann wäre eine Person immer beides, oder?

Irgendwie ist mir nicht so ganz klar, worauf man hier hinaus will....kann mir jemand vielleicht Tipps geben, das wäre super klasse! 

Tommy


----------



## Gast2 (25. Okt 2010)

TommyK. hat gesagt.:


> Das ganze gilt es nun in UML zu modellieren. An sich klingt das ja nicht schwer. Missachtet man die Anmerkung, könnte man einfach eine Klasse "Person" machen und die Klassen "Kunde" und "Entwickler" davon erben lassen. Allerdings kann dann eine Person nicht Entwickler UND Kunde gleichzeitig sein...



Doch wenn Sie eine Beziehung (0...1) zueinander haben...


----------



## Volvagia (25. Okt 2010)

> Wie wärs, wenn man ein Interface "Kunde" und ein Interface "Entwickler" macht, und eine Klasse "Person" beides implementiert? Doch dann wäre eine Person immer beides, oder?


Und was wäre, wenn du die Klasse <<abstract>> machen würdest, und die Subklassen dann die Interface implementieren würdest?

Ansonst wäre die einzige Möglichkeit, die mir einfallen würde die Möglichkeit per boolean oder byte. Also in etwa so:






Wobei mein Wissen in UMLs leider sehr beschränkt und auf Google-Basis ist.


----------



## ARadauer (25. Okt 2010)

Wie wäre es wenn Person eine Liste mit Rollen hat. Und Kunden und Enwtickler sind Rollen...
Aggreation und Vererbung...


----------



## Gast2 (25. Okt 2010)

Volvagia hat gesagt.:


> Und was wäre, wenn du die Klasse <<abstract>> machen würdest, und die Subklassen dann die Interface implementieren würdest?
> 
> Ansonst wäre die einzige Möglichkeit, die mir einfallen würde die Möglichkeit per boolean oder byte. Also in etwa so:
> 
> ...



Davor eher ENUM verwenden...

Was spricht denn gegen Beziehungen????


----------



## TommyK (25. Okt 2010)

SirWayne hat gesagt.:


> Doch wenn Sie eine Beziehung (0...1) zueinander haben...



ich habe noch nie Kardinalitäten an einer Vererbung gesehen. Gibts das? Wenn ja, dann wäre das wohl eine Möglichkeit, auch wenn
ich nicht glaube, dass das die "elegante Lösung" ist.



			
				Volvagia hat gesagt.:
			
		

> Und was wäre, wenn du die Klasse <<abstract>> machen würdest, und die Subklassen dann die Interface implementieren würdest?



das verstehe ich leider nicht, kannst du das nochmal genauer erklären?



			
				ARadauer hat gesagt.:
			
		

> Wie wäre es wenn Person eine Liste mit Rollen hat. Und Kunden und Enwtickler sind Rollen...
> Aggreation und Vererbung...



hmm...kann ich mir auch nicht so recht vorstellen. Wären Kunde und Entwickler dann eine normale Klasse? Wie sähe das denn aus?



Mir fällt noch ein, dass man eventuell sowas wie das Decorator Muster machen könnte, was meint ihr? Vielleicht ist das auch so ähnlich, wie ARadauer meinte. Dass dann sozusagen die Rollen eine Person dekorieren..


----------



## Gast2 (25. Okt 2010)

Aggreation ist eine Beziehung von dem her meint er es wohl nicht viel anders als ich


----------



## Marcinek (25. Okt 2010)

Ardauer hat die korrekte Lösung gezeigt

Du hast die Klasse Person und Abstract Rolle.

Person 1:n Rolle

Von Rolle erben dann die Konkreten Rollen, wie Programmierer und was Gott was.


----------



## Volvagia (27. Okt 2010)

Wenn ich das richtig verstanden habe, sollte das Class-Diagramm dann so aussehen:





Was spricht dann gegen meine Booleans? So muss man, wenn man nach einer Rolle prüft, immer eine neue Instanz erzeugen, und in der Liste suchen.


----------



## TommyK. (30. Okt 2010)

genauso Volvagia. War auch die Lösung, die vorgestellt wurde.

Ich würde sagen gegen deine Booleans spricht, dass die einzelnen Rollen nicht gekapselt sind.
Möchtest du das Verhalten nur eines gewissen Personen-types ändern, müsst du immer in der 
Personenklasse selbst rumfummeln und machst dabei leichter Fehler.

Not sure though...

noch eine andere Frage, aber im gleichen Zusammenhang:

Kunden werden jetzt nochmal in Business und Privatkunden geteilt. Für Businesskunden soll es ein Bonusprogamm geben.
Außerdem werden Programme (das, was die Entwickler entwickeln und die Kunden kaufen) in Premiumprogramme und Spiele unterteilt.
Premiumprogs sind nur für Businesskunden zugänglich, Spiele nur für private.


Mir fällt hier nichts besseres ein, als einfach Business- und Privatkunden von Kunde erben zu lassen, und das gleiche mit Spielen und Premiumprogrammen von Programme. Mir ist aber nicht klar, wie ich dann beschränken kann, dass Premiumprogs nur für Business und Spiele nur für Privatkunden zugänglich sind. Es ist ja auch nicht gesagt, dass die beiden Aufteilungen jeweils total sind.


Irgendjemand 'ne Idee?


----------

