next up previous
Up: Übersicht: Ablauf von Bewegung Previous: Ablauf des Fressens auf

Attribute

Die Attribute eines Insekts werden in der Sim-Schnittstelle deklariert und sind in KerThingImpl, der Superklasse von KerInsectImpl implementiert, grundsätzlich haben also auch Pflanzen und Steine Attribute. Der Zugriff auf die Attribute erfolgt dabei über die Methoden getAttr() und setAttr(). Will der Mover also Attribute einholen und verändern, so muß er dies mittels Insect.getAttr() und Insect.setAttr() tun, wobei Insect eine Referenz auf das zugehörige Insekt ist, das je nach Art der Methode als const-Objekt (also nur zum Lesen der Attribute) übergeben werden kann.


Es müssen nun die in Sim.idl definierten Attributstypen auf Ihre Bedeutsamkeit für Bewegung und Fressen hin untersucht werden. Hier ein Auszug aus der Datei:

//Sim.idl
...

  /** all external known attribute types of objects */
  enum AttrType { 
    Kind, Size, Visibility , Armor, Attack, Reserve, 
    Fitness, Sugar, Carbohydrate, Protein, Weight, Water 
  };

  /** datatype for attribute values */
  typedef double AttrValue;

  /** datatype for attribute  */
  struct Attr {
    AttrType Type;
    AttrValue Value;
  };

  typedef sequence<Attr> AttrList;
...
Es wird nun zwischen festen und veränderlichen Attributen unterschieden: Attribute wie Kind und Size sind sicherlich fest, während z.B. die Nahrungswerte sich während des Lebenszyklus eines Insekts ständig ändern. Bei den veränderlichen Attributen wird noch einmal zwischen primären und abgeleiteten Attributen unterschieden, wobei die Attribute Sugar, Carbohydrate, Protein und Water primär sind und Weight und Fitness sich aus den anderen Attributen ableiten. setAttrib-Methoden sind damit nur für die 4 primären Nahrungswert-Attribute erlaubt, während die abgeleiteten Attribute lediglich fertig berechnete Vereinfachungen darstellen. Die jeweils für verschiedene Aspekte, z.B. Bewegung (Mover) oder Essen (Eater), notwendigen Modifikationen und Berechnungen der Attribute, die nicht mit der Kommunikation mit anderen Objekten verwoben sind, werden wo immer möglich in entsprechende Berechnungsobjekte ausgelagert. Diese sind im Folgenden:

Name Funktion zugehöriges process...
    kooperiert mit:
Eater Essen tryEat()
Fighter Kämpfen tryAttack()
Holder halten und bewegen anderer Objekte tryHold()
Looker Beobachten anderer Objekte getAttr()
Mover eigene Bewegung Physical::Thing
Observer Benachrichtigung bei spezifizierten self->getAttr()
  Attributsänderungen  

next up previous
Up: Übersicht: Ablauf von Bewegung Previous: Ablauf des Fressens auf
Tim Paehler
1998-05-12