注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)行業(yè)軟件及應(yīng)用MATLAB面向?qū)ο缶幊蹋簭娜腴T到設(shè)計(jì)模式(第2版)

MATLAB面向?qū)ο缶幊蹋簭娜腴T到設(shè)計(jì)模式(第2版)

MATLAB面向?qū)ο缶幊蹋簭娜腴T到設(shè)計(jì)模式(第2版)

定 價(jià):¥69.00

作 者: 徐瀟,李遠(yuǎn) 著
出版社: 北京航空航天大學(xué)出版社
叢編項(xiàng):
標(biāo) 簽: 程序設(shè)計(jì) 計(jì)算機(jī)/網(wǎng)絡(luò)

ISBN: 9787512424029 出版時(shí)間: 2017-10-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  MATLAB面向?qū)ο缶幊獭獜娜腴T到設(shè)計(jì)模式(第2版)本書分為4 部分:第1 部分是面向?qū)ο缶幊坛跫?jí)篇,主要介紹MATLAB 面向?qū)ο缶幊痰幕A(chǔ)知識(shí)和語(yǔ)法;第2 部分是面向?qū)ο缶幊讨屑?jí)篇,主要介紹面向?qū)ο缶幊痰闹懈呒?jí)概念,方便讀者在編程中遇到問(wèn)題時(shí)查詢;第3 部分是設(shè)計(jì)模式篇,把面向?qū)ο蟮木幊谭椒☉?yīng)用到實(shí)際問(wèn)題中,并從實(shí)際問(wèn)題中抽象出一般的解決方法,即設(shè)計(jì)模式;第4 部分是框架篇,主要介紹構(gòu)建在面向?qū)ο蠛驮O(shè)計(jì)模式基礎(chǔ)之上的MATLAB測(cè)試框架,包括單元測(cè)試框架和性能測(cè)試框架。本書既可作為高等院校MATLAB 課程的輔助讀物,也可作為從事科學(xué)計(jì)算、程序設(shè)計(jì)等工作的科研人員的參考用書。

作者簡(jiǎn)介

  徐瀟,MathWorks開(kāi)發(fā)部MATLAB架構(gòu)C++高級(jí)軟件工程師。計(jì)算物理學(xué)博士,研究方向?yàn)殡娮咏Y(jié)構(gòu)計(jì)算、密度泛函算法開(kāi)發(fā);計(jì)算機(jī)碩士,研究方向?yàn)閳D像處理。2004年,開(kāi)始使用MATLAB,在科研編程中遇到了開(kāi)發(fā)大型程序難以維護(hù)的困難,花了很多時(shí)間用于改進(jìn)程序但效果總不盡如人意。2009年,開(kāi)始使用MATLAB面向?qū)ο缶幊?,發(fā)現(xiàn)工程進(jìn)度被迅速加快,于是萌生了寫一本介紹MATLAB面向?qū)ο缶幊虝哪铑^。2011年,在美國(guó)取得博士學(xué)位之后入職MathWorks,從理科科研工作者和多年的MATLAB愛(ài)好者,成為一名MATLAB語(yǔ)言的設(shè)計(jì)開(kāi)發(fā)和實(shí)現(xiàn)的軟件工程師。2016年,作者在MATLAB中文論壇開(kāi)辟了技術(shù)專欄,和大家分享新的行業(yè)應(yīng)用技術(shù)和MATLAB編程理念,旨在推動(dòng)軟件工程中的現(xiàn)代手段在MATLAB科學(xué)工程計(jì)算項(xiàng)目中的使用,幫助科學(xué)家和工程師們更有效地解決復(fù)雜的科研問(wèn)題。本書凝結(jié)了作者多年的科研和工作經(jīng)驗(yàn)以及對(duì)MATLAB語(yǔ)言的理解,希望能對(duì)各種規(guī)模的科學(xué)工程計(jì)算項(xiàng)目的MATLAB使用者有所啟發(fā)。李遠(yuǎn),本、碩畢業(yè)于北方交通大學(xué),在美國(guó)的維克弗斯特大學(xué)取得物理學(xué)博士學(xué)位。2014年回國(guó)創(chuàng)建北醒(北京)光子科技有限公司,專注于固態(tài)激光雷達(dá)的研發(fā)和生產(chǎn),產(chǎn)品應(yīng)用于無(wú)人駕駛、無(wú)人機(jī)和機(jī)器人等領(lǐng)域。希望這本《MATLAB面向?qū)ο缶幊獭獜娜腴T到設(shè)計(jì)模式(第2版)》能夠給工程科學(xué)領(lǐng)域的工作者帶來(lái)方便,尤其對(duì)于一些需要長(zhǎng)期使用而且不斷更新的程序。

