Пакет: matlab.mixin Пакет
Суперкласс для образования гетерогенных массивов
matlab.mixin.Heterogeneous - абстрактный класс, поддерживающий формирование гетерогенных массивов. Гетерогенный массив - это массив объектов, отличающихся определенным классом, но все они являются производными от корневого класса или экземплярами корневого класса. Корневой класс является производным непосредственно от matlab.mixin.Heterogeneous.
Abstract | true |
HandleCompatible | true |
Сведения об атрибутах класса см. в разделе Атрибуты класса.
matlab.mixin.Heterogeneous.getDefaultScalarElement | Возврат объекта по умолчанию для операций с гетерогенными массивами |
Использовать matlab.mixin.Heterogeneous для определения иерархий классов, экземпляры которых можно объединить в разнородные массивы.
Следующее определение класса позволяет формировать гетерогенные массивы, которые объединяют экземпляры любых классов, полученных из HierarchyRoot.
classdef HierarchyRoot < matlab.mixin.Heterogeneous % HierarchyRoot is a direct subclass of matlab.mixin.Heterogeneous. % HierarchyRoot is the root of this heterogeneous hierarchy. end
Получение HierarchyRoot класс непосредственно из matlab.mixin.Heterogeneous включает HierarchyRoot , чтобы стать корнем иерархии классов. Экземпляры элементов этой иерархии можно объединить в гетерогенный массив. Только экземпляры классов, производные от одного корневого класса, могут объединяться для формирования допустимого гетерогенного массива.
Класс гетерогенного массива всегда является классом наиболее определенного суперкласса, общего для всех объектов массива. Например, предположим, что определяется следующая иерархия классов:

