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

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

Если самый определенный класс объекта не задает 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) определения показывают, как закодировать эти методы.

  • 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

Похожие темы