0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用MATLAB進(jìn)行面向?qū)ο缶幊?/h1>

01

定義類

1.1 一個(gè)最簡(jiǎn)單的類

使用classdef ... end語(yǔ)句塊來(lái)標(biāo)識(shí)一段類的定義,這一點(diǎn)和MATLAB其他代碼塊的語(yǔ)法風(fēng)格是類似的,如定義函數(shù)的function ... end、定義循環(huán)的for ... end等等。要注意類定義文件的文件名要保持和類名一致,否則MATLAB在運(yùn)行時(shí)會(huì)按照類定義文件名作為可被識(shí)別的標(biāo)識(shí)符。

如下面這個(gè)示例中,定義了Student類,以及它的屬性和方法。這個(gè)實(shí)例展示了定義類的最簡(jiǎn)單的方法,MATLAB還提供了很多高級(jí)的類特性定義方法,接下來(lái)的章節(jié)會(huì)逐一介紹。

圖片

1.2 類文件組織

對(duì)于一個(gè)簡(jiǎn)單類來(lái)說(shuō),所有的方法實(shí)現(xiàn)可以放在同一個(gè)類文件中。但是隨著類實(shí)現(xiàn)的功能逐漸龐大,就可以把某一個(gè)類方法的實(shí)現(xiàn)單獨(dú)放在一個(gè)類方法文件中,和類定義文件一起放在以<@類名>的類文件夾下。同時(shí),通過(guò)把類文件或者普通函數(shù)文件放在以<+包名>的包文件夾下,可以讓類有獨(dú)立的名稱空間。使用包文件夾中的類或者函數(shù)時(shí),必須加入包名和點(diǎn)操作符修飾(包括包內(nèi)的類在使用包中其他類時(shí)也要使用包名修飾,不會(huì)因?yàn)樵谕粋€(gè)包內(nèi)就能搜索到)。

圖片

圖片

02

類屬性

2.1 屬性特性

通過(guò)屬性特性來(lái)約束屬性的行為,語(yǔ)法是在屬性關(guān)鍵字之后添加小括號(hào)括起的鍵值對(duì)。常用的屬性特性有Access、Constant、GetAccess、SetAccess等。當(dāng)用戶不指定屬性特性時(shí),它們有各自的默認(rèn)值,如Access默認(rèn)就是public

圖片

圖片

2.2 屬性驗(yàn)證

MATLAB是一種弱類型的語(yǔ)言,一般情況下MATLAB會(huì)做自動(dòng)類型推斷。MATLAB提供了很多方式來(lái)驗(yàn)證屬性滿足用戶的某種需求,如必須是string類型、必須滿足一定的維度要求、必須大于某一數(shù)值等。這些都是通過(guò)類的屬性驗(yàn)證語(yǔ)法來(lái)實(shí)現(xiàn)的。

圖片

圖片

這里額外提一下屬性驗(yàn)證函數(shù),除了自帶的一些屬性驗(yàn)證函數(shù)(如mustBePositive、mustBeGreaterThan、mustBeNumeric)等,還允許用戶自定義屬性驗(yàn)證函數(shù),這些屬性驗(yàn)證函數(shù)放在和類定義的語(yǔ)句之后。

圖片

03

類方法

3.1 方法調(diào)用

C++不同的是,MATLAB沒(méi)有傳遞給類方法的隱藏類對(duì)象,如this指針,必須將類的對(duì)象顯式傳遞給方法。對(duì)于普通方法,通常第一個(gè)參數(shù)用于傳遞類對(duì)象,也通常寫作obj。這一點(diǎn)和python的__init__(self, ...)很像。調(diào)用方法時(shí),可以使用函數(shù)式或者點(diǎn)操作符,這里我認(rèn)為函數(shù)式調(diào)用方法是MATLAB的特色。函數(shù)式調(diào)用方法時(shí),會(huì)涉及到對(duì)象匹配的優(yōu)先級(jí)判定,因?yàn)椴煌膶?duì)象可能會(huì)存在同名的方法,由MATLAB的內(nèi)部機(jī)制決定執(zhí)行哪個(gè)類對(duì)象的方法。

圖片

圖片

** 3.2 方法特性**

