Сохранение и загрузка объектов из иерархий классов

Сохранение и загрузка объектов подкласса

Если самый конкретный класс объекта не задает loadobj или saveobj метод, этот класс может наследовать loadobj или saveobj методы из суперкласса.

Если какой-либо класс в иерархии задает saveobj или loadobj методы:

  • Определите saveobj для всех классов в иерархии.

  • Вызов суперкласса saveobj методы из подкласса saveobj метод, поскольку save функция вызывает только самую конкретную saveobj способ.

  • Подкласс loadobj метод может вызвать суперкласс loadobjили другие методы, необходимые для присвоения значений их свойствам.

Восстановите объект подкласса из сохраненного struct

Предположим, что вы хотите сохранить объект подкласса, сначала преобразовав данные о его свойствах в struct в saveobj классов способ. Затем вы восстанавливаете объект при загрузке с помощью его loadobj способ. Это действие требует, чтобы:

  • Суперклассы реализуют saveobj методы для сохранения данных о свойствах в struct.

  • Подкласс saveobj метод вызывает каждый суперкласс saveobj метод и возвращает завершенную struct на save функция. Затем save функция записывает struct в MAT-файл.

  • Подкласс loadobj метод создает объект подкласса и вызывает методы суперкласса, чтобы назначить значения их свойств в объекте подкласса.

  • Подкласс loadobj метод возвращает восстановленный объект в load функция, которая загружает объект в рабочую область.

Следующий суперкласс (MySuper) и подкласс (MySub) определения показывают, как кодировать эти методы.

  • The MySuper класс задает loadobj метод, позволяющий загружать объект этого класса непосредственно.

  • Подкласс loadobj метод вызывает метод с именем reload после создания объекта подкласса.

  • reload сначала вызывает суперкласс reload метод для назначения значений свойств суперкласса и последующего назначения значения свойств подкласса.

classdef MySuper
   properties
      X
      Y
   end
   methods
      function S = saveobj(obj)
         S.PointX = obj.X;
         S.PointY = obj.Y;
      end
      function obj = reload(obj,S)
         obj.X = S.PointX;
         obj.Y = S.PointY;
      end
   end
   methods (Static)
      function obj = loadobj(S)
         if isstruct(s)
            obj = MySuper;
            obj = reload(obj,S);
         end
      end
   end
end

Вызывайте суперкласс saveobj и loadobj методы из подкласса saveobj и loadobj методы.

classdef MySub < MySuper
   properties
      Z
   end
   methods
      function S = saveobj(obj)
         S = saveobj@MySuper(obj);
         S.PointZ = obj.Z;
      end
      function obj = reload(obj,S)
         obj = reload@MySuper(obj,S);
         obj.Z = S.PointZ;
      end
   end
   methods (Static)
      function obj = loadobj(S)
         if isstruct(s)
            obj = MySub;
            obj = reload(obj,S);
         end
      end
   end
end

Похожие темы