圖書目錄

第1 部分面向?qū)ο缶幊坛跫?jí)篇

第1 章面向過(guò)程編程和面向?qū)ο缶幊? . . . . . . . . . . . . . . . . . . . . . . . 3

1.1 什么是面向過(guò)程編程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2 什么是面向?qū)ο缶幊? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2.1 什么是對(duì)象. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2.2 什么是類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2.3 什么是統(tǒng)一建模語(yǔ)言. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3 面向過(guò)程編程有哪些局限性. . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.4 面向?qū)ο缶幊逃心男﹥?yōu)點(diǎn). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

第2 章MATLAB 面向?qū)ο缶幊倘腴T. . . . . . . . . . . . . . . . . . . . . . . . 16

2.1 如何定義一個(gè)類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.2 如何創(chuàng)建一個(gè)對(duì)象. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.3 類的屬性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.3.1 如何訪問(wèn)對(duì)象的屬性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.3.2 什么是屬性的默認(rèn)值. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.3.3 什么是常量屬性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.3.4 什么是非獨(dú)立屬性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.3.5 什么是隱藏屬性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.4 類的方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.4.1 如何定義類的方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.4.2 如何調(diào)用類的方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.4.3 點(diǎn)調(diào)用和函數(shù)調(diào)用類方法的區(qū)別. . . . . . . . . . . . . . . . . . . . . . . . 29

2.4.4 什么是方法的簽名. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.4.5 類、對(duì)象、屬性和方法之間的關(guān)系. . . . . . . . . . . . . . . . . . . . . . . 32

2.4.6 如何用disp 方法定制對(duì)象的顯示. . . . . . . . . . . . . . . . . . . . . . . . 32

2.5 類的構(gòu)造函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2.5.1 什么是構(gòu)造函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2.5.2 如何在構(gòu)造函數(shù)中給屬性賦值. . . . . . . . . . . . . . . . . . . . . . . . . 36

2.5.3 如何讓構(gòu)造函數(shù)接受不同數(shù)目的參數(shù). . . . . . . . . . . . . . . . . . . . . . 36

2.5.4 什么是默認(rèn)構(gòu)造函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

2.5.5 用戶一定要定義構(gòu)造函數(shù)嗎. . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.6 類的繼承. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2.6.1 什么是繼承. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2.6.2 為什么子類構(gòu)造函數(shù)需要先調(diào)用父類構(gòu)造函數(shù). . . . . . . . . . . . . . . . . . 43

2.6.3 在子類方法中如何調(diào)用父類同名方法. . . . . . . . . . . . . . . . . . . . . . 45

2.6.4 什么是多態(tài). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

2.7 類之間的基本關(guān)系:繼承、組合和聚集. . . . . . . . . . . . . . . . . . . . . 47

2.7.1 如何判斷B 能否繼承A . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

2.7.2 企鵝和鳥(niǎo)之間是不是繼承關(guān)系. . . . . . . . . . . . . . . . . . . . . . . . . 48

2.7.3 如何把類組合起來(lái). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

2.7.4 什么是組合聚集關(guān)系. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

2.8 Handle 類的set 和get 方法. . . . . . . . . . . . . . . . . . . . . . . . . . . 52

2.8.1 什么是set 方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

2.8.2 什么是get 方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

2.9 類的屬性和方法的訪問(wèn)權(quán)限. . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

2.9.1 什么是public、protected 和private 權(quán)限. . . . . . . . . . . . . . . . . . . 56

2.9.2 如何設(shè)置類的屬性和方法的訪問(wèn)權(quán)限. . . . . . . . . . . . . . . . . . . . . . 59

2.9.3 如何更細(xì)粒度地控制訪問(wèn)權(quán)限. . . . . . . . . . . . . . . . . . . . . . . . . 60

2.9.4 MATLAB 對(duì)屬性訪問(wèn)的控制與C 和Java 有什么不同. . . . . . . . . . . . 62

2.10 clear classes 到底清除了什么. . . . . . . . . . . . . . . . . . . . . . . . . . . 63

2.11 對(duì)象根據(jù)類定義的改變而自動(dòng)更新. . . . . . . . . . . . . . . . . . . . . . . . 64

