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

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

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

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

  • Задайте 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 от подкласса методы loadobj и saveobj.

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

Похожие темы

Была ли эта тема полезной?