Java UML: Unterschied Methode u. Konstruktor

palaber

Captain
Registriert
Juni 2006
Beiträge
3.856
Hallo zusammen,

ich hab da mal wieder ne Frage, oder besser gleich mehrere.
Ich hab zwar schon nen bissel gegoogelt, bin mir aber nicht sicher ob ich so alles richtig verstanden haben.

Ich hab folgende Klasse:

Person {abstract}
------------------------
- name: String
------------------------
- Tier()
+ Tier (String)
+getName(): String
-setName(String)


1.) Woran erkenne ich das sich in einem UML Diagramm um einen Konstruktor handelt?
Ist " - Tier()" der Konstruktor? Eigentlich müsste der Konstruktor doch +Person() heißen, oder? Der wäre ja dann doch private, oder? Gibts überhaupt private Konstruktoren?

2.) ist +Tier(String) dann eine Methode? Oder auch nen Konstruktor?
setName is ja eine Methode, dann sollte +Tier(String) ja auch eine sein. Oder?

Blick da nicht so ganz duch, hoffe ihr könnt mir da etwas helfen!
Vielen Dank schon mal! Gruß palaber
 
Zuletzt bearbeitet:
naja wenn die klasse person is kann ned Tier() der Konstruktor sein...
post mal das diagramm

edit: es kann natürlich private konstruktoren geben...schau dir mal das singleton pattern an ;)
 
I.d.R. wird der Konstruktor in UML nicht modelliert, da ein Konstruktor ein programmiersprachenabhäniges Konstrukt ist, die UML jedoch nicht...

Das + und - beschreibt die Sichtbarkeit von Attributen bzw. Methoden: + steht für public, - für private

Poste mal das ganze Diagramm, ich hab so den Eindruck, als wäre Dir nicht wirklich klar, was UML eigentlich ist...

Edit: in Deinem (recht dünnen) Beispiel gibt es nur ein Attribut, nämlich name... Die anderen "Dinger" sind Methoden...
 
Ein Konstruktor lautet immer genau so wie die Klasse selbst.
Also Klasse XY hat Kontruktor XY.

-Tier() ist eine private Methode, ohne Parameter, sonst nichts.
Gleiches gilt für die anderen Methoden mit oder ohne Parameter.

Der Konstruktor deiner Klasse muss "Person()" oder "Person(x, y)" lauten.
x,y stehen für Parameter.

Hoffe das hilft.

@muesler: Konstrukoren bis auf den Default-Konstruktor (der ohne Parameter) werden sehr wohl notiert.
Den Standardkonstruktor kann man aus Faulheit weglassen.
 
Zuletzt bearbeitet:
@NuminousDestiny: Dein Erklärung des Konstruktors passt für C++, C# und Java; aber das hat mit einem UML Diagramm zunächst nix zu tun, sondern erst mit der Implementierung.
In der Praxis lässt man Konstruktoren i.d.R. immer weg, da dies (wie bereits erwähnt) ein Implementierungsdetail darstellt, das im OOD noch nicht zum tragen kommt...
 
Zuletzt bearbeitet:
Sehr wohl können Konstruktoren im OOD zu tragen kommen, wüsste nicht wieso das irrelevant sein sollte. Gerade weil das UML-Diagramm die Beziehung untereinander beschreibt und Konstuktoren evtl. andere Klassen übergeben bekommen müssen.
Standardkonstruktoren weglassen ja, aber i.d.R. werden die anderen hingeschrieben.
Und da hauptsächlich mittlerweile das Meiste in Java, C++, C oder C# gecodet wird sollte man sich auch danach richten...

Wenn man die anderen Konstruktoren weglässt, hat das meines erachtens höchstens etwas mit Schlampigkeit zu tun.
 
Das mit dem Konstruktor is mir auch noch eingefallen, hab das dann noch schnell geändert, da habt ihr das dann aber wohl schon gelesen.

Hier mal das gesamte Bsp.:

Is ne Prüfungsaufgabe, aus der wir nen Programm erstellen sollen, daher nicht sehr umfangreich.

also wäre -Tier() eine private Methode:
private void Tier(){
}

und + Tier(String) dann
public void Tier (String a){
}

Wenn generell keine Konstruktoren im UML Diagramm aufgeführt werden, dann sollte ich aber trotzdem ins
Programm eins implementieren, nich wahr?

Das ich von uml gar keine Ahnung hab würde ich jetzt nicht sagen, aber eben noch nicht so gefestigte.
Aber ich denke aus diesem Grund gibt es Foren, um nachzufragen und nicht um gesagt zu kriegen das man was nicht rafft. Würde ich es verstehen, würde ich nicht fragen ;)
 
Die Standardkonstruktoren musst du falls du darin nichts spezielles vorhast nicht implementieren, die legt der Compiler normalerweise automatisch an.

Zumindest in Java, C++, C#..
 
das ist auch kein standardkonstruktor...
standardkonstruktoren sind welche ohne argumente
falls keiner vorhanden wird einer hinzugefügt, der dann für dein bsp wie folgt aussehen würde:

public Person(){
}
 
Zuletzt bearbeitet:
Vielleicht als Randnotiz.

private Konstruktoren kommen vor zum Beispiel beim Singelton pattern.
 
das ding kommt bestimmt aus einem Beispiel und da hat jemand vergessen den Tier Konstruktor in Person umzubenennen ;-) denn würde das gesamte Beispiel auch Sinn ergeben..
 
Zurück
Oben