UML-Darstellung gesucht

#1617818
Lesenswert?

Hallo zusammen,

wie kann ich folgenden Code in ein UML-Diagramm 'übersetzen'?
1
class A
2
{
3
   public:
4
      A(Class1* class1) { m_pClass1 = class1; m_pClass2 = NULL; m_bA = true; }
5
      A(Class2* class2) { m_pClass1 = NULL; m_pClass2 = class2; m_bA = false; }
6

7
   private:
8
      Class1* m_pClass1;
9
      Class2* m_pClass2;
10
      bool m_bA;
11
};

Bei nur einem Konstruktor ist das ja eine ganz normale Aggregation. Aber 
jetzt habe ich entweder ein Class1 oder Class2 Objekt, das andere ist 
NULL. Wie stelle ich das in einem UML-Klassendiagram dar?

Danke vorab für jede Antwort und viele Grüße
#1619038
Lesenswert?

Übrigens brennt mir auch immer folgender Tip auf der Seele: "Möglichst 
selten eine Aggregation benutzen". Eine Aggregation hat nämlich keinen 
wirklichen semantischen Unterschied (den man in der Implementierung 
sieht)  zur Assoziation, und die Leute können dann eine Stunde lang 
diskutieren, ob das wirklich eine Aggregation ist. Meine Modelle kommen 
alle ohne Aggregation aus. Entweder Komposition oder Assoziation, das 
genügt mir.
#1619057
Lesenswert?

Claudio H. schrieb:
> Normalerweise braucht man so etwas aber nicht, wenn du willst und
> darfst, dann kannst du ja mal die ganze Fachlichkeit hier bereitstellen,
> vielleicht fällt dann jemand eine andere Lösung ein.
Ich könnte das Ganze auch anders lösen, aber dann habe ich noch eine 
Klasse mehr.
Sähe dann so aus, dass Class1 und Class2 von einer gemeinsamen 
Basisklasse erben (Class12) und Klasse A nur noch einen Pointer auf 
Class12 hat...
Aber einen wirklichen Vorteil kann ich darin jetzt auch nicht erkennen. 
Deswegen eben die Frage wie ich das 'entweder oder' in UML darstellen 
kann.

Claudio H. schrieb:
> Eine Aggregation hat nämlich keinen
> wirklichen semantischen Unterschied zu Assoziation, und die Leute können
> dann eine Stunde lang diskutieren, ob das wirklich eine Aggregation ist.
Bisher ist diese Diskussion nicht aufgekommen. Und wenn doch kann man 
sich immer noch über die Darstellung unterhalten. Glaube auch nicht, 
dass so viele Leute den Unterschied tatsächlich bemerken...

Danke nochmal und viele Grüße
#1619542
Lesenswert?

>Aber einen wirklichen Vorteil kann ich darin jetzt auch nicht erkennen.

Der wird dann erkennbar, wenn du zu Class1 und Class2 noch Class3 
hinzufügst. Dann musst du in deinem Fall nämlich auch A ändern, im 
anderen Fall nicht. Und bei jedem Zugriff bei dir muss geprüft werden, 
ob auf Class1 oder Class2 zugegriffen werden soll.

Ich würde den Code von Anfang an auf Erweiterbarkeit auslegen, das 
macht sich meistens im Nachhinein bezahlt. Aber es funktionieren 
natürlich beide Ansätze...
Persönliche Seite #1619817
Lesenswert?

Ich muss da Claudio zustimmen.

So "geht" es auch ist aber hochgradig umständlich. Gibt es Geld für 
eingesparte Klassen/Interfaces? Wenn du eine abstrakte Basisklasse nutzt 
kannst du sogar Funktionalität welche sich Klasse 1+2 teilen auslagern 
und hast hier jedenfalls pflegbaren Code! Später wirst du dich sonst nur 
immer mehr in Fallunterscheidungen und Spezialfällen in Klasse A 
verheddern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren