这是一个非常合理的问题,并且可以编写易于维护的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开发有很多额外的支持: