静的データ
静的データとは
静的データとは、クラスのすべてのオブジェクトが共有し、作成後に変更できるデータのことを指します。静的データは、クラス インスタンスによって使用されるカウンターや、クラスのすべてのオブジェクトで共有されるその他のデータを定義するために使用します。インスタンス データと異なり、静的データはオブジェクト間で変動しません。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 フィールドのような定数プロパティを使用します。