技术文章和通讯

介绍在MATLAB面向对象编程

McGarrity斯图尔特和亚当Sifounakis MathWorks


在创建应用软件时,重要的是组织各种构件的软件分为相关的组。例如,一个自定义数值解算器可能需要一些配置参数和例程来执行计算的全套。面向对象编程(OOP)允许您组解算器的配置参数(属性)的函数(方法)成一个单一的定义,或。所有用户需要正确执行这个规划求解定义在这个班。

一个对象是一个类的实例。当程序执行时,根据其类定义创建对象和行为的方式定义的类。一个对象的属性代表其状态,其方法代表了一个用户可以执行的所有操作。代码作者通过这种方式,可以很容易地组的所有相关数据和功能软件系统和一个用户可以很容易地找到并使用所有的功能代码的作者了。

下面的示例使用面向对象编程来构建一个应用程序,这个应用程序将分析传感器数据从传感器的数组。

应用实例:分析传感器阵列数据

传感器阵列(图1)是一家集传感器,通常安排在一条线,用于样品中如空气,水,或地面雷达、声纳、移动通信。通过收集多个样本点在空间,你可以从被采样中提取附加信息。

图1所示。传感器阵列检测两个遥远的电磁来源未知的角度。

图1所示。传感器阵列检测两个遥远的电磁来源未知的角度。

我们的应用程序使用一个传感器阵列来确定到达方向(DOA)的多个遥远的电磁源,如无线电信标和雷达发射机。在这个场景中,我们将尝试估计两个来源的角度θ1和θ2相对于传感器阵列指向的方向。

审核项目和数据操作

对于这个应用程序,我们需要存储和表示以下数据:

  • 传感器和样本的数量
  • 采样传感器数据
  • 传感器采样率
  • 传感器间距
  • 波长的远处
  • 波的速度
  • 传感器数据集名称或描述

我们将使用一个简单的快速傅里叶变换(FFT)的方法来估计DOA的来源。这种技术可以分为零件和实现为一个操作的集合。少量的实用操作将被执行,帮助简化开发工作。例如,我们必须:

  • 从合成数据或创建数据集获取实时数据
  • 检查和修改数据设置和参数值
  • 情节的样本数据来帮助解释和验证
  • 计算和情节的功率谱数据集大小(通过简单的平方FFT方法)
  • 找到峰值功率谱估计DOA的来源

确定了我们需要的数据表示和我们需要执行的活动,我们可以表示数据和类属性和类方法的活动。

代表数据与类属性

我们首先定义一个类来描述传感器阵列。这个初始表示只包含数据项和代表类属性。

你定义一个类在MATLAB类定义文件,它始于classdef关键字和终止结束关键字。在类定义块,额外关键字块将描述类的不同方面,如类属性和类方法。图2所示的定义文件描述了一个类悲伤而已(传感器阵列数据集),我们需要的所有数据项中列出代表一个属性。

图2。类定义文件悲伤而已。m属性。

图2。类定义文件sads.m与属性。

创建一个对象和访问属性

创建一个对象或类的实例,我们定义,我们使用的声明

> > s =悲伤而已;

设置一个属性的值,我们指定其名称字段的结构一样

> >。NumSensors = 16;

我们可以显示对象,看到所有可用的属性和当前值,通过输入它的名字。

> > s s =便悄然属性:波长:[]c: 300000000 NumSensors: 16 NumSamples:[]数据:[]间距:[]SampleRate:[]的名字:[]

所有的属性,除了NumSensorsc仍然是空的。数据集可以作为识别悲伤而已对象使用函数,isa功能,与结构的命令,这是不可能的。

> >类(s) ans =“悲伤而已”

识别类的变量的能力是重要的用户数据集创建代码操作,因为它让他们确定可用的数据项是可以合法进行访问和操作。

错误检查

如果你使用结构来表示数据,你可以添加一个新的字段名在任何时候只通过指定一个新的字段名并给它分配一个值。这个功能尤其方便当你尝试和原型设计算法。然而,如果你拼错一个字段名,静静地添加一个新的领域,这可能会导致一个错误后很难诊断。

与结构不同,你不能动态添加一个新的属性对象只需指定一个新的属性名称和给它分配一个值。如果你拼错一个对象属性的名字,MATLAB立即一个错误的问题。这种额外的错误检查级别是有用的对象时被用户访问比作者不太熟悉,这是常见的大型应用程序的开发过程中。

控制对数据的访问

类给你伟大的控制属性访问。例如,他们让你禁止修改属性,隐藏属性,或因为它动态地计算。你访问控制属性通过指定属性属性在类定义文件。我们扩大在图2中的类定义文件通过将当前的属性列表划分为多个属性块,每个具有独特属性属性:GetAccess,常数,依赖(图3)。

