PDA

View Full Version : [Frage] übung 4, aufgabe 1


downforme
15-12-2003, 23:11
hi! hab schon mal mit dem ertsten bsp angefangen. weiß aber nicht so recht, ob das schon so reicht, oder ob da noch mehr dazugehört, speziell im src.

Neo
16-12-2003, 15:21
Musst du da nicht gerichtete Assoziationen zeichnen (Navigation), also Pfeile einzeichnen?

downforme
16-12-2003, 15:31
Musst du da nicht gerichtete Assoziationen zeichnen (Navigation), also Pfeile einzeichnen?die leserichtung gebe ich mit den kleinen schwarzen pfeilspitzen beim assozationsname an.

sorry, die kleinen schwarzen geben 'nur' die leserichtung an, navigierbarkeit hinzugefügt

Frule
16-12-2003, 18:20
die leserichtung gebe ich mit den kleinen schwarzen pfeilspitzen beim assozationsname an.

sorry, die kleinen schwarzen geben 'nur' die leserichtung an, navigierbarkeit hinzugefügt

Es ist nicht ganz richtig glaube ich. In der Angabe steht dass folgende Zugriffe erforderlich sind:

Fluglinie --> Heimatflughafen
Flughafen --> Startende Flüge
Flughafen --> Landende Flüge
Flug --> Start-Flughafen
Flug --> Land-Flughafen
Fluglinie --> Flüge
Flug --> Fluglinie

Also, für jede Zeile sollte man einen Pfeil im Diagramm modellieren. Einige hast du nicht... Und ja, Flughafen --> Fluglinie brauchst du nicht.

<edit>Laut Angabe, muss man nur Attribute in Java abbilden, also sind die "set" und "get" Methoden in deinem Javacode überflüssig. Ausserdem muss man auch diese Assoziationen irgendwie in Java abbilden... so wie du es gemacht hast, ist keine Klasse mit einer anderen verbunden.

Die Klasse Fluglinie sieht bei mir so aus:

class Fluglinie {

String kurzel;
String bezeichnung;
Vector HeimatFlughafen = new Vector();
Vector Flug = new Vector();

}


Die Vektoren HeimatFlughafen und Flug sind die realisation dieser zwei Assoziationen, die die Klasse Fluglinie hat.
</edit>

Joni
16-12-2003, 22:50
also ich denk downforme das schon richtig, weil es wird ja gefordert, dass (1) Attribute typisiert, (2) Assoziationen gerichet, (3) Rollennamen
das hat er ja erfüllt, man muss das diagramm einfach nur erweitern oder?

den quellcode hab ich mir so überlegt, ich denk dadurch werden die assoziationen recht gut ausgedrückt:

public class Flughafen {
private String kuerzel;
private String bezeichung;
private String ort;
private String land;

public Fluglinie linien[k];
public Flug startFluege[k];
public Flug landeFluege[k];
}
public class Fluglinie {
private String kuerzel;
private String bezeichnung;

public Flughafen home;
public Flug fluege[k];
}

public class Flug {
private long flugnr;

public Fluglinie home;
public Flughafen landen;
public Flughafen starten;
}

is das ok so oder ein schwachsinn?

Frule
16-12-2003, 23:29
also ich denk downforme das schon richtig, weil es wird ja gefordert, dass (1) Attribute typisiert, (2) Assoziationen gerichet, (3) Rollennamen
das hat er ja erfüllt, man muss das diagramm einfach nur erweitern oder?


Aha. Es steht aber in der Angabe ziemlich explizit, welche Assoziationen in welchen Richtungen navigierbar sein sollten. In downforme's Diagramm ist nicht alles so modelliert.


den quellcode hab ich mir so überlegt, ich denk dadurch werden die assoziationen recht gut ausgedrückt:

public class Flughafen {
private String kuerzel;
private String bezeichung;
private String ort;
private String land;

public Fluglinie linien[k];
public Flug startFluege[k];
public Flug landeFluege[k];
}
public class Fluglinie {
private String kuerzel;
private String bezeichnung;

public Flughafen home;
public Flug fluege[k];
}

