
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
