Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc//concepts/properties

Properties
 BESCHREIBUNG:
     Im Gegensatz zu Variablen innerhalb eines Objektes, kann man Properties
     von aussen veraendern, ohne eine besondere Funktion geschrieben zu haben.

     1. 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:

	a) ein Name oder Kennung und
	b) 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)

     2. Implementation
     =================

      Die Klasse /std/thing/properties.c stellt folgende Funktionen fuer die
      Behandlung von Properties bereit:

      Normaler Zugriff:	mixed SetProp(, )
			- setzt den Wert von  auf 
			mixed QueryProp()
			- gibt den Wert von  zurueck
 
      Direkter Zugriff:	mixed Set(, , )
			- setzt fuer  einen :
			  - den normalen Wert
			    : F_VALUE (==0)
			  - eine Methode
			    : closure
			    : F_SET_METHOD, F_QUERY_METHOD
			  - ein Flag
			    : SAVE, SECURED, PROTECTED, NOSETMETHOD
			    : F_MODE, F_MODE_AS, F_MODE_AD
			mixed Query(, )
			- fragt fuer  einen  ab
			  - F_SET_METHOD, F_QUERY_METHOD: die Closure/0
			  - F_MODE: das (veroderte!) Flag
      Global:		void SetProperties()
			- setzt das Mapping komplett, beachtet >= PROTECTED
			mapping QueryProperties()
			- fragte das komplette Mapping als Kopie ab

     3. 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.
      Vorteil:
      - so kann man Daten, die schnell verfuegbar sein muessen,	(bei denen
        also Effizienz gegen SetProp/QueryProp spricht) trotzdem nach aussen
	einheitlich zugreifbar machen
      Nachteil:
      - 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(L), QueryProp(L), Set(L), Query(L), SetProperties(L),
     QueryProperties(L)
     objekte, effizienz, closures


21. Maerz 2004 Gloinson


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.