blob: bd3f7efe2b04025b5d7d2cf772db9c2ac34987ca [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
Zesstraf81e6d32017-01-31 14:24:27 +010016Das zugrundeliegende Prinzip
17++++++++++++++++++++++++++++
Zesstrabbb29c12017-01-31 13:23:18 +010018 Das grundlegende Konzept der MUDlib ist, dass wichtige, objektbezogene
19 Informationen in den sogenannnten Properties gespeichert werden (engl.
20 property -- Eigenschaft, Eigentum).
21 Diese Informationen koennen einfache Werte, wie z.B. Zahlen, Zeichen oder
22 Objekte, aber auch kompliziertere Strukturen sein.
23 Jedes Objekt kann beliebig viele solcher Properties besitzen und deren
24 Namensgebung ist nicht nur auf die von der MUDlib bereitgestellten
25 Standardproperties begrenzt. Das heisst, das fuer eigene Anwendungen die
26 Menge der Properties fuer ein Objekt beliebig erweitert werden kann.
27 Damit sind auch schon die beiden Hauptmerkmale einer Property ange-
28 sprochen:
29
30 #. ein Name oder Kennung und
Zesstraf81e6d32017-01-31 14:24:27 +010031 #. ein Wert, der durch den Namen repraesentiert wird.
Zesstrabbb29c12017-01-31 13:23:18 +010032
33 Das reine Verwalten einer Property mit Namen und Wert ist aber nicht sehr
34 sinnvoll und so gehoeren zu jeder Property noch zwei weitere wichtige
35 Dinge. Zu jeder Property wurden jeweils zwei Operationen eingefuehrt,
36 welche den uebergebenen Wert vor der Speicherung oder Abfrage bearbeiten.
37
38 Zusammenfassend laesst sich das Konzept der Property in folgendem Schema
39 darstellen::
40
41 +-------------------------------------------+
42 | Property |
43 +-------------------------------------------+
44 | privater Datenbereich (Property Werte) |
45 +-------------------------------------------+
46 | Direktzugriff auf den Datenbereich |
47 +-------------------------------------+ |
48 | ^ Methoden v | ^ v |
49 | Setzen | Abfragen | |
50 +-------------------------------------+-----+
51 ^ |
52 | V
53 SetProp() QueryProp()
54
55
56 Aus dem Schema laesst sich Folgendes erkennen
57
58 * beim Setzen und Abfragen wird der Wert einer Methode uebergeben, die
59 den Wert zurueckgibt oder ggf. die Aenderungen vornimmt
60 * ein direkter Zugriff auf den Wert der ist ebenfalls moeglich, sollte
61 aber nicht der Normalfall sein, da die Methoden Nebeneffekte erzeugen
62 * in bestimmten Faellen kann man den aeusserlich aendernden Zugriff
63 vollkommen unterbinden (NOSETMETHOD, PROTECT)
64 (VORSICHT bei mappings/arrays, diese werden bei QueryProp()
65 als Referenz zurueckgegeben, sind also so aenderbar)
66
Zesstraf81e6d32017-01-31 14:24:27 +010067Implementation
68++++++++++++++
Zesstrabbb29c12017-01-31 13:23:18 +010069 Die Klasse /std/thing/properties.c stellt folgende Funktionen fuer die
70 Behandlung von Properties bereit:
71
72 * Normaler Zugriff
73
Zesstraf81e6d32017-01-31 14:24:27 +010074 * ``mixed SetProp(<name>, <wert>)``
Zesstrabbb29c12017-01-31 13:23:18 +010075 setzt den Wert von <name> auf <wert>
Zesstraf81e6d32017-01-31 14:24:27 +010076 * ``mixed QueryProp(<name>)``
Zesstrabbb29c12017-01-31 13:23:18 +010077 gibt den Wert von <name> zurueck
78
79 * Direkter Zugriff
80
Zesstraf81e6d32017-01-31 14:24:27 +010081 * ``mixed Set(<name>, <wert>, <interpretation>)``
82 wird genutzt, um eines der folgenden zu setzen:
Zesstrabbb29c12017-01-31 13:23:18 +010083
Zesstraf81e6d32017-01-31 14:24:27 +010084 * den normalen Wert (aber fast immer besser: :doc:`/lfun/SetProp` verwenden!)
85 * eine Query- oder Setmethode
86 * ein Flag/Modus: Speicherstatus/Zugriffsschutz
87
88 * ``mixed Query(<name>, <interpretation>)``
Zesstrabbb29c12017-01-31 13:23:18 +010089 fragt fuer <name> einen <wert> ab
90
Zesstra48c0ca72017-01-31 14:26:14 +010091 * den normalen Wert (aber fast immer besser: :doc:`/lfun/QueryProp` verwenden!)
Zesstraf81e6d32017-01-31 14:24:27 +010092 * die Closure der Query- oder Setmethode
93 * den Modus der Property
Zesstrabbb29c12017-01-31 13:23:18 +010094
Zesstraf81e6d32017-01-31 14:24:27 +010095Besonderheiten/Eingebaute Properties
96++++++++++++++++++++++++++++++++++++
Zesstrabbb29c12017-01-31 13:23:18 +010097 Existiert zu einer Property eine Funktion mit dem selben Namen und einem
98 ``_set_`` bzw ``_query_`` davor, so wird nicht auf die das Property-Mapping
99 zugegriffen, sondern es werden die Argumente an diese Funktion uebergeben
100 und der Rueckgabewert dieser Funktion zurueckgegeben.
101
102 * Vorteile
103
104 * so kann man Daten, die schnell verfuegbar sein muessen, (bei denen
105 also Effizienz gegen SetProp/QueryProp spricht) trotzdem nach aussen
106 einheitlich zugreifbar machen
107
108 * Nachteile
109
110 * nicht wirklich sauber
111 * Speichern muss man selbst vornehmen
112 * Set/Query gehen wie auch bei Methoden an _set_*/_query_* vorbei
113 * dieses Verhalten sollte der Mudlib vorbehalten bleiben, fuer eigene
114 Prueffunktionen (wird etwas gesetzt/abgefragt) bzw. Aenderungen
115 sollte man Methoden (F_SET_METHOD/F_QUERY_METHOD) benutzen
116
117SIEHE AUCH:
118-----------
119
Zesstra48c0ca72017-01-31 14:26:14 +0100120* :doc:`/lfun/SetProp`, :doc:`/lfun/QueryProp`, :doc:`/lfun/Set`,
121 :doc:`/lfun/Query`,
122* :doc:`/lfun/SetProperties`, :doc:`/lfun/QueryProperties`
Zesstrabbb29c12017-01-31 13:23:18 +0100123* objekte, effizienz, closures
124
125
Zesstraf81e6d32017-01-31 14:24:27 +0100126Gesamtverzeichnis der dokumentierten Properties:
127------------------------------------------------
Zesstrac2963ca2017-01-31 11:16:22 +0100128.. toctree::
129 :maxdepth: 1
130 :glob:
131
132 props/*
133