MATLAB面向对象编程——从入门到设计模式(第2版)  书籍   北京航空航天大学出版社 现货pdf下载

MATLAB面向对象编程——从入门到设计模式(第2版) 书籍 北京航空航天大学出版社 现货百度网盘pdf下载

作者:
简介:MATLAB面向对象编程——从入门到设计模式(第2版) 书籍 北京航空航天大学出版社 现货
出版社:
出版时间:2017-10
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

基本信息

书名:MATLAB面向对象编程——从入 设计模式( 2版)

定价:69.00元

作者: 潇 远

出版社:北京航空航 大学出版社

出版日期:2017-10-01

ISBN:9787512424029

字数:

页码:

版次:1

装帧: 装-胶订

开本:16开

商品重量:0.4kg

编辑


内容提要


本书分为4 部分: 1 部分 面向对象编程初 篇,主要介绍MATLAB 面向对象编程的基础 识 语法; 2 部分 面向对象编程中 篇,主要介绍面向对象编程的中高 概念, 便读者在编程中遇 问题时查询; 3 部分 设计模式篇,把面向对象的编程 法应用 实际问题中,并从实际问题中抽象出一般的 决 法,即设计模式; 4 部分 框架篇,主要介绍 在面向对象 设计模式基础 的MATLAB测试框架, 括单元测试框架 性 测试框架。

本书既可作为高等 校MATLAB 课程的辅助读物,也可作为从 学计算、程序设计等工作的 研人员的参考用书。

目录


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.8Handle 类的set get 法. . . . . . . . . . . . . . . . . . . . . . . . . . . 52

2.8.1什么 set 法. . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . 52

2.8.2什么 get 法. . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . 54

2.9类的属性 法的 问权限. . . . . . . . . . . . . . . . . .. . . . . . . . . . 56

2.9.1什么 public、prote*ed priv*e 权限. . . . . . . . . . . . . . . . .. . 56

2.9.2如何设置类的属性 法的 问权限. . . . . . . . . . . . . . . .. . . . . . 59

2.9.3如何更细粒度 控 问权限. . . . . . . . . . . . . . . . .. . . . . . . . 60

2.9.4MATLAB 对属性 问的控 与C Java 有什么不同. . . . . . . . . . . . 62

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

2.11对象 据类定义的改变而自动更新. . . . . . . . . . . . . . . .. . . . . . . . 64

3 章MATLAB 的句柄类 实体值类. . . . . . . . . . . . . .. . . . . . . . 66

3.1 子:参数 如何传递 函数空间中去的. . . . . . . . . . . . . . .. . . . . 66

3.2MATLAB 的Value 类 Handle 类. . . . . . . . . . . . . . . . . . . . . . . 70

3.2.1什么 Value 类 Handle 类. . . . . . . . . . . . . . . . . . . . . . . . . 70

3.2.2Value 类对象 Handle 类对象复 有什么区别.. . . . . . . . . . . . . . . . 72

3.2.3Value 类对象 Handle 类对象赋值有什么区别.. . . . . . . . . . . . . . . . 73

3.2.4Value 类对象 Handle 类对象当作函数参数有什么区别. . . . . . . . . . . . . 76

3.2.5Value 类对象 Handle 类对象作为默认值有什么区别. . . . . . . . . . . . . . 77

3.2.6什么 况下使用Value 类或Handle 类. . . . . . . . . . . . . . . . . . . . . 78

3.3类的析 函数(Destru*or) . .. . . . . . . . . . . . . . . . . . . . . . . . . 83

3.3.1什么 对象的生存周期. . . . . . . . . . . . . . . . . . .. . . . . . . . . . 83

3.3.2什么 析 函数. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 84

3.3.3对Ob*e* 使用clear 会发生什么. . . . . . . . . . . . . . . . . . . . . . . . 84

3.3.4对Ob*e* 使用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.1Package 中的类 如何组织的. . . . . . . . . . . . . . . . . . .. . . . . . 108

5.4.2如何使用Package 中的某个类. . .. . . . . . . . . . . . . . . . . . . . . . 109

5.4.3如何 入Package 中的所有类. . .. . . . . . . . . . . . . . . . . . . . . . 109

5.5函数 类 法重名 底调用谁. . . . . . . . . . . . . . . . .. . . . . . . . . 109

5.6Package 中的函数 当 路径 的同名函数谁有优先 . . . . . . . . . . . . 110

6 章MATLAB 对象的保存 载入. . . . . . . . . . . . . . .. . . . . . . . . 112

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

