1属桦、什么是MVC編程
??模型-視圖-控制器(Model-View-Controller:MVC)是最簡(jiǎn)單的面向?qū)ο缶幊棠J健?/strong>
- ??模型(Model):負(fù)責(zé)程序的內(nèi)在邏輯。
- ??視圖(View):負(fù)責(zé)構(gòu)造,展示用戶界面。
- ??控制器(Controller):負(fù)責(zé)處理用戶的輸入。
??具體來(lái)說(shuō)敏弃,模型反映程序的中心邏輯(計(jì)算),相對(duì)穩(wěn)定噪馏;視圖用來(lái)顯示程序界面給用戶麦到,根據(jù)用戶需要可能經(jīng)常調(diào)整;控制器負(fù)責(zé)處理一些與界面模型無(wú)關(guān)的功能欠肾,比如處理用戶的輸入等隅要。使用MVC模式的好多處在于可以將程序模塊化,負(fù)責(zé)計(jì)算的專門負(fù)責(zé)計(jì)算董济,負(fù)責(zé)顯示的專門負(fù)責(zé)顯示步清,還有一個(gè)專門的模塊用于處理用戶交互信息,方便程序的修改維護(hù)虏肾。
2廓啊、MATLAB創(chuàng)建類
??MATLAB可以使用:classdef 類名 < 父類
的命令形勢(shì)創(chuàng)建類,一般使用handle類為父類
classdef Model < handle
events % 事件模塊封豪,用于通信
...
end
properties % 屬性模塊谴轮,也就是變量
...
end
methods %方法模塊,也就是函數(shù)?
...
end
end
注意:MATLAB面向?qū)ο缶幊痰南嚓P(guān)語(yǔ)法吹埠,請(qǐng)自己查找相關(guān)的資料進(jìn)行學(xué)習(xí)第步,本文檔主要記錄我用MATLAB面向?qū)ο缶幊讨械囊恍┓椒记伞?/code>
3疮装、方法技巧記錄
-
仿真暫停/仿真繼續(xù)
??在進(jìn)行GUI編程時(shí),有時(shí)候希望通過(guò)點(diǎn)擊一個(gè)按鈕實(shí)現(xiàn)程序暫停粘都,點(diǎn)擊另一個(gè)按鈕實(shí)現(xiàn)程序繼續(xù)執(zhí)行廓推。MATLAB GUI中一個(gè)控件可以綁定一個(gè)與之對(duì)應(yīng)的回調(diào)函數(shù),以按鈕控件(pushbutton)為例翩隧,一個(gè)按鈕控件也許可以實(shí)現(xiàn)第一次點(diǎn)擊程序暫停樊展,第二次點(diǎn)擊程序繼續(xù),第三次點(diǎn)擊程序暫停堆生,第四點(diǎn)擊程序繼續(xù)...专缠,這可能需要給定一個(gè)變量判定是奇數(shù)次點(diǎn)擊還是偶數(shù)次點(diǎn)擊,編寫(xiě)一個(gè)條件選擇語(yǔ)句實(shí)現(xiàn)該功能淑仆,我自己并沒(méi)有這樣做涝婉。我的實(shí)現(xiàn)方式是,給定兩個(gè)按鈕控件蔗怠,兩個(gè)控件的大小和位置完全一致墩弯,兩個(gè)按鈕各有一個(gè)對(duì)應(yīng)的回調(diào)函數(shù),界面啟動(dòng)時(shí)蟀淮,將 仿真暫停
按鈕的Visible屬性設(shè)置為“on”,而將仿真繼續(xù)
按鈕的Visible屬性設(shè)置為"off"钞澳,這樣界面看到的就是仿真開(kāi)始
按鈕怠惶。在仿真開(kāi)始
按鈕的回調(diào)函數(shù)的開(kāi)始位置將仿真開(kāi)始
按鈕的Visble屬性設(shè)置為“off”,同時(shí)將仿真繼續(xù)
按鈕的Visible屬性設(shè)置為“on”轧粟,這樣就可以實(shí)現(xiàn)點(diǎn)擊仿真開(kāi)始
按鈕之后策治,看到的是仿真繼續(xù)
按鈕,在仿真繼續(xù)
按鈕的回調(diào)函數(shù)開(kāi)始位置將仿真繼續(xù)
按鈕的Visible屬性設(shè)置為“off”兰吟,同時(shí)設(shè)置仿真開(kāi)始
按鈕的Visible屬性為“on”通惫。假設(shè),仿真暫停
按鈕的句柄為hSimPause混蔼,回調(diào)函數(shù)名稱為Sim_Pause履腋;仿真繼續(xù)
按鈕的句柄為hSimContinue,回調(diào)函數(shù)名稱為Sim_Continue惭嚣,則相應(yīng)的回調(diào)函數(shù)的內(nèi)容如下:
function Sim_Pause(obj,~,~)
% 仿真開(kāi)始按鈕對(duì)應(yīng)的回調(diào)函數(shù)
set(obj.hSimPause,'Visible','off'); %將仿真開(kāi)始按鈕設(shè)置為不可見(jiàn)
set(obj.hSimContinue,'Visible','on'); %將仿真繼續(xù)按鈕設(shè)置為可見(jiàn)
...
uiwait(obj.hFig); % uiwait函數(shù)實(shí)現(xiàn)程序暫停遵湖,obj.hFig是當(dāng)前GUI窗口的句柄
end
function Sim_Continue(obj,~,~)
% 仿真開(kāi)始按鈕對(duì)應(yīng)的回調(diào)函數(shù)
set(obj.hSimContinue,'Visible','off'); %將仿真繼續(xù)按鈕設(shè)置為不可見(jiàn)
set(obj.hSimPause,'Visible','on'); %將仿真開(kāi)始按鈕設(shè)置為可見(jiàn)
...
uiresume(obj.hFig); % uiresume函數(shù)實(shí)現(xiàn)程序繼續(xù),obj.hFig是當(dāng)前GUI窗口的句柄
end
-
代碼創(chuàng)建面板(Panel)控件
??MATLAB創(chuàng)建GUI晚吞,如果采用guide命令創(chuàng)建延旧,則所有的代碼都會(huì)集中在一個(gè)m文件中,也就無(wú)法進(jìn)行模塊化槽地,如果要進(jìn)行模塊化編程迁沫,則需要在View類中用代碼創(chuàng)建GUI界面芦瘾。其中,文本(text)集畅、編輯(edit)近弟、按鈕(pushbutton)、開(kāi)關(guān)/切換按鈕(togglebutton)牡整、復(fù)選框(checkbox)藐吮、單選按鈕(radiobutton)、滑動(dòng)條(slider)逃贝、列表框(listbox)和彈出式菜單(popupmenu)控件可以通過(guò)uicontrol
函數(shù)創(chuàng)建谣辞。而面板(Panel)需要通過(guò)uipanel
函數(shù)創(chuàng)建。
-
代碼創(chuàng)建坐標(biāo)區(qū)(Axes)控件
??通過(guò)axes
函數(shù)創(chuàng)建.
-
代碼創(chuàng)建表格(Table)控件
??通過(guò)uitable
控件創(chuàng)建沐扳。需要說(shuō)明的是泥从,uitable對(duì)象的“ColumnName”和“RowName”屬性分別用于設(shè)置表格的列名和行名,“ColumnWidth”屬性用于指定列寬沪摄,如果設(shè)置成“auto”則可以根據(jù)內(nèi)容自動(dòng)調(diào)整列寬躯嫉,“ColumnEditable”屬性用于指定是否可編輯⊙罟眨可以通過(guò)cell函數(shù)初始化Data屬性值祈餐,用于指定表格的行列數(shù),例如要?jiǎng)?chuàng)建一個(gè)4行2列的表格哄陶,則初始化Data=cell(4,2);然后將“Data”屬性設(shè)置成Data即可帆阳。
-
代碼創(chuàng)建的靜態(tài)文本框(text)文本換行
??當(dāng)我們創(chuàng)建的靜態(tài)文本框的“String”屬性值比較長(zhǎng),希望換行顯示時(shí)屋吨,需要將屬性值放到一對(duì){}蜒谤,不同行的內(nèi)容用“,”隔開(kāi),例如:{第一行內(nèi)容至扰,第二行內(nèi)容}
鳍徽。
-
詢問(wèn)對(duì)話框questdlg
??假設(shè)我們?cè)贕UI中創(chuàng)建了一個(gè)按鈕控件,點(diǎn)擊之后關(guān)閉程序敢课,我們希望在點(diǎn)擊該按鈕之后彈出一個(gè)詢問(wèn)對(duì)話框阶祭,詢問(wèn)是否確認(rèn)關(guān)閉程序。代碼如下:
answer = questdlg('確認(rèn)退出?', '退出確認(rèn)框', '確認(rèn)','取消','取消');
% 通過(guò)switch語(yǔ)句來(lái)根據(jù)answer做出不同的相應(yīng)
switch answer
case '確認(rèn)'
close
case '取消'
quit cancel
end