UML


In der Regel 1.

Also EIN Auto hat VIER Reifen.

1 ----- 4


ja steht aber doch dann nur an einer seite der assozitionslinie.

Aber ok ich glaub wir haben uns missverstanden :wink:

Mir ist jetzt alles klar.


Naja am einen Ende steht die 1 am anderen Ende die 4, also schon an beiden Enden :wink:


Habs jetzt nochmal überarbeitet.

Ich hoff ich hab das jetzt richtig verstanden, was du gemeint hast.
Wär cool, wenn dus dir nochmal anschauen würdest.

Attachment:
umk.PNG: https://fsi.cs.fau.de/unb-attachments/post_104024/umk.PNG


Wieso heißen die Attribuite auf einmal eb und ea.
Die Attribute müssen an das andere Ende der Linie geschrieben werden.

Also ein Attribut a ist beispielsweise vom Typ B.
Dann zieht man eine Linie zu B und schreibt es an DIESES Ende, das an B angrenzt (weil die Variable ja vom Typ B ist und wir das zeigen wollen)

Und die Assoziation von -cb müsste nach B gehen und nicht nach D
(Zumindest war das in meinen vorherigen Posts so)
Edit: ah vorheriger Post war falsch, geht doch nach D :wink:


huch da hab ich wohl meine handschrift beim übertragen ins Diagramm nicht mehr lesen können. Sry.

Also muss ich jetzt einfach nur noch die Rollennamen an die andere Seite des striches schreiben oder muss ich auch die Striche in die andere richtung machen?

Die multiplizitäten sind so korrekt?


Ja ansonsten müssts glaub passen


ok danke du bist super!


Als ich das jetzt hier gelesen habe, ist mir einiges unklar geworden im Hinblick auf UML-Darstellung.
Meine Fragen:

  1. in der Aufgabenstellung steht ja “eine Unterscheidung in Aggragation und Komposition ist hingegen nicht erforderlich”.
    reicht es da nicht, einen Assoziationspfeil als Beziehung zu zeichnen?
  2. warum ist die Raute von Klasse C nach A an Klasse C? Meiner Meinung nach müsste die Assoziations-“Spitze” doch am Interface A sein, da ja in Klasse C steht “public A ca”?
    ach ich hänge einfach mal meine Version dran;)

Attachment:
Aufgabe7.png: https://fsi.cs.fau.de/unb-attachments/post_104150/Aufgabe7.png


  1. Ja in dem Fall ist es egal ob normale Assoziation oder Komposition oder Aggregation, man will halt irgendeine Linie sehen
  2. Die Raute ist nicht die Pfeilspitze. Eigentlich ist es der Ursprung.

Ein Gebäude HAT 1…* Räume, also malt man die Raute an Gebäude (im Code wär das ein Array vom Typ Raum in der Klasse Gebäude)
(Als Assoziation würde man es dann so zeichnen wie du)


danke, habs jetzt begriffen!


Warum ist die Methode public void ac ( ) { } auch in der Klasse D & Klasse C enthalten? Dachte nur überladene Methoden (also Methoden mit längerer Parameterliste/andere Datentypen der Parameter) werden mit aufgenommen? Demnach wäre dann in der Klasse C ja nur die Methode private boolean bb( String y ) {cb.ac ( ) ; return true ; } enthalten ,oder?


Ach und noch was: Hab ich das richtig verstanden, dass es für den Code nicht wichtig ist ob es sich um eine Aggregation oder um eine Komposition handelt? Also dass es nur wichtig ist, dass es sich um eine Assoziation handelt?! Danke schonmal :slight_smile:


Wenn im Code in der Klasse die Methode steht, dann schreibst du sie auch ins UML Diagramm. Wenn nicht - dann nicht. Dabei ist es egal ob überladen oder überschrieben.

Ob es für den Code etwas ändert ist eine andere Frage, in der Aufgabenstellung war jedoch vorgegeben, dass es hier egal ist was verwendet wird.


Alles klar danke :slight_smile: Und was würde es im Code ändern wenn ich Aggregation & Komposition hätte und berücksichtigen müsste? Also woran erkenne ich im Code dass es sich um eine Aggregation/Komposition handelt?


Fällt mir jetzt auf die Schnelle auch kein gutes Beispiel ein. Wäre wohl irgendwie sowas, dass man ein Objekt nur dann erzeugen kann, wenn ein anderes schon existiert, also nicht null ist.


Hi, kann mir jemand bei folgender Aufgabe helfen? (hab sie unten angehängt)

a) Geben Sie den Java-Code der Klassen EierLegend und Schaf aus dem obigen Klassendiagramm
an – etwaige Methodenrümpfe können Sie leer lassen, auch wenn dies zu
einem Compiler-Fehler führen würde. Beachten Sie die Sichtbarkeiten (# = protected)
und dass SCHWARZ sowie schlachten() final sind!

Ich hab da folgendes:

abstract class EierLegend implements Haustier{
            protected int eierSammeln();
}


class Schaf extends WolleGebend implements Schlachtvieh, MilchErzeugend{
             public static final int SCHWARZ =1;
             private static int anzahl=0;

             public float melken();
             public final void schlachten();
             protected static int zaehlen();
}

b) Warum kann es die Klasse EierlegendeWollMilchSau in Java nicht geben?

Da hab ich absolut keine Ahnung, folglich auch nicht bei der teilaufgabe c)

ich dachte zuerst weil die Attribute fehlen, aber naja :confused:

c) Beschreiben Sie kurz aber vollständig, welche minimalen Änderungen Sie an der obigen
Architektur vornehmen würden, damit die Klasse EierlegendeWollMilchSau in Java
doch implementiert werden kann, sie aber weiterhin eine Unterklasse von Sau bleibt.

d) Stellen Sie sich eine Klasse Bauer mit einer Methode alltag() vor. In dieser Methode
werden zunächst je zwei Instanzen der Klassen Huhn bzw. Schaf erstellt. Danach muss
der Bauer bei seinen Hühnern die eierSammeln(), das erste Schaf scheren() und das
zweite melken(). Schließlich erstellt er sich noch eine Instanz von Sau, die er gleich im
Anschluß schlachten() kann.
Mit welcher der Ihnen aus der Vorlesung bekannten Diagrammart würden Sie das obige
Szenario modellieren?

In einem Anwendungsfalldiagramm oder ?

Also ich würd mich freuen, wenn über teilaufgabe a) und d) mal jemand drüber schauen würd ob das richtig und bei b) und c) hab ich leider irgednwie absolut keine Ahnung. Würd mich über Tipps/Erklärung sehr freuen :slight_smile:

Attachment:
uml.PNG: https://fsi.cs.fau.de/unb-attachments/post_104231/uml.PNG


Wie steht denn die [m]EierlegendeWollMilchSau[/m] in der Klassenhierarchie? Welche Einschraenkung bezueglich Vererbung gibt es in Java?


Uh!

Doppeltvererbung geht nicht.
Jetzt hast du mich vom Schlauch geschoben.


Wenn Schaf von abstract WolleGebend erbt muss ich doch in Schaf noch die Methode protected double scheren(); implementieren oder?

Edit: erledigt die methode an sich is ja nicht abstrakt