saveobj и loadobj Шаблонsaveobj и loadobjВ зависимости от требований вашего класса, существуют различные способы, которые можно использовать saveobj и loadobj методы. Этот шаблон является гибким способом решения задач, которые вы не можете решить более простыми средствами.
Основным процессом является:
Этот подход не полезен в случаях, когда вы не можете сохранить значения свойств в struct поле. Данные, которые вы не можете сохранить, такие как идентификатор файла, можно, возможно, регенерировать в loadobj способ.
Если вы реализуете saveobj метод без реализации loadobj метод, MATLAB® загружает объект класса по умолчанию, используя текущее определение класса. Добавить a loadobj метод к классу, чтобы создать объект с использованием данных, сохраненных с saveobj способ.
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 a struct вместо объекта. Ваш loadobj метод должен всегда быть в состоянии обрабатывать struct как входной параметр. Вход в loadobj всегда скаляром.
loadobj может обрабатывать struct введите, даже если вы не используете saveobj способ.
The 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 пытается создать объект с предоставленными данными.