Формирование массива, содержащего экземпляр LeafA с экземпляром LeafB создает массив класса Middle.
harray = [LeafA LeafB]; class(harray)
ans = Middle
Формирование массива, содержащего экземпляр LeafC с экземпляром LeafD создает массив класса HierarchyRoot.
harray = [LeafC LeafD]; class(harray)
ans = HierarchyRoot
Формирование массива, содержащего экземпляр LeafA с другим экземпляром LeafA создает однородный массив класса LeafA.
harray = [LeafA LeafA]; class(harray)
ans = LeafA
Гетерогенные массивы можно формировать только с объектами, производными от одного корня иерархии (например, HierarchyRoot класс в иерархии, показанной ранее).
Можно формировать разнородные массивы с объектами, производными от нескольких суперклассов, но только одна ветвь в иерархии может определять разнородный корень.
Гетерогенные массивы являются результатом операций, которые создают массивы, содержащие экземпляры двух или более классов из гетерогенной иерархии. Обычно операция представляет собой конкатенацию или индексированное назначение. Например, эти инструкции образуют гетерогенный массив с использованием индексированного назначения.
harray(1) = LeafA; harray(2) = LeafC; class(harray)
ans = Middle
Если массив содержит объекты, производные от matlab.mixin.Heterogeneousназначение в него новых объектов может изменить класс массива. Например, рассмотрим однородный массив, содержащий только объекты LeafA класс.
harray = [LeafA,LeafA,LeafA]; class(harray)
ans = LeafA
Добавление объекта другого класса, производного от того же корня, в однородный массив преобразует класс массива в наиболее конкретный суперкласс.
harray(4) = LeafB; class(harray)
ans = Middle
Когда MATLAB ® вызывает метод, для которого доминирующим аргументом является гетерогенный массив:
Метод должен быть определен для класса гетерогенного массива либо непосредственно классом массива, либо путем наследования из суперкласса.
Метод должен быть Sealed = true (то есть не может быть переопределен подклассом). Если требуется запечатать унаследованный метод, см. раздел Запечатывание унаследованных методов.
Как и в случае однородного массива, класс гетерогенного массива определяет, какой метод класса выполняется для любого заданного вызова метода. MATLAB не учитывает класс отдельных элементов в массиве при отправке в методы.
Требование, согласно которому методы, вызываемые в гетерогенном массиве, должны быть Sealed = true обеспечивает правильное и предсказуемое поведение для всех элементов массива.
Необходимо переопределить методы, наследуемые вне гетерогенной иерархии, если эти методы не являются Sealed = true и вы хотите вызвать эти методы в гетерогенных массивах.
Например, предположим, что гетерогенный массив определяется подклассом matlab.mixin.SetGet, в дополнение к matlab.mixin.Heterogeneous. Переопределить set для вызова matlab.mixin.SetGet метод суперкласса в соответствии с требованиями проекта класса.
classdef HeterogeneousSetGet < matlab.mixin.SetGet & matlab.mixin.Heterogeneous properties P end methods(Sealed) function varargout = set(obj,varargin) [varargout{1:nargout}] = set@matlab.mixin.SetGet(obj,varargin{:}); end end end
Реализации методов могут использовать тот факт, что, учитывая гетерогенный массив harray и скалярный индекс n, выражение
harray(n)
не является гетерогенным массивом. Поэтому при вызове метода на одном элементе гетерогенного массива особые требования к гетерогенным массивам не применяются.
При работе с массивами объектов (как гетерогенными, так и однородными) MATLAB создает объекты по умолчанию для заполнения отсутствующих элементов массива путем вызова конструктора класса без аргументов. Заполнение отсутствующих элементов массива становится необходимым в следующих случаях:
Индексированное назначение, создающее массив с пробелами. Например, если harray не определен ранее:
harray(5) = LeafA;
Загрузка гетерогенного массива из MAT-файла, когда MATLAB не может найти определение класса определенного объекта.
matlab.mixin.Heterogeneous класс обеспечивает реализацию по умолчанию метода, вызываемого getDefaultScalarElement. Этот метод возвращает экземпляр корневого класса гетерогенной иерархии, если только корневой класс не является абстрактным.
Если корневой класс является абстрактным или не является объектом по умолчанию для классов в гетерогенной иерархии, можно переопределить getDefaultScalarElement для возврата экземпляра класса, производного от корневого класса.
Укажите класс объекта по умолчанию, переопределяя matlab.mixin.Heterogeneous метод вызывается getDefaultScalarElement в корневом классе гетерогенной иерархии. Можно переопределить getDefaultScalarElement только в корневом классе.
getDefaultScalarElement метод имеет следующую подпись:
methods (Static, Sealed, Access = protected) function defaultObject = getDefaultScalarElement ... end end
getDefaultScalarElement метод должен удовлетворять следующим критериям:
Статический - MATLAB вызывает этот метод без объекта.
Protected - MATLAB вызывает этот метод; пользователи объектов - нет.
Запечатано (не обязательно) - запечатывание этого метода для обеспечения того, чтобы пользователи разнородной иерархии не изменяли предполагаемое поведение класса.
Он должен возвращать скалярный объект
Его возвращаемое значение должно проходить через isa тест для корневого класса, то есть
(isa(getDefaultScalarElement,'HierarchyRoot')где HierarchyRoot - имя корневого класса гетерогенной иерархии. Это означает, что объект по умолчанию может быть экземпляром любого класса, производного от корневого класса.
Гетерогенные массивы требуют согласованного поведения индексирования и конкатенации. Поэтому подклассы matlab.mixin.Heterogeneous невозможно изменить поведение индексированной ссылки, индексированного назначения или конкатенации по умолчанию.
Невозможно переопределить следующие методы в подклассах:
cat
horzcat
vertcat
subsref
subsasgn
В случаях, связанных с множественным наследованием, в которых подкласс наследует от суперклассов в дополнение к matlab.mixin.Heterogeneous, суперклассы не могут определить ни один из этих методов.
Выписки из формы
a = [obj1 obj2 ...];
создайте массив, a, содержащие объекты, перечисленные в скобках.
Связывание Heterogeneous объекты одного и того же конкретного класса сохраняют класс объектов и не образуют разнородный массив.
Связывание Heterogeneous объекты, полученные из одного и того же корневого суперкласса, но имеющие различные конкретные классы, дают гетерогенный массив. MATLAB не пытается преобразовать класс каких-либо элементов массива, если все они являются частью одной корневой иерархии.
Выписки из формы
a(m:n) = [objm ... objn];
назначить элементы массива объекты правой стороны (m:n), указанный в левой части назначения.
Индексированное назначение гетерогенному массиву может выполнять одно из следующих действий:
Увеличение или уменьшение размера массива.
Перезаписать существующие элементы массива.
Изменение значений свойств объектов в массиве.
Изменение класса массива.
Укажите, является ли массив гетерогенным.
Выписки из формы
a = harray(m:n);
назначить элементы harray на которые ссылаются индексы m:n, в массив a.
Индексированная ссылка на гетерогенный массив возвращает поддиапазон исходного массива. В зависимости от конкретных элементов этого поддиапазона (m:n), результат может иметь класс, отличный от исходного массива, и не быть неоднородным.
При попытке сформировать гетерогенный массив с объектами, не производными от одного корневого класса, MATLAB вызывает convertObject метод, если он существует, для преобразования объектов в доминирующий класс. Реализация convertObject способ позволяет формировать гетерогенные массивы, содержащие объекты, не входящие в гетерогенную иерархию.
Предположим, что существует два класса A и B, где B не является производным от matlab.mixin.Heterogeneous, или где A и B являются производными от различных корневых классов, которые являются производными от matlab.mixin.Heterogeneous.
MATLAB пытается вызвать convertObject метод, реализуемый корневым классом A в следующих случаях:
Индексированное назначение A(k) = B
Горизонтальные и вертикальные конкатенации [A B] and [A;B]
[A,B] and [A;B]
Реализация convertObject метод, если требуется поддерживать преобразование объектов, класс которых не определен в гетерогенной иерархии. Нет необходимости внедрять этот метод, если конструкция класса не требует этого преобразования.
Только корневой класс гетерогенной иерархии может реализовать convertObject способ.
convertObject метод должен иметь следующую подпись.
methods (Static, Sealed, Access = protected) function cobj = convertObject(DomClass,objToConvert) ... end end
Где для индексированного назначения A(k) = B и конкатенация [A B]:
DomClass - имя класса массива, A.
objToConvert - объект, подлежащий преобразованию, B в данном случае.
cobj является законным членом гетерогенной иерархии, A принадлежит.
convertObject должен возвращать допустимый объект класса A или MATLAB выдает ошибку.
matlab.mixin.Heterogeneous класс совместим с дескриптором. Его можно комбинировать с классами дескрипторов или значений при определении подкласса с использованием нескольких суперклассов. Сведения о совместимости дескрипторов см. в разделе Совместимые классы дескрипторов.
matlab.mixin.Heterogeneous класс является классом значений. Сведения о том, как классы значений влияют на операции копирования, см. в разделе Копирование объектов в документации по основам программирования MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.