《面向对象的思考过程(原书第4版)》一 导读


7751f80caaf497b0f96e47b837fc11edcd00b31f


本节书摘来自华章出版社《面向对象的思考过程(原书第4版)》一书中的第3章,第3.2节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

前  言
本书内容概要
正如书名所述,本书讲述了面向对象思考的过程。选择一本书的主题和书名是个很重要的决定,但如果主题概念性很强,决定就没那么容易了。大部分书籍都只涉及了编程及面向对象设计的某个方面。一些主流的书阐述了诸如面向对象分析、面向对象设计、面向对象编程、设计模式、面向对象的数据结构(XML)、统一建模语言(UML)、面向对象Web开发、面向对象移动开发、进阶面向对象编程语言等主题,当然也包括了其他与面向对象编程相关的主题。
然而,许多人仔细研究这些书后,都未曾注意到这些主题都建立在同一个基础之上,即如何以面向对象的方式进行思考。从学生到软件开发专业人员,往往虽然阅读了这些书,但没有花费充分的时间和精力来真正理解代码背后的设计理念。
我认为仅学习一种特定的开发方法、一种编程语言或者一组设计工具并不能说明学会了面向对象这一概念。简单来说,以面向对象方式编程就是一种思考方式。本书就讨论这种面向对象的思考过程。
把面向对象的思考过程从语言、开发实践以及工具中剥离出来并不是一个简单的任务。在学习面向对象这一理念时,往往要求先深入学习一门编程语言。例如,很多年以前,大量的C语言程序员在没有直接接触面向对象概念之前,就开始通过C++语言来了解面向对象。其他软件专家第一次接触面向对象则是在演示文稿中使用UML创建对象模型。他们也没有直接学习面向对象的概念。即使到现在,互联网作为商业平台的几十年后,编程书籍以及专业的培训材料并没有先介绍面向对象这一概念。
学习面向对象的概念与学习使用面向对象语言进行编程有着巨大差异,理解这点很重要。我在编写本书第1版前就意识到了这点。当我阅读Craig Larman的文章《What the UML Is-and Isn’t》时,他指出:
但是,在软件开发工程和UML绘图语言领域,读写UML标记的能力有时候好像等同于面向对象的分析和设计能力。事实当然并非如此,后者比前者更加重要。因此我推荐先学习面向对象分析和设计的相关教学资料,它优先于学习使用UML标记的相关工具。
因此,尽管学习一门建模语言是非常重要的步骤,但先学习面向对象的技能更加重要。如果未完全理解面向对象概念前就学习UML,这就像还未了解任何与电路相关的知识就开始学习电路图一样。
学习编程语言也有相同的问题。如前所述,很多C语言程序员还未直接了解任何面向对象的概念,就想通过使用C++语言来达到面向对象的境界。在面试中经常会出现这样的情况,很多自诩C++程序员的开发人员只是会使用C++编译器的C程序员。甚至现在,诸如C#.NET、VB.NET、Objective-C以及Java等语言已经相当普及了,工作面试中的一些关键问题可以迅速暴露出这些程序员缺乏面向对象的思想。
Visual Basic的早期版本并不是面向对象的。C语言也不是面向对象的。而C++在设计时就向后兼容C语言。因此,使用C++编译器编写只含C语言语法的程序,而放弃使用C++的面向对象功能是完全可能的。Objective-C是标准ANSI C语言的一个扩展。更糟糕的是,程序员可能使用勉强够用的面向对象功能把程序写成了既不是面向对象的也不是面向过程的四不像产品。
因此,在学习使用面向对象的开发环境之前,先学习基本的面向对象概念至关重要。与其直接学习一门编程语言(比如Objective-C、VB .NET、C++、C# .NET或Java)或建模语言(如UML),还不如把时间花在学习面向对象的思考过程上。
我在使用C语言编程很多年后,于20世纪80年代后期开始参加Smalltalk语言的学习课程。当时我所在的公司认为公司的软件开发人员应该学习这个极具前途的技术。老师授课时说面向对象的范式是全新的思维方式(事实上它从20世纪60年代就已经萌芽了)。他接着说,虽然几乎我们所有人都是很优秀的程序员,但还有10%~20%的人从来没有按照面向对象的方式做事。如果该说法确实正确,那么很可能是因为很多优秀的程序员从没有花时间进行编程范式的转变,没有深入学习面向对象概念。
第4版中的新增内容
正如在前言中经常提及的一样,第1版中我的愿景仅仅围绕概念本身,而不是具体的新兴技术。尽管我在第2版、第3版以及第4版仍然坚持该目标,但也引入了几个章节讲述关于应用程序的主题,这些主题与面向对象概念契合度很高。第1~10章涵盖了基本的面向对象概念,第11~15章将这些概念应用到了一些常用的面向对象技术中。例如,第1~10章提供了面向对象的基础课程(比如封装、多态、继承等),而第11~15章则介绍了一些实际应用。
第4版相对于之前的版本拓展了很多主题。以下列出了改进及更新的主题:
移动设备开发,包括手机应用、移动应用以及混合开发等。
iOS环境下的Objective-C代码示例。
使用XML及JSON实现可读性强的数据交换。
使用CSS、XSLT等技术实现数据渲染与转换。
Web服务,包括简单对象访问协议(OAP)、RESTful Web服务等。
客户端/服务器端技术以及封送对象。
持久化数据和序列化对象。
很多章节都扩充了代码示例,在Pearson的网站可以在线查看用Java、C# .NET、VB .NET及Objective-C编写的代码示例。
本书中的源码
本书中提到的示例代码可以在华章网站(www.hzbook.com)下载。

目  录
译者序
作者简介
前言
第1章 面向对象的概念简介
1.1  基本概念
1.2  对象及遗留系统
1.3  过程式编程与面向对象编程
1.4  由面向过程开发过渡到面向对象开发
1.4.1 过程式编程
1.4.2 面向对象编程
1.5  究竟什么是对象
1.5.1 对象数据
1.5.2 对象行为
1.6  究竟什么是类
1.6.1 创建对象
1.6.2 属性
1.6.3 方法
1.6.4 消息
1.7  使用类图作为可视化工具
1.8  封装和数据隐藏
1.8.1 接口
1.8.2 实现
1.8.3 接口/实现范式的一个真实示例
1.8.4 接口/实现范式的模型
1.9  继承
1.9.1 超类和子类
1.9.2 抽象
1.9.3 is-a关系
1.10 多态
1.11  组合
1.11.1 抽象
1.11.2 has-a关系
1.12  结语
1.13  本章中使用的示例代码
1.13.1 C#.NET版本的TestPerson类
1.13.2 C#.NET版本的TestShape类
第2章  如何以面向对象的方式进行思考
2.1  清楚接口和实现之间的区别
2.1.1 接口
2.1.2 实现
2.1.3 一个接口/实现示例
2.2  使用抽象思维设计接口
2.3  尽可能提供最小化的用户接口
2.3.1 确定用户?
2.3.2 对象行为
2.3.3 环境约束
2.3.4 识别公共接口
2.3.5 识别实现
2.4  结语
2.5  引用
第3章 高级的面向对象概念
3.1  构造函数
3.1.1 什么是构造函数调用
3.1.2 构造函数中包含什么
3.1.3 默认构造函数
3.1.4 使用多个构造函数
3.1.5 设计构造函数
3.2  错误处理
3.2.1 忽略问题
3.2.2 检查问题并中止应用程序
3.2.3 检查问题并试图恢复
3.2.4 抛出异常
3.3  作用域的重要性
3.3.1 局部属性?
3.3.2 对象属性
3.3.3 类属性
3.4  操作符重载
3.5  多重继承
3.6  对象操作
3.7  结语
3.8  引用
3.9  本章中使用的示例代码
第4章 类的剖析
4.1 类名
4.2 注释
4.3 属性
4.4 构造函数
4.5 访问器
4.6 公共接口方法
4.7 私有实现方法
4.8 结语
4.9 引用
4.10 本章中使用的示例代码
第5章 类设计指导
5.1 对现实世界系统建模
5.2 识别公共接口
5.2.1 最小化公共接口
5.2.2 隐藏实现
5.3 设计健壮的构造函数(以及析构函数)
5.4 在类中设计错误处理
5.4.1 使用注释给类加上文档
5.4.2 构造可以合作的对象
5.5 设计时请考虑重用
5.6 设计时请考虑扩展性
5.6.1 使用描述性的名称
5.6.2 抽象不可移植的代码
5.6.3 提供一种方式来复制和比较对象
5.6.4 保持尽可能小的作用域
5.6.5 类的职责与自身高度相关
5.7 设计时请考虑可维护性
5.7.1 在开发过程中使用迭代
5.7.2 测试接口
5.8 使用对象持久化
5.9 结语
5.10 引用
5.11 本章中使用的示例代码
第6章 使用对象进行设计
6.1 设计指导
6.1.1 提供正确的分析
6.1.2 编写工作陈述文档
6.1.3 收集需求
6.1.4 开发用户接口的原型
6.1.5 识别类
6.1.6 确定每个类的职责
6.1.7 确定类之间如何协作
6.1.8 创建类模型来描述系统
6.1.9 建立用户接口原型
6.2 对象包装
6.2.1 结构化代码
6.2.2 包装结构化代码
6.2.3 包装不可移植的代码
6.2.4 包装已有类
6.3 结语
6.4 引用
第7章 精通继承和组合
7.1 重用对象
7.2 继承
7.2.1 通用和特例
7.2.2 设计决策
7.3 组合
7.4 为什么封装是面向对象的本质
7.4.1 继承如何减弱封装
7.4.2 关于多态的一个具体例子
7.4.3 对象职责
7.4.4 抽象类、虚方法和协议
7.5 结语
7.6 引用
7.7 本章中使用的示例代码
第8章 框架和重用:使用接口和抽象类进行设计
8.1 代码:重用还是不重用
8.2 什么是框架
8.3 什么是契约
8.3.1 抽象类
8.3.2 接口
8.3.3 综合运用
8.3.4 编译器佐证
8.3.5 创建契约
8.3.6 系统插接点
8.4 一个电子商务示例
8.4.1 一个电子商务问题
8.4.2 非重用方式
8.4.3 电子商务解决方案
8.4.4 UML对象模型
8.5 结语
8.6 引用
8.7 本章中使用的示例代码
第9章 创建对象及面向对象设计
9.1 组合关系
9.2 分阶段构建
9.3 组合类型
9.3.1 聚合
9.3.2 联合
9.3.3 同时使用联合和聚合
9.4 避免依赖
9.5 基数
9.5.1 多个对象联合
9.5.2 可选的联合
9.6 一个综合性示例
9.7 结语
9.8 引用
第10章 创建对象模型
10.1 什么是UML
10.2 类图结构
10.3 属性和方法
10.3.1 属性
10.3.2 方法
10.4 访问符号
10.5 继承
10.6 接口
10.7 组合
10.7.1 聚合
10.7.2 联合
10.8 基数
10.9 结语
10.10 引用
第11章 对象与可移植数据:XML和JSON
11.1 可移植数据
11.2 XML
11.3 XML与HTML
11.4 XML和面向对象的语言
11.5 在企业间共享数据
11.6 使用DTD验证文档
11.7 将DTD集成到XML文档中
11.8 使用层叠样式表
11.9 JavaScript对象标记
11.10 结语
11.11 引用
第12章 持久化对象:序列化、封送及关系型数据库
12.1 持久化对象基础
12.2 将对象保存到平面文件中
12.2.1 序列化文件
12.2.2 再次讨论实现和接口
12.2.3 为什么不保存方法
12.3 序列化过程中使用XML
12.4 写入关系型数据库
12.5 结语
12.6 引用
12.7 本章中使用的示例代码
第13章 Web服务、移动应用及混合应用中的对象
13.1 分布式计算的演进
13.2 基于对象的脚本语言
13.3 JavaScript验证示例
13.4 网页中的对象
13.4.1 JavaScript对象
13.4.2 网页控制器
13.4.3 声音播放器
13.4.4 电影播放器
13.4.5 Flash动画
13.5 分布式对象及企业
13.5.1 公共对象请求代理体系结构
13.5.2 Web服务的定义
13.5.3 Web服务代码
13.5.4 表征状态转移
13.6 结语
13.7 引用
第14章 对象及客户端/服务器端应用程序
14.1 客户端/服务器端方式
14.2 私有方式
14.2.1 序列化对象代码
14.2.2 客户端代码
14.2.3 服务器端代码
14.2.4 运行该私有的客户端/服务器端示例
14.3 非私有方式
14.3.1 对象定义代码
14.3.2 客户端代码
14.3.3 服务器端代码
14.3.4 运行非私有客户端/服务器端示例
14.4 结语
14.5 引用
14.6 本章中使用的示例代码
第15章 设计模式
15.1 为什么使用设计模式
15.2 Smalltalk的模型/视图/控制器
15.3 设计模式类型
15.3.1 创建型模式?
15.3.2 结构型模式
15.3.3 行为型模式
15.4 反模式
15.5 结语
15.6 引用
15.7 本章中使用的示例代码?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html文件下的flag,推荐一个SAM文件中flag含义解释工具

SAM是Sequence Alignment/Map 的缩写。像bwa等软件序列比对结果都会输出这样的文件。samtools网站上有专门的文档介绍SAM文件。具体地址:http://samtools.sourceforge.net/SAM1.pdf很多人困惑SAM文件中的第二列FLAG值是什么意思。根据文档介绍我们可以计算&#xff…

MobaXterm 错行,乱码

最近使用MobaXterm ssh,发现进入ssh显示中文没问题。但如果用VIM编辑文件时如果有中文,修改插入操作有时就会有串行乱码情况,改vim编码也不行。都没有完美解决。最后发现只需要在MobaXterm 的设置中把字体换一个问题就都解决了。 转载于:https://www.cnb…

一个数据仓库转型者眼中的数据挖掘

一个数据仓库转型者眼中的数据挖掘 对于大多数非从业者或者初学者来说,数据仓库(Data Warehousing)与数据挖掘(Data Mining)是很容易混淆的两个概念。有个形象的比喻说:如果把数据仓库比做一个大型的矿坑&a…

mysql的告警日志_运维日记|MySQL关于aborted告警日志的分析

又是一个季度一次的现场巡检,期待数据库能跑的又快又稳,毕竟这是对DBA最大的馈赠了。​结果不遂人意发现在错误日志内存在大量的如下报错:查看当前数据库的状态值:查看数据库关于数据库会话的关键参数:数据库环境及相关…

html怎样将单元格的字竖式,数学竖式计算的标准格式是怎样的?需要注意哪些问题?...

小学阶段数学计算题是重中之重,也是为日后打基础的时间段,所以在小学的时候,要让孩子熟练掌握数学计算。数学计算在这段时期一般比较简单,通常情况下学生可以采用口算、心算的形式,但是有的学生因为这两个能力不强。于…

linux中安装多个mysql_liunx系统下安装多个MySql数据库并做主从配置

在网上搜索了很多资料,都没有看到像样的文档,思路不是很清晰,对第一次安装的朋友来说较为困难,经过长时间的安装尝试和查询网上零碎的知识点,终于成功的完成Linux系统下多MySql数据库安装和主从配置,现在分…

江苏省高等学校计算机一级成绩查询,江苏计算机一级考试成绩查询

想要了解江苏2020年9月计算机一级考试成绩查询入口的小伙伴快来看看吧!下面由出国留学网小编为你精心准备了“江苏2020年9月计算机一级考试成绩查询入口公布”,持续关注本站将可以持续获取更多的考试资讯!江苏2020年9月计算机一级考试成绩查询…

《树莓派实战秘籍》——1.17 技巧17添加重启按钮

本节书摘来异步社区《树莓派实战秘籍》一书中的第1章,第1.17节,作者:【美】Ruth Suehle ,Tom Callaway,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.17 技巧17添加重启按钮 树莓派实战秘籍也许你已经注意到Pi缺少了某…

mysql临时关闭索引功能_MySQL优化之索引优化

$1.WHY : 找到MySQL Query执行慢的原因1.1 EXPLAIN通过Explain查看SQL Query语句的执行情况&#xff0c;从中找出导致MySQL查询性能差的原因EXPLAIN QUERY语句【字段解释】<1> id -- 表的读取顺序id相同时&#xff0c;按照从上至下的顺序执行id不同时&#xff0c;id值越…

K8S Calico

NetworkPolicy是kubernetes对pod的隔离手段&#xff0c;是宿主机上的一系列iptables规则。 Egress 表示出站流量&#xff0c;就是pod作为客户端访问外部服务&#xff0c;pod地址作为源地址。策略可以定义目标地址或者目的端口 Ingress 表示入站流量&#xff0c;pod地址和服务作…

每周总结(第十一周)

转载于:https://www.cnblogs.com/qinlihong/p/5510026.html

10个关于linux中Squid代理服务器的实用面试问答

10个关于linux中Squid代理服务器的实用面试问答 不仅是系统管理员和网络管理员时不时会听到“代理服务器”这个词&#xff0c;我们也经常听到。代理服务器已经成为一种企业常态&#xff0c;而且经常会接触到它。它现在也出现在一些小型的学校或者大型跨国公司的自助餐厅里。Squ…

北京矿大计算机考研每年分数线,2021中国矿业大学北京考研国家线公布时间_国家线是多少分...

中国矿业大学北京考研国家线怎么看&#xff1f;中国矿业大学北京考研国家线是多少分&#xff1f;山西人事考试网整理中国矿业大学北京考研考研国家线怎么看、国家线公布时间、历年中国矿业大学北京考研国家线&#xff0c;希望考生及时关注考研成绩国家线公布信息&#xff0c;为…

工厂模式-依赖倒置原则

老板&#xff1a;阿飞啊&#xff0c;我们公司最近接了个项目&#xff0c;你看着设计一下&#xff0c;我给你说下需求。项目组长阿飞&#xff1a;好啊&#xff0c;什么需求&#xff1f;老板&#xff1a;我们找了一个合作的商铺&#xff0c;他们要设计一套面包销售系统。主要功能…

(6)css盒子模型(基础下)

一、理解多个盒子模型之间的相互关系 现在大部分的网页都是很复杂的&#xff0c;原因是一个“给人用的”网页中是可能存在着大量的盒子&#xff0c;并且它们以各种关系相互影响着。 html与DOM的关系 详情了解“DOM” &#xff1a;http://baike.baidu.com/link?urlSeSj8sRDE-JZ…

easyui获取下拉框选中的文本值_Word中文本显示不全的常见3种情况及解决方法

在日常工作使用Word文档时&#xff0c;经常会遇到文本显示不全的情况&#xff0c;比如文本框或表格里的文本显示不全等情况&#xff0c;你一般是怎么操作呢&#xff1f;以下这3种常见情况你可能也遇到过&#xff0c;一起看看是什么原因并解决它们吧&#xff01;1、文本显示不全…

CSS中属性的值和单位

CSS中值的单位 1.颜色值 被各种浏览器支持&#xff0c;并且作为 CSS 规范推荐的颜色名称只有 16 种&#xff0c;如下表所示。 百分比表示 color: rgb(100%, 100%, 100%); 这个声明将红、蓝、绿 3 种原色都设置为最大值&#xff0c;结果组合显示为白色。相反&#xff0c;可以设置…

《走进SAP(第2版)》——2.8 SAP的目标是什么

本节书摘来自异步社区《走进SAP&#xff08;第2版&#xff09;》一书中的第2章&#xff0c;第2.8节,作者&#xff1a; 【德】Nancy Muir , Ian Kimbell , 等 更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.8 SAP的目标是什么 走进SAP&#xff08;第2版&#xff09;…

8 包含min函数的栈

0 引言 题目&#xff1a;定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中&#xff0c;调用min、push及pop的时间复杂度都是O&#xff08;1&#xff09;. 1 抽象问题具体化 2 具体问题抽象分析 需要解决的两个主要问题如下。 &#x…

《Adobe Illustrator大师班:经典作品与完美技巧赏析》—Svetlana Makarova

本节书摘来自异步社区《Adobe Illustrator大师班&#xff1a;经典作品与完美技巧赏析》一书中的Svetlana Makarova&#xff0c;作者【英】Sharon Milne,更多章节内容可以访问云栖社区“异步社区”公众号查看。 Svetlana MakarovaAdobe Illustrator大师班&#xff1a;经典作品与…