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 メソッドを実装する必要はありません。

関連するトピック