[UML] Klassen als Attribute = Assoziationen?

pzypher

Aktives Mitglied
Hallo,

ich habe ein Skript vor mir und hab eine Frage dazu:

Einmal heißt es:

Attribute sind nie Zeiger/Referenzen auf andere
Objekte (dafür gibt es Assoziationen).

einandermal:

wird behauptet, A und B im folgenden Bild wären gleichwertig. Dass sie gleichwertig sind will ich nicht bestreiten, aber ist dann nicht Ersteres ein bisschen widersprüchlich?

8ajufmmxchz.png


Gruß
 

spindler

Mitglied
Assoziationen bilden in der objektorientierten Softwareentwicklung einen wichtigen Bestandteil.
Mehrere Objekte tauschen Nachrichten aus, damit müssen sich diese Objekte "kennen". Dieses "Kennen" nennt man Assoziation.

Dein Schaubild zeigt meiner Ansicht nach dasselbe Verhalten: Im ersten Schaubild ist die Assoziation über einen Pfeil kenntlich gemacht.
Im zweiten Schaubild wird die Assoziation über ein Attribut ausgedrückt. (-vorlesung). Attribute sind in Java auch keine Zeiger, sondern können Referenzen sein.
 
T

TryToHelp

Gast
Ja beide Schaubilder bedeuten das selbe, jedoch würde ich eher Representation A wählen, da es dort finde ich klarer und übersichtlicher ist.
 
N

nillehammer

Gast
Die Schaubilder drücken zwar dieselbe Assoziation aus. Allerdings enthält Schaubild B ein für das Abstraktionsniveau des UML-Klassendiagramss unzulässiges Implementierungsdetail. Nämlich, dass die Assoziation über ein Attribut von Student abgebildet wird. Zwar hat man das als Java-Entwickler sofort im Kopf (inkl. der getter/setter für die Zugriffe), aber in UML-Klassendiagrammen hat das nix zu suchen. Deswegen würde ich in einer Klausur für Abbildung B Punktabzug geben.
 
T

TryToHelp

Gast
Das Stimmt, schließlich könnte ich auch bei Vorlesung eine Liste mit Studenten haben, die ebenso die Assoziation auflöst ;-)
Wie gesagt, ich würde auch auf jedenfall zu A tendieren. Aber wie gesagt, bei beiden wird gezeigt, das Student in verbindung mit Vorlesung steht.
 
T

Tomate_Salat

Gast
Ich würde a) nehmen. Das ist imho auch Aussagekräftiger.

Beispiel b) könnte zu Verwechslungen führen. Ab und an findet man Java-Klassen die so benannt sind, wie bereits bestehende. Hier könnte es theoretisch sein, dass eben eine Vorlesungsklasse aus einem andere Package (und eben nicht die, die rechts daneben gezeichnet ist) verwendet werden soll.
 
N

nillehammer

Gast
Nein, auch wenn String eine Klasse ist, würde ich es als so "primitiven" Datentypen ansehen, dass er ein Attribut ist und keine Assoziation. Zumal ja auch String nicht Bestandteil der Fachdomäne "Studentenverwaltung" ist.
 
T

TryToHelp

Gast
In dem UML Diagramm bzw in Klassendiagrammen, stellt man ja die fachlichkeit, also die Fachlichen Klassen dar, mit ihren Atributen und ihren Beziehungen, aber ein Student steht in keiner Beziehung zu einem String (wenn dann sind das die Studentinnen und das tut hier nichts zur Sache :-D )
 
T

Tomate_Salat

Gast
Ich bin kein UML-Experte (und nutze es eigentl. auch nie - auch wenn ichs praktisch finde). Aber wenn ich das als Planung nehme, würde ich bestehende Klassen (mit vollqualifiziertem Namen) als Attribute nehmen und eigene (neue) Klassen als Assoziation/Komposition/Aggregation darstellen.
 
M

maki

Gast
Muss dann name:String nicht ebenfalls als Assoziation gezeichnet werden?
Kommt immer darauf an, was man mit dem Diagramm ausdrücken möchte, wenn es nur um die Problem Domäne geht, dann wohl nicht.

Das gilt übrigens für alle UML Diagramme IMHO, es kommt immer darauf an was man zeigen will, das was nicht so relevant ist um einen Sachverhalt zu verdeutlichen, lässt man weg.

IME ist weniger mehr, die klassische DIN A0 Tapete wo alles drauf ist taugt doch nur dazu, um Kunden zu verwirren, genauso sinnvoll wie den ganzen Quelltext auszudrucken.
 

X5-599

Top Contributor
Ich würde auch zu A tendieren. "Student kennt Vorlesung". Frage in den Raum:

