用MATLAB编写应用程序

大卫·加里森,MathWorks公司

一个应用程序是一个自包含的MATLAB®程序,具有图形用户界面,可以自动任务或计算。所有的任务,获取数据完成到应用程序,对数据进行计算,并获得所需的操作结果,是在应用程序内进行。

在R2012b开始,你可以打包自己的应用程序与其他MATLAB用户共享。您也可以下载其他人从编写的应用程序MATLAB中央文件交换或其他来源,并在应用程序库(图1)安装它们。

图1. MATLAB应用程式上安装了一个自定义应用程序画廊“我的应用”。

编写应用程序

因为一个应用程序具有一个GUI,它与用户的交互,从写其它MATLAB程序写入在某些方面应用程式而不同。当你写一个应用程序,要创建事件驱动的程序。一旦您的应用程序在屏幕上,它通常直到用户通过与应用 - 例如交互,通过输入文字或点击按钮导致事件仍然闲置。针对这一动作,回调函数被执行。该回调函数,由应用的作者提供,以响应触发它的事件执行一些代码。例如,单击运行按钮可能执行执行一些工程计算和更新曲线显示在GUI中的回调函数。

在事件驱动的编程中,每个事件回调都是一个简短的函数,它必须获得执行任务所需的数据,根据需要更新应用程序,并将结果存储在其他回调函数可以访问的地方。底层的应用程序本质上是一个小函数的集合,它们一起工作来完成更大的任务。在编写事件驱动程序时,您将面临为应用程序中的控件编写回调以及管理在这些回调之间共享的信息的问题。

MATLAB支万博1manbetx持两种方法来编写应用程序。您可以:

  • 从头开始编写代码
  • 使用指南,MATLAB图形用户界面设计环境

大多数用户发现使用GUIDE以图形化的方式布局GUI和为应用程序生成事件驱动的框架更容易。然而,有些用户更喜欢从从零开始编写应用程序中获得额外的控制。本文描述了一种使用面向对象编程从头开始编写应用程序的方法。我们发现这种方法是创建健壮用户界面的有效方法。

使用对象:股票行情应用实施例

对象管理一组相关函数及其共享的数据。对象对于编写事件驱动程序特别有用。然而,不幸的是,许多程序员避免使用对象,要么是因为他们认为对象太复杂,要么是因为他们发现学习面向对象编程的任务令人生畏。

别担心。你不需要成为面向对象编程的专家来使用对象来构建应用程序,你只需要理解一些基本的概念。

当你创建一个对象,你需要定义两个东西:它的列表属性-the数据存储在对象内,和它的方法其存储在所述对象的属性数据进行操作-the功能。

让我们来看一个简单的股票行情应用程序,它更新给定股票代码随时间变化的股票价格图(图2)。

图2。简单的股票行情应用程序。

simpleStockTickerMATLAB程序创建该对象实现了应用。

该计划的第一行告诉MATLAB正在定义一个新的类。

classdef关键字定义一个新的类型的对象(一个“类”)。类的名称,simpleStockTicker,必须匹配MATLAB文件的名称。这句话的最后一部分,<处理,指示MATLAB不作此对象的副本。所有的应用程序将启动这样的;只有类名(simpleStockTicker在我们的例子中)将改变。

性能部分来自未来。属性部分是由定义属性结束……句法。这是你定义将由对象中使用的数据。

这个类使用两组属性。前五个属性存储用户界面可视化组件的句柄——图形、轴、绘制的价格线、“符号”标签和编辑框,您可以在编辑框中键入股票报价器符号名称。最后四个属性存储用于获取和绘制股票价格的数据。类的任何方法都可以使用这些属性。

使用属性可以帮助解决创作应用程序时的一个常见问题:在哪里存储需要由应用程序的不同部分共享的数据。传统上,最常见的方法是使用guidata或全局变量来存储共享数据,但这些方法都有局限性。它很难保存guidata并在应用程序需要时访问数据。存储为属性的共享数据很容易定义,也很容易从应用程序的任何地方访问。

定义对象的属性后,您可以定义使用它的方法方法...结束句法。第一种方法,所述构造函数,用于创建对象。构造函数的名称始终与类的名称相同。

注意构造必须有一个输出变量。输出变量被用来指由构造函数创建的对象。你可以给它任何你喜欢的名字。在我们的例子中的类使用该名称应用程序。输出变量的特殊之处在于,它在类定义文件中用于引用对象的属性和方法。例如,您可以引用对象的NumValues通过使用语法属性app.NumValues。在类的所有方法都用这个特殊的变量作为第一个参数定义。

在我们的例子中,构造函数执行三项任务:它会在用户界面中所有的视觉对象,初始化要绘制的价格,并创建一个Timer对象,将定期更新,以获取最新的股票价格。更新速率由控制app.TimerUpdateRate类的属性。

这个类中接下来的三个方法是回调。下面是CloseRequestFcn图形窗口的回调。它在图形关闭时被调用。它看起来像您编写的其他回调函数,但有一个例外:变量应用程序必须插入到方法的参数列表的开头。

请注意,类定义文件可以包含其他不是回调的方法—例如,获得报价方法。这个方法由类的其他方法调用。

使用类的优点

程序员经常促进了传统的函数式编程面向对象编程的优点。他们引用封装,抽象化多态性作为原因使用面向对象的方法。虽然这些都是有用的概念,你并不需要了解他们写你的应用程序作为MATLAB类。使用一个类来创建应用最重要的原因是,类提供了管理你的应用程序的不同部分共享数据的有效方式。对象持有的属性都需要您的应用程序的方法(回调)之间共享的数据。有关使用您不再需要担心guidata或全局变量,因为现在所有的数据都存储在类的属性。

对于应用程序的更多示例使用类构建,请参阅了解更多部分。

发布时间2012 - 92062v00


查看文章的相关能力