文档

设计异构类层次结构

创建支持异构阵列的类金宝app

本主题描述定义支持异构数组形成的类所涉及的概念。金宝app有关现有MATLAB的连接的信息®对象,请参见以下主题。

有关使用异构阵列的示例,请参见异构阵列的类层次结构

MATLAB数组

MATLAB通过数组中包含的对象的类来确定数组的类。MATLAB不同于某些定义对象指针或引用数组的语言。在这些其他语言中,数组的类型与数组中对象的类型不同。您可以访问数组的元素并分派给这些元素上的方法,但不能像在MATLAB中那样对整个数组调用对象方法。

MATLAB中的对象数组是同类的。由于这种同质性,您可以对整个数组执行操作,例如将数值矩阵相乘。通过定义派生自公共超类的类的层次结构,可以形成异构数组。单元格数组为数组类型提供了选项,数组类型可以保存不同种类的不相关对象。

异构的层次结构

当这些类是异构层次结构的一部分时,可以形成作为公共超类的子类的对象数组。MATLAB异构类层次结构:

  • 来源于matlab.mixin.Heterogeneous

  • 定义一个直接派生的根超类matlab.mixin.Heterogeneous

  • 密封子类继承的方法。

例如,在下面的图表中,形状是异构层次结构的根源。

异构阵列

异构数组是一个对象数组,这些对象在其特定的类中有所不同,但所有对象都派生自公共超类或是公共超类的实例。公共超类构成类层次结构的根,您可以将这些类组合到异构数组中。

公共超类必须派生matlab.mixin.Heterogeneous。可以对整个数组调用的方法对于所有子类都必须具有相同的定义。

异构层次结构对:

  • 创建属于不同类但属于相关层次结构一部分的对象数组。

  • 作为一个整体调用数组上最特定的公共超类的方法

  • 对数组使用点表示法访问最特定的通用超类的属性

  • 使用对象数组支持的常用运算符金宝app

  • 金宝app支持返回最特定类的数组的数组索引(标量或非标量)

异构阵列概念

  • 异构数组 - 其中两个或更多个元素属于不同特定类的数组。所有元素都派生来自同一个根超类。

  • 根超类 - 直接从中派生matlab.mixin.Heterogeneous. 根超类可以是抽象的,也可以是具体的。只有根超类的具体子类才能形成异构数组。

  • 最具体的常见超级类 - 继承层次中的最特定类,异构阵列中的所有对象导出。最具体的常见超类可以是根超类或由当前阵列中的对象共享的更特定的超类。

  • 异类数组的类-异类数组中所有对象从中派生的最特定的公共超类。从异类数组中添加和删除对象可以更改实例共享的最特定的超类。此更改导致异类数组的类发生更改。最特定的公共超类rclass可以是抽象的。

异构阵列的性质

图中的异构层次结构说明了异构阵列的特性:

  • 数组类

  • 属性访问

  • 方法调用

异构阵列类

异构数组的类是该数组的对象所共享的最特定的超类。

如果以下条件为真,则串联和下标赋值操作将返回异类数组:

  • 赋值语句右侧的对象是不同的类

  • 赋值语句右侧的所有对象都派生自的公共子类matlab.mixin.Heterogeneous

例如,通过连接这些类的对象来形成数组。阶级A1甲级

a1 =(性能指标,SpecificB);类(a1)
ans = ClassA

如果数组包含类的对象具体的,一类a2根超类

a2 =[性能指标、SpecificB SpecificC];类(a2)
ans=根超类

如果指定了类的对象具体的到数组A1使用索引,类A1变成根超类

a1(3)=c;类别(a1)
ans=根超类

如果数组只包含一个类的对象,则该数组不是异构的。例如,类一个具体的

a=[SpecificA,SpecificA];类别(a)
ans=特定

属性访问

当阵列的类定义属性时,访问阵列属性,带点表示。阵列的类是最具体的常见超类,可确保所有对象继承相同的属性。

例如,假设甲级定义一个名为建议1

a1 =(性能指标,SpecificB);A1.Prop1.

建议1使用点表示法返回建议1用于数组中的每个对象。

方法请求

要在异构数组上调用方法,数组的类必须将该方法定义为或继承为密封.例如,假设根超类定义A.密封方法称为超级机制

对数组中的所有对象调用该方法a2

a2=[具体A、具体B、具体C];a2.超级方法

密封该方法(以便它不能在子类中被重写)可以确保数组的所有元素都存在相同的方法定义。在数组的单个元素上调用该方法调用的方法实现与在整个数组上调用该方法调用的方法实现相同。

不支金宝app持的层次结构

异构层次结构在获取默认对象、确定数组的类以及将类对象转换为其他类型时不能有二义性。层次结构的成员只能从一个根超类派生(也就是说,只能从matlab.mixin.Heterogeneous).

此图显示了不允许的层次结构:

甲级派生自作为的子类的两个类matlab.mixin.Heterogeneous

下一个图显示了两个独立的异构层次结构。甲级只有一个根超类(称为其他基类)。异构层次结构不再模棱两可:

默认对象

默认对象是通过调用不带参数的类构造函数返回的对象。MATLAB在以下情况下使用默认对象:

  • 索引赋值创建数组元素中有间隙的数组。例如,指定数组的第一个元素h索引5

    h(5)=A类(arg1,arg2);

    MATLAB使用默认对象填充未指定的位置。

  • 当数组中特定对象的类定义不可用时,从mat文件加载异构数组。MATLAB用默认对象替换对象。

异构层次结构使您能够为该层次结构定义默认对象。这个matlab.mixin.Heterogeneous类提供了一种调用方法的默认实现getDefaultScalarElement.除非根超类是抽象的,否则此方法将返回异构层次结构的根类的实例。

如果根超类是抽象的或不适合于默认对象,则重写getDefaultScalarElement方法。实现getDefaultScalarElement覆盖根超类,直接源于matlab.mixin.Heterogeneous

getDefaultScalarElement必须返回从根超类派生的标量对象。有关如何实现此方法的详细信息,请参见getDefaultScalarElement

赋值和连接期间的转换

如果您创建一个异构数组,其中包含不是从相同根超类派生的对象,MATLAB将尝试调用一个被调用的方法convertObject.实现convertObject将对象转换为适当的类。这个方法没有默认的实现。

要支持金宝app使用不属于异构层次结构的对象形成异构阵列,请实现convertObject方法在根超类中。的convertObject方法必须将非成员对象转换为异构层次结构的有效成员。

有关实施convertObject方法,参见matlab.mixin.Heterogeneous

异构抽象类的空数组

对于同构数组,MATLAB不允许初始化抽象类的空数组。但是,如果类是异构层次结构的一部分,则可以初始化抽象类的空数组。在您事先不知道具体元素的类的情况下,初始化空的异构数组非常有用。

例如,假设根超类是一个抽象类,它是异构层次结构的根。方法初始化数组静态方法:

ary=RootSuperclass.empty;

相关话题