定 價(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ù): |
第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