piomode1 Geschrieben 16. November 2007 Geschrieben 16. November 2007 Hi, @all! Ich versuche einmal, das gegebene graphische Klassendiagramm in Textform darzustellen: Linie - linienID: Integer - startHafen: String - zielHafen: String - fahrten: Array vom Typ Fahrt <Komposition> | v * Fahrt - fahrtID: Integer - ZeitAbfahrt: Time - zeitAnkunft: Time - datum Abfahrt: Date - datum Ankunft: Date - schiff: Schiff | v Schiff - schiffID: Integer - freiePlaetze: Integer - kabinen: Array vom Typ Kabine <Komposition> | v * Kabine - kabinenID: Integer - freieBetten: Integer - istBelegt: Boolean Anmerkung: Eine Kabine kann als belegt gekennzeichnet sein, auch wenn nicht alle Betten belegt sind. (Doppelkabine als Einzelkabine.) Aufgabe: Erstellen einer Methode für die Klasse "Linie", die angibt, ob an einem bestimmten Tag die gewünschte Anzahl Plätze und Betten zur Verfügung stehen (auf den Schiffen einer Linie). Übergabedaten: Datum der Abfahrt, Anzahl der reisenden Personen, Anzahl der gewünschten Kabinenbetten. Ausgabedaten: fahrtID, datumAbfahrt, datumAnkunft, zeitAbfahrt, zeitAnkunft, Kabinenbetten verfügbar? (Ja/Nein), Plätze verfügbar? (Ja/Nein). Meine Gedanken zu dieser Aufgabenstellung: 1. Nicht alle Reisenden brauchen ein Kabinenbett. (Kann ich nachvollziehen: Auf der Klassenreise nach England haben wir auf der 24h-Fahrt dorthin soetwas auch nicht benötigt... ) 2. Eine Linie = Genau ein Start- und genau ein Zeilhafen. Die Linie verkehrt zu verschiedenen Zeitpunkten (verschiedene Tage und/oder verschiedene Uhrzeiten, mehrere Abfahrten dieser Linie pro Tag sind möglich). Ok! Mein Problem: Ich habe noch nicht einmal ansatzweise einen Schimmer, wie ich diese Aufgabe lösen soll! Es ist mir nur klar, daß ich mich durch die Klassen wühlen muß. Oder nicht? Schließlich heißt es in der Aufgabe: "...mit einer Methode der Klasse Linie soll geprüft werden", ob die gewünschten Plätze/Betten an einem bestimmten Tag verfügbar sind. Also brauche ich dorch nur eine Methode mit folgendem Aufbau: get_PlatzBetten_Status (abfahrtDatum, reisendePersonen, benoetigteBetten) .Aufruf einer Methode der Klasse Fahrt, die die Parameter für reisendePersonen und benoetigteBetten mitbekommt. .Ausgabe aller zurückgelieferten Fahrten mit den (zurückgelieferten) Ausgabewerten ende Dafür wird es bestimmt keine 20 Punkte geben... Auch wenn das imho "alles" ist, was die Methode der Klasse Linie machen muß. Also weitergedacht: Linie ruft eine Methode der Klasse Fahrt auf (abfahrtDatum, reisendePersonen, benoetigteBetten). (Werden eigentlich zur Laufzeit automatisch alle Fahrt-Instanzen abgeklopft, die an "dieser" Linie hängen?) Diese Fahrt-Methode ruft eine Schiff-Methode auf (reisendePersonen, benoetigteBetten). Diese Methode geht durch jede Kabine eines jeden Schiffes (Alle Schiffe, die am Reisetag auf der (aufrufenden) Linie abfahren.), schaut erst, ob die Kabine belegt ist, wenn nicht belegt, werden die freien Betten kumuliert und zurückgegeben. Es braucht gem. Aufgabenstellung nicht geprüft zu werden, ob sich die freien Betten in genau einer Kabine befinden müssen.) Soweit meine Ideen. Ich würde mich riesig freuen, wenn mir da jemand auf den richtigen Weg bringen kann! (Edit: Spielt hier die Vererbung (von Methode) eine Rolle?) Zitieren
MATTHAHA Geschrieben 16. November 2007 Geschrieben 16. November 2007 Hi, @all! Ich versuche einmal, das gegebene graphische Klassendiagramm in Textform darzustellen: Linie - linienID: Integer - startHafen: String - zielHafen: String - fahrten: Array vom Typ Fahrt <Komposition> | v * Fahrt - fahrtID: Integer - ZeitAbfahrt: Time - zeitAnkunft: Time - datum Abfahrt: Date - datum Ankunft: Date - schiff: Schiff | v Schiff - schiffID: Integer - freiePlaetze: Integer - kabinen: Array vom Typ Kabine <Komposition> | v * Kabine - kabinenID: Integer - freieBetten: Integer - istBelegt: Boolean Anmerkung: Eine Kabine kann als belegt gekennzeichnet sein, auch wenn nicht alle Betten belegt sind. (Doppelkabine als Einzelkabine.) Aufgabe: Erstellen einer Methode für die Klasse "Linie", die angibt, ob an einem bestimmten Tag die gewünschte Anzahl Plätze und Betten zur Verfügung stehen (auf den Schiffen einer Linie). Übergabedaten: Datum der Abfahrt, Anzahl der reisenden Personen, Anzahl der gewünschten Kabinenbetten. Ausgabedaten: fahrtID, datumAbfahrt, datumAnkunft, zeitAbfahrt, zeitAnkunft, Kabinenbetten verfügbar? (Ja/Nein), Plätze verfügbar? (Ja/Nein). Meine Gedanken zu dieser Aufgabenstellung: 1. Nicht alle Reisenden brauchen ein Kabinenbett. (Kann ich nachvollziehen: Auf der Klassenreise nach England haben wir auf der 24h-Fahrt dorthin soetwas auch nicht benötigt... ) 2. Eine Linie = Genau ein Start- und genau ein Zeilhafen. Die Linie verkehrt zu verschiedenen Zeitpunkten (verschiedene Tage und/oder verschiedene Uhrzeiten, mehrere Abfahrten dieser Linie pro Tag sind möglich). Ok! Mein Problem: Ich habe noch nicht einmal ansatzweise einen Schimmer, wie ich diese Aufgabe lösen soll! Es ist mir nur klar, daß ich mich durch die Klassen wühlen muß. Oder nicht? Schließlich heißt es in der Aufgabe: "...mit einer Methode der Klasse Linie soll geprüft werden", ob die gewünschten Plätze/Betten an einem bestimmten Tag verfügbar sind. Also brauche ich dorch nur eine Methode mit folgendem Aufbau: get_PlatzBetten_Status (abfahrtDatum, reisendePersonen, benoetigteBetten) .Aufruf einer Methode der Klasse Fahrt, die die Parameter für reisendePersonen und benoetigteBetten mitbekommt. .Ausgabe aller zurückgelieferten Fahrten mit den (zurückgelieferten) Ausgabewerten ende Dafür wird es bestimmt keine 20 Punkte geben... Auch wenn das imho "alles" ist, was die Methode der Klasse Linie machen muß. Also weitergedacht: Linie ruft eine Methode der Klasse Fahrt auf (abfahrtDatum, reisendePersonen, benoetigteBetten). (Werden eigentlich zur Laufzeit automatisch alle Fahrt-Instanzen abgeklopft, die an "dieser" Linie hängen?) Diese Fahrt-Methode ruft eine Schiff-Methode auf (reisendePersonen, benoetigteBetten). Diese Methode geht durch jede Kabine eines jeden Schiffes (Alle Schiffe, die am Reisetag auf der (aufrufenden) Linie abfahren.), schaut erst, ob die Kabine belegt ist, wenn nicht belegt, werden die freien Betten kumuliert und zurückgegeben. Es braucht gem. Aufgabenstellung nicht geprüft zu werden, ob sich die freien Betten in genau einer Kabine befinden müssen.) Soweit meine Ideen. Ich würde mich riesig freuen, wenn mir da jemand auf den richtigen Weg bringen kann! (Edit: Spielt hier die Vererbung (von Methode) eine Rolle?) Also du hast die Methode, welche in der Klasse "Linie ist". Diese Klasse geht alle "Fahrt"-Objekte im "fahrten"-array durch und überprüft die Daten des "Fahrt"-Objekts auf die Kriterien die du als Übergabeparameter hast. Ist die Fahrt an dem bestimmten Datum? Wenn ja, dann überprüfst du das Schriff aus der Property "schiff" deines Objektes. Sind genug freie Plätze, dann schaust du in jeder einzelner Kabine nach, ob es auch genug freie Betten gibt. Hm jetzt hab ich zu viel geschrieben. Also praktisch schon die Lösung:upps Zitieren
piomode1 Geschrieben 17. November 2007 Autor Geschrieben 17. November 2007 Sehr schön... Und so kann ich das auch in der Prüfung schreiben? Ich sehe einen Unterschied zwischen "freie Plätze" und "freie Betten": Kein Unterschied und beides speichern = Redundanz. Zitieren
MATTHAHA Geschrieben 17. November 2007 Geschrieben 17. November 2007 Sehr schön... Und so kann ich das auch in der Prüfung schreiben? Ich sehe einen Unterschied zwischen "freie Plätze" und "freie Betten": Kein Unterschied und beides speichern = Redundanz. Nene.. du musst sowas in einem Pseudocode oder Struktogramm schreiben bzw. zeichnen. So ungefähr zeigeVerfuegbarkeit(abfahrtDatum, anzahlPlaetze, anzahlBetten) Für jede Fahrt f in fahrten Wenn f.schiff.datum = abfahrtDatum dann etc. etc. Ende Wenn Ende Schleife Ende Methode Da hab ich gleich noch eine Frage. In den Lösungen sehe ich als Schleife immer eine Zählschleife ála "For i = 1 to ...". Aber meine For-Each Schleife ist doch genausorichtig? Ließt sich halt einfacher. Zitieren
piomode1 Geschrieben 17. November 2007 Autor Geschrieben 17. November 2007 Hi! Die "For Each" ist m.E. im Pseudocode erlaubt und ist hier sinnvoll, weil es offen ist, wieviele Fahrten es an einem bestimmten Tag auf einer bestimmten Linie gibt. Danke schön! :-) Zitieren
piomode1 Geschrieben 18. November 2007 Autor Geschrieben 18. November 2007 Hi! Die Methode in der Klasse "Linie" ist dann so zu formulieren, daß sie auch die anderen Klassen "durchgeht"? Möglicherweise gehe ich da zu sehr funktional bzw. in in Abfragen denkend heran... Zitieren
Leberwurschtpemme Geschrieben 18. November 2007 Geschrieben 18. November 2007 Hier die Muster-Lösung der IHK zur Aufgabe: Pseudocode zeigeVerfügbarkeit(datum: Date, personen: Integer, betten: Integer) für i = 0 Anzahl fahrten - 1 wenn fahrten[i].getDatum()= datum dann Ausgabe = fahrten[i].getFahrtID, fahrten[i].getDatumAbfahrt(), fahrten[i].getZeitAbfahrt(), fahrten[i]getDatumAnkunft(), fahrten[i].getZeitAnkunft() schiff = fahrten[i].getSchiff() wenn schiff.getFreiePlaetze() >= personen dann Ausgabe "Plätze vorhanden" wenn betten > 0 dann freieBetten = 0 kabinen = schiff.getKabinen() für j = 0 bis Anzahl kabinen - 1 wenn nicht kabinen[j].istBelegt() dann freieBetten = freieBetten + kabinen[j].getFreieBetten() ende wenn ende für wenn freieBetten >= betten dann Ausgabe "Betten verfügbar" sonst Ausgabe "Betten nicht verfügbar" ende wenn ende wenn sonst Ausgabe "Plätze nicht verfügbar" ende wenn ende wenn ende für Zitieren
piomode1 Geschrieben 18. November 2007 Autor Geschrieben 18. November 2007 Hi! Na, das ist doch mal eine Antwort! Alles beantwortet!. Und doch nicht ganz: kabinen = schiff.getKabinen() für j = 0 bis Anzahl kabinen - 1 Das bedeutet (natürlich), daß "kabinen" alle Kabinen des Schiffs aufnehmen kann? (In der Sprache der Datenbänkler: kabinen ist ein Recordset.) Und die werden dann alle einzelnd durchlaufen (kabinen[j]). Zitieren
Leberwurschtpemme Geschrieben 18. November 2007 Geschrieben 18. November 2007 Ja, in den Klassen steht ja, dass die Klasse Schiff ein Attribut "kabinen" besitzt, welches ein Array vom Typ Kabine ist. Was ja so viel bedeutet, dass dort alle Referenzen auf die Kabinen-Objekte gespeichert sind und mittels eines Zählers (j) durchlaufen werden können. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.