Home Ausfüllen der Prozeduren mit Leben Der Fußballspieler Rückblick
 Das ATOS-Magazin 3/99
 ATOS Programmierpraxis
 Moderne Zeiten
 Ausfüllen der Prozeduren mit Leben

Der Verein

Die Implementierung des Vereins-Objektes geschieht nun völlig analog.

Eine Besonderheit besteht hier aber durch die Benutzung eines Array-Objektes zum Aufnehmen der Mannschaftsaufstellung. Dabei ist es erforderlich, nach dem Anlegen eines neuen Array-Eintrages diesen durch Aufruf der passenden init-Prozedur zu initialisieren, bzw. beim Entfernen einen Array-Eintrages diesen durch Aufruf der exit-Prozedur wieder "herunterzufahren", da diese beiden Vorgänge ja das Anlegen bzw. Freigeben von Objektspeichern beinhalten. Die entsprechenden Stellen sind gekennzeichnet:

FUNCTION verein(name$,staerke&)                                 !call
  '
  ' name$       => Vereinsname (bspw. "FC 08 Homburg")
  ' staerke&    => Stärke der Spieler des Vereins im Mittel.
  '                     (0 = sehr schlecht, 100 = sehr gut)
  '
  ' Außerdem sind die Namen der 11 aufzustellenden Fußballspieler zu
  ' übergeben. Diese Namen müssen dazu in DATA-Zeilen abgelegt werden
  ' und der _DATA-Zeiger muß mit RESTORE auf den ersten Namen gesetzt
  ' werden.
  '
  LOCAL ob#
  LET ob#=@ob_create(verein_%)
  @verein_init(ob#,name$,staerke&)
  RETURN ob#
ENDFUNC
PROCEDURE verein_init(ob#,name$,staerke&)                       !call
  LOCAL aufstellung#,spieler%
  LOCAL position&,spielername$
  '
  ' *** konkrete Attribute initialisieren ***
  '
  @string_init(@ob_attrib(ob#,verein_%,verein_name_%))
  '
  ' Hier muß nun der Typ der Arrayelemente (hier: fussballspieler)
  ' und die anfängliche Arraygröße (hier 11, da 11 Spieler) angegeben
  ' werden. Anschließend muß jeder einzelne Spieler initialisiert
  ' werden:
  '
  LET aufstellung#=@ob_attrib(ob#,verein_%,verein_aufstellung_%)

Hier wird nun zunächst das Array ganz normal wie jedes konkrete Attribut initialisert. Dabei wird der Typ der Arrayelemente (fussballspieler_%) und der Größenparameter (11) übergeben. Auf diese Weise wird ein Array mit 11 Spieler angelegt.

Danach wird dann für jedes einzelne Array-Element die init-Prozedur aufgerufen:

  @array_init(aufstellung#,fussballspieler_%,11)
  '
  ' --- Torwart: ---
  '
  LET position&=fussballspieler_position_tor_&
  READ spielername$
  @fussballspieler_init(@array_get(aufstellung#,0),spielername$,
                                  position&,staerke&)
  '
  ' --- Abwehr: ---
  '
  LET position&=fussballspieler_position_abwehr_&
  FOR spieler%=1 TO 3
    READ spielername$
    @fussballspieler_init(@array_get(aufstellung#,spieler%),
                                  spielername$,position&,staerke&)
  NEXT spieler%
  '
  ' --- Mitte: ---
  '
  LET position&=fussballspieler_position_mitte_&
  FOR spieler%=4 TO 7
    READ spielername$
    @fussballspieler_init(@array_get(aufstellung#,spieler%),
                                  spielername$,position&,staerke&)
  NEXT spieler%
  '
  ' --- Sturm: ---
  '
  LET position&=fussballspieler_position_sturm_&
  FOR spieler%=8 TO 10
    READ spielername$
    @fussballspieler_init(@array_get(aufstellung#,spieler%)
                                  spielername$,position&,staerke&)
  NEXT spieler%
  '
  ' *** Verein einrichten ***
  '
  ' +++ Vereinsname +++
  '
  @verein_name_set(ob#,name$)
  '
RETURN
PROCEDURE verein_exit(ob#)                                      !call
  LOCAL aufstellung#,spieler%
  '
  @string_exit(@ob_attrib(ob#,verein_%,verein_name_%))
  '
  ' Nun muß umgekehrt zunächst jedes einzelne Arrayelement
  ' "aufgeräumt" werden - dann erst das Array selbst:
  '
  LET aufstellung#=@ob_attrib(ob#,verein_%,verein_aufstellung_%)
  FOR spieler%=0 TO 10
    @fussballspieler_exit(@array_get(aufstellung#,spieler%))
  NEXT spieler%
  @array_exit(aufstellung#)
  '
RETURN
PROCEDURE verein_free(ob#)                                      !call
  @verein_exit(ob#)
  @ob_free(ob#,verein_%)
RETURN
FUNCTION verein_name$(ob#)                                      !call
  '
  ' Ermittelt den Vereinsnamen.
  '
  RETURN @string_get$(@ob_attrib(ob#,verein_%,verein_name_%))
ENDFUNC
FUNCTION verein_spieler(ob#,spieler%)                           !call
  '
  ' Gibt den Spieler mit der Nummer spieler% aus der Aufstellung
  ' zurück (also dessen Objektkennung).
  '
  RETURN @array_get(@ob_attrib(ob#,verein_%,verein_aufstellung_%),
                                                           spieler%)
  '
ENDFUNC
PROCEDURE verein_name_set(ob#,name$)
  @string_set(@ob_attrib(ob#,verein_%,verein_name_%),name$)
RETURN




Rückblick


Copyright © ATOS
Letzte Aktualisierung am 7. November 1999

Home Ausfüllen der Prozeduren mit Leben Der Fußballspieler Rückblick