Main Content

静的データ

静的データとは

静的データとは、クラスのすべてのオブジェクトが共有し、作成後に変更できるデータのことを指します。静的データは、クラス インスタンスによって使用されるカウンターや、クラスのすべてのオブジェクトで共有されるその他のデータを定義するために使用します。インスタンス データと異なり、静的データはオブジェクト間で変動しません。MATLAB® では、静的データの定義方法を複数用意し、ユーザーの要件に応じています。

静的変数

クラスは永続変数を使用して静的データを保存できます。永続変数を作成する静的メソッドまたはローカル関数を定義します。そのメソッドまたは関数により、この変数へアクセスが可能になります。1 つまたは 2 つの変数を保存する場合は、この手法を使用します。

永続変数を定義するクラスのオブジェクトを保存しても、クラスに関連付けられた静的データは保存されません。オブジェクトに静的データを保存したり、より広範囲なデータを定義するには、静的データ オブジェクトの手法 (静的データ オブジェクト) を使用します。

実装

StoreData クラスは、永続変数 Var を宣言する静的メソッドを定義します。setgetVar メソッドは、永続変数のデータへの set および get アクセスを提供します。setgetVar メソッドはパブリック アクセスなので、永続変数に保存されているデータの設定と取得をグローバルに行うことができます。メソッドの Access 属性を設定してアクセスの範囲を制御します。

classdef StoreData
   methods (Static)
      function out = setgetVar(data)
         persistent Var;
         if nargin
            Var = data;
         end
         out = Var;
      end
   end
end

入力引数と共に setgetVar を呼び出して変数の値を設定します。メソッドにより入力値が永続変数に代入されます。

StoreData.setgetVar(10);

入力引数なしで setgetVar を呼び出して変数の値を取得します。

a = StoreData.setgetVar
a =     10

StoreData クラスの clear を呼び出して永続変数をクリアします。

clear StoreData
a = StoreData.setgetVar
a =

     []

静的プロパティの動作が必要な任意のクラスに setgetVar のようなメソッドを追加します。

静的データ オブジェクト

より広範なデータを保存するには、パブリック プロパティでハンドル クラスを定義します。クラスのオブジェクトを、静的データを使用するクラスの定数プロパティに割り当てます。この手法は次を行う場合に便利です。

  • データを変更するプロパティまたはメソッドの追加。

  • データ クラスのオブジェクトの保存および静的データの再読み込み。

実装

SharedData クラスはハンドル クラスであり、複数のハンドル変数から同じオブジェクト データの参照を可能にします。

classdef SharedData < handle
   properties 
      Data1
      Data2
   end
end

UseData クラスは、SharedData クラスに保存されているデータを使用するクラスのスタブです。UseData クラスは SharedData オブジェクトへのハンドルを定数プロパティに保存します。

classdef UseData
   properties (Constant)
      Data = SharedData
   end
   % Class code here
end

Data プロパティには SharedData オブジェクトのハンドルが含まれています。MATLAB は、UseData クラスを読み込む際に SharedData オブジェクトを作成します。後に作成される UseData クラスのインスタンスはすべて、同じ SharedData オブジェクトを参照します。

SharedData オブジェクト プロパティを初期化するには、定数プロパティを参照して UseData クラスを読み込みます。

h = UseData.Data
h = 

  SharedData with properties:

    Data1: []
    Data2: []

SharedData オブジェクトへのハンドルを使用して、プロパティ値にデータを代入します。

h.Data1 = 'MyData1';
h.Data2 = 'MyData2';

UseData クラスの各インスタンスは同じハンドル オブジェクトを参照します。

a1 = UseData;
a2 = UseData;

オブジェクト変数を使用してデータを参照します。

a1.Data.Data1
ans =

MyData1

SharedData オブジェクトのプロパティに新しい値を代入します。

a1.Data.Data1 = rand(3);

UseData クラスの新規および既存のオブジェクトはすべて、同じ SharedData オブジェクトを共有します。これで、a2 は、以前のステップで a1 に代入されていた rand(3) データをもつことになります。

a2.Data.Data1
ans =

    0.8147    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575

定数プロパティを再初期化するには、UseData クラスのすべてのインスタンスをクリアし、次にクラスをクリアします。

clear a1 a2
clear UseData

定数データ

変化しない定数値を保存するには、データを定数プロパティに代入します。クラスのすべてのインスタンスはそのプロパティの同じ値を共有します。プロパティの Access 属性を設定して、定数プロパティへのアクセスの範囲を制御します。

定数プロパティの値を変更する唯一の方法は、クラス定義を変更することですJava® の public final static フィールドのような定数プロパティを使用します。

参考

|

関連する例

詳細