Next: Implementation der Klassen Up: KPH 11/93Implementation und Testder Previous: Ein Beispiel für

Deklaration der Klassenhierarchie

Bei der Erstellung eines Gerätetreibers sollte man sich am Anfang einen Plan über die Struktur des Gerätes machen (siehe Tabelle ).

Die erste Frage, die man sich stellen sollte, ist, aus welchen abgeschlossenen Einheiten das Gerät besteht. Das Testgerät hat nur eine solche Einheit, den Service TestDev. Dementsprechend wird eine Klasse TestDev angelegt, die von DevService erbt.


class TestDev : public DevService
{

Zur Klasse gehören einige wichtige Bestandteile. Zuerst kommt mit dem Hilfsmakro DECL_SERV_CONS der Konstruktor, der für die Konstruktion des Objektes verantwortlich ist; dann eine Initialisierungsfunktion, um den gespeicherten Wert auf Null zu setzen; je eine Funktion zum Setzen und zum Auslesen des Wertes; und ein Speicherplatz für den Wert.


public:
  DECL_SERV_CONS(TestDev);
  virtual void init() {value = 0};
  void set_value(float v) {value = v};
  float get_value() {return value};
private:
  double value;

Das Gerät besteht aus zwei Feldern, dem Ist-Wert (IST) und dessen Wurzel (SQRT). Für das erste Feld gibt es die beiden Aktionen SET und GET zum Einstellen und Auslesen des Wertes. Das zweite Feld hat nur die Aktion GET. Für jede dieser Kombinationen aus Feld und Aktion wird eine Klasse angelegt, die von DevAction erbt.

Die erste ist gleich ein Spezialfall, da für sie eine Initialisierungsfunktion init benötigt wird, mit der der minimale und der maximale Wert eingelesen werden kann. DECL_ACT_CONS ist ein Hilfsmakro zur Vereinfachung der Deklarationen des Konstruktors.


  class IstSet : DevAction
  {
  public:
    DECL_ACT_CONS(IstSet);
  private:
    double min, max;
    void init();
    int run(MpxMessage &);
  };

Für die zweite und dritte Aktion kann das Hilfsmakro DECL_ACT_CLASS benutzt werden, da hier keine init-Funktion benötigt wird.


  DECL_ACT_CLASS(IstGet);
  DECL_ACT_CLASS(SqrtGet);
};

Damit ist die Deklaration der Klassenhierarchie beendet. Der zweite Teil beschreibt die Implementation der Klassen.


martin@daisy.zdv.Uni-Mainz.DE
Fri Apr 21 10:02:42 MESZ 1995