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