Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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

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

  • Autor

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.

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

  • Autor

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

  • Autor

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

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

  • Autor

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.