查看: 1883|回复: 0|关注: 0

[我分享] 本书的第二版 内容简介

[复制链接]

论坛优秀回答者

39

主题

1288

帖子

110

最佳答案
  • 关注者: 65
发表于 2018-1-12 06:07:52 | 显示全部楼层 |阅读模式
目录中红色是新增的内容
编辑推荐

本书是由MATLAB语言开发工程师撰写的MATLAB编程书籍,凝结了作者多年的科研和工作经验以及对MATLAB语言的深刻理解,旨在推动软件工程的手段在MATLAB科学工程计算项目中的应用,帮助科学家和工程师更有效的解决复杂的科研问题。


媒体推荐

MATLAB大型程序开发必备,比市面上抄Help的书强太多。这本书主要是讲设计模式的,特别适合有用户界面、存储、计算等多个复杂功能模块的大型程序。用MATLAB的面向对象功能,比用c++之类开发速度能快很多,还能利用积累的MATLAB代码。
这书思路很好,要成为MATLAB高手,此书必读。
——北京网友,京 东网书评

实用,通俗易懂,强烈推荐, MATLAB 5年以上编程经验,强烈推荐这本书。
不同于市面上其他一些MATLAB书籍基本靠翻译Help文档,这本书的作者确实花了很多精力介绍自己的经验和理解。 在作者通俗易懂的案例下,我对于MATLAB面向对象编程技术有了更加深刻的理解,现在已经开始使用面向对象编程技术, 强烈推荐,MATLAB高级编程者使用此书。
——广东网友,京 东网书评

通俗易懂,极具实用价值,读得非常畅快。
——北京网友,京 东网书评

本书非常实用,之前一直使用面向过程编程,总是无法合理调节各项参数。看了面向对象才知道什么是高端优雅编程!
——江苏网友, 京 东网书评

这本书我买了,以我仅上过一个学期的c++的水平来看 ,很适合初学者,思路较官方手册更简洁(对于入门足够)。我个人觉得,后边的模式设计又对工程来说给了很多设计思路上的指导。
——小木虫网友,程序语言论坛书评

作为一名学生,我一直很喜欢北航出的技术类书籍,不仅质量比较好,内容充实,与其他的书籍最大的不同就是能从初学者学习的角度来阐述问题,是学习时不可多得的好书。本书也一样,由浅入深,逐层剖析,又不局限于编程和实现细节,加入了很多编程思想和方法,这是一般技术书籍不具备的。
——全文试读网友书评

书很好,对于习惯了面向过程的编程人,转换思路可以获取事半功倍的效果。特别是本书不仅介绍语法,更注重面向对象的思想。
——江苏网友,京 东网书评

这本书等了很久了。math一发朋友圈。就果断买了。
——北京网友,京 东网书评

这本书的阅读对象主要是初级用户。本人的知识结构比较老了,正式学的语言是Fortran,像C++、Java这些时髦语言了解较少,仅知道“面向对象编程”的说法,不了解其内涵。因项目需要,想采用MATLAB做二次开发软件的界面(对直观的图形显示要求较高),开始自学MATLAB。起初也看了许多入门的书籍,包括张志涌老师的那本,感觉知识点很多,通读起来比较困难。这本书出版后买了一本,作者作为MATLAB的资深应用者,通过通俗的例子(非专业)将面向对象的含义解释得很清楚,看完有一种豁然开朗的感觉,而且感觉上升了一个档次(当然仅是意识上,离实战还差得远)。
其实面向对象是一种思想,一种解决问题的思路和方法,无论做什么项目都用的到。开展项目前规划好其架构无疑是非常重要的。
——小木虫网友,程序语言论坛书评

关于MATLAB面向对象编程的非常推荐的一本书。
——安徽网友,京 东网书评

后面的介绍面向对象的功能真的很引人入胜。
——全文试读网友书评


作者简介

