UML-Darstellung gesucht

OP #1617818
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
Ü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.
OP
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
>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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.