注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網(wǎng)絡行業(yè)軟件及應用MATLAB面向對象編程:從入門到設計模式(第2版)

MATLAB面向對象編程:從入門到設計模式(第2版)

MATLAB面向對象編程:從入門到設計模式(第2版)

定 價:¥69.00

作 者: 徐瀟,李遠 著
出版社: 北京航空航天大學出版社
叢編項:
標 簽: 程序設計 計算機/網(wǎng)絡

ISBN: 9787512424029 出版時間: 2017-10-01 包裝: 平裝
開本: 16開 頁數(shù): 字數(shù):  

內(nèi)容簡介

  MATLAB面向對象編程—從入門到設計模式(第2版)本書分為4 部分:第1 部分是面向對象編程初級篇,主要介紹MATLAB 面向對象編程的基礎知識和語法;第2 部分是面向對象編程中級篇,主要介紹面向對象編程的中高級概念,方便讀者在編程中遇到問題時查詢;第3 部分是設計模式篇,把面向對象的編程方法應用到實際問題中,并從實際問題中抽象出一般的解決方法,即設計模式;第4 部分是框架篇,主要介紹構建在面向對象和設計模式基礎之上的MATLAB測試框架,包括單元測試框架和性能測試框架。本書既可作為高等院校MATLAB 課程的輔助讀物,也可作為從事科學計算、程序設計等工作的科研人員的參考用書。

作者簡介

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

圖書目錄

第1 部分面向對象編程初級篇

第1 章面向過程編程和面向對象編程. . . . . . . . . . . . . . . . . . . . . . . . 3

1.1 什么是面向過程編程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2 什么是面向對象編程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2.1 什么是對象. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

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

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

1.3 面向過程編程有哪些局限性. . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.4 面向對象編程有哪些優(yōu)點. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

第2 章MATLAB 面向對象編程入門. . . . . . . . . . . . . . . . . . . . . . . . 16

2.1 如何定義一個類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

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

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

2.3.1 如何訪問對象的屬性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.3.2 什么是屬性的默認值. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

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

2.3.4 什么是非獨立屬性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

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

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

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

2.4.2 如何調用類的方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

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

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

2.4.5 類、對象、屬性和方法之間的關系. . . . . . . . . . . . . . . . . . . . . . . 32

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

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

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

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

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

2.5.4 什么是默認構造函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

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

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

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

2.6.2 為什么子類構造函數(shù)需要先調用父類構造函數(shù). . . . . . . . . . . . . . . . . . 43

2.6.3 在子類方法中如何調用父類同名方法. . . . . . . . . . . . . . . . . . . . . . 45

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

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

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

2.7.2 企鵝和鳥之間是不是繼承關系. . . . . . . . . . . . . . . . . . . . . . . . . 48

2.7.3 如何把類組合起來. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

2.7.4 什么是組合聚集關系. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

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

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

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

2.9 類的屬性和方法的訪問權限. . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

2.9.1 什么是public、protected 和private 權限. . . . . . . . . . . . . . . . . . . 56

2.9.2 如何設置類的屬性和方法的訪問權限. . . . . . . . . . . . . . . . . . . . . . 59

2.9.3 如何更細粒度地控制訪問權限. . . . . . . . . . . . . . . . . . . . . . . . . 60

2.9.4 MATLAB 對屬性訪問的控制與C 和Java 有什么不同. . . . . . . . . . . . 62

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

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

第3 章MATLAB 的句柄類和實體值類. . . . . . . . . . . . . . . . . . . . . . 66

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

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

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

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

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

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

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

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

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

3.3.1 什么是對象的生存周期. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

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

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

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

3.3.5 什么情況下delete 方法會被自動調用. . . . . . . . . . . . . . . . . . . . . . 88

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

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

第4 章事件和響應. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

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

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

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

4.1.3 為什么需要事件機制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

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

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

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

第5 章MATLAB 類文件的組織結構. . . . . . . . . . . . . . . . . . . . . . . . 104

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

5.2 如何把類的定義和成員方法的定義分開. . . . . . . . . . . . . . . . . . . . . 105

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

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

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

5.4.2 如何使用Package 中的某個類. . . . . . . . . . . . . . . . . . . . . . . . . 109

5.4.3 如何導入Package 中的所有類. . . . . . . . . . . . . . . . . . . . . . . . . 109

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

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

第6 章MATLAB 對象的保存和載入. . . . . . . . . . . . . . . . . . . . . . . . 112

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

6.1.1 對象的save 和load 操作. . . . . . . . . . . . . . . . . . . . . . . . . . . 112

