
Properties
**********

Properties sind im MG Eigenschaften eines Objektes, welche von (in der
Regel) von aussen gesetzt werden koennen (im Gegensatz zu Variablen
innerhalb von Objekten).


BESCHREIBUNG:
=============

Im Gegensatz zu Variablen innerhalb eines Objektes, kann man
Properties von aussen veraendern, ohne eine besondere Funktion
geschrieben zu haben.


Das zugrundeliegende Prinzip
----------------------------

      Das grundlegende Konzept der MUDlib ist, dass wichtige,
      objektbezogene Informationen in den sogenannnten Properties
      gespeichert werden (engl. property -- Eigenschaft, Eigentum).
      Diese Informationen koennen einfache Werte, wie z.B. Zahlen,
      Zeichen oder Objekte, aber auch kompliziertere Strukturen sein.
      Jedes Objekt kann beliebig viele solcher Properties besitzen und
      deren Namensgebung ist nicht nur auf die von der MUDlib
      bereitgestellten Standardproperties begrenzt. Das heisst, das
      fuer eigene Anwendungen die Menge der Properties fuer ein Objekt
      beliebig erweitert werden kann. Damit sind auch schon die beiden
      Hauptmerkmale einer Property ange- sprochen:

      1. ein Name oder Kennung und

      2. ein Wert, der durch den Namen repraesentiert wird.

   Das reine Verwalten einer Property mit Namen und Wert ist aber
   nicht sehr sinnvoll und so gehoeren zu jeder Property noch zwei
   weitere wichtige Dinge. Zu jeder Property wurden jeweils zwei
   Operationen eingefuehrt, welche den uebergebenen Wert vor der
   Speicherung oder Abfrage bearbeiten.

   Zusammenfassend laesst sich das Konzept der Property in folgendem
   Schema darstellen:

      +-------------------------------------------+
      | Property                                  |
      +-------------------------------------------+
      | privater Datenbereich (Property Werte)    |
      +-------------------------------------------+
      | Direktzugriff auf den Datenbereich        |
      +-------------------------------------+     |
      |     ^       Methoden       v        | ^ v |
      |   Setzen       |        Abfragen    |     |
      +-------------------------------------+-----+
            ^                      |
            |                      V
         SetProp()             QueryProp()

   Aus dem Schema laesst sich Folgendes erkennen

   * beim Setzen und Abfragen wird der Wert einer Methode
     uebergeben, die den Wert zurueckgibt oder ggf. die Aenderungen
     vornimmt

   * ein direkter Zugriff auf den Wert der ist ebenfalls moeglich,
     sollte aber nicht der Normalfall sein, da die Methoden
     Nebeneffekte erzeugen

   * in bestimmten Faellen kann man den aeusserlich aendernden
     Zugriff vollkommen unterbinden (NOSETMETHOD, PROTECT) (VORSICHT
     bei mappings/arrays, diese werden bei QueryProp() als Referenz
     zurueckgegeben, sind also so aenderbar)


Implementation
--------------

   Die Klasse /std/thing/properties.c stellt folgende Funktionen fuer
   die Behandlung von Properties bereit:

   * Normaler Zugriff

     * "mixed SetProp(<name>, <wert>)" setzt den Wert von <name> auf
       <wert>

     * "mixed QueryProp(<name>)" gibt den Wert von <name> zurueck

   * Direkter Zugriff

     * "mixed Set(<name>, <wert>, <interpretation>)" wird genutzt,
       um eines der folgenden zu setzen:

          * den normalen Wert (aber fast immer besser: SetProp()
            verwenden!)

          * eine Query- oder Setmethode

          * ein Flag/Modus: Speicherstatus/Zugriffsschutz

     * "mixed Query(<name>, <interpretation>)" fragt fuer <name>
       einen <wert> ab

       * den normalen Wert (aber fast immer besser: QueryProp()
         verwenden!)

       * die Closure der Query- oder Setmethode

       * den Modus der Property


Besonderheiten/Eingebaute Properties
------------------------------------

   Existiert zu einer Property eine Funktion mit dem selben Namen und
   einem "_set_" bzw "_query_" davor, so wird nicht auf die das
   Property-Mapping zugegriffen, sondern es werden die Argumente an
   diese Funktion uebergeben und der Rueckgabewert dieser Funktion
   zurueckgegeben.

   * Vorteile

        * so kann man Daten, die schnell verfuegbar sein muessen,
          (bei denen also Effizienz gegen SetProp/QueryProp spricht)
          trotzdem nach aussen einheitlich zugreifbar machen

   * Nachteile

        * nicht wirklich sauber

        * Speichern muss man selbst vornehmen

        * Set/Query gehen wie auch bei Methoden an _set_*/_query_*
          vorbei

        * dieses Verhalten sollte der Mudlib vorbehalten bleiben,
          fuer eigene Prueffunktionen (wird etwas gesetzt/abgefragt)
          bzw. Aenderungen sollte man Methoden
          (F_SET_METHOD/F_QUERY_METHOD) benutzen


SIEHE AUCH:
===========

* SetProp(), QueryProp(), Set(), Query(),

* SetProperties(), QueryProperties()

* objekte, effizienz, closures


Gesamtverzeichnis der dokumentierten Properties:
================================================

* Propertyliste

* Verzeichnis der Gilden-Properties

* Verzeichnis der obsoleten Properties