徐潇 MathWorks开发部MATLAB架构C++高级软件工程师。计算物理学博士,研究方向为电子结构计算、密度泛函算法开发;计算机硕士,研究方向为图像处理。2004年,开始使用MATLAB,在科研编程中遇到了开发大型程序难以维护的困难,花了很多时间用于改进程序但效果总不尽如人意。2009年,开始使用MATLAB面向对象编程,发现工程进度被迅速加快,于是萌生了写一本介绍MATLAB 面向对象编程书的念头。2011年,在美国取得博士学位之后入职MathWorks,从理科科研工作者和多年的MATLAB爱好者,成为一名MATLAB语言的设计开发和实现的软件工程师。2016年,作者在MATLAB中文论坛开辟了技术专栏,和大家分享最新的行业应用技术和MATLAB编程理念,旨在推动软件工程中的现代手段在MATLAB科学工程计算项目中的使用,帮助科学家和工程师们更有效地解决复杂的科研问题。本书凝结了作者多年的科研和工作经验以及对MATLAB语言的理解,希望能对各种规模的科学工程计算项目的MATLAB使用者有所启发。
李远 本、硕毕业于北方交通大学,在美国的维克弗斯特大学取得物理学博士学位。2014年回国创建北醒(北京)光子科技有限公司,专注于固态激光雷达的研发和生产,产品应用于无人驾驶、无人机和机器人等领域。希望这本《MATLAB面向对象编程——从入门到设计模式(第2版)》能够给工程科学领域的工作者带来方便,尤其对于一些需要长期使用而且不断更新的程序。


目录