6.1.1对象的save load 作. . . . . . . . . . . . . . . . . . . . . . . . . . . 112

6.1.2MAT 文件中保存了对象中的 些内容. . . . . . . . . . . . . . . . .. . . . 112

6.1.3如果类的定义在save 作 后发生了变化.. . . . . . . . . . . . . . . . . . 116

6.2saveob* loadob* 法. . . . . .. . . . . . . . . . . . . . . . . . . . . . . . 118

6.2.1如何定义saveob* 法. . . . .. . . . . . . . . . . . . . . . . . . . . . . . 118

6.2.2如何定义loadob* 法. . . . .. . . . . . . . . . . . . . . . . . . . . . . . 119

6.3继承 况下的saveob* loadob* 法. . . . . . . . . . . . . . . . . . . . . . 120

6.3.1存在继承时如何设计saveob* 法. .. . . . . . . . . . . . . . . . . . . . . 120

6.3.2存在继承时如何设计loadob* 法. .. . . . . . . . . . . . . . . . . . . . . 122

6.4什么 瞬态属性. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 123

6.5什么 装载时 造(Constru*OnLoad) . . . . . . . . . . . . . . . . . . . . 125

7 章面向对象的GUI 编程:分离用 界面 模型. . . . . . . . . . . . . .. . 127

7.1如何用GUIDE 行GUI 编程. . . . . . . . . . . . . . . . . . . . . . . . . . 127

7.2如何用面向过程的 式 行GUI 编程. . .. . . . . . . . . . . . . . . . . . . 129

7.3如何用面向对象的 式 行GUI 编程. . .. . . . . . . . . . . . . . . . . . . 132

