Aus java code ein uml diagramm erstellen

eicher

Mitglied
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:
Java:
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:

loesung.png


Kann mir wer sagen ob das soweit richtig ist?

Danke schonmal

eicher
 

Spin

Top Contributor
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 :
Java:
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

Mitglied
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:
loesung2.PNG


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

Top Contributor
Java:
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)

Java:
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.
 
Zuletzt bearbeitet:

csch

Mitglied
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:

attachment.php


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)
 

Anhänge

  • Hausaufgabe.png
    Hausaufgabe.png
    8,1 KB · Aufrufe: 118

csch

Mitglied
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

Mitglied
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

Top Contributor
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 ;-)
 

Neue Themen


Oben