public class Flug {
private long flugnr;

public Fluglinie home;
public Flughafen landen;
public Flughafen starten;
}

is das ok so oder ein schwachsinn?

Was ist dein k? Im Diagramm sind keine festen Obergrenzen angegeben, also kannst du keine Arrays verwenden. Sonst passt alles glaube ich.

Joni
17-12-2003, 13:32
naja in den vorlesungsvolien steht, dass bei solchen klassendiagrammen eine feste obergrenze (also nicht theoretisch unendlich) benötigt wird, oder läuft das ganze dynamisch ab?

supporter
17-12-2003, 22:55
Besteht zw. Fluglinie und Flughafen nicht eine unidirektionale Assozation, nämlich von Flugline zu Flughafe? In Sepzifikation steht doch nur "aussgehend von einer Fluglinie auf ihre Heimat-Flughaefen" und nicht andersrum.

Sollte man statt den Arrays nicht besser Vectors verwenden, da keine festen Grenzen im Diagramm angegeben sind?

Da Charli
18-12-2003, 00:01
ich hab die assoziationen auch so wie frule;
hier mein vorschlag;



4.1.)



class Fluglinie {
private String kuerzel;
private String bezeichnung;
private flughafen heimatfh;
private Flug flg = new Flug;
private int nflg =0;}





class Flughafen{
private String kuerzel;
private String bezeichnung;
private String ort;
private String land;
private Flug startfl = new Flug;
private int nstartfl = 0;
private Flug zielfl = new Flug;
private int nzielfl = 0;
private Fluglinie flinie = new Flug;
private int nflinie = 0;}


class Flug{
private String flugnr;
private Fluglinie flinie;
private Flughafen startfh;
private Flughafen zielfh;}

Eristoff
18-12-2003, 01:18
@Da Charli:

ich würde es auch so machen, aber müssten dann nicht die ganzen neuen Klassenvariablen auch im Klassendiagramm in der Angabe stehen???

Da Charli
18-12-2003, 01:27
ja, das sind die endbezeichnungen im neuen diagramm

wescht
18-12-2003, 13:43
Besteht zw. Fluglinie und Flughafen nicht eine unidirektionale Assozation, nämlich von Flugline zu Flughafe? In Sepzifikation steht doch nur "aussgehend von einer Fluglinie auf ihre Heimat-Flughaefen" und nicht andersrum.

Sollte man statt den Arrays nicht besser Vectors verwenden, da keine festen Grenzen im Diagramm angegeben sind?
der vector waer schon besser geeignet, aber er kann alles beinhalten (auch gemischt); d.h. du kannst ihn nicht auf auf fluege beschraenken. in der praxis ist er sicher besser, zum modellieren aber nicht.

statt:
public Fluglinie linien[k]
public Vector linien = new Vector
keine rede davon, dass der fluglinien beinhaltet ...

djmaecki
18-12-2003, 18:27
Achtung liebe Leute! Eine Fluglinie hat 1..* Flughäfen. Siehe auch Angabe: "[...] erfordert folgende Zugriffe: ausgehend von einer Fluglinie auf ihre Heimat-Flughäfen, [...]".

Und zu den arrays: wieso modelliert ihr nicht einfach private container members, die dann die jeweiligen Objekttypen enthalten, zugreifen kann man ja sowieso nur über get/set methoden, die dann nur die entsprechenden Typen zulassen.

Seppi
18-12-2003, 20:02
also ich glaube man soll nicht nur den Ausschnitt machen sondern den ganzen Zettel von den Fluglinien...

buechsengustel
18-12-2003, 21:58
also ich glaube man soll nicht nur den Ausschnitt machen sondern den ganzen Zettel von den Fluglinien...

