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