我被要求使用Matlab和GUIDE开发一个简单的GUI应用程序,它将与一个单独的后端引擎(也包括Matlab)进行交互。我来自Java和.Net背景。
Matlab文档对如何从技术上做到这一点非常有力,但是对“工程”过程却很少说,尤其是:
- 如何打包/命名空间函数,或创建库?
- 如何最好地在文件系统上布置文件?
- 如何实现典型的GUI模式,例如:MVC,观察者?
- 这些问题在Matlab开发中是否还有意义?
- 还有其他常见的成语/陷阱吗?
直接建议或指向良好参考材料的指针将非常有帮助。谢谢。
回答:
这是一个完全合理的问题,并且只要稍加注意,就可以编写易于维护的GUI代码。一些建议:
- 将GUI布局代码和“业务逻辑”放在不同的m文件中。 (有关示例代码,请参见此FileExchange提交 )。相关地,使用嵌套函数来维护GUI状态,而不是通过使用setappdata和getappdata或在结构周围传递。
- 通常,对回调使用嵌套和匿名函数 。嵌套函数类似于Java中的内部类,匿名函数实现词法闭包(如Ruby中的块)。
- 使用异常来优雅地处理错误。
- 给每个GUI对象(例如,滑块,轴)一个唯一且有意义的标签。例如,“ frequencySlider”或“ dataAxes”。这有助于加强GUI布局和逻辑之间的分离。
- GUIDE提供的gui控件是相当底层的,但是您可以通过为各种控件选择系统的标签名称来实现可重用的更高级别的组件(例如,滑块的“ frequencySlider”和关联的文本标签的“ frequencyLabel”) 。组件初始化例程可以使用findobj查找组件的各个部分并对其进行初始化。例如
函数myComponent(fig,basename) slideHandle = findobj(fig,'tag',[basename'Slider']); textHandle = findobj(fig,'tag',[basename'Label']); %初始化... set(sliderHandle,'Callback',@sliderCallback); %用于回调的嵌套函数;注意使用sliderHandle 函数sliderCallback(h,e) fprintf('当前值为%g \ n,get(sliderHandle,'Value')); 结束 结束
- 如果您使用的是R2008a或更高版本,则对OO开发有很多其他支持: