这是一个完全合理的问题,并且有一点小心,可以编写易于维护的GUI代码。一些建议:
将GUI布局代码和“业务逻辑”放在不同的m文件中。 (例如代码为this FileExchange submission)。相关地,使用嵌套函数来维护GUI状态,而不是传递使用setappdata和getappdata或传递结构。
通常,使用nested和anonymous 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
- 如果你正在使用R2008a或更高版本,有很多的OO开发额外的支持:
感谢您的建议,但客户坚持认为用户界面是本地的Matlab代码。 – 2008-12-03 18:42:28