MATLAB面向?qū)ο缶幊獭獜娜腴T到設(shè)計模式
定 價:46 元
- 作者:徐瀟,李遠 編著
- 出版時間:2015/1/1
- ISBN:9787512416093
- 出 版 社:北京航空航天大學(xué)出版社
- 中圖法分類:H31
- 頁碼:331
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書分為三部分。第一部分介紹MATLAB面向?qū)ο缶幊袒A(chǔ)知識,包括什么是類,類之間的基本關(guān)系,以及MATLAB提供的面向?qū)ο缶幊陶Z言的具體功能;第二部分是面向?qū)ο缶幊痰倪M階篇,對概念進行歸類,方便讀者在編程中遇到問題時查詢和檢索;第三部分把面向?qū)ο缶幊痰姆椒☉?yīng)用到實際問題中,并且從實際問題中抽象出一般的解決方法,即設(shè)計模式。
本書可作為高等院校本科生、研究生MATLAB課程的輔助讀物,也可作為從事科學(xué)計算、程序設(shè)計的科研人員的參考書。
國內(nèi)第一本論壇全文試讀的MATLAB圖書,MathWorks公司、MATLAB中文論壇聯(lián)合力薦
徐瀟 軟件工程師,物理博士,研究方向為電子結(jié)構(gòu)計算、密度泛函算法開發(fā);計算機碩士,研究方向為圖像處理。在科研編程中經(jīng)歷了開發(fā)大型程序難以維護的困難,花了很多時間用于改進程序但總不盡如人意。從2009 年接觸并開始使用MATLAB面向?qū)ο缶幊,發(fā)覺工程進度被迅速加快,于是萌生了寫一本介紹MATLAB 面向?qū)ο缶幊痰臅哪铑^,希望把這個優(yōu)秀的工具介紹給大家。
李遠 研究員(Senior Research Scientist),物理博士,研究方向為光電子器件;碩士就讀于北京交通大學(xué),后在Wake Forest University 取得物理博士學(xué)位,曾在華盛頓大學(xué)做博士后。希望這本《MATLAB面向?qū)ο缶幊獭獜娜腴T到設(shè)計模式》能夠給工程科學(xué)領(lǐng)域的工作者帶來更多方便,尤其是在一些需要長期使用而且不斷更新的程序上。
第1 部分面向?qū)ο缶幊坛跫壠?br>1.1 什么是面向過程的編程
1.2 什么是面向?qū)ο蟮木幊獭?
1.2.1 什么是對象(Object)
1.2.2 什么是類(Class)
1.2.3 什么是統(tǒng)一建模語言(UML)
1.3 面向過程編程有哪些局限性
1.4 面向?qū)ο缶幊逃心男﹥?yōu)點
第2 章MATLAB 面向?qū)ο蟪绦蛉腴T
2.1 如何定義一個類
2.2 如何創(chuàng)建一個對象
2.3 類的屬性(Property)
2.3.1 如何訪問對象的屬性
2.3.2 什么是屬性的默認值(Default Value)
第1 部分面向?qū)ο缶幊坛跫壠?/p>
第1 章面向過程和面向?qū)ο蟪绦蛟O(shè)計
1.1 什么是面向過程的編程
1.2 什么是面向?qū)ο蟮木幊獭?
1.2.1 什么是對象(Object)
1.2.2 什么是類(Class)
1.2.3 什么是統(tǒng)一建模語言(UML)
1.3 面向過程編程有哪些局限性
1.4 面向?qū)ο缶幊逃心男﹥?yōu)點
第2 章MATLAB 面向?qū)ο蟪绦蛉腴T
2.1 如何定義一個類
2.2 如何創(chuàng)建一個對象
2.3 類的屬性(Property)
2.3.1 如何訪問對象的屬性
2.3.2 什么是屬性的默認值(Default Value)
2.3.3 什么是常量(Constant) 屬性
2.3.4 什么是非獨立(Dependent) 屬性
2.3.5 什么是隱藏(Hidden) 屬性
2.4 類的方法(Method)
2.4.1 如何定義類的方法
2.4.2 如何調(diào)用類的方法
2.4.3 點調(diào)用和函數(shù)式調(diào)用類方法的區(qū)別
2.4.4 什么是方法的簽名
2.4.5 類、對象、屬性、方法之間的關(guān)系
2.4.6 如何用disp 方法定制對象的顯示
2.5 類的構(gòu)造函數(shù)(Constructor)
2.5.1 什么是Constructor
2.5.2 如何在Constructor 中給property 賦值
2.5.3 如何讓Constructor 接受不同數(shù)目的參數(shù)
2.5.4 什么是Default Constructor
2.5.5 用戶一定要定義Constructor 嗎
2.6 類的繼承
2.6.1 什么是繼承
2.6.2 為什么子類Constructor 需要先調(diào)用父類Constructor
2.6.3 在子類方法中如何調(diào)用父類同名方法
2.6.4 什么是多態(tài)
2.7 類之間的基本關(guān)系:繼承、組合和聚集
2.7.1 如何判斷B 能否繼承A
2.7.2 企鵝和鳥之間是不是繼承關(guān)系
2.7.3 如何把類組合起來
2.7.4 什么是組合聚集關(guān)系
2.8 Handle 類的set 和get 方法
2.8.1 什么是set 方法
2.8.2 什么是get 方法
2.9 如何設(shè)置屬性和方法的訪問權(quán)限
2.9.1 什么是public,protected,private 權(quán)限
2.9.2 如何決定對類的屬性和方法設(shè)置何種訪問權(quán)限
2.9.3 MATLAB 對屬性訪問的控制與C++ 和Java 有什么不同
2.10 Clear Classes 到底清除了什么
第3 章MATLAB 的句柄類和實體值類
3.1 引子:參數(shù)是如何傳遞到函數(shù)空間中去的
3.2 MATLAB 的Value Class 和Handle Class
3.2.1 什么是Value Class 和Handle Class
3.2.2 Value 類對象和Handle 類對象拷貝有什么區(qū)別
3.2.3 Value 類對象和Handle 類對象賦值有什么區(qū)別
3.2.4 Value 類對象和Handle 類對象當做函數(shù)參數(shù)有什么區(qū)別
3.2.5 什么情況下使用Value 類或Handle 類
3.3 類的析構(gòu)函數(shù)(Destructor)
3.3.1 什么是對象的生存周期
3.3.2 什么是析構(gòu)函數(shù)(Destructor)
3.3.3 對Object 使用clear 會發(fā)生什么
3.3.4 對Object 使用delete 會發(fā)生什么
3.3.5 什么情況下delete 方法會被自動調(diào)用
3.3.6 出現(xiàn)異常時delete 函數(shù)如何被調(diào)用
3.3.7 何時用戶需要自己定義一個delete 方法
第4 章事件和響應(yīng)
4.1 事件(Event)
4.1.1 什么是事件
4.1.2 如何定義事件和監(jiān)聽事件
4.1.3 為什么需要事件機制
4.2 發(fā)布者通知觀察者對象,但不傳遞消息
4.3 發(fā)布者通知觀察者,并且傳遞消息
4.4 刪除listener
第5 章MATLAB 類文件的組織結(jié)構(gòu)
5.1 如何使用其他文件夾中的類的定義
5.2 如何把類的定義和成員方法的定義分開
5.3 如何定義類的局部函數(shù)
5.4 如何使用Package 文件夾管理類
5.4.1 Package 中的類是如何組織的
5.4.2 如何使用Package 中的某個類
5.4.3 如何導(dǎo)入Package 中的所有類
5.5 函數(shù)和類方法重名到底調(diào)用誰
5.6 Package 中的函數(shù)和當前路徑上的同名函數(shù)誰有優(yōu)先級
第6 章MATLAB 對象的保存和載入
6.1 save 和load 命令
6.1.1 如何save 和load object
6.1.2 MAT 文件中保存了object 中的哪些內(nèi)容
6.1.3 如果類的定義在save 之后發(fā)生了變化
6.2 saveobj 和loadobj 方法
6.2.1 如何定義saveobj 方法
6.2.2 如何定義loadobj 方法
6.3 繼承情況下的saveobj 和loadobj 方法
6.3.1 存在繼承時如何設(shè)計saveobj 方法
6.3.2 存在繼承時如何設(shè)計loadobj 方法
6.4 什么是瞬態(tài)(Transient)屬性
6.5 什么是裝載時構(gòu)造(ConstructOnLoad)
第7 章面向?qū)ο蟮腉UI 編程:分離用戶界面和模型
7.1 如何使用GUIDE 進行GUI 編程
7.2 如何使用程序的方式(Programmatic)進行GUI 編程
7.3 如何用面向?qū)ο蟮姆绞竭M行GUI 編程
7.4 模型類中應(yīng)該包括什么
7.5 視圖類中應(yīng)該包括什么
7.6 控制器類中應(yīng)該包括什么
7.7 如何把Model、View 和Controller 結(jié)合起來
7.8 如何設(shè)計多視圖的GUI 以及共享數(shù)據(jù)
7.9 如何設(shè)計GUI 邏輯架構(gòu)
7.10 如何使用GUI Layout Toolbox 對界面自動布局
7.10.1 為什么需要布局管理器
7.10.2 縱向布局類VBox
7.10.3 橫向布局類HBox
7.10.4 選項卡布局TabPanel
7.10.5 網(wǎng)格布局類Grid
7.10.6 GUI Layout 的復(fù)合布局
7.10.7 把GUI Layout Toolbox 和MVC 模式結(jié)合起來
第2 部分面向?qū)ο缶幊讨屑壠?/p>
第8 章類的繼承進階
8.1 繼承情況下的Constructor 和Destructor
8.1.1 什么情況需要手動調(diào)用基類的Constructor
8.1.2 什么情況可以讓MATLAB 自動調(diào)用基類的Constructor
8.1.3 常見錯誤:沒有提供缺省構(gòu)造函數(shù)
8.1.4 在Constructor 中調(diào)用哪個成員方法
8.1.5 析構(gòu)函數(shù)被調(diào)用的順序是什么
8.2 MATLAB 的多重繼承
8.2.1 什么情況下需要多重繼承
8.2.2 什么是多重繼承
8.2.3 構(gòu)造函數(shù)被調(diào)用的順序是什么
8.2.4 多重繼承如何處理屬性重名
8.2.5 多重繼承如何處理方法重名
8.2.6 什么是鉆石型繼承
8.2.7 如何同時繼承Value 類和Handle 類
8.3 如何禁止類被繼承
第9 章類的成員方法進階
9.1 Derived 類和Base 類同名方法之間有哪幾種關(guān)系
9.1.1 Derived 的方法覆蓋Base 的方法
9.1.2 Derived 的方法可以擴充Base 的同名方法
9.1.3 Base 的方法可以禁止被Derived 重寫
9.2 什么是靜態(tài)(Static)方法
9.3 同一個類的各個對象如何共享變量
9.3.1 什么情況下各個對象需要共享變量
9.3.2 如何共享常量屬性
9.3.3 如何共享變量
第10 章抽象類
10.1 什么是抽象類(Abstract)和抽象方法
10.2 為什么需要抽象類
10.3 如何使用抽象類
10.3.1 抽象類不能直接用來聲明對象
10.3.2 子類要實現(xiàn)所有抽象方法
第11 章對象數(shù)組
11.1 如何把對象串接成數(shù)組
11.2 如何直接聲明對象數(shù)組
11.3 如何使用findobj 尋找特定的對象
11.4 如何利用Cell array 把不同類的對象組合到一起
11.5 什么是轉(zhuǎn)換函數(shù)
11.6 如何利用轉(zhuǎn)換函數(shù)把不同類的對象組合到一起
11.7 如何用非同類(Heterogeneous)數(shù)組盛放不同類對象
11.7.1 為什么需要Heterogeneous 數(shù)組
11.7.2 含有不同類對象的數(shù)組類型
11.7.3 使用Heterogeneous 要避免哪些情況
11.7.4 如何向量化遍歷數(shù)組中對象的屬性
11.7.5 如何設(shè)計成員方法使其支持向量化遍歷
第12 章類的運算符重載
12.1 理解MATLAB 的subsref 和subsasgn 函數(shù)
12.1.1 MATLAB 如何處理形如a(1,:) 的表達式
12.1.2 MATLAB 如何處理形如a{1,:} 的表達式
12.1.3 MATLAB 如何處理形如s.f 的表達式
12.2 如何重載subsref 函數(shù)
12.3 如何重載subsasgn 函數(shù)
12.4 什么情況下重載下標運算符
12.5 如何重載plus 函數(shù)
12.6 MATLAB 的Dispatching 規(guī)則是什么
12.7 如何判斷兩個對象是否相同
12.8 如何讓一個對象在行為上像一個函數(shù)
12.9 MATLAB 中哪些算符允許重載
第13 章超類
13.1 什么是超類(Meta Class)
13.2 如何獲得一個類的meta.class 對象
13.3 meta.class 對象中有些什么內(nèi)容
13.4 如何手動克隆一個對象
13.5 如何使用matlab.mixin.Copyable 自動克隆一個對象
第3 部分設(shè)計模式篇
第14 章面向?qū)ο蟪绦蛟O(shè)計的基本思想
14.1 單一職責(zé)原則
14.2 開放與封閉原則
14.3 多用組合少用繼承
14.4 面向接口編程
第15 章創(chuàng)建型模式
15.1 工廠模式:構(gòu)造不同種類的面條
15.1.1 簡單工廠模式
15.1.2 工廠模式
15.1.3 Factory 模式總結(jié)
15.1.4 如何進一步去掉switch/if 語句
15.1.5 抽象工廠
15.1.6 Abstract Factory 模式總結(jié)
15.2 單例模式:給工程計算添加一個LOG 文件
15.2.1 如何控制對象的數(shù)量
15.2.2 應(yīng)用:如何包裝一個對象供全局使用
15.3 建造者模式:如何用MATLAB 構(gòu)造一輛自行車
15.3.1 問題的提出
15.3.2 應(yīng)用:Builder 模式為大規(guī)模計算做準備工作
15.3.3 Builder 模式總結(jié)
第16 章構(gòu)造型模式
16.1 裝飾者模式:動態(tài)地給對象添加額外的職責(zé)
16.1.1 裝飾者模式的引入
16.1.2 面館菜單代碼
16.1.3 裝飾者模式總結(jié)
第17 章行為模式
17.1 觀察者模式:用MATLAB 實現(xiàn)觀察者模式
17.1.1 發(fā)布和訂閱的基本模型
17.1.2 訂閱者查詢發(fā)布者的狀態(tài)
17.1.3 把發(fā)布者和訂閱者抽象出來
17.1.4 Observer 模式總結(jié)
17.2 策略模式:分離圖像數(shù)據(jù)和圖像處理算法
17.2.1 問題的提出
17.2.2 應(yīng)用:更復(fù)雜的分離數(shù)據(jù)和算法的例子
17.2.3 Strategy 模式總結(jié)
17.3 遍歷者模式:工程科學(xué)計算中如何遍歷大量數(shù)據(jù)
17.3.1 問題的提出
17.3.2 聚集(Aggregator)和遍歷者(Iterator)
17.3.3 Iterator 模式總結(jié)
17.4 狀態(tài)模式:用MATLAB 模擬自動販賣機
17.4.1 使用if 語句的自動販賣機
17.4.2 使用State Pattern 的自動販賣機
17.4.3 State 模式總結(jié)
17.5 模板模式:下面條和煮水餃有什么共同之處
17.5.1 抽象下面條和煮水餃的過程
17.5.2 應(yīng)用:把策略和模板模式結(jié)合起來
17.5.3 Template 模式總結(jié)
17.6 備忘錄模式:實現(xiàn)GUI 的UNDO 功能
17.6.1 如何記錄對象的內(nèi)部狀態(tài)
17.6.2 應(yīng)用:如何利用備忘錄模式實現(xiàn)GUI 的do 和undo 操作
17.6.3 Memento 模式總結(jié)
參考文獻
附錄
附錄A 如何在MATLAB IDE 中切換窗口
附錄B 綜合實例:如何把面向過程的程序轉(zhuǎn)成面向?qū)ο蟮某绦?br />索引
前言
本書的編寫從2011年4月開始,到2013年末結(jié)束,歷時兩年半。本書從理工科研究人員和學(xué)生的角度出發(fā),通過三個進階篇介紹MATLAB面向?qū)ο缶幊。編寫本書的難點是不僅需要介紹面向?qū)ο缶幊痰乃枷牒图记,還要讓非計算機專業(yè)的讀者領(lǐng)會為什么需要面向?qū)ο缶幊,它對我們的科研工作將有什么樣的幫助,并且怎樣把面向(qū)ο蟮乃枷霊?yīng)用到科研程序中。
我們的寫作理念是:技術(shù)實用,重點突出,代碼簡單易讀,內(nèi)容講解圖文并茂。一本技術(shù)書籍,純粹的文字敘述是必要的,因為文字敘述是最精確的;一本介紹編程的書,如果盡量提供例子代碼,則能夠幫助讀者更深刻地理解文字概念;“一張圖可勝過千言萬語”,簡潔明了的圖表可以直觀形象地表達文意。因此,我們不僅盡量使用最通俗的語言和最形象的圖表闡述道理,以最典型且簡潔易讀的代碼作為例程,全面講解MATLAB面向?qū)ο缶幊虖娜腴T到設(shè)計模式,而且盡量讓版式和代碼的編排使讀者看起來容易,以便帶給讀者最佳的閱讀體驗。除此之外,我們還加入了大量的面向?qū)ο缶幊痰膱D形用戶界面(UML),與我們所提供的代碼相互對應(yīng),以反映代碼中類、對象、屬性、方法之間的關(guān)系。
為了平衡各專業(yè)的需求,書中所列舉的例子大多是“通例”,而不是具體到某個專業(yè)領(lǐng)域的專題。但是本書作者也十分清楚,一本書要能夠?qū)懞,需要的是能夠“深入骨髓”到讀者所遇到的最具體的專業(yè)問題,最好有對應(yīng)范例供本專業(yè)的同仁參考。所以,在此也希望讀者能夠?qū)ⅰ懊嫦驅(qū)ο缶幊獭钡膶I(yè)問題的程序以及產(chǎn)生的問題發(fā)布在MATLAB中文論壇本書的版塊上。日積月累,論壇上一定會有更多的MATLAB面向?qū)ο缶幊谭独梢詤⒖迹矔懈嗟目蒲行氯耸芤嫫渲小?br /> 由于作者水平有限,書中存在的錯誤和疏漏之處,懇請廣大讀者和同行批評指正。