Пакет: 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
class, чтобы стать корнем иерархии классов. Можно объединить образцы представителей этой иерархии в разнородный массив. Только образцы классов, выведенных из того же корневого класса, могут объединяться, чтобы сформировать допустимый разнородный массив.
Класс разнородного массива всегда является классом наиболее определенного суперкласса, общего для всех объектов массива. Например, предположим, что вы задаете следующую иерархию классов:
Формирование массива, содержащего образец 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 не может найти определение класса определенного объекта.
The matlab.mixin.Heterogeneous
класс предоставляет реализацию по умолчанию метода с именем getDefaultScalarElement
. Этот метод возвращает образец корневого класса гетерогенной иерархии, если корневой класс не является абстрактным.
Если корневой класс является абстрактным или не является соответствующим объектом по умолчанию для классов в гетерогенной иерархии, можно переопределить getDefaultScalarElement
метод для возврата образца класса, производного от корневого класса.
Задайте класс объекта по умолчанию путем переопределения matlab.mixin.Heterogeneous
метод называется getDefaultScalarElement
в корневом классе гетерогенной иерархии. Можно переопределить getDefaultScalarElement
только в корневом классе.
The getDefaultScalarElement
метод имеет следующую сигнатуру:
methods (Static, Sealed, Access = protected) function defaultObject = getDefaultScalarElement ... end end
The 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
способ.
The 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 выдает ошибку.
The matlab.mixin.Heterogeneous
класс совместим с указателем. Его можно объединить с классами handle или value при определении подкласса с помощью нескольких суперклассов. Информацию о совместимости указателей см. в разделе Совместимые классы Handle.
The matlab.mixin.Heterogeneous
класс является классом значений. Чтобы узнать, как классы значений влияют на операции копирования, смотрите раздел «Копирование объектов» в документации Основы Программирования MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.