blob: c36d8e963453eb4f973b1a0251f371ba56eb7bac [file] [log] [blame]
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