В этом примере показано, как загрузить и сохранить системную 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
The 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