我被要求使用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查找组件的各个部分并初始化它们.例如
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
如果您使用的是R2008a或更高版本,那么对OO开发有很多额外的支持:
支持包/命名空间
使用类来实现各种OO范例.
对观察者模式的内置支持(请参阅"监听器"的帮助)