和屬性特性一樣,也可以對(duì)方法指定不同的特性。常用的特性參數(shù)如Access、Static。這里特別提一下Static參數(shù),當(dāng)Static = true時(shí),方法為靜態(tài)方法,不需要使用類對(duì)象的任何屬性參數(shù)。靜態(tài)方法通常作為實(shí)現(xiàn)類的功能函數(shù)存在。類似的函數(shù)還有類相關(guān)函數(shù),即放在同文件下,類定義之后的局部函數(shù)。

圖片

注意這里grow方法返回了對(duì)象本身,這是因?yàn)槿绻薷牧祟悓?duì)象的屬性,需要返回對(duì)象本身才能體現(xiàn)修改。猜測(cè)這是因?yàn)镸ATLAB的函數(shù)是按值傳遞的特性造成的,因此修改對(duì)象后必須返回對(duì)象的副本。如果對(duì)象繼承自handle類,那么可以避免這一步,handle類是按引用傳遞的。

3.3 函數(shù)重載

重載 MATLAB 函數(shù)的方法是定義一個(gè)與要重載的函數(shù)同名的類方法。在類實(shí)例中調(diào)用該函數(shù)時(shí),MATLAB 會(huì)調(diào)度該類方法。還可以通過(guò)用適當(dāng)?shù)拿Q定義類方法來(lái)重載 MATLAB 算術(shù)、邏輯、關(guān)系和索引運(yùn)算符。這些運(yùn)算符有對(duì)應(yīng)的特殊函數(shù)名,如運(yùn)算符 + 對(duì)應(yīng)的內(nèi)建函數(shù)就是plus。

圖片

3.4 構(gòu)造函數(shù)

構(gòu)造函數(shù)是一種特殊的類方法,和類同名,且必須放在類定義文件中,不可以放在單獨(dú)的文件中??梢栽跇?gòu)造函數(shù)中使用其他函數(shù)一起完成構(gòu)造。

圖片

3.5 創(chuàng)造對(duì)象數(shù)組

MATLAB類對(duì)象支持定義數(shù)組特性。在C++中,需要定義一個(gè)對(duì)象數(shù)組來(lái)保存各個(gè)對(duì)象的指針,但是MATLAB類對(duì)象本身就支持多維特性。通過(guò)在構(gòu)造時(shí)指定對(duì)象的維度,可以返回多維的對(duì)象數(shù)組。

圖片

這里需要注意的是,使用obj(m, n) = obj的語(yǔ)法時(shí),已經(jīng)改變了對(duì)象的維度屬性,因此必須返回新的obj對(duì)象,哪怕繼承了handle類。這一點(diǎn)在構(gòu)造函數(shù)使用了其他輔助函數(shù)時(shí)特別容易忽視和犯錯(cuò)。

圖片

04

總結(jié)

