| |
| 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 |