在MATLAB中编写应用程序

大卫·加里森(David Garrison), MathWorks出版社


一个应用程序是一个自包含的MATLAB®程序,带有图形用户界面,使任务或计算自动化。完成任务所需的所有操作——将数据导入应用程序、对该数据进行计算以及获得结果——都在应用程序中执行。

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

图1所示。MATLAB应用程序库与自定义应用程序安装在“我的应用程序。”

编写应用程序

因为应用程序有一个用户与之交互的GUI,所以编写应用程序在某些方面与编写其他MATLAB程序是不同的。当你写一个应用程序时,你正在创建一个事件驱动程序。一旦你的应用程序出现在屏幕上,它通常会一直处于空闲状态,直到用户通过与应用程序交互(例如,通过输入文本或单击按钮)引发事件。作为对这个行动的回应,a回调函数是执行。应用程序的作者提供的这个回调函数,执行一些代码来响应触发它的事件。例如,单击a跑步按钮可能执行一个回调函数,该函数执行一些工程计算并更新GUI中显示的图形。

在事件驱动编程,每个事件的回调是必须获得的数据,它需要做的工作,更新应用需要,并存储它的结果,而其他回调可以访问它们很短的功能。底层的应用程序本质上是一起工作来完成大型任务的小功能的集合。当编写一个事件驱动程序,你面对编写的控制回调在您的应用程序和管理这些回调之间共享信息的问题。

MATLAB支金宝app持两种编写应用程序的方法。您可以:

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

大多数用户会发现它更容易使用指南图形化方式布局的GUI,并为应用程序的事件驱动的框架。不过,有些人喜欢额外的控制,他们从从头开始编写的应用程序获得。本文介绍了编写使用面向对象编程从头应用程序的方法。我们发现这种方法是建立强大的用户界面的有效方式。

使用对象:股票行情应用程序示例

一个对象管理的相关功能和共享的数据集合。对象是编写事件驱动的程序特别有用。然而不幸的是,很多程序员避免使用对象,要么是因为他们觉得他们太复杂,或者是因为他们觉得学习面向对象编程艰巨的任务。

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

当你创建一个对象时,你需要定义两个东西:它的列表特性-存储在对象中的数据-及其方法-对存储在对象属性中的数据进行操作的函数。

让我们来看一个简单的股票行情应用程序,随着时间的推移对于给定的股票代码更新股票价格的曲线图(图2)。

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

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

程序的第一行告诉MATLAB您正在定义一个新类。

Classdef.关键字定义了一个新的对象类型(一个“类”)。类名,simpleStockTicker,必须在MATLAB文件的名称相匹配。该行的最后一部分,<手柄,指示MATLAB不要复制该对象。你所有的应用程序都会这样开始;只有类名(simpleStockTicker在我们的例子)会发生变化。

接下来是属性部分。属性节由属性...结束语法。它是定义对象将使用的数据的地方。

这个类使用两组属性。前五个属性存储句柄到用户界面,图形,轴,画出对价格,是“符号”的标签就行了,编辑框,您可以输入股票代码名称的可视化组件。最后四个属性存储用于获取并绘制股票价格数据。这些性能可以通过类的任何方法一起使用。

使用属性有助于地址在创作应用的一个常见问题:在哪里存储的数据需要由应用程序的不同部分共享。传统上,最常用的方法已经使用guidata或存储的全局变量共享数据,但这些方法都有局限性。可以难以保持guidata先进的日期和访问这些数据时,应用程序需要它。存储为属性共享数据是很容易确定和容易地从在该应用的任何访问。

属性定义对象的属性后,使用方法结束……语法。第一种方法构造函数被用来创建对象。构造函数的名称总是一样的类的名称。

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

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

接下来的三个方法在这个类的回调。以下是CloseEquestfcn.回调图形窗口。当数字被关闭调用它。它看起来像你可能已经写其他的回调函数,有一个例外:变量应用程序必须在该方法的参数列表的开头插入。

需要注意的是一个类定义文件可以包含不回调,例如其他方法中,getQuote方法。这种方法是由类的其他方法调用。

使用类的优点

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

有关使用类构建应用程序的更多示例,请参阅“了解更多”部分。

发布于2012年- 92062v00

查看相关功能的文章