10

我被要求使用 Matlab 和 GUIDE 开发一个简单的 GUI 应用程序,它将与一个单独的后端引擎(也是 Matlab)进行交互。我来自 Java 和 .Net 背景。

Matlab 文档在技术上如何做到这一点上很强大,但对“工程”过程几乎没有提及,特别是:

  • 如何打包/命名空间函数,或创建库?

  • 如何最好地在文件系统上布局文件?

  • 如何实现典型的 GUI 模式,例如:MVC、观察者?

  • 这些问题在 Matlab 开发中是否有意义?

  • 还有其他常见的成语/陷阱吗?

直接建议或指向良好参考材料的指针将非常有帮助。谢谢。

4

3 回答 3

10

这是一个完全合理的问题,只要稍加注意,就可以编写易于维护的 GUI 代码。一些建议:

  • 将 GUI 布局代码和“业务逻辑”放在不同的 m 文件中。(有关示例代码,请参阅此 FileExchange 提交)。相关地,使用嵌套函数来维护 GUI 状态,而不是使用 setappdata 和 getappdata 传递或传递结构。

  • 通常,使用嵌套匿名函数进行回调。嵌套函数类似于 Java 中的内部类,匿名函数实现词法闭包(如 Ruby 中的块)。

  • 使用异常优雅地处理错误。

  • 给每个 GUI 对象(例如,滑块、轴)一个唯一且有意义的标签。例如,“frequencySlider”或“dataAxes”。这有助于加强 GUI 布局和逻辑之间的分离。

  • GUIDE 提供的 gui 控件是相当低级的,但您可以通过为各种控件选择系统标签名称来实现可重用的高级组件(例如,滑块的“frequencySlider”和关联文本标签的“frequencyLabel”) . 组件初始化例程可以使用 findobj 来查找组件的各个部分并对其进行初始化。例如

    功能我的组件(无花果,基本名称)
       sliderHandle = findobj(fig, 'tag', [basename 'Slider']);
       textHandle = findobj(fig, 'tag', [basename 'Label']);
       % 初始化...
       设置(sliderHandle,'回调',@sliderCallback);

       % 用于回调的嵌套函数;注意使用sliderHandle
        函数滑块回调(h,e)
            fprintf('当前值为 %g\n, get(sliderHandle,'Value'));
        结尾

      结尾
  • 如果您使用的是 R2008a 或更高版本,则对 OO 开发有很多额外的支持:
于 2008-12-08T21:42:35.770 回答
3

我假设您(Dan Vinton)在软件工程和设计模式方面有一些知识,并且您正在寻找 MatLab 世界中的常见做法。为此,我将查看 MatLab 工具箱的 GUI 包,例如优化、曲线拟合等。所有这些工具箱的 GUI 都带有它们的源代码(它们是常规的 MatLab 脚本)。您还可以查看它或MatLab Central中几个高级 GUI 包的源代码。这些将为您提供 MatLab 中常见实践的良好表示。

于 2008-12-03T11:40:54.630 回答
0

我没有在 matlab 中创建 GUI 的经验,但如果您的公司愿意在它上面花钱,matlab for .net 可能是一个更快的选择。它将允许您编写 matlab 代码,该代码将在可以从 .net 调用的 com 组件中进行敲击,这意味着您可以用任何您想要的 .net 语言编写 GUI。它的链接如下。 http://www.mathworks.com/products/netbuilder/

于 2008-12-03T11:40:03.930 回答