Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル: RWModel

バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.

## RWModel

### 形式

      #include <rw/model.h>
      (抽象基底クラス)

### 説明

  この抽象基底クラスは、モデル・ビュー・コントローラ・アーキテクチャの「モデル」部分を実装するために設計されています。「ビュー」部分を実装するのは、関連クラス RWModelClient です。

  このクラスは、依存する RWModelClient オブジェクトのリストを保持します。メンバー関数 `changed(void*)` が呼び出されると、このリスト全体を走査し、各オブジェクトに対してそのオブジェクト自身を第 1 引数として `updateFrom(RWModel*, void*)` を呼び出します。RWModelClientのサブクラスが、この呼び出しを受け入れます。

### 持続性

  なし

### 例

  次の例は不完全で、関連するクラスを完全には定義していません。ダイヤル (Dial) は サーモスタット (Theromostat) の内部設定値をグラフィックスで表現したものとみなされます。サーモスタットとダイヤルとの間に依存関係があることが重要な点で、サーモスタットの設定値が変わると、ダイアルに通知します。ダイアルは通知を受け取ると、自分自身を更新してサーモスタットの新しい設定値を反映します。

      #include <rw/model.h>
      class Dial : public RWModelClient {
      public:
        virtual void   updateFrom(RWModel* m, void* d);
      };

      class Thermostat : public RWModel {
        double setting;
      public:
        Thermostat( Dial* d )
          { addDependent(d); }
        double temperature() const
          { return setting; }
        void setTemperature(double t)
          { setting = t; changed(); }
      };

      void Dial::updateFrom(RWModel* m, void*) {
        Thermostat* t = (Thermostat*)m;
        double temp = t->temperature();
        // グラフィックスを再描画する
      }

### 公開コンストラクタ

      RWModel();

    特殊化クラスから呼び出されると、依存するオブジェクトを内部的に順序付けたリストを準備します。

### 公開メンバー関数

      void
      addDependent(RWModelClient* m);

    オブジェクト `m` を、自分自身の依存オブジェクトリストに追加します。

      void
      removeDependent(RWModelClient* m);

    自分自身の依存オブジェクトリストからオブジェクト `m` を取り除きます。

      virtual void
      changed(void* d);

    依存オブジェクトの内部リスト全体を走査し、各オブジェクトに対して自分自身を第 1 引数、`d` を第 2 引数としてメンバー関数 `updateFrom(RWModel*, void*)` を呼び出します。