# Aus java code ein uml diagramm erstellen



## eicher (15. Mai 2011)

Hallo,

Ich bin seit heute neu in diesem Forum, weil ich denke das ihr mir vielleicht bei manch einem Problem helfen könntet oder gute Tipps geben könnt.
Auch hoffe ich, das ich in der richtigen Unterkategorie gelandet  bin um meine Lösungen für unsere Hausaufgaben von euch überprüfen zu lassen ob sie soweit richtig sind .

Also die Aufgabe war es ein UML-Diagramm aus einem java-code zu entwickeln. Ist an sich glaube ich nicht so schwierig, der code ist:

```
abstract class A {

    public int x;

    private static double y;

    protected abstract void opA();

}

class B extends A {

    private int[] z;

    private C[] c;

    protected void opA() { ... }

    private void opB() { ... }

}

class C {

    private B b;

    public static int opC1 (int i); { ... }

    private void opC3() { ... }

}
```

Und meine bisherige Lösung sieht wie folgt aus:







Kann mir wer sagen ob das soweit richtig ist?

Danke schonmal

eicher


----------



## Spin (15. Mai 2011)

Hallo eicher,

du hast noch paar Fehler drin, aber ich schätze das du die schnell korrigiert bekommst.

Erstmal hast du eine sogennante Generalisierung  Veerbung nennt sich das in Java.
Da die Klasse B von A erbt muss dass auch im UML gekennzeichnet werden. Da zu nimmst du das Werkzeug Generalisierung und machst den Pfeil von B nach A. So dass die Pfeilspitze an A ist.

Weiter stelle in deiner Klasse C die Methode richtig da :

```
opC1(i : int) : int
```

In der Klasse B fehlt beim Attribut C das [].
Weiter nimm die Beziehung zwischen C und A weg, denn die ist falsch. Die muss ziwschen C und B und and an beiden Enden eine 1.

grüße Spin


----------



## eicher (16. Mai 2011)

Danke für die Antwort Spin und die ganzen Tipps .
Ich habe es nun nach deinen Tipps mal verbessert und hoffe es ist soweit nun richtig, das einzige was ich mit dem UML-Editor nicht hinbekommen habe, sind die Klammern [] bei dem C Attribut in der Klasse B.

Hier nun, hoffentlich, die richtige Lösung:





Ich frage mich aber im Moment warum es nur eine Beziehung zwischen B und C gibt mit der Wertigkeit 1 und 1 auf beiden Seiten? Und nicht noch eine Beziehung zu A? 

Grüße


----------



## Andi_CH (16. Mai 2011)

```
class B extends A {
...
    private C[] c;
... 
}
```

Da steht dass die Klasse B eine nicht näher bekannte Anzahl (Array!) Objekte der Klasse C verwendet. Wenn B existiert, sind vorerst 0 Objekte der Klasse B vorhanden
Also 0..n

In die andere Richtung: Nirgendwo steht geschrieben, dass ein bestimmtest Objekt der Klasse C nur von einem Objekt der Klasse B referenziert werden darf und es steht auch nicht dass es von einem Objekt der Klasse B referenziert werden muss. Also auch 0..n

Es gibt also eine gerichtete Assoziation von B nach C (Pfeil bei C) mit 0..n in beiden Richtungen
Es ist eine using-Assoziaton mit einem nicht ausgefüllten Kreis bei Klasse B
Ein Assoziation von B zu A gibt es nicht - nur die Vererbung. (Es gibt keie Variable vom Typ A in B)


```
class C {
...
    private B b;
... 
}
```

Hier wird direkt ein Objekt der Klasse B erzeugt. Das Objekt existiert sobald C existiert.

Es gibt also eine gerichtete Assosiation von C nach B (Pfeil bei B)
C hat genau ein Objekt der Klasse B und dieses gehört zu genau einem Objekt der Klasse C
-> Also eine 1-1 Beziehung

Das Objekt B gehört zu B das ist eine has Beziehung und das wird mit einem ausgefüllten Kreis bei C dargestellt.


----------



## csch (16. Mai 2011)

Hi,

ich würde noch die Referenz von C auf B als Beziehung darstellen. Man kann zwar nicht sagen, dass es so falsch wäre, aber imo sollte das Diagramm so aussehen:






Man könnte außerdem noch die beiden Beziehungen zu einer (dann ohne Pfeile) zusammenfassen. Aber das lässt sich aus dem Code nicht ablesen (könnte aber so gemeint sein).

Das Diagramm habe ich übrigens größtenteils automatisch erstellt - "Reverse Engineering" mit UML Lab.

Gruß,
Christian (Yatta Solutions)


----------



## Andi_CH (16. Mai 2011)

Falsch! Die Beziehung B ist eine 1-1 Beziehung aber das habe ich ja alles beschrieben.


----------



## csch (16. Mai 2011)

Naja, wenn C erzeugt wird ist b erstmal null. Die Aussage "Hier wird direkt ein Objekt der Klasse B erzeugt." stimmt also nicht. Also kann C auch mal kein B als Nachbar haben - probier's aus


----------



## eicher (16. Mai 2011)

Danke für die Antworten, ich glaub ich hab es jetzt soweit verstanden 

Aber würde mich jetzt auch noch interessieren wie die Beziehung zwischen B und C jetzt aussieht? Nachdem was ihr da schreibt ist das anscheinend nicht so klar :bahnhof:


----------



## Andi_CH (17. Mai 2011)

csch hat gesagt.:


> Naja, wenn C erzeugt wird ist b erstmal null. Die Aussage "Hier wird direkt ein Objekt der Klasse B erzeugt." stimmt also nicht. Also kann C auch mal kein B als Nachbar haben - probier's aus



Stimmt - es ist unklar ob das im Konstruktor mit new zugewiesen wird, wie ich fälschlicherweise angenommen habe, oder ob eine Referenz gesetzt wird und dann stimmt deine Version natürlich auch in der anderen Richtung.  - mea culpa ;-)


----------



## eicher (17. Mai 2011)

Ich glaub ich hab es jetzt auf jedenfall verstanden, ich danke euch


----------