nein, da bin ich mir ziemlich sicher:
(1) steht da gleich in der ersten zeile der angabe: "gegeben ist der in abbildung 1 dargestellte ausschnitt aus dem fluglinien-beispiel" und dann unten "gesucht ist blabla...". das fass ich schon so auf, dass ich nur den ausschnitt betrachten soll.
(2) in dem teil über die nötigen zugriffe ist auch nur von den klassen in diesem ausschnitt die rede. nix von bodenpersonal oder sitzen oder so.
(3) ist in der zweiten aufgabe ein anderer teil des klassendiagramms gegeben, in dem die navigierbarkeiten schon angegeben sind. das wär dann ja ein teil der lösung für aufgabe 1. glaub nicht, dass die sowas machen.

aber: so gaaanz eindeutig ist die formulierung wirklich nicht, weshalb ich diese überlegungen auch angstellt hab, weils mir auch nicht klar war.

buechsengustel
18-12-2003, 22:03
private Flughafen zielfh;}

in der angabe steht doch "methoden und sichtbarkeiten brauchen sie nicht zu berücksichtigen". das heißt doch ich kümmere mich nicht um private, protected oder public, warum macht ihr's alle trotzdem?

Da Charli
18-12-2003, 22:21
nur so, daß syntax richtig ist. beachte es einfach nicht!

Seppi
18-12-2003, 22:38
also ich hab das Klassendiagramm etwas anders weil in derANgabe steht wie weiter oben schon erwähnt:
... ausgehend von einer Fluglinie auf ihre Heimat-Flughäfen, ausgehend von einem Flughafen auf die startenden, ....


noch was ist mir eingefallen:
Kann man Rollennamen frei erfrinden od stehen die implizit irgendwo in der Angabe? Wenn man welche verwendet müßte man sie doch auch im Klassendiagram als Attribute einzeichnen od?

Seppi
18-12-2003, 23:09
ein kleiner Update ;)

Da Charli
19-12-2003, 00:12
@seppi;

warum hast du die assoziationen

flug->fluglinie und umgekehrt nicht eingezeichnet!!

Seppi
19-12-2003, 00:21
Weil in der Angabe steht, dass ausgehend von einer Fluglinie auf ihre Heimat-Flughäfen zugegriffen werden soll. Umgekehrt jedoch steht nichts drüber ... bei anderen Assoziation stehts aber explizit dabei.
Logisch wäre es aber vom Flughafen auf Fluglinien schließen zu können ... darüber steht aber nichts daher kann man annehmen, dass sich die Person dabei gedacht hat dass es so besser wäre od die Aufgabe ist wieder schlecht definiert oder ich hab was überlesen.

Da Charli
19-12-2003, 00:27
@seppi:

nein, ich meine flug-fluglinie

Myself
19-12-2003, 00:46
wollte zwar meinen senf auch dazugeben aber da ich gesehen habe dass ich fast das gleiche habe wie seppi wollte ich seine lösung nur nochmal bestätigen

Seppi
19-12-2003, 00:48
ahh .. sorry ... so spät ist es noch gar nicht ;)

hab einfach drauf vergessen

Da Charli
19-12-2003, 01:04
no problem, sonst stimmt alles.

andras98
19-12-2003, 12:57
Hi,

Wie habt ihr den Code erzeugt? Ich blick da bei Rose nicht ganz durch ...
Sollte es nicht aus dem UML einen Java Code ereugen können? Wenn ja, wie?

lg,
Andreas

Seppi
19-12-2003, 12:59
also ich hab ihn selber getippt!

andras98
19-12-2003, 13:19
also ich hab ihn selber getippt!
Was unterscheidet dann Rose von einem Zeichenprogramm? Da wäre ja dann kein Sinn dahinter oder?

lg,
Andreas

Seppi
19-12-2003, 13:40
Es geht selbstverständlich einen Code zu generieren!
Aber ich habe Zweifel, dass das es der Sinn ist von dem Bsp sonst kann ich gleich auf eine FH gehen und mich als Anwender ausbilden zu lassen.

Wenn du generieren willst dann geh folgendermaßen vor:

Tools --> Technologie auswählen (zB. Java/J2EE) --> Generate Code