第3 章MATLAB 的句柄類和實(shí)體值類. . . . . . . . . . . . . . . . . . . . . . 66

3.1 引子:參數(shù)是如何傳遞到函數(shù)空間中去的. . . . . . . . . . . . . . . . . . . . 66

3.2 MATLAB 的Value 類和Handle 類. . . . . . . . . . . . . . . . . . . . . . . 70

3.2.1 什么是Value 類和Handle 類. . . . . . . . . . . . . . . . . . . . . . . . . 70

3.2.2 Value 類對(duì)象和Handle 類對(duì)象復(fù)制有什么區(qū)別. . . . . . . . . . . . . . . . . 72

3.2.3 Value 類對(duì)象和Handle 類對(duì)象賦值有什么區(qū)別. . . . . . . . . . . . . . . . . 73

3.2.4 Value 類對(duì)象和Handle 類對(duì)象當(dāng)作函數(shù)參數(shù)有什么區(qū)別. . . . . . . . . . . . . 76

3.2.5 Value 類對(duì)象和Handle 類對(duì)象作為默認(rèn)值有什么區(qū)別. . . . . . . . . . . . . . 77

3.2.6 什么情況下使用Value 類或Handle 類. . . . . . . . . . . . . . . . . . . . . 78

3.3 類的析構(gòu)函數(shù)(Destructor) . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

3.3.1 什么是對(duì)象的生存周期. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

3.3.2 什么是析構(gòu)函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

3.3.3 對(duì)Object 使用clear 會(huì)發(fā)生什么. . . . . . . . . . . . . . . . . . . . . . . . 84

3.3.4 對(duì)Object 使用delete 會(huì)發(fā)生什么. . . . . . . . . . . . . . . . . . . . . . . 85

3.3.5 什么情況下delete 方法會(huì)被自動(dòng)調(diào)用. . . . . . . . . . . . . . . . . . . . . . 88

3.3.6 出現(xiàn)異常時(shí)delete 函數(shù)如何被調(diào)用. . . . . . . . . . . . . . . . . . . . . . . 91

3.3.7 什么情況下用戶需要自己定義一個(gè)delete 方法. . . . . . . . . . . . . . . . . 92

第4 章事件和響應(yīng). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

4.1 事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

4.1.1 什么是事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

4.1.2 如何定義事件和監(jiān)聽(tīng)事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

4.1.3 為什么需要事件機(jī)制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

4.2 發(fā)布者通知觀察者,但不傳遞消息. . . . . . . . . . . . . . . . . . . . . . . . 98

4.3 發(fā)布者通知觀察者,并且傳遞消息. . . . . . . . . . . . . . . . . . . . . . . . 100

4.4 刪除listener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

第5 章MATLAB 類文件的組織結(jié)構(gòu). . . . . . . . . . . . . . . . . . . . . . . . 104

5.1 如何使用其他文件夾中類的定義. . . . . . . . . . . . . . . . . . . . . . . . . 104

5.2 如何把類的定義和成員方法的定義分開(kāi). . . . . . . . . . . . . . . . . . . . . 105

5.3 如何定義類的局部函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

5.4 如何使用Package 文件夾管理類. . . . . . . . . . . . . . . . . . . . . . . . . 108

5.4.1 Package 中的類是如何組織的. . . . . . . . . . . . . . . . . . . . . . . . . 108

5.4.2 如何使用Package 中的某個(gè)類. . . . . . . . . . . . . . . . . . . . . . . . . 109

5.4.3 如何導(dǎo)入Package 中的所有類. . . . . . . . . . . . . . . . . . . . . . . . . 109

5.5 函數(shù)和類方法重名到底調(diào)用誰(shuí). . . . . . . . . . . . . . . . . . . . . . . . . . 109

5.6 Package 中的函數(shù)和當(dāng)前路徑上的同名函數(shù)誰(shuí)有優(yōu)先級(jí). . . . . . . . . . . . 110

第6 章MATLAB 對(duì)象的保存和載入. . . . . . . . . . . . . . . . . . . . . . . . 112

6.1 save 和load 命令. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

6.1.1 對(duì)象的save 和load 操作. . . . . . . . . . . . . . . . . . . . . . . . . . . 112

6.1.2 MAT 文件中保存了對(duì)象中的哪些內(nèi)容. . . . . . . . . . . . . . . . . . . . . 112

6.1.3 如果類的定義在save 操作之后發(fā)生了變化. . . . . . . . . . . . . . . . . . . 116

