MATLAB面向對象編程--從入門到設計模式(第2版) 版權信息
- ISBN:9787512424029
- 條形碼:9787512424029 ; 978-7-5124-2402-9
- 裝幀:一般膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
MATLAB面向對象編程--從入門到設計模式(第2版) 本書特色
本書分為4 部分:第1 部分是面向對象編程初級篇,主要介紹MATLAB 面向對象編程的基礎知識和語法;第2 部分是面向對象編程中級篇,主要介紹面向對象編程的中高級概念,方便讀者在編程中遇到問題時查詢;第3 部分是設計模式篇,把面向對象的編程方法應用到實際問題中,并從實際問題中抽象出一般的解決方法,即設計模式;第4 部分是框架篇,主要介紹構建在面向對象和設計模式基礎之上的MATLAB測試框架,包括單元測試框架和性能測試框架。
本書既可作為高等院校MATLAB 課程的輔助讀物,也可作為從事科學計算、程序設計等工作的科研人員的參考用書。
MATLAB面向對象編程--從入門到設計模式(第2版) 內容簡介
本書是由MATLAB語言開發工程師撰寫的MATLAB編程書籍,凝結了作者多年的科研和工作經驗以及對MATLAB語言的深刻理解,旨在推動軟件工程的手段在MATLAB科學工程計算項目中的應用,幫助科學家和工程師更有效的解決復雜的科研問題。
本書是市面上*由MATLAB語言開發工程師撰寫的MATLAB編程書籍,凝結了作者多年的科研和工作經驗以及對MATLAB語言的深刻理解,旨在推動軟件工程的手段在MATLAB科學工程計算項目中的應用,幫助科學家和工程師更有效地解決復雜的科研問題。
第2版較第1版增加了100多頁的內容,包括單元測試系統、高級數據結構、APP Designer等新版本中才有的內容,更全面,更實用。
本書上一版部分讀者評論如下:
MATLAB大型程序開發**,比市面上抄Help的書強太多。這本書主要是講設計模式的,特別適合有用戶界面、存儲、計算等多個復雜功能模塊的大型程序。用MATLAB的面向對象功能,比用c 之類開發速度能快很多,還能利用積累的MATLAB代碼。
這書思路很好,要成為MATLAB高手,此書必讀。
——北京網友,*網書評
實用,通俗易懂,強烈推薦, MATLAB 5年以上編程經驗,強烈推薦這本書。
不同于市面上其他一些MATLAB書籍基本靠翻譯Help文檔,這本書的作者確實花了很多精力介紹自己的經驗和理解。在作者通俗易懂的案例下,我對于MATLAB面向對象編程技術有了更加深刻的理解,現在已經開始使用面向對象編程技術,強烈推薦,MATLAB高級編程者使用此書。
——廣東網友,*網書評
通俗易懂,極具實用價值,讀得非常暢快。
——北京網友,*網書評
本書是由MATLAB語言開發工程師撰寫的MATLAB編程書籍,凝結了作者多年的科研和工作經驗以及對MATLAB語言的深刻理解,旨在推動軟件工程的手段在MATLAB科學工程計算項目中的應用,幫助科學家和工程師更有效的解決復雜的科研問題。
本書是市面上*由MATLAB語言開發工程師撰寫的MATLAB編程書籍,凝結了作者多年的科研和工作經驗以及對MATLAB語言的深刻理解,旨在推動軟件工程的手段在MATLAB科學工程計算項目中的應用,幫助科學家和工程師更有效地解決復雜的科研問題。
第2版較第1版增加了100多頁的內容,包括單元測試系統、高級數據結構、APP Designer等新版本中才有的內容,更全面,更實用。
本書上一版部分讀者評論如下:
MATLAB大型程序開發**,比市面上抄Help的書強太多。這本書主要是講設計模式的,特別適合有用戶界面、存儲、計算等多個復雜功能模塊的大型程序。用MATLAB的面向對象功能,比用c 之類開發速度能快很多,還能利用積累的MATLAB代碼。
這書思路很好,要成為MATLAB高手,此書必讀。
——北京網友,*網書評
實用,通俗易懂,強烈推薦, MATLAB 5年以上編程經驗,強烈推薦這本書。
不同于市面上其他一些MATLAB書籍基本靠翻譯Help文檔,這本書的作者確實花了很多精力介紹自己的經驗和理解。
在作者通俗易懂的案例下,我對于MATLAB面向對象編程技術有了更加深刻的理解,現在已經開始使用面向對象編程技術,
強烈推薦,MATLAB高級編程者使用此書。
——廣東網友,*網書評
通俗易懂,極具實用價值,讀得非常暢快。
——北京網友,*網書評
本書非常實用,之前一直使用面向過程編程,總是無法合理調節各項參數。看了面向對象才知道什么是高端優雅編程!
——江蘇網友, *網書評
這本書我買了,以我僅上過一個學期的c 的水平來看 ,很適合初學者,思路較官方手冊更簡潔(對于入門足夠)。我個人覺得,后邊的模式設計又對工程來說給了很多設計思路上的指導。
——小木蟲網友,程序語言論壇書評
作為一名學生,我一直很喜歡北航出的技術類書籍,不僅質量比較好,內容充實,與其他的書籍*的不同就是能從初學者學習的角度來闡述問題,是學習時不可多得的好書。本書也一樣,由淺入深,逐層剖析,又不局限于編程和實現細節,加入了很多編程思想和方法,這是一般技術書籍不具備的。
——全文試讀網友書評
書很好,對于習慣了面向過程的編程人,轉換思路可以獲取事半功倍的效果。特別是本書不僅介紹語法,更注重面向對象的思想。
——江蘇網友,*網書評
這本書等了很久了。math一發朋友圈。就果斷買了。
——北京網友,*網書評
這本書的閱讀對象主要是初級用戶。本人的知識結構比較老了,正式學的語言是Fortran,像C 、Java這些時髦語言了解較少,僅知道“面向對象編程”的說法,不了解其內涵。因項目需要,想采用MATLAB做二次開發軟件的界面(對直觀的圖形顯示要求較高),開始自學MATLAB。起初也看了許多入門的書籍,包括張志涌老師的那本,感覺知識點很多,通讀起來比較困難。這本書出版后買了一本,作者作為MATLAB的資深應用者,通過通俗的例子(非專業)將面向對象的含義解釋得很清楚,看完有一種豁然開朗的感覺,而且感覺上升了一個檔次(當然僅是意識上,離實戰還差得遠)。
其實面向對象是一種思想,一種解決問題的思路和方法,無論做什么項目都用的到。開展項目前規劃好其架構無疑是非常重要的。
——小木蟲網友,程序語言論壇書評
關于MATLAB面向對象編程的非常推薦的一本書。
——安徽網友,*網書評
后面的介紹面向對象的功能真的很引人入勝。
——全文試讀網友書評
粗略看了一遍,感覺不錯,所選“面館”的例子生動形象,貫穿始終,將面向對象的思想講得很透徹,原來許多模棱兩可的概念現在清楚了,感謝作者的辛勤勞動!
——ilovematlab論壇網友
MATLAB面向對象編程--從入門到設計模式(第2版) 目錄
第1 部分面向對象編程初級篇
第1 章面向過程編程和面向對象編程. . . . . . . . . . . . . . . . . . . . . . . . 3
1.1
什么是面向過程編程. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 3
1.2
什么是面向對象編程. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 4
1.2.1
什么是對象. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 4
1.2.2
什么是類. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 4
1.2.3
什么是統一建模語言. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 6
1.3
面向過程編程有哪些局限性. . . . . . . . . . . . . . . . . .
. . . . . . . . . . 9
1.4
面向對象編程有哪些優點. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 13
第2 章MATLAB 面向對象編程入門. . . . . . . . . . . . . . .
. . . . . . . . . 16
2.1
如何定義一個類. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 16
2.2
如何創建一個對象. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 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
點調用和函數調用類方法的區別. . . . . . . . . . . . . . . . .
. . . . . . . 29
2.4.4
什么是方法的簽名. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 29
2.4.5
類、對象、屬性和方法之間的關系. . . . . . . . . . . . . . . .
. . . . . . . 32
2.4.6
如何用disp 方法定制對象的顯示. . .
. . . . . . . . . . . . . . . . . . . . . 32
2.5
類的構造函數. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 35
2.5.1
什么是構造函數. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 35
2.5.2
如何在構造函數中給屬性賦值. . . . . . . . . . . . . . . . .
. . . . . . . . 36
2.5.3
如何讓構造函數接受不同數目的參數. . . . . . . . . . . . . . . .
. . . . . . 36
2.5.4
什么是默認構造函數. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 37
2.5.5
用戶一定要定義構造函數嗎. . . . . . . . . . . . . . . . . .
. . . . . . . . . 38
2.6
類的繼承. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 39
2.6.1
什么是繼承. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 39
2.6.2
為什么子類構造函數需要先調用父類構造函數. . . . . . . . . . . . . .
. . . . 43
2.6.3
在子類方法中如何調用父類同名方法. . . . . . . . . . . . . . . .
. . . . . . 45
2.6.4
什么是多態. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 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
對象根據類定義的改變而自動更新. . . . . . . . . . . . . . . .
. . . . . . . . 64
第3 章MATLAB 的句柄類和實體值類. . . . . . . . . . . . . .
. . . . . . . . 66
3.1
引子:參數是如何傳遞到函數空間中去的. . . . . . . . . . . . . . .
. . . . . 66
3.2
MATLAB 的Value 類和Handle 類. . . . . . . . . . . . . . . . . . . . . . . 70
3.2.1
什么是Value 類和Handle 類. . . . . . . . . . . . . . . . . . . . . . . . . 70
3.2.2
Value 類對象和Handle 類對象復制有什么區別.
. . . . . . . . . . . . . . . . 72
3.2.3
Value 類對象和Handle 類對象賦值有什么區別.
. . . . . . . . . . . . . . . . 73
3.2.4
Value 類對象和Handle 類對象當作函數參數有什么區別. . . . . . . . . . . . . 76
3.2.5
Value 類對象和Handle 類對象作為默認值有什么區別. . . . . . . . . . . . . . 77
3.2.6
什么情況下使用Value 類或Handle 類. . . . . . . . . . . . . . . . . . . . . 78
3.3
類的析構函數(Destructor) . .
. . . . . . . . . . . . . . . . . . . . . . . . . 83
3.3.1
什么是對象的生存周期. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 83
3.3.2
什么是析構函數. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 84
3.3.3
對Object 使用clear 會發生什么. . . . . . . . . . . . . . . . . . . . . . . . 84
3.3.4
對Object 使用delete 會發生什么. . . . . . . . . . . . . . . . . . . . . . . 85
3.3.5
什么情況下delete 方法會被自動調用. .
. . . . . . . . . . . . . . . . . . . . 88
3.3.6
出現異常時delete 函數如何被調用. .
. . . . . . . . . . . . . . . . . . . . . 91
3.3.7
什么情況下用戶需要自己定義一個delete 方法. . . . . . . . . . . . . . . . . 92
第4 章事件和響應. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
95
4.1
事件. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 95
4.1.1
什么是事件. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 95
4.1.2
如何定義事件和監聽事件. . . . . . . . . . . . . . . . . .
. . . . . . . . . . 96
4.1.3
為什么需要事件機制. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 97
4.2
發布者通知觀察者,但不傳遞消息. . . . . . . . . . . . . . . .
. . . . . . . . 98
4.3
發布者通知觀察者,并且傳遞消息. . . . . . . . . . . . . . . .
. . . . . . . . 100
4.4
刪除listener . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 103
第5 章MATLAB 類文件的組織結構. . . . . . . . . . . . . . .
. . . . . . . . . 104
5.1
如何使用其他文件夾中類的定義. . . . . . . . . . . . . . . . .
. . . . . . . . 104
5.2
如何把類的定義和成員方法的定義分開. . . . . . . . . . . . . . .
. . . . . . 105
5.3
如何定義類的局部函數. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 106
5.4
如何使用Package 文件夾管理類. . .
. . . . . . . . . . . . . . . . . . . . . . 108
5.4.1
Package 中的類是如何組織的. . . . . . . . . . . . . . . . . . .
. . . . . . 108
5.4.2
如何使用Package 中的某個類. . .
. . . . . . . . . . . . . . . . . . . . . . 109
5.4.3
如何導入Package 中的所有類. . .
. . . . . . . . . . . . . . . . . . . . . . 109
5.5
函數和類方法重名到底調用誰. . . . . . . . . . . . . . . . .
. . . . . . . . . 109
5.6
Package 中的函數和當前路徑上的同名函數誰有優先級. . . . . . . . . . . . 110
第6 章MATLAB 對象的保存和載入. . . . . . . . . . . . . . .
. . . . . . . . . 112
6.1
save 和load 命令. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 112
6.1.1
對象的save 和load 操作. . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.1.2
MAT 文件中保存了對象中的哪些內容. . . . . . . . . . . . . . . . .
. . . . 112
6.1.3
如果類的定義在save 操作之后發生了變化.
. . . . . . . . . . . . . . . . . . 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
什么是瞬態屬性. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 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 以及共享數據. . .
. . . . . . . . . . . . . . . . . . . 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
網格布局器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
繼承結構下的構造函數和析構函數. . . . . . . . . . . . . . . .
. . . . . . . . 163
8.1.1
什么情況需要手動調用基類的構造函數. . . . . . . . . . . . . . .
. . . . . . 163
8.1.2
什么情況可以讓MATLAB 自動調用基類的構造函數. . . . . . . . . . . . . . 164
8.1.3
常見錯誤:沒有提供默認構造函數. . . . . . . . . . . . . . . .
. . . . . . . 166
8.1.4
在構造函數中調用哪個成員方法. . . . . . . . . . . . . . . . .
. . . . . . . 167
8.1.5
析構函數被調用的順序是什么. . . . . . . . . . . . . . . . .
. . . . . . . . 168
8.2
MATLAB 的多重繼承. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 169
8.2.1
什么情況下需要多重繼承. . . . . . . . . . . . . . . . . .
. . . . . . . . . . 169
8.2.2
什么是多重繼承. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 170
8.2.3
構造函數被調用的順序是什么. . . . . . . . . . . . . . . . .
. . . . . . . . 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
什么是靜態方法. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 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
子類要實現所有的抽象方法. . . . . . . . . . . . . . . . . .
. . . . . . . . . 192
第11 章對象數組. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 195
11.1
如何把對象串接成數組. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 195
11.2
如何直接聲明對象數組. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 196
11.3
如何使用findobj 函數尋找特定的對象.
. . . . . . . . . . . . . . . . . . . . . 199
11.4
如何利用元胞數組把不同類的對象組合到一起. . . . . . . . . . . . . .
. . . 201
11.5
什么是轉換函數. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 203
11.6
如何利用轉換函數把不同類的對象組合到一起. . . . . . . . . . . . . .
. . . 204
11.7
如何用非同類(Heterogeneous)數組盛放不同類對象. . . . . . . . . . . . . 205
11.7.1
為什么需要非同類數組. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 205
11.7.2
含有不同類對象的數組類型. . . . . . . . . . . . . . . . . .
. . . . . . . . . 207
11.7.3
使用非同類要避免哪些情況. . . . . . . . . . . . . . . . . .
. . . . . . . . . 209
11.7.4
如何向量化遍歷數組中對象的屬性. . . . . . . . . . . . . . . .
. . . . . . . 209
11.7.5
如何設計成員方法使其支持向量化遍歷. . . . . . . . . . . . . . .
. . . . . . 211
第12 章類的運算符重載. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
12.1
理解MATLAB 的subsref 和subsasgn 函數. . . . . . . . . . . . . . . . .
. 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 函數. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 216
6
MATLAB 面向對象編程——從入門到設計模式(第2 版)
12.3
如何重載subsasgn 函數. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 217
12.4
什么情況下重載下標運算符. . . . . . . . . . . . . . . . . .
. . . . . . . . . . 218
12.5
如何重載plus 函數. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 219
12.6
MATLAB 的Dispatching 規則是什么. . .
. . . . . . . . . . . . . . . . . . . 220
12.7
如何判斷兩個對象是否相同. . . . . . . . . . . . . . . . . .
. . . . . . . . . . 221
12.8
如何讓一個對象在行為上像一個函數. . . . . . . . . . . . . . . .
. . . . . . . 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
枚舉類型對象數組. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 246
13.3.4
從基本數據類型中派生枚舉類型. . . . . . . . . . . . . . . . .
. . . . . . . 247
第14 章超類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 249
14.1
什么是超類. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 249
14.2
如何獲得一個類的meta.class 對象.
. . . . . . . . . . . . . . . . . . . . . . . 250
14.3
meta.class 對象中有些什么內容. . . . . . . . . . . . . . . . . . .
. . . . . . 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 章創建型模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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
如何控制對象的數量. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 288
16.2.2
如何刪除一個Singleton 對象. . .
. . . . . . . . . . . . . . . . . . . . . . . 290
16.2.3
應用:如何包裝一個對象供全局使用. . . . . . . . . . . . . . . .
. . . . . . 291
16.3
建造者模式:如何用MATLAB 構造一輛自行車.
. . . . . . . . . . . . . . . 293
16.3.1
問題的提出. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 293
16.3.2
應用:建造者模式為大規模計算做準備工作. . . . . . . . . . . . . .
. . . . . 297
16.3.3
建造者模式總結. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 298
第17 章裝飾者模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
302
17.1
裝飾者模式的引入. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 302
17.2
面館菜單代碼. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 304
17.3
裝飾者模式總結. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 306
第18 章行為模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 308
18.1
觀察者模式:用MATLAB 實現觀察者模式.
. . . . . . . . . . . . . . . . . . 308
18.1.1
發布和訂閱的基本模型. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 308
18.1.2
訂閱者查詢發布者的狀態. . . . . . . . . . . . . . . . . .
. . . . . . . . . . 311
18.1.3
把發布者和訂閱者抽象出來. . . . . . . . . . . . . . . . . .
. . . . . . . . . 312
18.1.4
觀察者模式總結. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 313
18.2
策略模式:分離圖像數據和圖像處理算法. . . . . . . . . . . . . . .
. . . . . 316
18.2.1
問題的提出. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 316
18.2.2
應用:更復雜的分離數據和算法的例子. . . . . . . . . . . . . . .
. . . . . . 320
18.2.3
策略模式總結. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 321
18.3
遍歷器模式:工程科學計算中如何遍歷大量數據. . . . . . . . . . . . .
. . . 323
18.3.1
問題的提出. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 323
18.3.2
聚集和遍歷器. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 324
18.3.3
遍歷器模式總結. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 328
18.4
狀態模式:用MATLAB 模擬自動販賣機. .
. . . . . . . . . . . . . . . . . . 329
18.4.1
使用if 語句的自動販賣機. . . . .
. . . . . . . . . . . . . . . . . . . . . . 329
8
MATLAB 面向對象編程——從入門到設計模式(第2 版)
18.4.2
使用狀態模式的自動販賣機. . . . . . . . . . . . . . . . . .
. . . . . . . . . 335
18.4.3
狀態模式總結. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 340
18.5
模板模式:下面條和煮水餃有什么共同之處. . . . . . . . . . . . . .
. . . . . 341
18.5.1
抽象下面條和煮水餃的過程. . . . . . . . . . . . . . . . . .
. . . . . . . . . 341
18.5.2
應用:把策略和模板模式結合起來. . . . . . . . . . . . . . . .
. . . . . . . 346
18.5.3
模板模式總結. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 347
18.6
備忘錄模式:實現GUI 的undo 功能. . . . . . . . . . . . . . . . . . . . . . 348
18.6.1
如何記錄對象的內部狀態. . . . . . . . . . . . . . . . . .
. . . . . . . . . . 348
18.6.2
應用:如何利用備忘錄模式實現GUI 的do 和undo 操作. . . . . . . . . . . . 351
18.6.3
備忘錄模式總結. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 356
第4 部分框架篇
第19 章MATLAB 單元測試框架. . . . . . . . . . . . . . . .
. . . . . . . . . . 359
19.1
框架概述. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 359
19.2
基于函數的單元測試構造. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 359
19.3
getArea 函數的單元測試: 版本I . . . . .
. . . . . . . . . . . . . . . . . . . . 361
19.4
getArea 函數的單元測試: 版本II 和版本III . . . . . . . . . . . . . . . . . . 366
19.5
測試的準備和清理工作: Test Fixture . . . . . . . . . . .
. . . . . . . . . . . 369
19.6
驗證方法: Types of Qualification . . . . . . . . .
. . . . . . . . . . . . . . . . 371
19.7
測試方法論和用測試驅動開發. . . . . . . . . . . . . . . . .
. . . . . . . . . 375
19.7.1
開發流程概述. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 375
19.7.2
用測試驅動開發:fibonacci 例. .
. . . . . . . . . . . . . . . . . . . . . . . 377
19.7.3
用測試驅動開發:運算符重載和量綱分析. . . . . . . . . . . . . . .
. . . . . 381
19.8
基于類的單元測試. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 393
19.8.1
getArea 函數的基于類的單元測試. . . . . . . . . . . . . . . . . .
. . . . . 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
誤差范圍和置信區間. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 407
20.4
性能測試的適用范圍討論. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 410
附錄
附錄A 綜合實例:如何把面向過程的程序轉成面向對象的程序. . . . . . . . . . . 413
附錄B MATLAB 高級數據結構:containers.Map . . . . . . . . . . . . . . . 425
B.1
containers.Map 簡介. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 425
B.2
數組、元胞數組和結構體的局限性. . . . . . . . . . . . . . . .
. . . . . . . . 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 可以作為參數在函數內部直接修改. . . . . . . . . . . . . . .
431
B.5.3
containers.Map 可以增強程序的可讀性. . . . . . . . . . . . . . . . . . .
. . 431
B.5.4
containers.Map 提供對數據的快速查找. . . . . . . . . . . . . . . . . . .
. . 431
B.6
containers.Map 的使用實例. . . . . . . . . . . . . . . . . . . . .
. . . . . . . 433
B.6.1
用來存放元素周期表. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 433
B.6.2
用來實現快速檢索. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 433
附錄C MATLAB 高級數據結構:table . . . . . . . . . . . . . . . . . . . . . . 435
C.1
table 簡介. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 435
C.1.1
為什么需要table 數據結構. . . .
. . . . . . . . . . . . . . . . . . . . . . . 435
C.1.2
通過導入數據構造table 對象. . . .
. . . . . . . . . . . . . . . . . . . . . . 436
C.1.3
調用table 構造函數來構造table 對象. . . . . . . . . . . . . . . . . . . . . 436
C.1.4
通過轉換函數構造table 對象. . . .
. . . . . . . . . . . . . . . . . . . . . . 437
C.2
訪問table 中的數據. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 438
C.3
table 的操作. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 439
C.3.1
刪除行列. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 439
C.3.2
添加行列. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 440
C.3.3
合并table . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 441
C.3.4
操作列數據. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 442
C.3.5
排序. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 444
C.3.6
篩選和查找. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 445
C.3.7
輸出到文件. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 445
C.4
其他數據類型之間和table 相互轉換. .
. . . . . . . . . . . . . . . . . . . . . 446
C.5
table 之間的操作. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 449
C.6
table 的屬性和支持的操作. . . . . . . . . . . . . . . . . . .
. . . . . . . . . 452
10
MATLAB 面向對象編程——從入門到設計模式(第2 版)
附錄D 對函數的輸入進行檢查和解析. . . . . . . . . . . . . . . . . . . . . . . . 454
D.1
為什么要對函數的輸入進行檢查. . . . . . . . . . . . . . . . .
. . . . . . . . 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 的可選參數和默認參數值設置. . . . . . . . . . . . . . . . .
. . 461
D.4.3
inputParser 和validateattributes 聯合使用. . . . . . . . . . . . . . . . . . . 462
D.4.4
inputParser 的參數名–參數值對的設置. . . . . . . . . . . . . . . . . .
. . . 462
D.4.5
inputParser 解析結構體的輸入. . . . . . . . . . . . . . . . . . . .
. . . . . 465
D.5
引子:為什么需要MATLAB 的單元測試系統.
. . . . . . . . . . . . . . . . 466
參考文獻. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
寫在*后. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 469
展開全部
MATLAB面向對象編程--從入門到設計模式(第2版) 作者簡介
徐瀟:MathWorks開發部MATLAB架構C 高級軟件工程師。計算物理學博士,研究方向為電子結構計算、密度泛函算法開發;計算機碩士,研究方向為圖像處理。2004年,開始使用MATLAB,在科研編程中遇到了開發大型程序難以維護的困難,花了很多時間用于改進程序但效果總不盡如人意。2009年,開始使用MATLAB面向對象編程,發現工程進度被迅速加快,于是萌生了寫一本介紹MATLAB 面向對象編程書的念頭。2011年,在美國取得博士學位之后入職MathWorks,從理科科研工作者和多年的MATLAB愛好者,成為一名MATLAB語言的設計開發和實現的軟件工程師。2016年,作者在MATLAB中文論壇開辟了技術專欄(http://www.ilovematlab.cn/forum-219-1.html),和大家分享最新的行業應用技術和MATLAB編程理念,旨在推動軟件工程中的現代手段在MATLAB科學工程計算項目中的使用,幫助科學家和工程師們更有效地解決復雜的科研問題。本書凝結了作者多年的科研和工作經驗以及對MATLAB語言的理解,希望能對各種規模的科學工程計算項目的MATLAB使用者有所啟發。
李遠:本、碩畢業于北方交通大學,在美國的維克弗斯特大學取得物理學博士學位。2014年回國創建北醒(北京)光子科技有限公司,專注于固態激光雷達的研發和生產,產品應用于無人駕駛、無人機和機器人等領域。希望這本《MATLAB面向對象編程——從入門到設計模式(第2版)》能夠給工程科學領域的工作者帶來方便,尤其對于一些需要長期使用而且不斷更新的程序。