andras98
19-12-2003, 14:05
Tools --> Technologie auswählen (zB. Java/J2EE) --> Generate Codeund genau das ist bei mir grau hinterlegt...
Ansi C++ kann er generieren.
Hab natuerlich JSDK 1.3 installiert ... an dem sollte es nicht liegen.

lg,

andreas

edit: markieren sollte man auch das ganze UML ... ;)

hal
19-12-2003, 15:50
@seppi: irgendwie kommt mir vor, du hast die Rollen vertauscht... Der Flug kann weder die Rolle "starteFlughafen", noch "landeFlughafen" haben, und der Flughafen wohl auch kaum "flugStartet" und "flugLandet".

Seppi
19-12-2003, 16:24
@seppi: irgendwie kommt mir vor, du hast die Rollen vertauscht... Der Flug kann weder die Rolle "starteFlughafen", noch "landeFlughafen" haben, und der Flughafen wohl auch kaum "flugStartet" und "flugLandet".
Warum kann Flug starteFlughafen nicht haben?
Der Assoziationspfeil ist gesetzt und siehe auch geposteten Code!
Daher hat zB hat Flug genau einen Flughafen wo er startet und genau einen Flughafen wo er landet.
Auf der anderen Seite hat ein Flughafen beliebig viele Flüge die wegfliegen, also starten bzw dann eben wieder laden.

Oder bezieht sich deine Frag auf was anderes?

hal
19-12-2003, 16:31
Warum kann Flug starteFlughafen nicht haben?

Weil ein Flug nicht die Rolle eines Flughafens übernehmen kann. Ein Flug ist ein Ereignis, bei dem mind. zwei Flughäfen, ein Flugzeug und viel Personal involviert sind, ein Flughafen ist ein Gebäude[komplex].

Stichwort ist "Rolle" hier.

Seppi
19-12-2003, 18:12
Weil ein Flug nicht die Rolle eines Flughafens übernehmen kann. Ein Flug ist ein Ereignis, bei dem mind. zwei Flughäfen, ein Flugzeug und viel Personal involviert sind, ein Flughafen ist ein Gebäude[komplex].

Stichwort ist "Rolle" hier.
Denke es mal durch ohne dabei als Abstraktion die Bezeichnungen Rollen und Ereignissen zu verwenden!

Du hast Flughäfen auf dem Flüge ein und ausgehen!
Wie kann man auf schnellstem Wege rausfinden welche Flüge vom Flughafen Schwechat weggehen? Indem man Objekte von Flügen in das jeweilige Flughafenobjekt als Array speichert.
Auf der anderen Seite kann man Fragen: Wohin geht der Flug --> nach Schwechat! Deshalb ist genau ein Flughafen Objekt im Flug drinnen der "anzeigt" wohin der Flug geht und einer der "anzeigt" von wo er weggeht.

Jetzt zurück zur Rolle:
Diese Bezeichnung ist etwas unglücklich gewählt, weil es geht nicht darum auf schauspielerischer Weise die Rolle zu übernehmen sondern eine Rolle drückt in einer Assoziation die Funktion eines Objektes aus.

Das ist halt beim technischeren Modellieren glaub ich nicht einfach geeignete Bezeichnungen zu finden wie zB Student ist der Leser und ein Buch ist das Lehrbuch.

Schau dir Abb. 2 bei den Angaben an! Da sind auch eigentlich ziemlich "strange" Rollennamen oder?
Da kann man auch nicht sagen dass Fugzeug die Rolle eines sitzes übernimmt!

Die Rolle drückt dann im Endeffekt den Variablennamen aus mit dem man das jeweilige Objekt bei der Implementierung, je nach Richtung, in Beziehung setzt.

Auf meiner letzten geposteten Zeichnung sind die Rollennamen verkehrt!

hal
19-12-2003, 21:04
Auf meiner letzten geposteten Zeichnung sind die Rollennamen verkehrt!

Genau das hab ich die ganze Zeit gesagt. Du solltest übrigens dir nochmal die genaue Definition der Flugnummer ansehen...

