Этот пример показывает, как загрузить и сохранить Систему 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