blob: 938833b7ff5561c5ecb3ff443155d2b84a3b6da7 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
2Properties
3**********
4
5Properties sind im MG Eigenschaften eines Objektes, welche von (in der
6Regel) von aussen gesetzt werden koennen (im Gegensatz zu Variablen
7innerhalb von Objekten).
8
9
10BESCHREIBUNG:
11=============
12
13Im Gegensatz zu Variablen innerhalb eines Objektes, kann man
14Properties von aussen veraendern, ohne eine besondere Funktion
15geschrieben zu haben.
16
17
18Das zugrundeliegende Prinzip
19----------------------------
20
21 Das grundlegende Konzept der MUDlib ist, dass wichtige,
22 objektbezogene Informationen in den sogenannnten Properties
23 gespeichert werden (engl. property -- Eigenschaft, Eigentum).
24 Diese Informationen koennen einfache Werte, wie z.B. Zahlen,
25 Zeichen oder Objekte, aber auch kompliziertere Strukturen sein.
26 Jedes Objekt kann beliebig viele solcher Properties besitzen und
27 deren Namensgebung ist nicht nur auf die von der MUDlib
28 bereitgestellten Standardproperties begrenzt. Das heisst, das
29 fuer eigene Anwendungen die Menge der Properties fuer ein Objekt
30 beliebig erweitert werden kann. Damit sind auch schon die beiden
31 Hauptmerkmale einer Property ange- sprochen:
32
33 1. ein Name oder Kennung und
34
35 2. ein Wert, der durch den Namen repraesentiert wird.
36
37 Das reine Verwalten einer Property mit Namen und Wert ist aber
38 nicht sehr sinnvoll und so gehoeren zu jeder Property noch zwei
39 weitere wichtige Dinge. Zu jeder Property wurden jeweils zwei
40 Operationen eingefuehrt, welche den uebergebenen Wert vor der
41 Speicherung oder Abfrage bearbeiten.
42
43 Zusammenfassend laesst sich das Konzept der Property in folgendem
44 Schema darstellen:
45
46 +-------------------------------------------+
47 | Property |
48 +-------------------------------------------+
49 | privater Datenbereich (Property Werte) |
50 +-------------------------------------------+
51 | Direktzugriff auf den Datenbereich |
52 +-------------------------------------+ |
53 | ^ Methoden v | ^ v |
54 | Setzen | Abfragen | |
55 +-------------------------------------+-----+
56 ^ |
57 | V
58 SetProp() QueryProp()
59
60 Aus dem Schema laesst sich Folgendes erkennen
61
62 * beim Setzen und Abfragen wird der Wert einer Methode
63 uebergeben, die den Wert zurueckgibt oder ggf. die Aenderungen
64 vornimmt
65
66 * ein direkter Zugriff auf den Wert der ist ebenfalls moeglich,
67 sollte aber nicht der Normalfall sein, da die Methoden
68 Nebeneffekte erzeugen
69
70 * in bestimmten Faellen kann man den aeusserlich aendernden
71 Zugriff vollkommen unterbinden (NOSETMETHOD, PROTECT) (VORSICHT
72 bei mappings/arrays, diese werden bei QueryProp() als Referenz
73 zurueckgegeben, sind also so aenderbar)
74
75
76Implementation
77--------------
78
79 Die Klasse /std/thing/properties.c stellt folgende Funktionen fuer
80 die Behandlung von Properties bereit:
81
82 * Normaler Zugriff
83
84 * "mixed SetProp(<name>, <wert>)" setzt den Wert von <name> auf
85 <wert>
86
87 * "mixed QueryProp(<name>)" gibt den Wert von <name> zurueck
88
89 * Direkter Zugriff
90
91 * "mixed Set(<name>, <wert>, <interpretation>)" wird genutzt,
92 um eines der folgenden zu setzen:
93
Zesstra6cadc1b2018-11-15 22:27:32 +010094 * den normalen Wert (aber fast immer besser: SetProp()
Zesstra953f9972017-02-18 15:37:36 +010095 verwenden!)
96
97 * eine Query- oder Setmethode
98
99 * ein Flag/Modus: Speicherstatus/Zugriffsschutz
100
101 * "mixed Query(<name>, <interpretation>)" fragt fuer <name>
102 einen <wert> ab
103
Zesstra6cadc1b2018-11-15 22:27:32 +0100104 * den normalen Wert (aber fast immer besser: QueryProp()
Zesstra953f9972017-02-18 15:37:36 +0100105 verwenden!)
106
107 * die Closure der Query- oder Setmethode
108
109 * den Modus der Property
110
111
112Besonderheiten/Eingebaute Properties
113------------------------------------
114
115 Existiert zu einer Property eine Funktion mit dem selben Namen und
116 einem "_set_" bzw "_query_" davor, so wird nicht auf die das
117 Property-Mapping zugegriffen, sondern es werden die Argumente an
118 diese Funktion uebergeben und der Rueckgabewert dieser Funktion
119 zurueckgegeben.
120
121 * Vorteile
122
123 * so kann man Daten, die schnell verfuegbar sein muessen,
124 (bei denen also Effizienz gegen SetProp/QueryProp spricht)
125 trotzdem nach aussen einheitlich zugreifbar machen
126
127 * Nachteile
128
129 * nicht wirklich sauber
130
131 * Speichern muss man selbst vornehmen
132
133 * Set/Query gehen wie auch bei Methoden an _set_*/_query_*
134 vorbei
135
136 * dieses Verhalten sollte der Mudlib vorbehalten bleiben,
137 fuer eigene Prueffunktionen (wird etwas gesetzt/abgefragt)
138 bzw. Aenderungen sollte man Methoden
139 (F_SET_METHOD/F_QUERY_METHOD) benutzen
140
141
142SIEHE AUCH:
143===========
144
Zesstra6cadc1b2018-11-15 22:27:32 +0100145* SetProp(), QueryProp(), Set(), Query(),
Zesstra953f9972017-02-18 15:37:36 +0100146
Zesstra6cadc1b2018-11-15 22:27:32 +0100147* SetProperties(), QueryProperties()
Zesstra953f9972017-02-18 15:37:36 +0100148
149* objekte, effizienz, closures
150
151
152Gesamtverzeichnis der dokumentierten Properties:
153================================================
154
155* Propertyliste
156
157* Verzeichnis der Gilden-Properties
158
159* Verzeichnis der obsoleten Properties