www.mikrocontroller.net

Forum: PC-Programmierung UML-Darstellung gesucht


Autor: Michael K. (ampfing)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

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

   private:
      Class1* m_pClass1;
      Class2* m_pClass2;
      bool m_bA;
};

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

Autor: Claudio H. (bastelfinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
über ein XOR-Constraint

Autor: Michael K. (ampfing)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Claudio,

danke für den Begriff - kaum weiß man nach was man suchen soll schon 
findet man es auch :-)

Viele Grüße

Autor: Claudio H. (bastelfinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte. 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.

Autor: Claudio H. (bastelfinger)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael K. (ampfing)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Claudio H. (bastelfinger)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael K. (ampfing)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na gut, Ihr habt mich 'überzeugt'. Ich stimme Euch zu, dass es auf lange 
Sicht wohl günstiger ist das doch über eine Basisklasse zu handeln.

Danke fürs Augen öffnen und viele Grüße

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.