Основной saveobj и loadobj ШаблонИспользуя saveobj и loadobjВ зависимости от требований вашего класса существуют различные способы, можно использовать методы loadobj и saveobj. Этот шаблон является гибким способом решить проблемы, которые вы не можете решить более простыми средними значениями.
Базовый процесс:
Используйте saveobj, чтобы сохранить все существенные данные в struct и не сохранить объект.
Используйте loadobj, чтобы восстановить объект от сохраненных данных.
Этот подход не полезен в случаях, где вы не можете сохранить значения свойств в поле struct. Данные, которые вы не можете сохранить, такие как идентификатор файла, можно возможно регенерировать в методе loadobj.
saveobjДля этого шаблона задайте saveobj как обычный метод, который принимает объект класса и возвращает struct.
Скопируйте каждое значение свойства в поле структуры того же имени.
Можно сохранить только данные, который необходим, чтобы восстановить объект. Постарайтесь не сохранять целые иерархии объектов, такие как созданные графиками.
methods function s = saveobj(obj) s.Prop1 = obj.Prop1; s.Prop2 = obj.Prop2 s.Data = obj.GraphHandle.YData; end end
loadobjЗадайте loadobj как статический метод. Создайте объект путем вызова конструктора класса. Затем присвойте значения свойствам от struct, переданного loadobj. Используйте данные, чтобы регенерировать свойства, которые не были сохранены.
methods(Static) function obj = loadobj(s) if isstruct(s) newObj = ClassConstructor; newObj.Prop1 = s.Prop1; newObj.Prop2 = s.Prop2 newObj.GraphHandle = plot(s.Data); obj = newObj; else obj = s; end end end
Если функция load сталкивается с ошибкой, load передает loadobj struct вместо объекта. Ваш метод loadobj должен всегда мочь обработать struct как входной параметр. Входной параметр к loadobj всегда является скаляром.
loadobj может обработать входной параметр struct, даже если вы не используете метод saveobj.
Класс GraphExpression создает график выражения MATLAB® в заданной области значений данных. GraphExpression использует свой метод loadobj, чтобы регенерировать график, который не сохранен с объектом.
classdef GraphExpression properties FuncHandle Range end methods function obj = GraphExpression(fh,rg) obj.FuncHandle = fh; obj.Range = rg; makeGraph(obj) end function makeGraph(obj) rg = obj.Range; x = min(rg):max(rg); data = obj.FuncHandle(x); plot(data) end end methods (Static) function obj = loadobj(s) if isstruct(s) fh = s.FuncHandle; rg = s.Range; obj = GraphExpression(fh,rg); else makeGraph(s); obj = s; end end end end
Создайте объект с анонимной функцией и областью значений данных как входные параметры:
h = GraphExpression(@(x)x.^4,[1:25])
h =
GraphExpression with properties:
FuncHandle: @(x)x.^4
Range: [1x25 double]Сохраните объект GraphExpression и закройте график:
save myFile h close
Загрузите объект. MATLAB воссоздает график:
load myFile h
Если функция load не может создать объект и передает struct loadobj, loadobj пытается создать объект со снабженными данными.