Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-07, 23:17   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
默认 Matlab GUI应用程序中的软件工程和模式?

我被要求使用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开发有很多其他支持:
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:50


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.