MATLAB面向?qū)ο?a target="_blank">編程為組織大型工程提供了基礎(chǔ),同時(shí)它的OOP特性和其他語(yǔ)言也有所不同

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MATLAB仿真
    +關(guān)注

    關(guān)注

    4

    文章

    175

    瀏覽量

    19847
  • C++語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    6935
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4754

    瀏覽量

    84119
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Python的面向對(duì)象編程詳解

    一般編程可分為面向過(guò)程編程,和面向對(duì)象編程。Python的
    發(fā)表于 09-04 16:35 ?455次閱讀
    Python的<b class='flag-5'>面向</b><b class='flag-5'>對(duì)象</b><b class='flag-5'>編程</b>詳解

    labview面向對(duì)象編程

    點(diǎn)擊學(xué)習(xí)>>《龍哥手把手教你學(xué)LabVIEW視覺(jué)設(shè)計(jì)》視頻教程使用LabVIEW面向對(duì)象編程方法,對(duì)于大型測(cè)試應(yīng)用程序來(lái)講,面向對(duì)象相對(duì)于
    發(fā)表于 11-24 11:01

    labview面向對(duì)象編程

    有沒(méi)有大神在labview中用面向對(duì)象編程的?請(qǐng)教一下怎樣做?書上的對(duì)這方面的知識(shí)很少,無(wú)從下手,急急急急急急!
    發(fā)表于 08-08 14:26

    請(qǐng)問(wèn)一下PLC支持面向對(duì)象編程嗎?

    傳統(tǒng)PLC編程方式是什么?PLC支持面向對(duì)象編程嗎?如何進(jìn)行面向
    發(fā)表于 07-02 07:29

    面向對(duì)象編程及其三大特性 精選資料分享

    Oriented)是一種以過(guò)程為中心的編程思想。這些都是以什么正在發(fā)生為 目標(biāo)進(jìn)行編程,不同于面向對(duì)象的是誰(shuí)在受影響。與
    發(fā)表于 07-21 08:38

    基于面向對(duì)象的LabVIEW編程有哪些優(yōu)勢(shì)

    基于面向對(duì)象的LabVIEW編程有哪些優(yōu)勢(shì)?如何去學(xué)習(xí)基于面向對(duì)象的LabVIEW編程?
    發(fā)表于 08-24 07:22

    談?wù)?b class='flag-5'>面向對(duì)象編程

    在工業(yè)自動(dòng)化領(lǐng)域,梯形圖邏輯仍然是最常用的編程語(yǔ)言之一,但對(duì)于更加復(fù)雜的控制對(duì)象,面向對(duì)象編程不失為一種高效率的方式。下面先來(lái)談?wù)?/div>
    發(fā)表于 09-08 07:47

    面向對(duì)象編程語(yǔ)言的特點(diǎn)

    在工業(yè)自動(dòng)化領(lǐng)域,梯形圖邏輯仍然是最常用的編程語(yǔ)言之一,但對(duì)于更加復(fù)雜的控制對(duì)象面向對(duì)象編程不失為一種高效率的方式。下面先來(lái)談?wù)?/div>
    發(fā)表于 09-08 07:44

    請(qǐng)問(wèn)一下如何進(jìn)行面向對(duì)象編程?

    請(qǐng)問(wèn)一下如何進(jìn)行面向對(duì)象編程?
    發(fā)表于 09-18 06:16

    基于結(jié)構(gòu)體的面向對(duì)象編程技巧是什么?

    基于結(jié)構(gòu)體的面向對(duì)象編程技巧是什么?
    發(fā)表于 09-29 08:08

    面向對(duì)象編程介紹

    目錄一、面向對(duì)象編程介紹1.面向過(guò)程編程2.函數(shù)式編程3.
    發(fā)表于 12-13 07:22

    面向對(duì)象編程練習(xí)

    實(shí)驗(yàn) 3 面向對(duì)象編程練習(xí) 一、實(shí)驗(yàn)?zāi)康?    通過(guò)編程和上機(jī)實(shí)驗(yàn)理解 Java 語(yǔ)言是如何體現(xiàn)面向
    發(fā)表于 09-23 18:57 ?3014次閱讀

    plc面向對(duì)象編程架構(gòu)與實(shí)現(xiàn)

    面向對(duì)象編程是計(jì)算機(jī)高級(jí)語(yǔ)言的一種先進(jìn)的編程模式,在工業(yè)控制系統(tǒng)的PLC程序中也可以采用這種設(shè)計(jì)思想,雖然我們無(wú)法實(shí)現(xiàn)面向
    發(fā)表于 01-31 15:00 ?4153次閱讀
    plc<b class='flag-5'>面向</b><b class='flag-5'>對(duì)象</b><b class='flag-5'>編程</b>架構(gòu)與實(shí)現(xiàn)

    西門子PLC面向對(duì)象編程

    面向對(duì)象編程是計(jì)算機(jī)高級(jí)語(yǔ)言的一種高級(jí)編程模式,這種設(shè)計(jì)思想也可以應(yīng)用于工業(yè)控制系統(tǒng)的plc程序中。雖然我們 無(wú)法實(shí)現(xiàn)面向
    發(fā)表于 04-17 11:41 ?4次下載
    西門子PLC<b class='flag-5'>面向</b><b class='flag-5'>對(duì)象</b><b class='flag-5'>編程</b>

    什么是面向對(duì)象編程(OOP)?面向對(duì)象的程序設(shè)計(jì)

    編程領(lǐng)域,面向對(duì)象編程 (OOP) 是一種強(qiáng)大的范例,使開(kāi)發(fā)人員能夠構(gòu)建復(fù)雜且可擴(kuò)展的應(yīng)用程序。
    的頭像 發(fā)表于 07-19 14:57 ?1088次閱讀