6.1.2 MAT 文件中保存了對象中的哪些內(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 存在繼承時如何設計saveobj 方法. . . . . . . . . . . . . . . . . . . . . . . 120

6.3.2 存在繼承時如何設計loadobj 方法. . . . . . . . . . . . . . . . . . . . . . . 122

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

6.5 什么是裝載時構造(ConstructOnLoad) . . . . . . . . . . . . . . . . . . . . 125

第7 章面向對象的GUI 編程:分離用戶界面和模型. . . . . . . . . . . . . . . . 127

7.1 如何用GUIDE 進行GUI 編程. . . . . . . . . . . . . . . . . . . . . . . . . . 127

7.2 如何用面向過程的方式進行GUI 編程. . . . . . . . . . . . . . . . . . . . . . 129

7.3 如何用面向對象的方式進行GUI 編程. . . . . . . . . . . . . . . . . . . . . . 132

4 MATLAB 面向對象編程——從入門到設計模式(第2 版)

7.4 模型類中應該包括什么. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

7.5 視圖類中應該包括什么. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

7.6 控制器類中應該包括什么. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

7.7 如何把Model、View 和Controller 結合起來. . . . . . . . . . . . . . . . . . 139

7.8 如何測試MVC 的GUI 程序. . . . . . . . . . . . . . . . . . . . . . . . . . . 141

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

7.10 如何設計GUI 邏輯架構. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

7.11 如何使用GUI Layout Toolbox 對界面自動布局. . . . . . . . . . . . . . . . 151

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

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

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

7.11.4 選項卡布局器TabPanel 類. . . . . . . . . . . . . . . . . . . . . . . . . . . 155

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

7.11.6 GUI Layout 的復合布局. . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

7.11.7 把GUI Layout Toolbox 和MVC 模式結合起來. . . . . . . . . . . . . . . . 158

7.11.8 GUI Layout Toolbox 兩個版本的說明. . . . . . . . . . . . . . . . . . . . . 160

第2 部分面向對象編程中級篇

第8 章類的繼承進階. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

8.1 繼承結構下的構造函數(shù)和析構函數(shù). . . . . . . . . . . . . . . . . . . . . . . . 163

8.1.1 什么情況需要手動調用基類的構造函數(shù). . . . . . . . . . . . . . . . . . . . . 163

8.1.2 什么情況可以讓MATLAB 自動調用基類的構造函數(shù). . . . . . . . . . . . . . 164

8.1.3 常見錯誤:沒有提供默認構造函數(shù). . . . . . . . . . . . . . . . . . . . . . . 166

8.1.4 在構造函數(shù)中調用哪個成員方法. . . . . . . . . . . . . . . . . . . . . . . . 167

8.1.5 析構函數(shù)被調用的順序是什么. . . . . . . . . . . . . . . . . . . . . . . . . 168

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

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

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

8.2.3 構造函數(shù)被調用的順序是什么. . . . . . . . . . . . . . . . . . . . . . . . . 172

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

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

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

8.2.7 如何同時繼承Value 類和Handle 類. . . . . . . . . . . . . . . . . . . . . . 178

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

第9 章類的成員方法進階. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

9.1 Derived 類和Base 類同名方法之間有哪幾種關系. . . . . . . . . . . . . . . . 182

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

9.1.2 Derived 類的方法可以擴充Base 類的同名方法. . . . . . . . . . . . . . . . . 183

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

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

9.3 同一個類的各個對象如何共享變量. . . . . . . . . . . . . . . . . . . . . . . . 186

9.3.1 什么情況下各個對象需要共享變量. . . . . . . . . . . . . . . . . . . . . . . 186

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

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

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

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

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

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

10.3.1 抽象類不能直接用來聲明對象. . . . . . . . . . . . . . . . . . . . . . . . . 191

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

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

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

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

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

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

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

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

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

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

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

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

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

11.7.5 如何設計成員方法使其支持向量化遍歷. . . . . . . . . . . . . . . . . . . . . 211

第12 章類的運算符重載. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

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

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

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

12.1.3 MATLAB 如何處理形如s.f 的表達式. . . . . . . . . . . . . . . . . . . . . . 215

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

6 MATLAB 面向對象編程——從入門到設計模式(第2 版)

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

12.4 什么情況下重載下標運算符. . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

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

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

12.7 如何判斷兩個對象是否相同. . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

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

12.9 MATLAB 中哪些運算符允許重載. . . . . . . . . . . . . . . . . . . . . . . . 226

12.10 實例:運算符重載和量綱分析. . . . . . . . . . . . . . . . . . . . . . . . . . 227

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

12.10.2 需求和設計:加法和減法. . . . . . . . . . . . . . . . . . . . . . . . . . . 229

12.10.3 需求和設計:乘法和除法. . . . . . . . . . . . . . . . . . . . . . . . . . . 232

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

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

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

13.3 枚舉類型應用實例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

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

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

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

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

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

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

14.2 如何獲得一個類的meta.class 對象. . . . . . . . . . . . . . . . . . . . . . . . 250

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

14.4 如何手動克隆一個對象. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

14.5 如何使用matlab.mixin.Copyable 自動克隆一個對象. . . . . . . . . . . . . . 259

第3 部分設計模式篇

第15 章面向對象程序設計的基本思想. . . . . . . . . . . . . . . . . . . . . . . . 265

15.1 單一職責原則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

15.2 開放與封閉原則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

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

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

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

16.1 工廠模式:構造不同種類的面條. . . . . . . . . . . . . . . . . . . . . . . . . 276

16.1.1 簡單工廠模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

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

16.1.3 工廠模式總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

16.1.4 如何進一步去掉switch/if 語句. . . . . . . . . . . . . . . . . . . . . . . . . 283

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

16.1.6 抽象工廠模式總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

16.2 單例模式:給工程計算添加一個LOG 文件. . . . . . . . . . . . . . . . . . . 288

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

16.2.2 如何刪除一個Singleton 對象. . . . . . . . . . . . . . . . . . . . . . . . . . 290

16.2.3 應用:如何包裝一個對象供全局使用. . . . . . . . . . . . . . . . . . . . . . 291

16.3 建造者模式:如何用MATLAB 構造一輛自行車. . . . . . . . . . . . . . . . 293

16.3.1 問題的提出. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

16.3.2 應用:建造者模式為大規(guī)模計算做準備工作. . . . . . . . . . . . . . . . . . . 297

16.3.3 建造者模式總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

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

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

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

17.3 裝飾者模式總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

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

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

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

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

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

18.1.4 觀察者模式總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

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

18.2.1 問題的提出. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

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

18.2.3 策略模式總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

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

18.3.1 問題的提出. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

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

18.3.3 遍歷器模式總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

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

18.4.1 使用if 語句的自動販賣機. . . . . . . . . . . . . . . . . . . . . . . . . . . 329

8 MATLAB 面向對象編程——從入門到設計模式(第2 版)

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

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

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

18.5.1 抽象下面條和煮水餃的過程. . . . . . . . . . . . . . . . . . . . . . . . . . . 341

18.5.2 應用:把策略和模板模式結合起來. . . . . . . . . . . . . . . . . . . . . . . 346

18.5.3 模板模式總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

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

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

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

18.6.3 備忘錄模式總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

第4 部分框架篇

第19 章MATLAB 單元測試框架. . . . . . . . . . . . . . . . . . . . . . . . . . 359

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

19.2 基于函數(shù)的單元測試構造. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

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

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

19.5 測試的準備和清理工作: Test Fixture . . . . . . . . . . . . . . . . . . . . . . 369

19.6 驗證方法: Types of Qualification . . . . . . . . . . . . . . . . . . . . . . . . . 371

19.7 測試方法論和用測試驅動開發(fā). . . . . . . . . . . . . . . . . . . . . . . . . . 375

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

19.7.2 用測試驅動開發(fā):fibonacci 例. . . . . . . . . . . . . . . . . . . . . . . . . 377

19.7.3 用測試驅動開發(fā):運算符重載和量綱分析. . . . . . . . . . . . . . . . . . . . 381

19.8 基于類的單元測試. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

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

19.8.2 MVC GUI 的基于類的單元測試. . . . . . . . . . . . . . . . . . . . . . . . 395

第20 章MATLAB 性能測試框架. . . . . . . . . . . . . . . . . . . . . . . . . . 401

20.1 為什么需要MATLAB 性能測試框架. . . . . . . . . . . . . . . . . . . . . . . 401

20.2 基于類的性能測試框架. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

20.2.1 構造測試類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

20.2.2 測試結果解析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

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

20.4 性能測試的適用范圍討論. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410

附錄

附錄A 綜合實例:如何把面向過程的程序轉成面向對象的程序. . . . . . . . . . . 413

附錄B MATLAB 高級數(shù)據(jù)結構:containers.Map . . . . . . . . . . . . . . . 425

B.1 containers.Map 簡介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

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

B.3 用containers.Map 來記錄電話號碼簿. . . . . . . . . . . . . . . . . . . . . . 428

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

B.5 containers.Map 的特點. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430

B.5.1 containers.Map 可以不斷地擴張且不需要預分配. . . . . . . . . . . . . . . . 430

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

B.5.3 containers.Map 可以增強程序的可讀性. . . . . . . . . . . . . . . . . . . . . 431

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

B.6 containers.Map 的使用實例. . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

B.6.1 用來存放元素周期表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

B.6.2 用來實現(xiàn)快速檢索. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

附錄C MATLAB 高級數(shù)據(jù)結構:table . . . . . . . . . . . . . . . . . . . . . . 435

C.1 table 簡介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435

C.1.1 為什么需要table 數(shù)據(jù)結構. . . . . . . . . . . . . . . . . . . . . . . . . . . 435

C.1.2 通過導入數(shù)據(jù)構造table 對象. . . . . . . . . . . . . . . . . . . . . . . . . . 436

C.1.3 調用table 構造函數(shù)來構造table 對象. . . . . . . . . . . . . . . . . . . . . 436

C.1.4 通過轉換函數(shù)構造table 對象. . . . . . . . . . . . . . . . . . . . . . . . . . 437

C.2 訪問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 相互轉換. . . . . . . . . . . . . . . . . . . . . . . 446

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

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

10 MATLAB 面向對象編程——從入門到設計模式(第2 版)

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

D.1 為什么要對函數(shù)的輸入進行檢查. . . . . . . . . . . . . . . . . . . . . . . . . 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ù)和默認參數(shù)值設置. . . . . . . . . . . . . . . . . . . 461

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

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

D.4.5 inputParser 解析結構體的輸入. . . . . . . . . . . . . . . . . . . . . . . . . 465

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

參考文獻. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

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

本目錄推薦

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