4MATLAB 面向对象编程——从入 设计模式( 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.6GUI Layout 的复合布 . . . . . . . . . . . . . . . . . . . . .. . . . . . . 157

7.11.7把GUI Layout Toolbox MVC模式结合 来. . . . . . . . . . . . . . . . 158

7.11.8GUI 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.2MATLAB 的多重继承. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 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.1Derived 类 Base 类同名 法 间有 几 关 . .. . . . . . . . . . . . . . 182

9.1.1Derived 类的 法覆盖Base 类的 法. . . .. . . . . . . . . . . . . . . . . 182

9.1.2Derived 类的 法可以扩充Base 类的同名 法. .. . . . . . . . . . . . . . . 183

9.1.3Base 类的 法可以 止被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如何使用findob* 函数寻找 定的对象.. . . . . . . . . . . . . . . . . . . . . 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.1MATLAB 如何处 形如a(1,:) 的表达式. . .. . . . . . . . . . . . . . . . . 213

12.1.2MATLAB 如何处 形如a{1,:} 的表达式. . .. . . . . . . . . . . . . . . . . 214

12.1.3MATLAB 如何处 形如s.f 的表达式. . . . .. . . . . . . . . . . . . . . . . 215

12.2如何重载subsref 函数. . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 216

6MATLAB 面向对象编程——从入 设计模式( 2 版)

12.3如何重载subsasgn 函数. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 217

12.4什么 况下重载下标运算符. . . . . . . . . . . . . . . . . .. . . . . . . . . . 218

12.5如何重载plus 函数. . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 219

12.6MATLAB 的Disp*ching 则 什么. . .. . . . . . . . . . . . . . . . . . . 220

12.7如何判断 个对象 否相同. . . . . . . . . . . . . . . . . .. . . . . . . . . . 221

12.8如何让一个对象在行为 像一个函数. . . . . . . . . . . . . . . .. . . . . . . 223

12.9MATLAB 中 些运算符允许重载. . . . . . . . . . . . . . . . . . .. . . . . 226

12.10实例:运算符重载 量纲分析. . . . . . . . . . . . . . . . .. . . . . . . . . 227

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

12.10.2需求 设计:加法 法. . . . . . . . . . . . . . . . . .. . . . . . . . . 229

12.10.3需求 设计:乘法 除法. . . . . . . . . . . . . . . . . .. . . . . . . . . 232

13 章枚举类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 237

13.1为什么需要枚举类型(Enumer*ion) . . . . . . . . . . . .. . . . . . . . . . . 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.3meta.class 对象中有些什么内容. . . . . . . . . . . . . . . . . . .. . . . . . 252

14.4如何 动克隆一个对象. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 253

14.5如何使用*tlab.min.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

8MATLAB 面向对象编程——从入 设计模式( 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.3getArea 函数的单元测试: 版本I . . . . .. . . . . . . . . . . . . . . . . . . . 361

19.4getArea 函数的单元测试: 版本II 版本III . . . . . . . . . . . . . . . . . . 366

19.5测试的准备 清 工作: Test Fixture . . . . . . . . . . .. . . . . . . . . . . 369

19.6验证 法: Types of Qualific*ion . . . . . . . . .. . . . . . . . . . . . . . . . 371

19.7测试 用测试驱动开发. . . . . . . . . . . . . . . . .. . . . . . . . . 375

19.7.1开发流程概述. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 375

19.7.2用测试驱动开发:fibonacci 例. .. . . . . . . . . . . . . . . . . . . . . . . 377

19.7.3用测试驱动开发:运算符重载 量纲分析. . . . . . . . . . . . . . .. . . . . 381

19.8基于类的单元测试. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 393

19.8.1getArea 函数的基于类的单元测试. . . . . . . . . . . . . . . . . .. . . . . 393

19.8.2MVC 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 高 数据结 :containe*.Map . . . . . . . . . . . . . . . 425

B.1containe*.Map 简介. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 425

B.2数组、元胞数组 结 体的 限性. . . . . . . . . . . . . . . .. . . . . . . . 426

B.3用containe*.Map 来 录簿. . . . . . . . . . . . . . . . . . . . . . 428

B.4containe*.Map 的属性 成员 法. . . . . . . . . . . . . . . . . . . .. . . . 429

B.5containe*.Map 的 点. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 430

B.5.1containe*.Map 可以不断 扩张且不需要 分 . . . . . . . . . . . . . . . .430

B.5.2containe*.Map 可以作为参数在函数内部直接修改. . . . . . . . . . . . . . .431

B.5.3containe*.Map 可以增 程序的可读性. . . . . . . . . . . . . . . . . . .. . 431

B.5.4containe*.Map 提供对数据的快速查找. . . . . . . . . . . . . . . . . . .. . 431

B.6containe*.Map 的使用实例. . . . . . . . . . . . . . . . . . . . .. . . . . . . 433

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

B.6.2用来实 快速检 . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 433

附录C MATLAB 高 数据结 :table . . . . . . . . . . . . . . . . . . . . . . 435

C.1table 简介. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 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.3table 的 作. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 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.5table 间的 作. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 449

C.6table 的属性 支持的 作. . . . . . . . . . . . . . . . . . .. . . . . . . . . 452

10MATLAB 面向对象编程——从入 设计模式( 2 版)

附录D 对函数的输入 行检查 析. . . . . . . . . . . . . . . . . . . . . . . . 454

D.1为什么要对函数的输入 行检查. . . . . . . . . . . . . . . . .. . . . . . . . 454

D.2valid*e*tributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 454

D.2.1valid*e*tributes 的基本使用. . . . . . . . . . .. . . . . . . . . . . . . . 454

D.2.2valid*e*tributes 的额 提示信息. . . . . . . . . .. . . . . . . . . . . . . 455

D.2.3valid*e*tributes 支持的检查类型 属性. . . . . . . .. . . . . . . . . . . . 457

D.3valid*estring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 458

D.4inputPa*er . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 459

D.4.1inputPa*er 的基本使用. . . . . . . . . . . . . . . . . . . . .. . . . . . . 459

D.4.2inputPa*er 的可选参数 默认参数值设置. . . . . . . . . . . . . . . . .. . 461

D.4.3inputPa*er valid*e*tributes 合使用. . . . . . . . . . . . . . . . . . . 462

D.4.4inputPa*er 的参数名–参数值对的设置. . . . . . . . . . . . . . . . . .. . . 462

D.4.5inputPa*er 析结 体的输入. . . . . . . . . . . . . . . . . . . .. . . . . 465

D.5 子:为什么需要MATLAB 的单元测试 统.. . . . . . . . . . . . . . . . 466

参考文献. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

在后. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 469

作者介绍


潇:M*hWorks开发部MATLAB架 C 高 软件工程师。计算物 学博 ,研究 向为电子结 计算、密度泛函算法开发;计算机硕 ,研究 向为图像处 。2004年,开始使用MATLAB,在 研编程中遇 了开发大型程序难以维护的困难,花了很多时间用于改 程序但效果 不尽如人意。2009年,开始使用MATLAB面向对象编程,发 工程 度被迅速加快,于 萌生了 一本介绍MATLAB 面向对象编程书的念头。2011年,在美国取得博 学位 后入职M*hWorks,从 研工作者 多年的MATLAB 者,成为一名MATLAB