В этом примере показано, как загрузить и сохранить Систему 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
Задайте loadObjectImpl
метод, чтобы загрузить ранее сохраненный Системный объект. В рамках этого метода используйте loadObject
чтобы загрузить дочерний Системный объект, загрузка защищенные и частные свойства, загружают состояние, если объект был назван и не выпущен, и использование 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
файл определения класса настраивает объект со свойством количества. Этот счетчик используется в 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