Основной 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
пытается создать объект со снабженными данными.