图3。类定义文件悲伤而已。m具有财产属性。

图3。类定义文件sads.m与财产属性。

你禁止修改通过设置一个属性常数属性。在我们的示例中,我们将设置光的速度属性c是常数。因为常量属性不会改变,他们可以简单地通过引用访问类名。

> >悲伤而已。cans = 300000000

你只读通过设置一个属性SetAccess私有属性。你只能使一个属性可见通过设置操作的方法GetAccess私有属性,我们将做的波长财产。

你可以自由改变的名称或特征对象的私有财产而不影响用户。这“黑盒”的方法来定义的一个软件,叫做封装,防止用户的对象变得依赖一个实现细节或特征变化和打破他们的代码。

你指定一个属性计算只有当要求通过设置它依赖属性。

然后指定一个时自动调用get方法访问属性。看到“Get和Set方法的访问属性”本文的部分有关如何指定类方法。在我们的应用程序中,我们设置了NumSensorsNumSamples属性相关的。

用类方法实现操作

方法,或者可以在对象上执行的操作,被指定为一个函数在一个方法阻止列表。一个类可以包含许多类型的方法,实现不同的目的,每个指定的不同。下面的部分将介绍这些类型的方法。

我们将添加一个方法阻止悲伤而已定义文件,并添加每个新方法在这个块(图4)。

图4。类定义文件悲伤而已。m方法,在MATLAB中显示编辑器。为了便于查看、代码折叠功能是用来隐藏的代码。

图4。类定义文件sads.m与方法,在MATLAB中显示编辑器。为了便于查看、代码折叠功能是用来隐藏的代码。

指定一个构造函数方法

在我们的示例中,我们指定一个构造函数方法,允许用户将提供参数用于创建对象。构造函数方法通常执行数据初始化和验证。现在已经创建的对象

> > s =悲伤而已(数据、波长SampleRate、间距、名称);

实现特定于应用程序的方法

我们将添加几个方法来实现特定于应用程序的数据集上执行的操作。大多数方法将对象作为输入参数(例如,obj)和访问对象属性通过引用这个变量(例如,obj.NumSamples),在这个方法:

函数杂志= magfft (obj, zpt)杂志= 0 (obj。NumSamples、zpt);…结束

虽然它需要额外的语法,通过对象引用属性变量可以帮助区分他们从本地函数变量,如玛格以上。

调用方法

方法就像函数,对象作为一个参数传递。我们可以估计源DOA的角度通过调用doa我们班的方法。

> >角= doa (s)角= -10.1642 - 18.9953

DOA角近似的真实位置如图1所示,-10°和20°。

访问属性的Get和Set方法

您可以验证属性或实现依赖属性通过指定相关的设置和获取方法。这是的get方法NumSensors财产。

函数NumSensors = get.NumSensors (obj) NumSensors =大小(obj。2)数据;结束

获取和设置方法时自动属性访问,例如

> > N = s.NumSensors;

指定现有的MATLAB函数重载的方法

重载允许您重新定义现有的MATLAB函数工作对象提供一个函数与这个名字在你的列表的方法。在我们的应用程序中,我们将包括一个重载的情节方法,提供了一个函数来许多熟悉MATLAB可视化数据集的用户(图5)。

> >的情节(s)
图5。重载方法专业传感器阵列数据集的阴谋。

图5。重载方法专业传感器阵列数据集的阴谋。

这个定制的阴谋方法以最合适的方式代表了信息数据集,注释和所有可用的信息。它只在执行对象,它已经定义了一个更健壮的方法比操纵订单目录的路径。

如果你想专门为你的类的行为,你也可以通过使用重载操作符,甚至基本的索引方法有特殊的名字。

进一步开发应用程序

我们创建的类,在这个例子中代表我们的传感器阵列数据集,并允许我们轻易地执行一个复杂的、专门的数据分析,包括主要的测向操作。我们可以使用这个类来快速评估的性能FFT-based技术在不同的场景中。

我们可以扩大使用额外的OO技术的应用程序。例如,我们可以做以下几点:

  • 定义现有类的子类(重用的定义更广泛的范畴来定义一个更具体的子类)与继承
  • 指定静态方法,让我们定义一个操作类作为一个整体
  • 使用处理类引用的行为,使我们能够使数据结构如链表或处理大数据集复制它
  • 定义事件和监听器,让我们监视对象属性或操作

这些技术管理复杂性增强我们的能力,让我们能够进一步在应用程序中定义和行为的关系。

因为它是使用面向对象技术,构建的应用程序现在已经足够健壮其他人使用和维护,并且可以与其他应用程序集成在一个组织。

2020年出版的

查看相关文章的能力

为相关行业观点文章