6.2 saveobj 和loadobj 方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

6.2.1 如何定義saveobj 方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

6.2.2 如何定義loadobj 方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

6.3 繼承情況下的saveobj 和loadobj 方法. . . . . . . . . . . . . . . . . . . . . . 120

6.3.1 存在繼承時(shí)如何設(shè)計(jì)saveobj 方法. . . . . . . . . . . . . . . . . . . . . . . 120

6.3.2 存在繼承時(shí)如何設(shè)計(jì)loadobj 方法. . . . . . . . . . . . . . . . . . . . . . . 122

6.4 什么是瞬態(tài)屬性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

6.5 什么是裝載時(shí)構(gòu)造(ConstructOnLoad) . . . . . . . . . . . . . . . . . . . . 125

第7 章面向?qū)ο蟮腉UI 編程:分離用戶界面和模型. . . . . . . . . . . . . . . . 127

7.1 如何用GUIDE 進(jìn)行GUI 編程. . . . . . . . . . . . . . . . . . . . . . . . . . 127

7.2 如何用面向過(guò)程的方式進(jìn)行GUI 編程. . . . . . . . . . . . . . . . . . . . . . 129

7.3 如何用面向?qū)ο蟮姆绞竭M(jìn)行GUI 編程. . . . . . . . . . . . . . . . . . . . . . 132

4 MATLAB 面向?qū)ο缶幊?mdash;—從入門到設(shè)計(jì)模式(第2 版)

7.4 模型類中應(yīng)該包括什么. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

7.5 視圖類中應(yīng)該包括什么. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

7.6 控制器類中應(yīng)該包括什么. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

7.7 如何把Model、View 和Controller 結(jié)合起來(lái). . . . . . . . . . . . . . . . . . 139

7.8 如何測(cè)試MVC 的GUI 程序. . . . . . . . . . . . . . . . . . . . . . . . . . . 141

7.9 如何設(shè)計(jì)多視圖的GUI 以及共享數(shù)據(jù). . . . . . . . . . . . . . . . . . . . . . 142

7.10 如何設(shè)計(jì)GUI 邏輯架構(gòu). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

7.11 如何使用GUI Layout Toolbox 對(duì)界面自動(dòng)布局. . . . . . . . . . . . . . . . 151

7.11.1 為什么需要布局管理器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

7.11.2 縱向布局器VBox 類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

7.11.3 橫向布局器HBox 類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

7.11.4 選項(xiàng)卡布局器TabPanel 類. . . . . . . . . . . . . . . . . . . . . . . . . . . 155

7.11.5 網(wǎng)格布局器Grid 類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

7.11.6 GUI Layout 的復(fù)合布局. . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

7.11.7 把GUI Layout Toolbox 和MVC 模式結(jié)合起來(lái). . . . . . . . . . . . . . . . 158

7.11.8 GUI Layout Toolbox 兩個(gè)版本的說(shuō)明. . . . . . . . . . . . . . . . . . . . . 160

第2 部分面向?qū)ο缶幊讨屑?jí)篇

第8 章類的繼承進(jìn)階. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

8.1 繼承結(jié)構(gòu)下的構(gòu)造函數(shù)和析構(gòu)函數(shù). . . . . . . . . . . . . . . . . . . . . . . . 163

8.1.1 什么情況需要手動(dòng)調(diào)用基類的構(gòu)造函數(shù). . . . . . . . . . . . . . . . . . . . . 163

8.1.2 什么情況可以讓MATLAB 自動(dòng)調(diào)用基類的構(gòu)造函數(shù). . . . . . . . . . . . . . 164

8.1.3 常見(jiàn)錯(cuò)誤:沒(méi)有提供默認(rèn)構(gòu)造函數(shù). . . . . . . . . . . . . . . . . . . . . . . 166

8.1.4 在構(gòu)造函數(shù)中調(diào)用哪個(gè)成員方法. . . . . . . . . . . . . . . . . . . . . . . . 167

8.1.5 析構(gòu)函數(shù)被調(diào)用的順序是什么. . . . . . . . . . . . . . . . . . . . . . . . . 168

8.2 MATLAB 的多重繼承. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

8.2.1 什么情況下需要多重繼承. . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

8.2.2 什么是多重繼承. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

8.2.3 構(gòu)造函數(shù)被調(diào)用的順序是什么. . . . . . . . . . . . . . . . . . . . . . . . . 172

8.2.4 多重繼承如何處理屬性重名. . . . . . . . . . . . . . . . . . . . . . . . . . . 172

