MATLAB面向对象编程--从入门到设计模式(第2版) 徐潇 李远 北京航空航天大学出百度网盘pdf下载
免费下载
书籍下载
内容介绍
图书基本信息 | |
图书名称 | MATLAB面向对象编程--从入门到设计模式(第2版) |
作者 | 徐潇 李远 |
定价 | 69元 |
出版社 | 北京航空航天大学出版社 |
ISBN | 9787512424029 |
出版日期 | 2017-10-01 |
字数 | |
页码 | |
版次 | 1 |
装帧 | 平装-胶订 |
开本 | 16开 |
商品重量 | 0.4Kg |
内容简介 | |
本书分为4 部分: 部分是面向对象编程初级篇,主要介绍MATLAB 面向对象编程的基础知识和语法;第2 部分是面向对象编程中级篇,主要介绍面向对象编程的中高级概念,方便读者在编程中遇到问题时查询;第3 部分是设计模式篇,把面向对象的编程方法应用到实际问题中,并从实际问题中抽象出一般的解决方法,即设计模式;第4 部分是框架篇,主要介绍构建在面向对象和设计模式基础之上的MATLAB测试框架,包括单元测试框架和性能测试框架。 本书既可作为高等院校MATLAB 课程的辅助读物,也可作为从事科学计算、程序设计等工作的科研人员的参考用书。 |
作者简介 | |
徐潇:MathWorks开发部MATLAB架构C 高级软件工程师。计算物理学博士,研究方向为电子结构计算、密度泛函算法开发;计算机硕士,研究方向为图像处理。2004年,开始使用MATLAB,在科研编程中遇到了开发大型程序难以维护的困难,花了很多时间用于改进程序但效果总不尽如人意。2009年,开始使用MATLAB面向对象编程,发现工程进度被迅速加快,于是萌生了写一本介绍MATLAB 面向对象编程书的念头。2011年,在美国取得博士学位之后入职MathWorks,从理科科研工作者和多年的MATLAB爱好者,成为一名MATLAB语言的设计开发和实现的软件工程师。2016年,作者在MATLAB中文论坛开辟了技术专栏(.ilovematlab./forum-219-1.),和大家分享新的行业应用技术和MATLAB编程理念,旨在推动软件工程中的现代手段在MATLAB科学工程计算项目中的使用,帮助科学家和工程师们更有效地解决复杂的科研问题。本书凝结了作者多年的科研和工作经验以及对MATLAB语言的理解,希望能对各种规模的科学工程计算项目的MATLAB使用者有所启发。 李远:本、硕毕业于北方交通大学,在美国的维克弗斯特大学取得物理学博士学位。2014年回国创建北醒(北京)光子科技有限公司,专注于固态激光雷达的研发和生产,产品应用于无人驾驶、无人机和机器人等领域。希望这本《MATLAB面向对象编程——从入门到设计模式(第2版)》能够给工程科学领域的工作者带来方便,尤其对于一些需要长期使用而且不断更新的程序。 |
目录 | |
部分面向对象编程初级篇 章面向过程编程和面向对象编程. . . . . . . . . . . . . . . . . . . . . . . . 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、protected 和private 权限. . . . . . . . . . . . . . . . .. . 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类的析构函数(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.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.2saveobj 和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 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 0 章抽象类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 189 10.1什么是抽象类和抽象方法. . . . . . . . . . . . . . . . . .. . . . . . . . . . . 189 10.2为什么需要抽象类. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 190 10.3如何使用抽象类. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 191 10.3.1抽象类不能直接用来声明对象. . . . . . . . . . . . . . . . .. . . . . . . . 191 10.3.2子类要实现所有的抽象方法. . . . . . . . . . . . . . . . . .. . . . . . . . . 192 1 章对象数组. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 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 2 章类的运算符重载. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 的Dispatching 规则是什么. . .. . . . . . . . . . . . . . . . . . . 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 3 章枚举类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 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 4 章超类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 249 14.1什么是超类. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 249 14.2如何获得一个类的meta.class 对象.. . . . . . . . . . . . . . . . . . . . . . . 250 14.3meta.class 对象中有些什么内容. . . . . . . . . . . . . . . . . . .. . . . . . 252 14.4如何手动克隆一个对象. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 253 14.5如何使用matlab.min.Copyable 自动克隆一个对象. . . . . . . . . . . . . . 259 第3 部分设计模式篇 5 章面向对象程序设计的基本思想. . . . . . . . . . . . . . . . . . . . . . . . 265 15.1单一职责原则. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 266 15.2开放与封闭原则. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 268 15.3多用组合少用继承原则. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 269 15.4面向接口编程. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 271 6 章创建型模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .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 7 章装饰者模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .302 17.1装饰者模式的引入. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 302 17.2面馆菜单代码. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 304 17.3装饰者模式总结. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 306 8 章行为模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 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 部分框架篇 9 章MATLAB 单元测试框架. . . . . . . . . . . . . . . .. . . . . . . . . . 359 19.1框架概述. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 359 19.2基于函数的单元测试构造. . . . . . . . . . . . . . . . . .. . . . . . . . . . . 359 19.3getArea 函数的单元测试: 版本I . . . . .. . . . . . . . . . . . . . . . . . . . 361 19.4getArea 函数的单元测试: 版本II 和版本III . . . . . . . . . . . . . . . . . . 366 19.5测试的准备和清理工作: Test Fixture . . . . . . . . . . .. . . |