blob: 02b8725e036b6337f9ff9cec4eb0f442753a8c00 [file] [log] [blame]
Zesstra1c8c99f2017-01-31 12:21:31 +01001.. Morgengrauen-Mudlib - Ueber Properties
Zesstrac2963ca2017-01-31 11:16:22 +01002
Zesstrae60ab352017-01-31 12:23:53 +01003Properties
4==========
Zesstra1c8c99f2017-01-31 12:21:31 +01005
6Properties sind im MG Eigenschaften eines Objektes, welche von (in der Regel)
7von aussen gesetzt werden koennen (im Gegensatz zu Variablen innerhalb von
8Objekten).
Zesstrac2963ca2017-01-31 11:16:22 +01009
Zesstrabbb29c12017-01-31 13:23:18 +010010BESCHREIBUNG:
11-------------
Zesstrac2963ca2017-01-31 11:16:22 +010012
Zesstrabbb29c12017-01-31 13:23:18 +010013Im Gegensatz zu Variablen innerhalb eines Objektes, kann man Properties
14von aussen veraendern, ohne eine besondere Funktion geschrieben zu haben.
15
161. Das zugrundeliegende Prinzip
17 Das grundlegende Konzept der MUDlib ist, dass wichtige, objektbezogene
18 Informationen in den sogenannnten Properties gespeichert werden (engl.
19 property -- Eigenschaft, Eigentum).
20 Diese Informationen koennen einfache Werte, wie z.B. Zahlen, Zeichen oder
21 Objekte, aber auch kompliziertere Strukturen sein.
22 Jedes Objekt kann beliebig viele solcher Properties besitzen und deren
23 Namensgebung ist nicht nur auf die von der MUDlib bereitgestellten
24 Standardproperties begrenzt. Das heisst, das fuer eigene Anwendungen die
25 Menge der Properties fuer ein Objekt beliebig erweitert werden kann.
26 Damit sind auch schon die beiden Hauptmerkmale einer Property ange-
27 sprochen:
28
29 #. ein Name oder Kennung und
30 #.ein Wert, der durch den Namen repraesentiert wird.
31
32 Das reine Verwalten einer Property mit Namen und Wert ist aber nicht sehr
33 sinnvoll und so gehoeren zu jeder Property noch zwei weitere wichtige
34 Dinge. Zu jeder Property wurden jeweils zwei Operationen eingefuehrt,
35 welche den uebergebenen Wert vor der Speicherung oder Abfrage bearbeiten.
36
37 Zusammenfassend laesst sich das Konzept der Property in folgendem Schema
38 darstellen::
39
40 +-------------------------------------------+
41 | Property |
42 +-------------------------------------------+
43 | privater Datenbereich (Property Werte) |
44 +-------------------------------------------+
45 | Direktzugriff auf den Datenbereich |
46 +-------------------------------------+ |
47 | ^ Methoden v | ^ v |
48 | Setzen | Abfragen | |
49 +-------------------------------------+-----+
50 ^ |
51 | V
52 SetProp() QueryProp()
53
54
55 Aus dem Schema laesst sich Folgendes erkennen
56
57 * beim Setzen und Abfragen wird der Wert einer Methode uebergeben, die
58 den Wert zurueckgibt oder ggf. die Aenderungen vornimmt
59 * ein direkter Zugriff auf den Wert der ist ebenfalls moeglich, sollte
60 aber nicht der Normalfall sein, da die Methoden Nebeneffekte erzeugen
61 * in bestimmten Faellen kann man den aeusserlich aendernden Zugriff
62 vollkommen unterbinden (NOSETMETHOD, PROTECT)
63 (VORSICHT bei mappings/arrays, diese werden bei QueryProp()
64 als Referenz zurueckgegeben, sind also so aenderbar)
65
662. Implementation
67 Die Klasse /std/thing/properties.c stellt folgende Funktionen fuer die
68 Behandlung von Properties bereit:
69
70 * Normaler Zugriff
71
72 * mixed SetProp(<name>, <wert>)
73 setzt den Wert von <name> auf <wert>
74 * mixed QueryProp(<name>)
75 gibt den Wert von <name> zurueck
76
77 * Direkter Zugriff
78
79 * mixed Set(<name>, <wert>, <interpretation>)
80 setzt fuer <name> einen <wert>:
81
82 * den normalen Wert: <interpretation> := F_VALUE
83 * eine Methode: <wert>:= closure, <interpretation> := F_SET_METHOD, F_QUERY_METHOD
84 * ein Flag/Modus: <wert>:= SAVE, SECURED, PROTECTED, NOSETMETHOD, <interpretation>:= F_MODE, F_MODE_AS, F_MODE_AD
85 * mixed Query(<name>, <interpretation>)
86 fragt fuer <name> einen <wert> ab
87
88 * F_SET_METHOD, F_QUERY_METHOD: die Closure/0
89 * F_MODE: das (veroderte!) Flag
90
913. Besonderheiten/Eingebaute Properties
92 Existiert zu einer Property eine Funktion mit dem selben Namen und einem
93 ``_set_`` bzw ``_query_`` davor, so wird nicht auf die das Property-Mapping
94 zugegriffen, sondern es werden die Argumente an diese Funktion uebergeben
95 und der Rueckgabewert dieser Funktion zurueckgegeben.
96
97 * Vorteile
98
99 * so kann man Daten, die schnell verfuegbar sein muessen, (bei denen
100 also Effizienz gegen SetProp/QueryProp spricht) trotzdem nach aussen
101 einheitlich zugreifbar machen
102
103 * Nachteile
104
105 * nicht wirklich sauber
106 * Speichern muss man selbst vornehmen
107 * Set/Query gehen wie auch bei Methoden an _set_*/_query_* vorbei
108 * dieses Verhalten sollte der Mudlib vorbehalten bleiben, fuer eigene
109 Prueffunktionen (wird etwas gesetzt/abgefragt) bzw. Aenderungen
110 sollte man Methoden (F_SET_METHOD/F_QUERY_METHOD) benutzen
111
112SIEHE AUCH:
113-----------
114
115* SetProp(L), QueryProp(L), Set(L), Query(L), SetProperties(L),
116* QueryProperties(L)
117* objekte, effizienz, closures
118
119
120Verzeichnis der dokumentierten Properties:
121------------------------------------------
Zesstrac2963ca2017-01-31 11:16:22 +0100122.. toctree::
123 :maxdepth: 1
124 :glob:
125
126 props/*
127