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