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