Das ATOS-Magazin 3/99
ATOS Programmierpraxis
Moderne Zeiten

# Konstruktor und Destruktor

Was abschließend zur Schnittstellendefinition noch fehlt, ist die Beschreibung der Parameter beim Anlegen und Freigeben eines Objektes. Beim Freigeben parametrisiert man üblicherweise aber eigentlich nicht mehr. Denkbar wäre zwar vielleicht, verschiedene Freigabemodi anzubieten (etwa "schnell", "speichersparend" o.ä.), in der Praxis kommt so etwas aber fast nie vor.

Beim Anlegen hingegen bietet es sich an, dem Konstruktor bereits erste Informationen über das gewünschte Objekt mit auf den Weg zu geben:

    FUNCTION fussballspieler(name$,position&,staerke&)              !call
      '
      ' Diese Funktion legt ein Objekt des Typs fussballspieler an und
      ' gibt die Objektkennung zurück.
      '
      ' name$       => Name des Fußballspielers (bspw. "Lothar Matthäus")
      ' position&   => Position, auf der der Spieler besonders stark ist.
      '                     fussballspieler_position_tor_&
      '                     fussballspieler_position_abwehr_&
      '                     fussballspieler_position_mitte_&
      '                     fussballspieler_position_sturm_&
      ' staerke&    => Staerke des Spielers im Mittel.
      '                     (0 = sehr schlecht, 100 = sehr gut)
      '
    ENDFUNC
    PROCEDURE fussballspieler_init(ob#,name$,position&,staerke&)    !call
    RETURN

Zunächst wird hier vorausgesetzt, daß die symbolischen Konstanten für den Wert von `position&` anfangs korrekt gesetzt wurden:

      LET fussballspieler_position_tor_&=0
      LET fussballspieler_position_abwehr_&=1
      LET fussballspieler_position_mitte_&=2
      LET fussballspieler_position_sturm_&=3

Dies werden wir aber noch an der geeigneten Stelle nachholen.

Auffallend ist nun, daß der Konstruktor aus zwei Prozeduren besteht. Die Bedeutung der zweiten Prozedur "`init`" wird später noch erläutert werden.

Die Spezifikation des Destruktors gestaltet sich aufgrund der fehlenden Parameter einfach:

    PROCEDURE fussballspieler_exit(ob#)                             !call
    RETURN
    PROCEDURE fussballspieler_free(ob#)                             !call
      '
      ' Diese Prozedur entfernt ein Objekt des Typs fussballspieler aus
      ' dem Speicher.
      '
    RETURN

Auch hier gibt es eine zweite Prozedur "`exit`", deren Bedeutung später klar werden wird.

Die fertige Spezifikation im Überblick