Main Content

System object の保存と読み込み

この例では、System object™ を読み込む方法と保存する方法を示します。

System object と子オブジェクトの保存

System object を保存するときにパブリック プロパティ以外のものも保存するように指定する saveObjectImpl メソッドを定義します。このメソッド内で既定の設定の saveObjectImpl@matlab.System を使用してパブリック プロパティを struct s に保存します。子オブジェクトは saveObject メソッドを使用して保存します。保護されている依存プロパティを保存して、最後に、オブジェクトが呼び出された後に解放されていない場合は、オブジェクトの状態を保存します。

methods (Access = protected)
  function s = saveObjectImpl(obj)
    s = saveObjectImpl@matlab.System(obj);
    s.child = matlab.System.saveObject(obj.child);
    s.protectedprop = obj.protectedprop;
    s.pdependentprop = obj.pdependentprop;
    if isLocked(obj)
      s.state = obj.state;
    end
  end
end

System object と子オブジェクトの読み込み

以前に保存した System object を読み込む loadObjectImpl メソッドを定義します。このメソッド内では、loadObject を使用して子の System object を読み込み、保護されたプロパティとプライベート プロパティを読み込んで、オブジェクトが呼び出された後に解放されていない場合には、その状態を読み込みます。さらに、基底クラスから loadObjectImpl を使用してパブリック プロパティを読み込みます。

methods (Access = protected)
  function loadObjectImpl(obj,s,isInUse)
    obj.child = matlab.System.loadObject(s.child);
    
    obj.protectedprop = s.protectedprop;
    obj.pdependentprop = s.pdependentprop;
    
    if isInUse
      obj.state = s.state;
    end
    
    loadObjectImpl@matlab.System(obj,s,isInUse);
  end    
end

保存と読み込みをもつ完全なクラス定義ファイル

Counter クラスの定義ファイルは Count プロパティをもつオブジェクトを設定します。このカウンターは MySaveLoader クラス定義ファイルで使用し、子オブジェクト数をカウントします。

classdef Counter < matlab.System
  properties(DiscreteState)
    Count
  end
  methods (Access=protected)
    function setupImpl(obj, ~)
      obj.Count = 0;
    end
    function y = stepImpl(obj, u)
      if u > 0
        obj.Count = obj.Count + 1;
      end
      y = obj.Count;
    end
  end
end
classdef MySaveLoader < matlab.System

  properties (Access = private)
    child
    pdependentprop = 1
  end
  
  properties (Access = protected)
    protectedprop = rand;
  end
  
  properties (DiscreteState = true)
    state
  end
  
  properties (Dependent)
    dependentprop
  end
      
  methods
    function obj = MySaveLoader(varargin)
      obj@matlab.System();
      setProperties(obj,nargin,varargin{:});
    end
    
    function set.dependentprop(obj, value)
      obj.pdependentprop = min(value, 5);
    end
    
    function value = get.dependentprop(obj)
      value = obj.pdependentprop;
    end
  end
  
  methods (Access = protected)
    function setupImpl(obj)
      obj.state = 42;
      obj.child = Counter;
    end
    function out = stepImpl(obj,in)
      obj.state = in + obj.state + obj.protectedprop + ...
          obj.pdependentprop;
      out = obj.child(obj.state);
    end
  end
  
  % Serialization
  methods (Access = protected)
    function s = saveObjectImpl(obj)      
      % Call the base class method
      s = saveObjectImpl@matlab.System(obj);
      
      % Save the child System objects
      s.child = matlab.System.saveObject(obj.child);
      
      % Save the protected & private properties
      s.protectedprop = obj.protectedprop;
      s.pdependentprop = obj.pdependentprop;
      
      % Save the state only if object called and not released
      if isLocked(obj)
        s.state = obj.state;
      end
    end
    
    function loadObjectImpl(obj,s,isInUse)
      % Load child System objects
      obj.child = matlab.System.loadObject(s.child);

      % Load protected and private properties
      obj.protectedprop = s.protectedprop;
      obj.pdependentprop = s.pdependentprop;
      
      % Load the state only if object is in use
      if isInUse
        obj.state = s.state;
      end

      % Call base class method to load public properties
      loadObjectImpl@matlab.System(obj,s,isInUse);
    end    
  end
end

参考

|