MATLAB使用MVC模式面向?qū)ο缶幊?/h1>

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末直秆,一起剝皮案震驚了整個(gè)濱河市胖翰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌切厘,老刑警劉巖萨咳,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異疫稿,居然都是意外死亡培他,警方通過(guò)查閱死者的電腦和手機(jī)鹃两,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舀凛,“玉大人俊扳,你說(shuō)我怎么就攤上這事∶捅椋” “怎么了馋记?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)懊烤。 經(jīng)常有香客問(wèn)我梯醒,道長(zhǎng),這世上最難降的妖魔是什么腌紧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任茸习,我火速辦了婚禮,結(jié)果婚禮上壁肋,老公的妹妹穿的比我還像新娘号胚。我一直安慰自己,他們只是感情好浸遗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布猫胁。 她就那樣靜靜地躺著,像睡著了一般跛锌。 火紅的嫁衣襯著肌膚如雪弃秆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天察净,我揣著相機(jī)與錄音驾茴,去河邊找鬼盼樟。 笑死氢卡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晨缴。 我是一名探鬼主播译秦,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼击碗!你這毒婦竟也來(lái)了筑悴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稍途,失蹤者是張志新(化名)和其女友劉穎阁吝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體械拍,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡突勇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年装盯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甲馋。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡埂奈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出定躏,到底是詐尸還是另有隱情账磺,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布痊远,位于F島的核電站垮抗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拗引。R本人自食惡果不足惜借宵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矾削。 院中可真熱鬧壤玫,春花似錦、人聲如沸哼凯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)断部。三九已至猎贴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝴光,已是汗流浹背她渴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔑祟,地道東北人趁耗。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疆虚,于是被迫代替她去往敵國(guó)和親苛败。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容