Seppi
19-12-2003, 22:06
:)
achso ... ich hab es so verstanden, dass es falsch ist

Thousand
20-12-2003, 17:22
Kleine dumme Frage: wie kann ichs in Rose machen, dass auf beiden Seiten einer Assoziation Pfeile sind. Ich schaffe nur entweder keine Pfeile (bidir.) oder auf einer Seite (unidir.) :confused:

gernot
20-12-2003, 17:22
[...]
Auf meiner letzten geposteten Zeichnung sind die Rollennamen verkehrt!
Dann ist doch der Code auch nicht ganz richtig oder?
Weil LandeFlughafen und StarteFlughafen sind im Java Code auch in der Class Flug?!?

Oder was ist jetzt verkehrt?
MfG
Gernot

Seppi
20-12-2003, 17:26
nein weil es wird genau verkehrt eingezeichnet! Schau die Abb2 an!

gernot
20-12-2003, 17:39
nein weil es wird genau verkehrt eingezeichnet! Schau die Abb2 an!Ok Danke! Flug bekommt jetzt flugStartet und fluglandet usw.. .

Jetzt erklär mir bitte nur noch wozu z.B.:
private Flughafen[] flugHafen = new Flughafen[k];

bzw. wozu das k ???

und woher kommt das {id(Fluglinie,fnr)} also vor allem das fnr!?!

Danke
MfG
Gernot

Thousand
21-12-2003, 11:46
Kleine dumme Frage: wie kann ichs in Rose machen, dass auf beiden Seiten einer Assoziation Pfeile sind. Ich schaffe nur entweder keine Pfeile (bidir.) oder auf einer Seite (unidir.) :confused:


Weiß das denn wirklich keiner???

Seppi
21-12-2003, 12:31
Ok Danke! Flug bekommt jetzt flugStartet und fluglandet usw.. .

Jetzt erklär mir bitte nur noch wozu z.B.:
private Flughafen[] flugHafen = new Flughafen[k];

bzw. wozu das k ???

sowas in einem Objekt könntest du verwenden um k Flughafen Objekte in einem Array zu speichern




und woher kommt das {id(Fluglinie,fnr)} also vor allem das fnr!?!

beziehung! Was steht in Flug drinnen? Hast du die Angabe gelesen?

Seppi
21-12-2003, 12:33
Weiß das denn wirklich keiner???
Objekte A Objekt B

zuerst ziehst du einen Strich von A nach B und dann einen von B nach A

