Преобразователи объектов

Зачем реализовывать конвертеры

Можно преобразовать объект одного класса в объект другого класса. Метод конвертера имеет то же имя что и класс, в который он преобразует, например char или double. Представьте метод конвертера как перегруженный метод конструктора другого класса. Конвертер берёт образец собственного класса и возвращает объект другого класса.

Конвертеры позволяют вам:

  • Используйте методы, определенные для другого класса

  • Убедитесь, что выражения с участием объектов смешанных типов классов выполняются правильно

  • Управление интерпретацией образцов в других контекстах

Предположим, что вы задаете polynomial класс. Если вы создаете double метод для polynomial можно использовать его для вызова других функций, которые требуют входов типа double.

p = polynomial(...);
dp = double(p);
roots(dp)

p является полиномиальным объектом, double является методом polynomial класс, и roots является стандартным MATLAB® функция, входные параметры которой являются коэффициентами полинома.

Конвертеры для классов пакетов

Классы, определенные в пакетах, могут иметь имена, которые являются разделенным точками списком имен. Фамилия является классом, а предыдущие имена являются пакетами. Назовите методы преобразования, используя квалификаторы пакетов в именах методов. Для примера, метод преобразования для преобразования объектов MyClass к объектам PkgName.PkgClass класс использует это имя метода:

classdef MyClass
   ...
   methods
      function objPkgClass = PkgName.PkgClass(objMyclass)
         ...
      end
   end
end

Вы не можете задать метод конвертера, который использует точки в имени в отдельном файле. Задайте конвертеры класса пакета в classdef файл.

Преобразователи и подписанное назначение

Когда вы делаете подписанный оператор назначения, такой как:

A(1) = myobj;

MATLAB сравнивает класс переменной Right-Side с классом переменной Left-Side. Если классы отличаются, MATLAB пытается преобразовать переменную Right-Side в класс переменной Left-Side. Для выполнения этого преобразования MATLAB сначала ищет метод класса Right-Side, имя которого совпадает с именем класса Left-Side. Такой способ является методом конвертера, который аналогичен операции typecast на других языках.

Если класс Right-Side не задает метод для преобразования из класса Right-Side в класс Left-Side, MATLAB вызывает конструктор класса Left-Side. передача ей переменной Правая сторона.

Например, предположим, что вы делаете следующие присвоения:

A(1) = objA; % Object of class ClassA
A(2) = objB; % Object of class ClassB

MATLAB пытается вызвать метод ClassB именованные ClassA. Если такой метод конвертера не существует, MATLAB вызывает ClassA конструктор, передающий objB как аргумент. Если на ClassA конструктор не может принять objB в качестве аргумента MATLAB возвращает ошибку.

Использовать cell массивы для хранения объектов разных классов.

Конвертер для разнородных массивов

Чтобы поддержать формирование разнородных массивов с использованием объектов, не являющихся частью гетерогенной иерархии, реализуйте convertObject метод в корневом суперклассе. The convertObject метод должен преобразовать объект, не являющийся членом, в допустимый представитель гетерогенной иерархии.

Для получения дополнительной информации о реализации convertObject метод, см matlab.mixin.Heterogeneous.

Похожие темы