exponenta event banner

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

Зачем внедрять конвертеры

Можно преобразовать объект одного класса в объект другого класса. Метод конвертера имеет то же имя, что и класс, в который он преобразует, например 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 сравнивает класс правой переменной с классом левой переменной. Если классы отличаются, MATLAB пытается преобразовать переменную Right-Side в класс переменной Left-Side. Для этого преобразования MATLAB сначала ищет метод класса Right-Side, имя которого совпадает с именем класса Left-Side. Такой способ представляет собой конвертерный способ, который аналогичен операции типовой передачи на других языках.

Если класс 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 метод в корневом суперклассе. convertObject метод должен преобразовать объект, не являющийся членом, в действительный член гетерогенной иерархии.

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

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