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