2008-12-02 89 views
9

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

Matlab的文件是如何在技术上做到这一点强烈,但是很少对“工程”的过程,特别是:

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

  • 如何最好地将文件放在文件系统上?

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

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

  • 其他常见成语/陷阱?

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

回答

9

这是一个完全合理的问题,并且有一点小心,可以编写易于维护的GUI代码。一些建议:

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

  • 通常,使用nestedanonymous functions作为回调。嵌套函数与Java中的内部类相似,匿名函数实现词法关闭(就像Ruby中的块)。

  • 使用exceptions妥善处理错误。

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

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

 
    function myComponent(fig, basename) 
     sliderHandle = findobj(fig, 'tag', [basename 'Slider']); 
     textHandle = findobj(fig, 'tag', [basename 'Label']); 
     % initialize ... 
     set(sliderHandle, 'Callback', @sliderCallback); 

     % nested function for callback; note use of sliderHandle 
     function sliderCallback(h,e) 
      fprintf('current value is %g\n, get(sliderHandle,'Value')); 
     end 

     end 
0

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

+0

感谢您的建议,但客户坚持认为用户界面是本地的Matlab代码。 – 2008-12-03 18:42:28

3

我认为你(丹Vinton)在sw工程和设计模式上有一些知识,你正在寻找MatLab世界中的常见做法。为此,我将介绍一下GUI包MatLab工具箱,如优化,曲线拟合等。所有这些工具箱的GUI都带有源代码(它们是常规的MatLab脚本)。你也可以看看它或者MatLab Central的几个高级GUI包的源代码。这些将使您能够很好地表达MatLab中的常见做法。

+0

你的假设是正确的:我很高兴地编写了符合某些惯例的软件,这些惯例似乎并没有像Matlab这样的OO平台。 – 2008-12-03 18:41:52