8.2.5 多重繼承如何處理方法重名. . . . . . . . . . . . . . . . . . . . . . . . . . . 174

8.2.6 什么是鉆石繼承. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

8.2.7 如何同時(shí)繼承Value 類和Handle 類. . . . . . . . . . . . . . . . . . . . . . 178

8.3 如何禁止類被繼承. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

第9 章類的成員方法進(jìn)階. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

9.1 Derived 類和Base 類同名方法之間有哪幾種關(guān)系. . . . . . . . . . . . . . . . 182

9.1.1 Derived 類的方法覆蓋Base 類的方法. . . . . . . . . . . . . . . . . . . . . 182

9.1.2 Derived 類的方法可以擴(kuò)充Base 類的同名方法. . . . . . . . . . . . . . . . . 183

9.1.3 Base 類的方法可以禁止被Derived 類重寫. . . . . . . . . . . . . . . . . . . 184

9.2 什么是靜態(tài)方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

9.3 同一個(gè)類的各個(gè)對(duì)象如何共享變量. . . . . . . . . . . . . . . . . . . . . . . . 186

9.3.1 什么情況下各個(gè)對(duì)象需要共享變量. . . . . . . . . . . . . . . . . . . . . . . 186

9.3.2 如何共享Constant 屬性. . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

9.3.3 如何共享變量. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

第10 章抽象類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

10.1 什么是抽象類和抽象方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

10.2 為什么需要抽象類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

10.3 如何使用抽象類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

10.3.1 抽象類不能直接用來(lái)聲明對(duì)象. . . . . . . . . . . . . . . . . . . . . . . . . 191

10.3.2 子類要實(shí)現(xiàn)所有的抽象方法. . . . . . . . . . . . . . . . . . . . . . . . . . . 192

第11 章對(duì)象數(shù)組. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

11.1 如何把對(duì)象串接成數(shù)組. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

11.2 如何直接聲明對(duì)象數(shù)組. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

11.3 如何使用findobj 函數(shù)尋找特定的對(duì)象. . . . . . . . . . . . . . . . . . . . . . 199

11.4 如何利用元胞數(shù)組把不同類的對(duì)象組合到一起. . . . . . . . . . . . . . . . . 201

11.5 什么是轉(zhuǎn)換函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

11.6 如何利用轉(zhuǎn)換函數(shù)把不同類的對(duì)象組合到一起. . . . . . . . . . . . . . . . . 204

11.7 如何用非同類(Heterogeneous)數(shù)組盛放不同類對(duì)象. . . . . . . . . . . . . 205

11.7.1 為什么需要非同類數(shù)組. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

11.7.2 含有不同類對(duì)象的數(shù)組類型. . . . . . . . . . . . . . . . . . . . . . . . . . . 207

11.7.3 使用非同類要避免哪些情況. . . . . . . . . . . . . . . . . . . . . . . . . . . 209

11.7.4 如何向量化遍歷數(shù)組中對(duì)象的屬性. . . . . . . . . . . . . . . . . . . . . . . 209

11.7.5 如何設(shè)計(jì)成員方法使其支持向量化遍歷. . . . . . . . . . . . . . . . . . . . . 211

第12 章類的運(yùn)算符重載. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

12.1 理解MATLAB 的subsref 和subsasgn 函數(shù). . . . . . . . . . . . . . . . . . 213

12.1.1 MATLAB 如何處理形如a(1,:) 的表達(dá)式. . . . . . . . . . . . . . . . . . . . 213

12.1.2 MATLAB 如何處理形如a{1,:} 的表達(dá)式. . . . . . . . . . . . . . . . . . . . 214

12.1.3 MATLAB 如何處理形如s.f 的表達(dá)式. . . . . . . . . . . . . . . . . . . . . . 215

12.2 如何重載subsref 函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

6 MATLAB 面向?qū)ο缶幊?mdash;—從入門到設(shè)計(jì)模式(第2 版)

12.3 如何重載subsasgn 函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

12.4 什么情況下重載下標(biāo)運(yùn)算符. . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

12.5 如何重載plus 函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

12.6 MATLAB 的Dispatching 規(guī)則是什么. . . . . . . . . . . . . . . . . . . . . . 220

12.7 如何判斷兩個(gè)對(duì)象是否相同. . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

12.8 如何讓一個(gè)對(duì)象在行為上像一個(gè)函數(shù). . . . . . . . . . . . . . . . . . . . . . . 223