第1部分面向对象编程初级篇
第1章面向过程编程和面向对象编程
1.1什么是面向过程编程
1.2什么是面向对象编程
1.2.1什么是对象
1.2.2什么是类
1.2.3什么是统一建模语言
1.3面向过程编程有哪些局限性
1.4面向对象编程有哪些优点
第2章MATLAB面向对象编程入门
2.1如何定义一个类
2.2如何创建一个对象
2.3类的属性
2.3.1如何访问对象的属性
2.3.2什么是属性的默认值
2.3.3什么是常量属性
2.3.4什么是非独立属性
2.3.5什么是隐藏属性
2.4类的方法
2.4.1如何定义类的方法
2.4.2如何调用类的方法
2.4.3点调用和函数调用类方法的区别
2.4.4什么是方法的签名
2.4.5类、对象、属性和方法之间的关系
2.4.6如何用disp方法定制对象的显示
2.5类的构造函数
2.5.1什么是构造函数
2.5.2如何在构造函数中给属性赋值
2.5.3如何让构造函数接受不同数目的参数
2.5.4什么是默认构造函数
2.5.5用户一定要定义构造函数吗
2.6类的继承
2.6.1什么是继承
2.6.2为什么子类构造函数需要先调用父类构造函数
2.6.3在子类方法中如何调用父类同名方法
2.6.4什么是多态
2.7类之间的基本关系:继承、组合和聚集
2.7.1如何判断B能否继承A
2.7.2企鹅和鸟之间是不是继承关系
2.7.3如何把类组合起来
2.7.4什么是组合聚集关系
2.8Handle类的set和get方法
2.8.1什么是set方法
2.8.2什么是get方法
2.9类的属性和方法的访问权限
2.9.1什么是public、protected和private权限
2.9.2如何设置类的属性和方法的访问权限
2.9.3如何更细粒度地控制访问权限
2.9.4MATLAB对属性访问的控制与C++和Java有什么不同
2.10clearclasses到底清除了什么
2.11对象根据类定义的改变而自动更新
第3章MATLAB的句柄类和实体值类
3.1引子:参数是如何传递到函数空间中去的
3.2MATLAB的Value类和Handle类
3.2.1什么是Value类和Handle类
3.2.2Value类对象和Handle类对象复制有什么区别
3.2.3Value类对象和Handle类对象赋值有什么区别
3.2.4Value类对象和Handle类对象当作函数参数有什么区别
3.2.5Value类对象和Handle类对象作为默认值有什么区别
3.2.6什么情况下使用Value类或Handle类
3.3类的析构函数(Destructor)
3.3.1什么是对象的生存周期
3.3.2什么是析构函数
3.3.3对Object使用clear会发生什么
3.3.4对Object使用delete会发生什么
3.3.5什么情况下delete方法会被自动调用
3.3.6出现异常时delete函数如何被调用
3.3.7什么情况下用户需要自己定义一个delete方法
第4章事件和响应
4.1事件
4.1.1什么是事件
4.1.2如何定义事件和监听事件
4.1.3为什么需要事件机制
4.2发布者通知观察者,但不传递消息
4.3发布者通知观察者,并且传递消息
4.4删除listener
第5章MATLAB类文件的组织结构
5.1如何使用其他文件夹中类的定义
5.2如何把类的定义和成员方法的定义分开
5.3如何定义类的局部函数
5.4如何使用Package文件夹管理类
5.4.1Package中的类是如何组织的
5.4.2如何使用Package中的某个类
5.4.3如何导入Package中的所有类
5.5函数和类方法重名到底调用谁
5.6Package中的函数和当前路径上的同名函数谁有优先级
第6章MATLAB对象的保存和载入
6.1save和load命令
6.1.1对象的save和load操作
6.1.2MAT文件中保存了对象中的哪些内容
6.1.3如果类的定义在save操作之后发生了变化
6.2saveobj和loadobj方法
6.2.1如何定义saveobj方法
6.2.2如何定义loadobj方法
6.3继承情况下的saveobj和loadobj方法
6.3.1存在继承时如何设计saveobj方法
6.3.2存在继承时如何设计loadobj方法
6.4什么是瞬态属性
6.5什么是装载时构造(ConstructOnLoad)
第7章面向对象的GUI编程:分离用户界面和模型
7.1如何用GUIDE进行GUI编程
7.2如何用面向过程的方式进行GUI编程
7.3如何用面向对象的方式进行GUI编程
7.4模型类中应该包括什么
7.5视图类中应该包括什么
7.6控制器类中应该包括什么
7.7如何把Model、View和Controller结合起来
7.8如何测试MVC的GUI程序
7.9如何设计多视图的GUI以及共享数据
7.10如何设计GUI逻辑架构
7.11如何使用GUILayoutToolbox对界面自动布局
7.11.1为什么需要布局管理器
7.11.2纵向布局器VBox类
7.11.3横向布局器HBox类
7.11.4选项卡布局器TabPanel类
7.11.5网格布局器Grid类
7.11.6GUILayout的复合布局
7.11.7把GUILayoutToolbox和MVC模式结合起来
7.11.8GUILayoutToolbox两个版本的说明
第2部分面向对象编程中级篇
第8章类的继承进阶
8.1继承结构下的构造函数和析构函数
8.1.1什么情况需要手动调用基类的构造函数
8.1.2什么情况可以让MATLAB自动调用基类的构造函数
8.1.3常见错误:没有提供默认构造函数
8.1.4在构造函数中调用哪个成员方法
8.1.5析构函数被调用的顺序是什么
8.2MATLAB的多重继承
8.2.1什么情况下需要多重继承
8.2.2什么是多重继承
8.2.3构造函数被调用的顺序是什么
8.2.4多重继承如何处理属性重名
8.2.5多重继承如何处理方法重名
8.2.6什么是钻石继承
8.2.7如何同时继承Value类和Handle类
8.3如何禁止类被继承
第9章类的成员方法进阶
9.1Derived类和Base类同名方法之间有哪几种关系
9.1.1Derived类的方法覆盖Base类的方法
9.1.2Derived类的方法可以扩充Base类的同名方法
9.1.3Base类的方法可以禁止被Derived类重写
9.2什么是静态方法
9.3同一个类的各个对象如何共享变量
9.3.1什么情况下各个对象需要共享变量
9.3.2如何共享Constant属性
9.3.3如何共享变量
第10章抽象类
10.1什么是抽象类和抽象方法
10.2为什么需要抽象类
10.3如何使用抽象类
10.3.1抽象类不能直接用来声明对象
10.3.2子类要实现所有的抽象方法
第11章对象数组
11.1如何把对象串接成数组
11.2如何直接声明对象数组
11.3如何使用findobj函数寻找特定的对象
11.4如何利用元胞数组把不同类的对象组合到一起
11.5什么是转换函数
11.6如何利用转换函数把不同类的对象组合到一起
11.7如何用非同类(Heterogeneous)数组盛放不同类对象
11.7.1为什么需要非同类数组
11.7.2含有不同类对象的数组类型
11.7.3使用非同类要避免哪些情况
11.7.4如何向量化遍历数组中对象的属性
11.7.5如何设计成员方法使其支持向量化遍历
第12章类的运算符重载
12.1理解MATLAB的subsref和subsasgn函数
12.1.1MATLAB如何处理形如a(1,:)的表达式
12.1.2MATLAB如何处理形如a{1,:}的表达式
12.1.3MATLAB如何处理形如s.f的表达式
12.2如何重载subsref函数
12.3如何重载subsasgn函数
12.4什么情况下重载下标运算符
12.5如何重载plus函数
12.6MATLAB的Dispatching规则是什么
12.7如何判断两个对象是否相同
12.8如何让一个对象在行为上像一个函数
12.9MATLAB中哪些运算符允许重载
12.10实例:运算符重载和量纲分析
12.10.1如何表示量纲
12.10.2需求和设计:加法和减法
12.10.3需求和设计:乘法和除法
第13章枚举类型
13.1为什么需要枚举类型(Enumeration)
13.2什么是枚举类型
13.3枚举类型应用实例
13.3.1枚举类型的属性
13.3.2枚举类型的方法
13.3.3枚举类型对象数组
13.3.4从基本数据类型中派生枚举类型
第14章超类
14.1什么是超类
14.2如何获得一个类的meta.class对象
14.3meta.class对象中有些什么内容
14.4如何手动克隆一个对象
14.5如何使用matlab.mixin.Copyable自动克隆一个对象
第3部分设计模式篇
第15章面向对象程序设计的基本思想
15.1单一职责原则
15.2开放与封闭原则
15.3多用组合少用继承原则
15.4面向接口编程
第16章创建型模式
16.1工厂模式:构造不同种类的面条
16.1.1简单工厂模式
16.1.2工厂模式
16.1.3工厂模式总结
16.1.4如何进一步去掉switch/if语句
16.1.5抽象工厂
16.1.6抽象工厂模式总结
16.2单例模式:给工程计算添加一个LOG文件
16.2.1如何控制对象的数量
16.2.2如何删除一个Singleton对象
16.2.3应用:如何包装一个对象供全局使用
16.3建造者模式:如何用MATLAB构造一辆自行车
16.3.1问题的提出
16.3.2应用:建造者模式为大规模计算做准备工作
16.3.3建造者模式总结
第17章装饰者模式
17.1装饰者模式的引入
17.2面馆菜单代码
17.3装饰者模式总结
第18章行为模式
18.1观察者模式:用MATLAB实现观察者模式
18.1.1发布和订阅的基本模型
18.1.2订阅者查询发布者的状态
18.1.3把发布者和订阅者抽象出来
18.1.4观察者模式总结
18.2策略模式:分离图像数据和图像处理算法
18.2.1问题的提出
18.2.2应用:更复杂的分离数据和算法的例子
18.2.3策略模式总结
18.3遍历器模式:工程科学计算中如何遍历大量数据
18.3.1问题的提出
18.3.2聚集和遍历器
18.3.3遍历器模式总结
18.4状态模式:用MATLAB模拟自动贩卖机
18.4.1使用if语句的自动贩卖机
18.4.2使用状态模式的自动贩卖机
18.4.3状态模式总结
18.5模板模式:下面条和煮水饺有什么共同之处
18.5.1抽象下面条和煮水饺的过程
18.5.2应用:把策略和模板模式结合起来
18.5.3模板模式总结
18.6备忘录模式:实现GUI的undo功能
18.6.1如何记录对象的内部状态
18.6.2应用:如何利用备忘录模式实现GUI的do和undo操作
18.6.3备忘录模式总结
第4部分框架篇
第19章MATLAB单元测试框架
19.1框架概述
19.2基于函数的单元测试构造
19.3getArea函数的单元测试:版本I
19.4getArea函数的单元测试:版本II和版本III
19.5测试的准备和清理工作:TestFixture
19.6验证方法:TypesofQualification
19.7测试方法论和用测试驱动开发
19.7.1开发流程概述
19.7.2用测试驱动开发:fibonacci例
19.7.3用测试驱动开发:运算符重载和量纲分析
19.8基于类的单元测试
19.8.1getArea函数的基于类的单元测试
19.8.2MVCGUI的基于类的单元测试
第20章MATLAB性能测试框架
20.1为什么需要MATLAB性能测试框架
20.2基于类的性能测试框架
20.2.1构造测试类
20.2.2测试结果解析
20.3误差范围和置信区间
20.4性能测试的适用范围讨论
附录
附录A综合实例:如何把面向过程的程序转成面向对象的程序
附录BMATLAB高级数据结构:containers.Map
B.1containers.Map简介
B.2数组、元胞数组和结构体的局限性
B.3用containers.Map来记录电话号码簿
B.4containers.Map的属性和成员方法
B.5containers.Map的特点
B.5.1containers.Map可以不断地扩张且不需要预分配
B.5.2containers.Map可以作为参数在函数内部直接修改
B.5.3containers.Map可以增强程序的可读性
B.5.4containers.Map提供对数据的快速查找
B.6containers.Map的使用实例
B.6.1用来存放元素周期表
B.6.2用来实现快速检索
附录CMATLAB高级数据结构:table
C.1table简介
C.1.1为什么需要table数据结构
C.1.2通过导入数据构造table对象
C.1.3调用table构造函数来构造table对象
C.1.4通过转换函数构造table对象
C.2访问table中的数据
C.3table的操作
C.3.1删除行列
C.3.2添加行列
C.3.3合并table
C.3.4操作列数据
C.3.5排序
C.3.6筛选和查找
C.3.7输出到文件
C.4其他数据类型之间和table相互转换
C.5table之间的操作
C.6table的属性和支持的操作
10MATLAB面向对象编程——从入门到设计模式(第2版)
附录D对函数的输入进行检查和解析
D.1为什么要对函数的输入进行检查
D.2validateattributes
D.2.1validateattributes的基本使用
D.2.2validateattributes的额外提示信息
D.2.3validateattributes支持的检查类型和属性
D.3validatestring
D.4inputParser
D.4.1inputParser的基本使用
D.4.2inputParser的可选参数和默认参数值设置
D.4.3inputParser和validateattributes联合使用
D.4.4inputParser的参数名–参数值对的设置
D.4.5inputParser解析结构体的输入
D.5引子:为什么需要MATLAB的单元测试系统
参考文献
写在最后


