Main Content

読み込み時のオブジェクトの初期化

オブジェクト読み込み時のコンストラクターの呼び出し

MAT ファイルからオブジェクトを読み込むときに、MATLAB はクラス コンストラクターを呼び出しません。ただし、ConstructOnLoad クラス属性を true に設定すると、load はコンストラクターを引数なしで呼び出します。

loadobj メソッドを実装したくないが、構築時に何らかのアクションを実行する必要がある場合に ConstructOnLoad を有効にします。たとえば、別のオブジェクトに対しリスナーを登録するときに ConstructOnLoad を有効にします。エラーを発生させずに、MATLAB® が引数なしでクラス コンストラクターを呼び出せるようにしてください。

スーパークラスに設定されている属性は、サブクラスによって継承されません。そのため、MATLAB は、オブジェクトを読み込む際にスーパークラスの ConstructOnLoad 属性の値を使用しません。MATLAB でクラス コンストラクターを呼び出す場合は、特定のサブクラスに ConstructOnLoad 属性を設定します。

コンストラクターが入力引数を必要とする場合は loadobj メソッドを使用します。

loadobj メソッドでのオブジェクトの初期化

オブジェクトの初期化を行うためにクラス コンストラクターが入力引数を必要とする場合は、loadobj メソッドを使用します。

LabResults クラスは、コンストラクター オブジェクトの初期化手順を assignStatus メソッド内で実行することにより、これらの手順を loadobj メソッドと共有します。

LabResults クラスのオブジェクトは次のことを行います。

  • テスト結果の値を保持する。

  • 一連の条件に基づいて各値に状態を割り当てる。

classdef LabResult
   properties
      CurrentValue
   end
   properties (Transient)
      Status
   end
   methods
      function obj = LabResult(cv)
         obj.CurrentValue = cv;
         obj = assignStatus(obj);
      end
      function obj = assignStatus(obj)
         v = obj.CurrentValue;
         if v < 10
            obj.Status = 'Too low';
         elseif v >= 10 && v < 100
            obj.Status = 'In range';
         else
            obj.Status = 'Too high';
         end
      end
   end
   methods (Static)
      function obj = loadobj(s)
         if isstruct(s)
            cv = s.CurrentValue;
            obj = LabResults(cv);
         else
            obj = assignStatus(s);
         end
      end
   end
end

LabResults クラスは、loadobj を使用して指定されたテスト値の状態を判断します。この方法により、次のことを行う手段が手に入ります。

  • 状態を判断するための条件を変更する

  • オブジェクトで常に現在の条件が使用されるようにする

saveobj メソッドを実装する必要はありません。

関連するトピック