12.9 MATLAB 中哪些運(yùn)算符允許重載. . . . . . . . . . . . . . . . . . . . . . . . 226

12.10 實(shí)例:運(yùn)算符重載和量綱分析. . . . . . . . . . . . . . . . . . . . . . . . . . 227

12.10.1 如何表示量綱. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

12.10.2 需求和設(shè)計(jì):加法和減法. . . . . . . . . . . . . . . . . . . . . . . . . . . 229

12.10.3 需求和設(shè)計(jì):乘法和除法. . . . . . . . . . . . . . . . . . . . . . . . . . . 232

第13 章枚舉類型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

13.1 為什么需要枚舉類型(Enumeration) . . . . . . . . . . . . . . . . . . . . . . . 237

13.2 什么是枚舉類型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

13.3 枚舉類型應(yīng)用實(shí)例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

13.3.1 枚舉類型的屬性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

13.3.2 枚舉類型的方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

13.3.3 枚舉類型對(duì)象數(shù)組. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

13.3.4 從基本數(shù)據(jù)類型中派生枚舉類型. . . . . . . . . . . . . . . . . . . . . . . . 247

第14 章超類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

14.1 什么是超類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

14.2 如何獲得一個(gè)類的meta.class 對(duì)象. . . . . . . . . . . . . . . . . . . . . . . . 250

14.3 meta.class 對(duì)象中有些什么內(nèi)容. . . . . . . . . . . . . . . . . . . . . . . . . 252

14.4 如何手動(dòng)克隆一個(gè)對(duì)象. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

14.5 如何使用matlab.mixin.Copyable 自動(dòng)克隆一個(gè)對(duì)象. . . . . . . . . . . . . . 259

第3 部分設(shè)計(jì)模式篇

第15 章面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想. . . . . . . . . . . . . . . . . . . . . . . . 265

15.1 單一職責(zé)原則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

15.2 開(kāi)放與封閉原則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

15.3 多用組合少用繼承原則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

15.4 面向接口編程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

第16 章創(chuàng)建型模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

16.1 工廠模式:構(gòu)造不同種類的面條. . . . . . . . . . . . . . . . . . . . . . . . . 276

16.1.1 簡(jiǎn)單工廠模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

16.1.2 工廠模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

16.1.3 工廠模式總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

16.1.4 如何進(jìn)一步去掉switch/if 語(yǔ)句. . . . . . . . . . . . . . . . . . . . . . . . . 283

16.1.5 抽象工廠. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

16.1.6 抽象工廠模式總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

16.2 單例模式:給工程計(jì)算添加一個(gè)LOG 文件. . . . . . . . . . . . . . . . . . . 288

16.2.1 如何控制對(duì)象的數(shù)量. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

16.2.2 如何刪除一個(gè)Singleton 對(duì)象. . . . . . . . . . . . . . . . . . . . . . . . . . 290

16.2.3 應(yīng)用:如何包裝一個(gè)對(duì)象供全局使用. . . . . . . . . . . . . . . . . . . . . . 291

16.3 建造者模式:如何用MATLAB 構(gòu)造一輛自行車. . . . . . . . . . . . . . . . 293

16.3.1 問(wèn)題的提出. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

16.3.2 應(yīng)用:建造者模式為大規(guī)模計(jì)算做準(zhǔn)備工作. . . . . . . . . . . . . . . . . . . 297

16.3.3 建造者模式總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

第17 章裝飾者模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

17.1 裝飾者模式的引入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

17.2 面館菜單代碼. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

17.3 裝飾者模式總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

第18 章行為模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

18.1 觀察者模式:用MATLAB 實(shí)現(xiàn)觀察者模式. . . . . . . . . . . . . . . . . . . 308

18.1.1 發(fā)布和訂閱的基本模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

18.1.2 訂閱者查詢發(fā)布者的狀態(tài). . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

18.1.3 把發(fā)布者和訂閱者抽象出來(lái). . . . . . . . . . . . . . . . . . . . . . . . . . . 312

18.1.4 觀察者模式總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

18.2 策略模式:分離圖像數(shù)據(jù)和圖像處理算法. . . . . . . . . . . . . . . . . . . . 316

18.2.1 問(wèn)題的提出. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

18.2.2 應(yīng)用:更復(fù)雜的分離數(shù)據(jù)和算法的例子. . . . . . . . . . . . . . . . . . . . . 320

18.2.3 策略模式總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

