《MATLAB面向對象程式設計》以面向對象程式設計方法的基本特徵(抽象、封裝、繼承、多態)為主線,由淺入深、循序漸進地展開,系統介紹了MATLAB面向對象程式設計的思想、設計方法等。《MATLAB面向對象程式設計》重點突出、通俗易懂,各章節提供大量的程式代碼供讀者參考練習,多數章節安排了相應的套用實例。全書分為11章,主要分為三部分:一是MATLAB基本操作和程式設計基礎、面向對象程式設計思想,以及MATLAB面向對象程式設計特點等(第1-2章);二是詳細介紹了MATLAB中面向對象程式的開發過程和設計方法(第3-10章);三是MATLAB面向對象程式設計方法的綜合套用實例(第11章)。《MATLAB面向對象程式設計》內容詳實、科學合理,圖文並茂、實例豐富,講解系統透徹,通過本書的學習讀者可以很快理解MATLAB面向對象程式設計的基本思想,掌握其設計方法,提高利用MATLAB解決問題的能力和效率。《MATLAB面向對象程式設計》可以作為高等院校理工科專業大學生、研究生的計算機教材和廣大科研人員的參考資料。
基本介紹
- 書名:MATLAB面向對象程式設計
- 類型:計算機與網際網路
- 出版日期:2014年6月1日
- 語種:簡體中文
- ISBN:9787121233449
- 作者:苗志宏 馬金強
- 出版社:電子工業出版社
- 頁數:250頁
- 開本:16
- 品牌:電子工業出版社
基本介紹,內容簡介,作者簡介,圖書目錄,序言,
基本介紹
內容簡介
《MATLAB面向對象程式設計》是國內第一本系統介紹MATLAB面向對象程式設計的書籍,重點突出、通俗易懂、案例充實、圖文並茂、由淺入深、循序漸進、系統透徹。
MATLAB具有強大的數據可視化功能以及包含諸多面向不同領域的工具箱,並且它是一個開放式、可擴展的程式設計環境,因此,可以充分利用MATLAB所提供的這些工具箱和各種功能,以面向對象的程式設計方法來更加方便、快捷地設計應用程式,以便解決不同領域中的實際問題。
《MATLAB面向對象程式設計》的出版,必將大大方便大家對MATLAB面向對象程式設計的學習,加強MATLAB在該領域中的推廣,提升大家的工程套用能力。
MATLAB具有強大的數據可視化功能以及包含諸多面向不同領域的工具箱,並且它是一個開放式、可擴展的程式設計環境,因此,可以充分利用MATLAB所提供的這些工具箱和各種功能,以面向對象的程式設計方法來更加方便、快捷地設計應用程式,以便解決不同領域中的實際問題。
《MATLAB面向對象程式設計》的出版,必將大大方便大家對MATLAB面向對象程式設計的學習,加強MATLAB在該領域中的推廣,提升大家的工程套用能力。
作者簡介
苗志宏,2001年畢業於北京師範大學數學系,獲理學博士學位。現為中國人民武裝警察部隊學院消防工程系教授,主要從事數學和信息工程教學。參與多項國家自然科學基金項目的研究,發表論文30餘篇,多篇被SCI、EI收錄,主編著作《虛擬現實技術基礎與套用》。
馬金強,碩士,現為中國人民武裝警察部隊學院消防工程系講師。從事電子信息工程教育教學12年。發表學術論文10餘篇,多篇被EI收錄,主編教材1部,參與出版譯著1部,出版了著作《多媒體製作與Authorware》,參與編寫了著作《虛擬現實技術基礎與套用》。
馬金強,碩士,現為中國人民武裝警察部隊學院消防工程系講師。從事電子信息工程教育教學12年。發表學術論文10餘篇,多篇被EI收錄,主編教材1部,參與出版譯著1部,出版了著作《多媒體製作與Authorware》,參與編寫了著作《虛擬現實技術基礎與套用》。
圖書目錄
第1章 MATLAB入門 1
1.1 MATLAB概述 1
1.1.1 MATLAB的發展史 1
1.1.2 MATLAB體系結構 2
1.1.3 MATLAB功能特點 2
1.2 MATLAB的安裝與運行 4
1.2.1 MATLAB的安裝與激活 4
1.2.2 MATLAB的啟動與退出 7
1.3 MATLAB開發環境 7
1.3.1 選單欄 8
1.3.2 工具列 12
1.3.3 MATLAB的視窗 12
1.4 MATLAB幫助和演示系統 17
1.4.1 命令視窗幫助系統 17
1.4.2 在線上幫助 18
1.4.3 在線上演示系統 19
1.5 矩陣及其運算 20
1.5.1 創建矩陣 20
1.5.2 矩陣訪問 23
1.5.3 矩陣的賦值 24
1.5.4 矩陣的四則運算 25
1.5.5 點運算 26
1.5.6 矩陣的其他運算 27
1.5.7 矩陣操作 30
1.6 MATLAB圖形用戶界面設計 32
1.6.1 圖形對象和句柄 32
1.6.2 圖形視窗及坐標軸 34
1.6.3 用戶界面對象 37
1.6.4 圖形用戶界面設計開發環境 41
1.7 小結 46
思考與練習 46
第2章 MATLAB面向對象程式設計概述 47
2.1 MATLAB程式設計基礎 47
2.1.1 MATLAB的變數及數據類型 47
2.1.2 運算符與操作符 50
2.1.3 M檔案介紹 51
2.1.4 函式的類型 54
2.1.5 MATLAB的程式設計原則 55
2.2 面向對象程式設計方法簡介 56
2.2.1 程式設計方法的發展概述 56
2.2.2 面向對象程式設計方法 56
2.2.3 面向對象程式設計方法的優越性 57
2.2.4 面向對象程式設計的基本概念 57
2.2.5 面向對象程式設計方法中的基本特徵 58
2.3 MATLAB面向對象程式設計簡介 59
2.3.1 MATLAB中的類和對象 59
2.3.2 MATLAB中類的設計、定義 61
2.4 MATLAB面向對象程式設計特點 63
2.4.1 MATLAB面向對象程式設計的特點 63
2.4.2 MATLAB面向對象程式設計與其他語言 63
2.5 小結 64
思考與練習 64
第3章 MATLAB中的類和對象 65
3.1 類的聲明 65
3.1.1 類的聲明 65
3.1.2 對象的創建和使用 66
3.1.3 類的特性 67
3.1.4 類定義的組織形式 67
3.1.5 命名空間和包 68
3.2 類的屬性成員及訪問控制 71
3.2.1 屬性成員的聲明和初始化 71
3.2.2 屬性成員的特性 71
3.2.3 屬性成員的set和get方法 74
3.2.4 屬性成員的訪問控制 77
3.3 類的方法及訪問控制 78
3.3.1 普通方法及訪問控制 79
3.3.2 構造函式 81
3.3.3 靜態方法 83
3.3.4 類型轉換方法 85
3.4 類的組合 87
3.4.1 內嵌對象 88
3.4.2 類的優先權問題 88
3.4.3 對象的保存與載入 91
3.5 小結 92
思考與習題 93
第4章 MATLAB中的繼承與派生 94
4.1 類的繼承與派生 94
4.1.1 繼承與派生的概念 94
4.1.2 派生類的定義 95
4.1.3 派生類生成過程 96
4.1.4 用派生類創建一個類的別名 99
4.2 派生類的構造函式 99
4.2.1 構造函式的建立 99
4.2.2 派生類構造函式執行的順序 102
4.3 多重繼承中的成員標識問題 104
4.3.1 屬性成員名稱衝突 105
4.3.2 方法名稱衝突 105
4.3.3 事件名稱衝突 107
4.4 指定容許派生的類 108
4.5 類成員的訪問控制 109
4.5.1 屬性成員的訪問控制 109
4.5.2 方法的訪問控制 110
4.5.3 事件的訪問控制 114
4.6 定義MATLAB內置類型的派生類 115
4.6.1 MATLAB的內置類 115
4.6.2 定義MATLAB內置類的派生類 115
4.7 小結 120
思考與練習 120
第5章 handle型類 122
5.1 handle型類的聲明 122
5.2 類handle的介紹 124
5.3 屬性成員set/get接口的實現 125
5.4 動態屬性成員的實現 127
5.5 handle型類的析構函式 130
5.6 handle—兼容類 135
5.7 深拷貝與淺拷貝 136
5.7.1 深拷貝與淺拷貝的概念 136
5.7.2 matlab.mixin.Copyable類簡介 138
5.7.3 深拷貝的實現 139
5.8 套用實例 142
5.8.1 問題的提出 142
5.8.2 類的設計 142
5.8.3 源程式及運行效果 143
5.9 小結 146
思考與練習 146
第6章 對象陣列 147
6.1 MATLAB中常用的陣列形式 147
6.1.1 陣列的概念 147
6.1.2 幾種常用的陣列 147
6.2 創建對象陣列 153
6.2.1 如何創建對象陣列 154
6.2.2 在對象陣列上添加動態屬性成員 157
6.3 不同類型對象組成的對象陣列 158
6.3.1 不同類型對象的連線 158
6.3.2 轉換方法的實現 159
6.4 多相對象陣列 160
6.4.1 matlab.mixin.Heterogeneous類及多相陣列創建 161
6.4.2 多相陣列的下標索引和連線 162
6.4.3 convertObject方法 163
6.5 小結 164
思考與練習 164
第7章 多態性 165
7.1 函式重載 165
7.2 運算符重載 169
7.2.1 運算符重載的實現 170
7.2.2 運算符重載中的優先權問題 172
7.2.3 subsref和subsasgn的重載 173
7.3 抽象類 179
7.3.1 抽象類的定義 179
7.3.2 有關抽象類的特殊規定 180
7.3.3 一個例子 180
7.4 小結 183
思考練習 183
第8章 事件與聽眾 185
8.1 事件與聽眾的概念 185
8.1.1 事件的概念及事件模型 185
8.1.2 聽眾的概念 186
8.2 定義事件和聽眾 186
8.2.1 如何命名一個事件 186
8.2.2 事件觸發和廣播 188
8.2.3 如何回響事件(聽眾的定義) 189
8.2.4 聽眾的幾種創建方式 190
8.2.5 回調函式定義和調用 191
8.2.6 一個例子 192
8.3 屬性成員事件的收聽 197
8.3.1 屬性成員事件 197
8.3.2 為屬性成員事件創建聽眾 198
8.3.3 為聽眾定義回調函式 199
8.3.4 屬性成員的AbortSet屬性 199
8.4 動態屬性成員事件回響 201
8.5 套用實例 204
8.5.1 問題的提出 204
8.5.2 類的設計 204
8.5.3 源程式及運行效果 205
8.6 小結 209
思考與練習 209
第9章 枚舉 210
9.1 枚舉概述 210
9.1.1 相關術語 210
9.1.2 枚舉類型的分類 210
9.2 枚舉類的定義和使用 211
9.2.1 枚舉類的定義 211
9.2.2 枚舉類中的方法 212
9.2.3 在枚舉類中定義屬性成員 212
9.2.4 枚舉類的使用 213
9.2.5 枚舉類與陣列 216
9.2.6 枚舉類的構造函式調用順序 216
9.2.7 枚舉類在套用中的一些限制 217
9.3 小結 218
思考與練習 218
第10章 利用類元數據獲取類信息 219
10.1 類元數據簡介 219
10.1.1 相關概念 219
10.1.2 元類對象的創建和使用方法 219
10.2 元數據的使用 220
10.2.1 使用元數據查閱類和對象 220
10.2.2 查找具有指定設定的對象 223
10.2.3 獲得關於屬性成員的信息 225
10.2.4 獲得屬性成員的默認值 228
10.3 小結 230
思考與練習 230
第11章 綜合套用實例 231
11.1 倒立擺控制演示實例 231
11.2 元胞自動機演示實例 237
11.3 小結 242
思考與練習 242
附錄 MATLAB中的函式分類索引 243
參考文獻 251
1.1 MATLAB概述 1
1.1.1 MATLAB的發展史 1
1.1.2 MATLAB體系結構 2
1.1.3 MATLAB功能特點 2
1.2 MATLAB的安裝與運行 4
1.2.1 MATLAB的安裝與激活 4
1.2.2 MATLAB的啟動與退出 7
1.3 MATLAB開發環境 7
1.3.1 選單欄 8
1.3.2 工具列 12
1.3.3 MATLAB的視窗 12
1.4 MATLAB幫助和演示系統 17
1.4.1 命令視窗幫助系統 17
1.4.2 在線上幫助 18
1.4.3 在線上演示系統 19
1.5 矩陣及其運算 20
1.5.1 創建矩陣 20
1.5.2 矩陣訪問 23
1.5.3 矩陣的賦值 24
1.5.4 矩陣的四則運算 25
1.5.5 點運算 26
1.5.6 矩陣的其他運算 27
1.5.7 矩陣操作 30
1.6 MATLAB圖形用戶界面設計 32
1.6.1 圖形對象和句柄 32
1.6.2 圖形視窗及坐標軸 34
1.6.3 用戶界面對象 37
1.6.4 圖形用戶界面設計開發環境 41
1.7 小結 46
思考與練習 46
第2章 MATLAB面向對象程式設計概述 47
2.1 MATLAB程式設計基礎 47
2.1.1 MATLAB的變數及數據類型 47
2.1.2 運算符與操作符 50
2.1.3 M檔案介紹 51
2.1.4 函式的類型 54
2.1.5 MATLAB的程式設計原則 55
2.2 面向對象程式設計方法簡介 56
2.2.1 程式設計方法的發展概述 56
2.2.2 面向對象程式設計方法 56
2.2.3 面向對象程式設計方法的優越性 57
2.2.4 面向對象程式設計的基本概念 57
2.2.5 面向對象程式設計方法中的基本特徵 58
2.3 MATLAB面向對象程式設計簡介 59
2.3.1 MATLAB中的類和對象 59
2.3.2 MATLAB中類的設計、定義 61
2.4 MATLAB面向對象程式設計特點 63
2.4.1 MATLAB面向對象程式設計的特點 63
2.4.2 MATLAB面向對象程式設計與其他語言 63
2.5 小結 64
思考與練習 64
第3章 MATLAB中的類和對象 65
3.1 類的聲明 65
3.1.1 類的聲明 65
3.1.2 對象的創建和使用 66
3.1.3 類的特性 67
3.1.4 類定義的組織形式 67
3.1.5 命名空間和包 68
3.2 類的屬性成員及訪問控制 71
3.2.1 屬性成員的聲明和初始化 71
3.2.2 屬性成員的特性 71
3.2.3 屬性成員的set和get方法 74
3.2.4 屬性成員的訪問控制 77
3.3 類的方法及訪問控制 78
3.3.1 普通方法及訪問控制 79
3.3.2 構造函式 81
3.3.3 靜態方法 83
3.3.4 類型轉換方法 85
3.4 類的組合 87
3.4.1 內嵌對象 88
3.4.2 類的優先權問題 88
3.4.3 對象的保存與載入 91
3.5 小結 92
思考與習題 93
第4章 MATLAB中的繼承與派生 94
4.1 類的繼承與派生 94
4.1.1 繼承與派生的概念 94
4.1.2 派生類的定義 95
4.1.3 派生類生成過程 96
4.1.4 用派生類創建一個類的別名 99
4.2 派生類的構造函式 99
4.2.1 構造函式的建立 99
4.2.2 派生類構造函式執行的順序 102
4.3 多重繼承中的成員標識問題 104
4.3.1 屬性成員名稱衝突 105
4.3.2 方法名稱衝突 105
4.3.3 事件名稱衝突 107
4.4 指定容許派生的類 108
4.5 類成員的訪問控制 109
4.5.1 屬性成員的訪問控制 109
4.5.2 方法的訪問控制 110
4.5.3 事件的訪問控制 114
4.6 定義MATLAB內置類型的派生類 115
4.6.1 MATLAB的內置類 115
4.6.2 定義MATLAB內置類的派生類 115
4.7 小結 120
思考與練習 120
第5章 handle型類 122
5.1 handle型類的聲明 122
5.2 類handle的介紹 124
5.3 屬性成員set/get接口的實現 125
5.4 動態屬性成員的實現 127
5.5 handle型類的析構函式 130
5.6 handle—兼容類 135
5.7 深拷貝與淺拷貝 136
5.7.1 深拷貝與淺拷貝的概念 136
5.7.2 matlab.mixin.Copyable類簡介 138
5.7.3 深拷貝的實現 139
5.8 套用實例 142
5.8.1 問題的提出 142
5.8.2 類的設計 142
5.8.3 源程式及運行效果 143
5.9 小結 146
思考與練習 146
第6章 對象陣列 147
6.1 MATLAB中常用的陣列形式 147
6.1.1 陣列的概念 147
6.1.2 幾種常用的陣列 147
6.2 創建對象陣列 153
6.2.1 如何創建對象陣列 154
6.2.2 在對象陣列上添加動態屬性成員 157
6.3 不同類型對象組成的對象陣列 158
6.3.1 不同類型對象的連線 158
6.3.2 轉換方法的實現 159
6.4 多相對象陣列 160
6.4.1 matlab.mixin.Heterogeneous類及多相陣列創建 161
6.4.2 多相陣列的下標索引和連線 162
6.4.3 convertObject方法 163
6.5 小結 164
思考與練習 164
第7章 多態性 165
7.1 函式重載 165
7.2 運算符重載 169
7.2.1 運算符重載的實現 170
7.2.2 運算符重載中的優先權問題 172
7.2.3 subsref和subsasgn的重載 173
7.3 抽象類 179
7.3.1 抽象類的定義 179
7.3.2 有關抽象類的特殊規定 180
7.3.3 一個例子 180
7.4 小結 183
思考練習 183
第8章 事件與聽眾 185
8.1 事件與聽眾的概念 185
8.1.1 事件的概念及事件模型 185
8.1.2 聽眾的概念 186
8.2 定義事件和聽眾 186
8.2.1 如何命名一個事件 186
8.2.2 事件觸發和廣播 188
8.2.3 如何回響事件(聽眾的定義) 189
8.2.4 聽眾的幾種創建方式 190
8.2.5 回調函式定義和調用 191
8.2.6 一個例子 192
8.3 屬性成員事件的收聽 197
8.3.1 屬性成員事件 197
8.3.2 為屬性成員事件創建聽眾 198
8.3.3 為聽眾定義回調函式 199
8.3.4 屬性成員的AbortSet屬性 199
8.4 動態屬性成員事件回響 201
8.5 套用實例 204
8.5.1 問題的提出 204
8.5.2 類的設計 204
8.5.3 源程式及運行效果 205
8.6 小結 209
思考與練習 209
第9章 枚舉 210
9.1 枚舉概述 210
9.1.1 相關術語 210
9.1.2 枚舉類型的分類 210
9.2 枚舉類的定義和使用 211
9.2.1 枚舉類的定義 211
9.2.2 枚舉類中的方法 212
9.2.3 在枚舉類中定義屬性成員 212
9.2.4 枚舉類的使用 213
9.2.5 枚舉類與陣列 216
9.2.6 枚舉類的構造函式調用順序 216
9.2.7 枚舉類在套用中的一些限制 217
9.3 小結 218
思考與練習 218
第10章 利用類元數據獲取類信息 219
10.1 類元數據簡介 219
10.1.1 相關概念 219
10.1.2 元類對象的創建和使用方法 219
10.2 元數據的使用 220
10.2.1 使用元數據查閱類和對象 220
10.2.2 查找具有指定設定的對象 223
10.2.3 獲得關於屬性成員的信息 225
10.2.4 獲得屬性成員的默認值 228
10.3 小結 230
思考與練習 230
第11章 綜合套用實例 231
11.1 倒立擺控制演示實例 231
11.2 元胞自動機演示實例 237
11.3 小結 242
思考與練習 242
附錄 MATLAB中的函式分類索引 243
參考文獻 251
序言
MATLAB是MathWorks公司針對科學和工程計算開發的一款互動式軟體,目前已發展成為集數值處理、圖形處理、數學建模、實時控制、動態仿真和信號處理為一體的數學套用軟體,並且成為目前世界上使用最廣泛的科學計算軟體之一。
雖然MATLAB的早期版本中已有類的概念,但其功能一般。從MATLAB R2008a開始,MathWorks對MATLAB的面向程式設計進行了一些重大更新,吸取了面向對象程式設計語言的優點,除了支持封裝、繼承和多態這些基本特徵外,還支持包括屬性、事件等新的特徵,這使得進行大型應用程式的開發、維護變得更加便捷,並顯著增加代碼的可重用性、可維護性和可擴展性。
然而,目前國內圖書市場上有關MATLAB的書籍多偏重於MATLAB語言程式設計介紹和各種工具箱的專題介紹,專門介紹MATLAB面向對象程式設計的書籍還很少見到,只是在部分書籍中簡單提及過。另一方面,目前大多數MATLAB的使用者在編寫程式時常採用面向過程的結構化設計思想來組織程式,MATLAB面向對象程式設計的方法還較少被使用。
結構化程式設計方法由於採用了模組分解與功能抽象以及自頂向下、分而治之的策略,從而有效地將一個複雜的程式設計系統的設計任務分解成許多易於控制和處理的子任務,使其便於開發和維護。但是它的缺點是:把數據與對數據的操作分離開來,數據的安全性很難得到保證;當數據結構發生改變時,所有相關的處理函式都要進行相應的修改,程式的可重用性差;特別是在開發圖形用戶界面應用程式時,程式的開發越來越困難。而面向對象程式設計強調直接面對客觀存在的事物來進行軟體開發,將人們認識事物的習慣思維方式套用於軟體開發中。面向對象程式設計將數據和對象數據的操作封裝在一起,形成一個有機的整體,使程式模組之間的關係更加簡單、獨立性更強,這樣就使數據的安全性得到良好的保障。此外,通過面向對象程式設計的繼承和多態機制可以大大提高程式的可重用性,從而提高程式開發的效率。
目前流行的C++、Java以及C#語言都是支持面向對象程式設計的語言,我們完全可以基於這些語言,利用面向對象程式設計的方法設計出複雜的套用軟體。然而MATLAB具有強大數據可視化功能以及包含諸多面向不同領域的工具箱,並且它是一個開放式、可擴展的程式設計環境,因此可以充分利用MATLAB所提供的這些工具箱和各種功能,以面向對象程式設計的方法來更加方便、快捷地設計應用程式,從而解決不同領域中的實際問題。
為此,我們經過幾年來的不斷教學和實踐,精心編寫了《MATLAB面向對象程式設計》一書,全書按照面向對象程式設計的基本特徵為主線,兼顧了MATLAB中一些特有功能,合理組織內容,力求知識點講解透徹,同時儘可能多地穿插套用實例。全書共11章,具體內容如下。
第1章:MATLAB概述,介紹MATLAB的發展歷程、體系結構、主要特徵,MATLAB的安裝與運行,MATLAB的集成環境和幫助系統的使用,MATLAB程式設計基礎知識以及MATLAB圖形用戶界面的設計。
第2章:MATLAB面向對象程式設計概述,介紹面向對象程式設計的基本思想、特徵,MATLAB中面向對象程式設計的基本流程、特點以及與其他面向對象程式設計語言的區別等。
第3章:按照“封裝”的基本特徵,主要介紹MATLAB面向對象程式設計中的核心概念“類及對象”,詳細介紹在MATLAB下如何聲明一個類、如何創建一個對象、如何編寫一個類的構造函式以及類成員的訪問控制等問題。這一章以介紹value型類為主。
第4章:主要介紹MATLAB下“繼承與派生”有關的一些概念,如繼承與派生、基類與派生類、單繼承和多重繼承等。
第5章:主要介紹handle型類和對象的概念、handle型類析構函式的定義、深拷貝和淺拷貝原理、如何使屬性成員實現句柄圖形類型的標準set/get接口風格以及在類中動態添加屬性成員的過程。
第6章:主要介紹MATLAB面向對象程式設計中的對象陣列的創建過程。
第7章:按照“多態性”的基本特徵,介紹MATLAB面向對象程式設計中的函式重載、運算符重載等內容。
第8章:主要介紹事件和聽眾的概念,以及如何使用事件模型來實現基於事件驅動的、具有互動回響功能的程式設計過程。
第9章:主要講解MATLAB中枚舉的作用、枚舉類的定義方法和使用等。
第10章:主要講解元類的基本概念,元類、元對象的使用方法,並結合實例詳細介紹如何利用類元數據獲取類信息的步驟、方法等。
第11章:綜合前面介紹的內容,將MATLAB面向對象程式設計方法套用到關於倒立擺控制仿真設計和元胞自動機模擬設計問題中。
本書編寫過程中大量參考了MATLAB軟體幫助文檔中的相關內容和實例;在涉及MATLAB的基本操作中,參考了文獻[1~6]中的部分內容;在講解面向對象程式設計的基本原理時,參照了文獻[7~10]的部分內容;在元胞自動機模擬實現中,參考了文獻[11~12]的部分內容。在此,向這些作者們表示謝意。作者在編寫本書的過程中,對於書中每個原理都親自在MATLAB上進行了檢驗,並為此編寫了大量的驗證性代碼,某些部分的內容描述是作者歸納總結的結果,書中多數套用實例的程式設計具有一定的原創性。
本書由苗志宏負責統稿工作,並編寫了第3、4、5、6、7、8、11章的內容,馬金強編寫了第1、2、9、10章的內容,李智慧參與了書稿的審閱工作。本書寫作之初還得到了電子工業出版社張國霞編輯的鼓勵和支持,在此深表謝意。由於作者能力所限,又是初次將MATLAB中面向對象程式設計的內容進行歸納、總結,書中難免存在錯誤和不足之處,誠摯歡迎各位同行、讀者的批評指正。作者電子信箱地址:[email protected]。
苗志宏
2014年5月9日
雖然MATLAB的早期版本中已有類的概念,但其功能一般。從MATLAB R2008a開始,MathWorks對MATLAB的面向程式設計進行了一些重大更新,吸取了面向對象程式設計語言的優點,除了支持封裝、繼承和多態這些基本特徵外,還支持包括屬性、事件等新的特徵,這使得進行大型應用程式的開發、維護變得更加便捷,並顯著增加代碼的可重用性、可維護性和可擴展性。
然而,目前國內圖書市場上有關MATLAB的書籍多偏重於MATLAB語言程式設計介紹和各種工具箱的專題介紹,專門介紹MATLAB面向對象程式設計的書籍還很少見到,只是在部分書籍中簡單提及過。另一方面,目前大多數MATLAB的使用者在編寫程式時常採用面向過程的結構化設計思想來組織程式,MATLAB面向對象程式設計的方法還較少被使用。
結構化程式設計方法由於採用了模組分解與功能抽象以及自頂向下、分而治之的策略,從而有效地將一個複雜的程式設計系統的設計任務分解成許多易於控制和處理的子任務,使其便於開發和維護。但是它的缺點是:把數據與對數據的操作分離開來,數據的安全性很難得到保證;當數據結構發生改變時,所有相關的處理函式都要進行相應的修改,程式的可重用性差;特別是在開發圖形用戶界面應用程式時,程式的開發越來越困難。而面向對象程式設計強調直接面對客觀存在的事物來進行軟體開發,將人們認識事物的習慣思維方式套用於軟體開發中。面向對象程式設計將數據和對象數據的操作封裝在一起,形成一個有機的整體,使程式模組之間的關係更加簡單、獨立性更強,這樣就使數據的安全性得到良好的保障。此外,通過面向對象程式設計的繼承和多態機制可以大大提高程式的可重用性,從而提高程式開發的效率。
目前流行的C++、Java以及C#語言都是支持面向對象程式設計的語言,我們完全可以基於這些語言,利用面向對象程式設計的方法設計出複雜的套用軟體。然而MATLAB具有強大數據可視化功能以及包含諸多面向不同領域的工具箱,並且它是一個開放式、可擴展的程式設計環境,因此可以充分利用MATLAB所提供的這些工具箱和各種功能,以面向對象程式設計的方法來更加方便、快捷地設計應用程式,從而解決不同領域中的實際問題。
為此,我們經過幾年來的不斷教學和實踐,精心編寫了《MATLAB面向對象程式設計》一書,全書按照面向對象程式設計的基本特徵為主線,兼顧了MATLAB中一些特有功能,合理組織內容,力求知識點講解透徹,同時儘可能多地穿插套用實例。全書共11章,具體內容如下。
第1章:MATLAB概述,介紹MATLAB的發展歷程、體系結構、主要特徵,MATLAB的安裝與運行,MATLAB的集成環境和幫助系統的使用,MATLAB程式設計基礎知識以及MATLAB圖形用戶界面的設計。
第2章:MATLAB面向對象程式設計概述,介紹面向對象程式設計的基本思想、特徵,MATLAB中面向對象程式設計的基本流程、特點以及與其他面向對象程式設計語言的區別等。
第3章:按照“封裝”的基本特徵,主要介紹MATLAB面向對象程式設計中的核心概念“類及對象”,詳細介紹在MATLAB下如何聲明一個類、如何創建一個對象、如何編寫一個類的構造函式以及類成員的訪問控制等問題。這一章以介紹value型類為主。
第4章:主要介紹MATLAB下“繼承與派生”有關的一些概念,如繼承與派生、基類與派生類、單繼承和多重繼承等。
第5章:主要介紹handle型類和對象的概念、handle型類析構函式的定義、深拷貝和淺拷貝原理、如何使屬性成員實現句柄圖形類型的標準set/get接口風格以及在類中動態添加屬性成員的過程。
第6章:主要介紹MATLAB面向對象程式設計中的對象陣列的創建過程。
第7章:按照“多態性”的基本特徵,介紹MATLAB面向對象程式設計中的函式重載、運算符重載等內容。
第8章:主要介紹事件和聽眾的概念,以及如何使用事件模型來實現基於事件驅動的、具有互動回響功能的程式設計過程。
第9章:主要講解MATLAB中枚舉的作用、枚舉類的定義方法和使用等。
第10章:主要講解元類的基本概念,元類、元對象的使用方法,並結合實例詳細介紹如何利用類元數據獲取類信息的步驟、方法等。
第11章:綜合前面介紹的內容,將MATLAB面向對象程式設計方法套用到關於倒立擺控制仿真設計和元胞自動機模擬設計問題中。
本書編寫過程中大量參考了MATLAB軟體幫助文檔中的相關內容和實例;在涉及MATLAB的基本操作中,參考了文獻[1~6]中的部分內容;在講解面向對象程式設計的基本原理時,參照了文獻[7~10]的部分內容;在元胞自動機模擬實現中,參考了文獻[11~12]的部分內容。在此,向這些作者們表示謝意。作者在編寫本書的過程中,對於書中每個原理都親自在MATLAB上進行了檢驗,並為此編寫了大量的驗證性代碼,某些部分的內容描述是作者歸納總結的結果,書中多數套用實例的程式設計具有一定的原創性。
本書由苗志宏負責統稿工作,並編寫了第3、4、5、6、7、8、11章的內容,馬金強編寫了第1、2、9、10章的內容,李智慧參與了書稿的審閱工作。本書寫作之初還得到了電子工業出版社張國霞編輯的鼓勵和支持,在此深表謝意。由於作者能力所限,又是初次將MATLAB中面向對象程式設計的內容進行歸納、總結,書中難免存在錯誤和不足之處,誠摯歡迎各位同行、讀者的批評指正。作者電子信箱地址:[email protected]。
苗志宏
2014年5月9日