exponenta event banner

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

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

Если наиболее определенный класс объекта не определяет 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

Связанные темы