18.3 遍歷器模式:工程科學(xué)計(jì)算中如何遍歷大量數(shù)據(jù). . . . . . . . . . . . . . . . 323

18.3.1 問(wèn)題的提出. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

18.3.2 聚集和遍歷器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

18.3.3 遍歷器模式總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

18.4 狀態(tài)模式:用MATLAB 模擬自動(dòng)販賣機(jī). . . . . . . . . . . . . . . . . . . . 329

18.4.1 使用if 語(yǔ)句的自動(dòng)販賣機(jī). . . . . . . . . . . . . . . . . . . . . . . . . . . 329

8 MATLAB 面向?qū)ο缶幊?mdash;—從入門到設(shè)計(jì)模式(第2 版)

18.4.2 使用狀態(tài)模式的自動(dòng)販賣機(jī). . . . . . . . . . . . . . . . . . . . . . . . . . . 335

18.4.3 狀態(tài)模式總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

18.5 模板模式:下面條和煮水餃有什么共同之處. . . . . . . . . . . . . . . . . . . 341

18.5.1 抽象下面條和煮水餃的過(guò)程. . . . . . . . . . . . . . . . . . . . . . . . . . . 341

18.5.2 應(yīng)用:把策略和模板模式結(jié)合起來(lái). . . . . . . . . . . . . . . . . . . . . . . 346

18.5.3 模板模式總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

18.6 備忘錄模式:實(shí)現(xiàn)GUI 的undo 功能. . . . . . . . . . . . . . . . . . . . . . 348

18.6.1 如何記錄對(duì)象的內(nèi)部狀態(tài). . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

18.6.2 應(yīng)用:如何利用備忘錄模式實(shí)現(xiàn)GUI 的do 和undo 操作. . . . . . . . . . . . 351

18.6.3 備忘錄模式總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

第4 部分框架篇

第19 章MATLAB 單元測(cè)試框架. . . . . . . . . . . . . . . . . . . . . . . . . . 359

19.1 框架概述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

19.2 基于函數(shù)的單元測(cè)試構(gòu)造. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

19.3 getArea 函數(shù)的單元測(cè)試: 版本I . . . . . . . . . . . . . . . . . . . . . . . . . 361

19.4 getArea 函數(shù)的單元測(cè)試: 版本II 和版本III . . . . . . . . . . . . . . . . . . 366

19.5 測(cè)試的準(zhǔn)備和清理工作: Test Fixture . . . . . . . . . . . . . . . . . . . . . . 369

19.6 驗(yàn)證方法: Types of Qualification . . . . . . . . . . . . . . . . . . . . . . . . . 371

19.7 測(cè)試方法論和用測(cè)試驅(qū)動(dòng)開(kāi)發(fā). . . . . . . . . . . . . . . . . . . . . . . . . . 375

19.7.1 開(kāi)發(fā)流程概述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

19.7.2 用測(cè)試驅(qū)動(dòng)開(kāi)發(fā):fibonacci 例. . . . . . . . . . . . . . . . . . . . . . . . . 377

19.7.3 用測(cè)試驅(qū)動(dòng)開(kāi)發(fā):運(yùn)算符重載和量綱分析. . . . . . . . . . . . . . . . . . . . 381

19.8 基于類的單元測(cè)試. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

19.8.1 getArea 函數(shù)的基于類的單元測(cè)試. . . . . . . . . . . . . . . . . . . . . . . 393

19.8.2 MVC GUI 的基于類的單元測(cè)試. . . . . . . . . . . . . . . . . . . . . . . . 395

第20 章MATLAB 性能測(cè)試框架. . . . . . . . . . . . . . . . . . . . . . . . . . 401

20.1 為什么需要MATLAB 性能測(cè)試框架. . . . . . . . . . . . . . . . . . . . . . . 401

20.2 基于類的性能測(cè)試框架. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

20.2.1 構(gòu)造測(cè)試類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

20.2.2 測(cè)試結(jié)果解析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

20.3 誤差范圍和置信區(qū)間. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

20.4 性能測(cè)試的適用范圍討論. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410

附錄

附錄A 綜合實(shí)例:如何把面向過(guò)程的程序轉(zhuǎn)成面向?qū)ο蟮某绦? . . . . . . . . . . 413

附錄B MATLAB 高級(jí)數(shù)據(jù)結(jié)構(gòu):containers.Map . . . . . . . . . . . . . . . 425

B.1 containers.Map 簡(jiǎn)介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