Thousand
21-12-2003, 13:00
und sauberer gehts nicht??? tolles programm :( :mad:

Seppi
21-12-2003, 13:41
das ist doch sauber ... dann macht er zwei Pfeile an jedem Ende!

carb
21-12-2003, 14:01
und sauberer gehts nicht??? tolles programm :( :mad:
"...Ungerichtete Kanten signalisieren 'keine Angabe über Navigationsmöglichkeiten'. ... In der Praxis geht man jedoch meist pragmatischer vor, indem man etwa den ungerichteten Kanten bidirektionale Navigierbarkeit zuordnet. Eine derartige Vereinbarung muss natürlich explizit getroffen werden, da sie nicht dem Standard entspricht." [UML @Work, S.30]

.. und das ist das Problem. Rational Rose folgt dieser Konvention, und zeichnet daher alle bidirektionalen Assoziationen (auch Aggregationen und Kompositionen) als ungerichtete Kanten.

Hab leider keine Möglichkeit gefunden, dieses "Feature" auszuschalten. :coolgrim:

JayJay
21-12-2003, 14:30
@seppi: die flugnummer sollte doch kein long sein oder ?? ich würde sagen da sollte man doch selber nen typ erstellen.

"... (3) Flüge, die durch ihre Flugnummer beschrieben werden, die mit dem Kürzel der Fluglinie beginnt und eine mehrstellige Ziffer aufweist (bspw. “LH 6446”). ..."

lg JayJay

Seppi
21-12-2003, 15:23
stimmt natürlich ... danke

altferdi
21-12-2003, 15:38
was haltet ihr davon?
die implementierung der FlughafenListe muss ich in dieser aufgabe ja nicht angeben.

class Fluglinie {

String kuerzel;
String bezeichnung;

FlughafenListe heimat;
FluglListe fluege;
}


<edit>
:-( des geht ja nicht, dann müsste ich wohl auch die klassen FlughafenListe und FlugListe ins Klassendiagramm und den Java-Code eintragen.
Ich machs mit einem array und schreib einen kommentar dazu.
</edit>

downforme
21-12-2003, 16:19
@seppi: die flugnummer sollte doch kein long sein oder ?? ich würde sagen da sollte man doch selber nen typ erstellen.

"... (3) Flüge, die durch ihre Flugnummer beschrieben werden, die mit dem Kürzel der Fluglinie beginnt und eine mehrstellige Ziffer aufweist (bspw. “LH 6446”). ..."

lg JayJay

ich denke long ist ok, da man von jedem flug auf die fluglinie schließen kann und die flügnummer = fluglinie.kuerzel + nummer .

OBen(sum)Wahn
21-12-2003, 16:33
ich denke long ist ok, da man von jedem flug auf die fluglinie schließen kann und die flügnummer = fluglinie.kuerzel + nummer .

Hi!

JayJay war schneller als ich...

Ich denke auch, dass man die FL direkt in die FlugNr reincodieren soll, alleine schon desshalb, wenn eine FL gelöscht wird, will man trotzdem ev. die Historie behalten, etc...

Jimmy
21-12-2003, 16:34
[...] ausgehend von einer Fluglinie zur ihren Fl¨ugen und vice versa. [...]


Hmmm dieses vice versa lässt doch darauf schließen, dass man von Flug zu Flunglinie auch nen Pfeil zeichnen sollte, richtig??

buechsengustel
21-12-2003, 17:34
@jimmy
seh ich auch so, und außerdem glaub ich, dass sich das vice versa eben nur auf die beziehung zwischen fluglinie und flug bezieht, nicht auf alle genannten. d.h. ich hab zb von flughafen zu flug in den beziehungen startet und landet keine pfeile.

Sebi
21-12-2003, 19:02
aber in der angabe steht drinnen:
"von einem Flughafen auf die startenden und landenden Flüge"

OBen(sum)Wahn
21-12-2003, 21:33
Ich denke einmal, dass eine kurze Zusammenfassung der offenen Pkt. nicht schaden kann...

Über Seppi's Code wird öfters geredet, aber ich habe niergendwo einen Link gefunden... d.h. hier enthalte ich mich einmal.

Meines erachtens gehört:

1) flugNummer: long auf string geändert (kurze Anmerkung: auch ein foreign-key wird immer abgespeichert, auch wenn er auf einen Datensatz verweist... ist trivial)
2) von Flug sollte es auch eine Möglichkeit zu der Fluglinie geben
3) Ist die Durchfuehrung wirklich nötig (nicht generell, sondern nur auf dieses Bsp. bezogen)?

falls wer updates liefern will, ist er immer wilkommen (ich mach leider alles händisch...) ;)

JayJay
21-12-2003, 21:49
also ich bin weiterhin der meinung, dass es sinnvoller ist für die flugnummer einen neuen typ zu erstellen.

durchführung braucht man meiner meinung nach auch nicht.
ich mein klar, ich brauch dann in der praxis auch klassen die für die durchführung zustaendig sind, sprich ein user interface design ect. aber ich glaube das ist nicht das was bei dieser aufgabe gefragt war, allerdings denke ich auch nicht dass es sooo falsch ist, wenn mans doch macht. ich werds jedenfalls weglassen.

was den pfeil von flug nach fluglinie betrifft weiss ich leider auch nicht weiter. ich mein ok, offensichtlich steht da was davon auf dem angabezettel, allerdings wüsste ich nicht was diese assoziation für einen namen haben sollte was ich da für vielfachheiten da reintue und was die überhaupt für nen zweck haben soll.

lg JayJay