Пакет: 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 вызывает этот метод без объекта.
Защищенный — 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.