Dürfte man das auch so darstellen, wenn es später in der Implementierung kein Attribut vom Typ Vorlesung in der Klasse Student gibt? Also wenn z.B. die Klasse Student nur ein Vorlesungsobjekt in einer Methode benutzt?

Java:
class Student
{
    public void setVorlesungBesucht()
    {
        Vorlesung vorlesung = getVorlesungVonIrgendwo();
        vorlesung.setBesucht(true);
    }
}

Oder würde man so eine Verbindung aus einem UML Diagramm gänzlich rauslassen?
 
T

TryToHelp

Gast
Also ich bin der Meinung, das der Student, nicht unbedingt ein Vorlesungsobjekt braucht um die beziehung zu haben, sondern die Vorlesung kann auch eine Liste an Studenten haben, oder täusche ich mich da jetzt?
Das würde dann ja deine Variante machen
 

X5-599

Top Contributor
Ich wollte damit eigentlich mehr fragen, ob überhaupt ein Attribut in einer Klasse existieren muss um (in UML) von einer Beziehung sprechen zu können. In meinem Beispiel hätte keine der beiden Klassen ein Attribut der jeweils anderen. Sie hätten nur in Methoden miteinander zu tun, wenn die Instanzen (die von sonstwoher stammen) bearbeitet werden.
 
M

maki

Gast
Ich wollte damit eigentlich mehr fragen, ob überhaupt ein Attribut in einer Klasse existieren muss um (in UML) von einer Beziehung sprechen zu können. In meinem Beispiel hätte keine der beiden Klassen ein Attribut der jeweils anderen. Sie hätten nur in Methoden miteinander zu tun, wenn die Instanzen (die von sonstwoher stammen) bearbeitet werden.
Nein, für eine Assoziation muss man keine Membervariablen mit Typ der anderen Klasse haben.

Aber wie gesagt, es gibt nicht "den Standard" was UML Diagramme alles zeigen müssen, nur die Elemente der UML selber sind definiert.
Was man im Diagramm zeigt, kommt immer darauf an was man mit dem Diagramm zeigen will ;)

Es ist zB. eher selten so, dass man Assoziationen zu den JDK Klassen darstellt (String, HashMap, etc. pp.), weil man meist etwas aus der Fachdomäne zeigen will.

Die Frage wie die Assoziation zwischen Student und Vorlesung modelliert wird ist eine Designfrage, da gibt es mehrere Alternativen, unidirektionale 1:n (zB. Student -> Vorlesungen), n:1 (Student <- Vorlesungen), bidirektionale n:n (Student <-> Vorlesungen) usw. usf.
Das Design sollte sich stark am Verwendungszweck orientieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K auf Attribute aus anderen Klassen zugreifen*help* Softwareentwicklung 3
J IntelliJ - Debugging funktioniert nur in manchen Klassen Softwareentwicklung 1
S Darstellung "globaler" Klassen/Libraries im Klassendiagramm Softwareentwicklung 3
T Wie die Multiplizität zweier bidirektionaler Klassen umsetzen? Softwareentwicklung 4
N UML Komponenten als Java-Klassen abbilden Softwareentwicklung 4
MiMa Organisation von Klassen Softwareentwicklung 5
C innere klassen auslagern Softwareentwicklung 12
S Design Pattern für zwei abhängige Klassen Softwareentwicklung 8
E Von Use-Case nach Klassen Diagramm Softwareentwicklung 3
F Control und Interface Klassen Softwareentwicklung 7
D Java in KLassen, schon vorhanden? Softwareentwicklung 3
G Klassen trennen zur verbesserung der Übersicht? Softwareentwicklung 9
W Frage zu a)Innere Klassen und b)OO Design Softwareentwicklung 13
S Dynamisches Einbinden von Klassen Softwareentwicklung 3
W Statische Klassen oder neue Instanz einer Klasse nutzen? Softwareentwicklung 11
A Iterato-Pattern und Innere Klassen Softwareentwicklung 9
V 2 Klassen arbeiten am selben Objekt? Softwareentwicklung 2
V alle abgeleiten Klassen eines Interfaces finden? Softwareentwicklung 2
H aus allgemeinem array auf methoden abgeleiteter klassen zugr Softwareentwicklung 5
S Wieviele Klassen sind sinnvoll? Softwareentwicklung 3
P Projekt und Klassen Verwaltung (Wiederverwendung) Softwareentwicklung 4
L Aufgabenverteilung in zwei Klassen? Softwareentwicklung 6
L Frage zu Beziehungen zwischen Klassen und UML Softwareentwicklung 10
R klassen vererbung Softwareentwicklung 3
N Graphenalgorithmen: Best Practice für Knoten-/Kanten-Attribute Softwareentwicklung 5
H UML Instanzen von Assoziationen Softwareentwicklung 4

Ähnliche Java Themen


Oben