saveobj и loadobj Шаблонsaveobj и loadobjВ зависимости от требований вашего класса существуют различные способы, которые можно использовать saveobj и loadobj методы. Этот шаблон является гибким способом решить проблемы, которые вы не можете решить более простыми средними значениями.
Базовый процесс:
Этот подход не полезен в случаях, где вы не можете сохранить значения свойств в struct поле . Данные, которые вы не можете сохранить, такие как идентификатор файла, можно возможно регенерировать в loadobj метод.
Если вы реализуете a saveobj метод, не реализовывая a loadobj метод, MATLAB® загружает объект по умолчанию класса с помощью текущего определения класса. Добавьте a loadobj метод к классу, чтобы создать объект с помощью данных, сохраненных с saveobj метод.
saveobjДля этого шаблона задать saveobj как обычный метод, который принимает объект класса и возвращает a struct.
Скопируйте каждое значение свойства в поле структуры того же имени.
Можно сохранить только данные, которые необходимы, чтобы восстановить объект. Постарайтесь не сохранять целые иерархии объектов, такие как созданные графиками.
methods function s = saveobj(obj) s.Prop1 = obj.Prop1; s.Prop2 = obj.Prop2 s.Data = obj.GraphHandle.YData; end end
loadobjDefine 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 метод должен всегда мочь обработать a struct как входной параметр. Вход к loadobj всегда скаляр.
loadobj может обработать a struct введите, даже если вы не используете a 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 функция не может создать объект и передает a struct к loadobj, loadobj попытки создать объект со снабженными данными.