B.2 數(shù)組、元胞數(shù)組和結(jié)構(gòu)體的局限性. . . . . . . . . . . . . . . . . . . . . . . . 426

B.3 用containers.Map 來(lái)記錄電話號(hào)碼簿. . . . . . . . . . . . . . . . . . . . . . 428

B.4 containers.Map 的屬性和成員方法. . . . . . . . . . . . . . . . . . . . . . . . 429

B.5 containers.Map 的特點(diǎn). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430

B.5.1 containers.Map 可以不斷地?cái)U(kuò)張且不需要預(yù)分配. . . . . . . . . . . . . . . . 430

B.5.2 containers.Map 可以作為參數(shù)在函數(shù)內(nèi)部直接修改. . . . . . . . . . . . . . . 431

B.5.3 containers.Map 可以增強(qiáng)程序的可讀性. . . . . . . . . . . . . . . . . . . . . 431

B.5.4 containers.Map 提供對(duì)數(shù)據(jù)的快速查找. . . . . . . . . . . . . . . . . . . . . 431

B.6 containers.Map 的使用實(shí)例. . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

B.6.1 用來(lái)存放元素周期表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

B.6.2 用來(lái)實(shí)現(xiàn)快速檢索. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

附錄C MATLAB 高級(jí)數(shù)據(jù)結(jié)構(gòu):table . . . . . . . . . . . . . . . . . . . . . . 435

C.1 table 簡(jiǎn)介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435

C.1.1 為什么需要table 數(shù)據(jù)結(jié)構(gòu). . . . . . . . . . . . . . . . . . . . . . . . . . . 435

C.1.2 通過(guò)導(dǎo)入數(shù)據(jù)構(gòu)造table 對(duì)象. . . . . . . . . . . . . . . . . . . . . . . . . . 436

C.1.3 調(diào)用table 構(gòu)造函數(shù)來(lái)構(gòu)造table 對(duì)象. . . . . . . . . . . . . . . . . . . . . 436

C.1.4 通過(guò)轉(zhuǎn)換函數(shù)構(gòu)造table 對(duì)象. . . . . . . . . . . . . . . . . . . . . . . . . . 437

C.2 訪問(wèn)table 中的數(shù)據(jù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

C.3 table 的操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

C.3.1 刪除行列. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

C.3.2 添加行列. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440

C.3.3 合并table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

C.3.4 操作列數(shù)據(jù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

C.3.5 排序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444

C.3.6 篩選和查找. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445

C.3.7 輸出到文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445

C.4 其他數(shù)據(jù)類型之間和table 相互轉(zhuǎn)換. . . . . . . . . . . . . . . . . . . . . . . 446

C.5 table 之間的操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

C.6 table 的屬性和支持的操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . 452

10 MATLAB 面向?qū)ο缶幊?mdash;—從入門到設(shè)計(jì)模式(第2 版)

附錄D 對(duì)函數(shù)的輸入進(jìn)行檢查和解析. . . . . . . . . . . . . . . . . . . . . . . . 454

D.1 為什么要對(duì)函數(shù)的輸入進(jìn)行檢查. . . . . . . . . . . . . . . . . . . . . . . . . 454

D.2 validateattributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454

D.2.1 validateattributes 的基本使用. . . . . . . . . . . . . . . . . . . . . . . . . 454

D.2.2 validateattributes 的額外提示信息. . . . . . . . . . . . . . . . . . . . . . . 455

D.2.3 validateattributes 支持的檢查類型和屬性. . . . . . . . . . . . . . . . . . . . 457

D.3 validatestring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458

D.4 inputParser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459

D.4.1 inputParser 的基本使用. . . . . . . . . . . . . . . . . . . . . . . . . . . . 459

D.4.2 inputParser 的可選參數(shù)和默認(rèn)參數(shù)值設(shè)置. . . . . . . . . . . . . . . . . . . 461

D.4.3 inputParser 和validateattributes 聯(lián)合使用. . . . . . . . . . . . . . . . . . . 462

D.4.4 inputParser 的參數(shù)名–參數(shù)值對(duì)的設(shè)置. . . . . . . . . . . . . . . . . . . . . 462

D.4.5 inputParser 解析結(jié)構(gòu)體的輸入. . . . . . . . . . . . . . . . . . . . . . . . . 465

D.5 引子:為什么需要MATLAB 的單元測(cè)試系統(tǒng). . . . . . . . . . . . . . . . . 466

參考文獻(xiàn). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

寫在*后. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)