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