Zum Inhalt springen

2006/07 GH1 HS 5: Entwicklung einer Methode für eine Klasse


Empfohlene Beiträge

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... :D)

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?)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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... :D)

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi!

Na, das ist doch mal eine Antwort! :D

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]).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...