序言

前言
本书第1 版的编写从2011年4 月开始,2015 年出版之后作者就开始准备第2 版的新内容,并于2016年11 月完稿。本书从理工科研究人员和学生的角度出发,分4 部分介绍MATLAB 面向对象编程。
编写本书的难点是,不仅需要介绍面向对象编程的思想和技巧,而且要让非计算机专业的读者领会为什么需要面向对象编程,它对我们的科研工作将有什么样的帮助,并且怎样把面向对象的思想应用到科研程序中。
本书的特点是:技术实用,重点突出,代码简单易读,内容讲解图文并茂。
一本技术书籍,纯粹的文字叙述是必要的,因为文字叙述是最精确的;一本介绍编程的书,如果尽量提供例子代码,则能够帮助读者更深刻地理解文字概念;“一张图可胜过千言万语”,简洁明了的图表可以直观形象地表达文意。因此,本书不仅尽量使用最通俗的语言和最形象的图表阐述道理,以最典型且简洁易读的代码作为例程,全面讲解MATLAB 面向对象编程从入门到设计模式,而且尽量让内容的编排更具可读性,以便带给读者更佳的阅读体验。
除此之外,本书还加入了大量的面向对象编程的统一建模图(Unified Modeling Language),与所提供的代码相互对应,以反映代码中类、对象、属性、方法之间的关系。
为了平衡各专业的需求,书中所列举的例子大多是“通例”,而不是具体到某个专业领域的专题。但是作者也十分清楚,一本好书是要能够“深入骨髓”地解决读者所遇到的最具体的专业问题,最好有对应的范例供参考。所以,在此也希望读者能够将“面向对象编程”的专业问题的程序以及产生的问题发布在MATLAB 中文论坛本书的版块上。日积月累,论坛上一定会有更多的MATLAB 面向对象编程范例可以参考,也会有更多的科研新人受益其中。
本书第1 版出版以后,读者在MATLAB 论坛中提了很多问题,根据这些问题我们修订了书中的部分内容,把大家都有疑问的地方解释得更详细一些。另外,本书还针对部分读者工作中的中大型工程计算问题提供了设计上的建议和指导。我们的经验是,只要读者愿意积极的思考,保持好奇心,善于探索,再辅以本书设计思想的指导,完全可以使用MATLAB完成工业级别的工程应用。这也是本书第4 部分——框架篇的由来。
由于作者水平有限,书中存在的错误和疏漏之处恳请广大读者和同行批评指正。
本书所有内容仅代表个人观点,与MathWorks 无关。
作者
2016 年11 月



Ph.D, 软件工程师.  Email: oopmatlab@gmail.com
《MATLAB面向对象编程--从入门到设计模式》已经由北航出版社正式出版。
http://ilovematlab.cn/thread-313689-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表