《面向对象的思考过程(原书第4版)》一 第2章 如何以面向对象的方式进行思考

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

第2章

如何以面向对象的方式进行思考

在第1章中,我们学习了面向对象(OO)的基本概念。本书的其他部分会深入讲解这些概念,也会介绍其他的一些知识。不管是否是面向对象的设计,出色的设计都需要考量很多因素。面向对象设计的基本单位是类。面向对象设计渴望的结果是一个健壮实用的对象模型,换句话说,就是一个完整的系统。
与生活中很多事情一样,在解决问题时,不管对错,并不只有一种方式。同一件事通常有多种处理方式。所以试图用面向对象的方案来进行设计时,不要执迷于一开始就尝试做出一个完美的设计(始终存在提升的空间)。我们真正需要做的是进行头脑风暴,让我们的思想延伸到不同的方向。当解决一个问题时不要尝试遵从任何标准或约定,因为整个想法需要有创造性。
事实上,刚开始时甚至不要先考虑一种具体的编程语言。业务上的首要事情是定位和解决业务问题。要先进行概念分析和设计。只有业务问题需要技术来解决时才需要考虑具体的技术。例如,你不能脱离无线技术来设计一个无线网络。而且通常的现实情况是你有多种软件方案可供选择。
因此,在设计一个系统甚至一个类之前,先思考问题本身。本章探索了面向对象思考这一艺术和科学。
关于思考的任何微小改变都是不平凡的。比如我们反复提及的从结构化开发方式变为面向对象开发的思维。之前已经讲过,该思维的一个误解是结构化开发过程和面向对象的开发过程是互斥的。其实并不是这样。众所周知,之前讨论过,通过包装对象,结构化开发和面向对象开发是可以共存的。事实上,当编写面向对象的应用程序时,到处在用结构化的结构体。我还从没看到过一个程序(无论是否采用了面向对象)没有使用循环、条件判断等。转换到面向对象设计需要不同类型的投资。
从FORTRAN语言(甚至C语言)切换到COBOL语言相当于学习新的语言。然而,从COBOL语言切换到C++、C# .NET、Visual Basic .NET、Objective-C或者Java,则要求学习一种新的思考过程。这正是滥用术语面向对象范式造成的不良后果。当学习面向对象语言时,你必须首先花精力来学习面向对象的概念以及相应的思考过程。如果没有进行这种范式的转变,以下两件事情必发生其一。首先是项目本质上不是真正的面向对象(例如,使用了C++语言但没有使用面向对象特性),其次是项目完全由混乱的对象组成。
培养面向对象思考过程的良好习惯需要注意三个方面,本章会进行详细讲解:
清楚接口和实现之间的区别。
深入理解抽象。
给用户提供尽可能少的接口。
第1章中我们已经接触到了部分概念,接下来我们会深入细节。

时间: 2024-09-20 08:04:14

《面向对象的思考过程(原书第4版)》一 第2章 如何以面向对象的方式进行思考的相关文章

《代码之殇》(原书第2版)——第2章 过程改进,没有灵丹妙药 2006年3月1日

2006年3月1日:"敏捷子弹" 我很难做出判断.也许你可以帮我.我不能断定以下两种观点,哪种更糟心:一种观点认为使用"敏捷"方法,并且恨不得微软在全公司范围内采用它,用它解决我们面临的所有麻烦:另一种观点认为敏捷是被一些无知的学者鼓吹出来的,它实际上是一种改头换面的愚昧方法,它让开发者不用承担任何责任.这是个两难的决定,两种观点都会使我有种作呕的感觉. 作者注:这是我最喜欢的栏目之一,因为其间爱恨交错不能自已.尽管它并不完美,但我在这个主题上的评论还是相当公允的.

《代码之殇》(原书第2版)——第3章 根除低下的效率 2006年7月1日

2006年7月1日:"停止写规范书,跟功能小组呆在一起" 我不是项目经理(Program Manager,PM),我也从来没有担任过项目经理,我将来也不可能成为一名项目经理.这并不是因为我个人对项目经理的抵触,其实,我的朋友之中不乏出色的项目经理.很显然,我没有权利去教导项目经理应该怎么去做他们的工作. 尽管如此,项目经理应该停止写规范书.就这么简单!他们在浪费我的时间,浪费组织的时间,浪费整个公司的时间.你几乎可以听到残留着的.细微的.嘎吱嘎吱的声音,因为规范书像白蚁一样在一口一口咬

《代码之殇》(原书第2版)——第3章根除低下的效率 2007年2月1日

2007年2月1日:"糟糕的规范书:该指责谁?" 规范书基本上都是可怕的.不仅仅指项目管理规范书,而且也包括开发规范书和测试规范书.我说的"可怕",主要是指难以撰写,难以使用,而且难以维护.你要知道,这很可怕!规范书往往还是不完善的,组织得很差,并且没有得到充分的复审.规范书永远都是这个样子,也看不到有任何变好的迹象. 为此,我想要指责项目经理,部分原因是因为我喜欢这么做,但更主要的还是因为他们是糟糕规范书的始作俑者.然而,事实不允许我指责项目经理.人人都在写糟糕的

《代码之殇》(原书第2版)——第1章 项目管理失当,2008年9月1日

2008年9月1日:"我得估算一下" 尽管"你的任务估算是怎么产生的?"这样的疑问总是列在诸如"不要对你的项目经理或同事抱怨"的话题之首.但当我与刚出道的工程师们讨论问题时,首先的话题不是估算,而是职业发展和一些大众话题.这就是为什么问题总是在高谈阔论中变得无法控制.估算就是在预测未来,有太多的问题是未知而不可预见的,因而想为一个精神错乱的暴君提供一个精确的估算简直不可能.是不是?肯定是这样的,对吧? 错了.估算来自于软件工程师在规范的基础上对最

代码之殇》(原书第2版)——第1章 项目管理失当 2010年5月1日

2010年5月1日:"敏捷的团队合作" 我用Scrum已经7年了,而后面6年我一直写关于它的文章.Scrum的概念太吸引人了--规则多变.自我管理的团队在短而固定的周期内周而复始地进行一系列小环节(或功能)工作,并不断提升水平.很多微软团队的成功都来自于此.让人犯昏的是高层的项目经理与团队层的Scrum工程师仍存在严重隔阂. 很多高层及中层的项目经理认为Scrum是混乱的.随意的.危险的并毫无意义的,会使大家对计划失去信心:而很多Scrum迷认为项目计划是种浪费,会引起混乱,毫无价值,

《深入理解Elasticsearch(原书第2版)》一2.5.1 查询方式分类

2.5.1 查询方式分类 当然,对查询方式进行分类是一件艰难的任务,我们也不敢打包票说在这里给出的分类列表是唯一正确的.我们甚至可以说,如果你询问其他Elasticsearch使用者,他们可能会给出自己的分类方式,或者声称每个查询方式都可以被归入多个类别.有趣的是,他们有可能是对的.我们也曾考虑过多种分类方式存在的情况,不过,最终我们认为,每个查询方式都可以被归入以下列出的一个或多个类别中. 基本查询:这类查询允许针对索引的一部分进行检索,其输入数据既可以分析也可以不做分析.这类查询的一个关键特

ROS机器人程序设计(原书第2版)第1章 ROS Hydro系统入门

第1章 ROS Hydro系统入门 欢迎开始阅读本书第1章.本章将介绍如何安装ROS系统,它是一种新的标准化机器人系统软件框架.本书是基于ROS Fuerte的<ROS机器人程序设计>一书的升级版.通过ROS,你可以使用大量的示例代码和开源程序轻松地完成机器人编程和控制.同时,你还能够理解如何使用各种传感器与执行器,并为你的机器人增加新的功能,如自动导航和视觉感知等.得益于开源理念,以及持续开发最先进算法并不断提供新功能的开源社区,ROS不断进步完善. 通过本书,你将学习到如下内容: 在特定版

ROS机器人程序设计(原书第2版)第3章 可视化和调试工具

第3章 可视化和调试工具 ROS附带了大量功能强大的工具,帮助用户和开发人员可视化和调试代码,以便检测并解决软硬件问题.其中包括消息日志系统(类似log4cxx).诊断消息.可视化以及检测工具.这些工具展示了哪些节点正在运行和它们是如何连接的.   本章我们还会展示如何用GDB调试器调试ROS节点,介绍用于日志记录的API,以及如何设置日志记录级别.接着,我们将解释如何用ROS工具集检测哪些进程正在运行以及它们之间通信的内容.例如,在下图所示的系统可视化图中可以看到正在运行的节点以及用连线表示的

《算法导论(原书第3版)》一本章注记

本章注记 关于算法的一般主题存在许多优秀的教科书,包括由以下作者编写的那些:Aho.Hopcroft和Ullman[5,6],Baase和Van Gelder[28],Brassard和Bratley[54],Dasgupta.Papadimitriou和Vazirani[82],Goodrich和Tamassia[148],Hofri[175],Horowitz.Sahni和Rajasekaran[181],Johnsonbaugh和Schaefer[193],Kingston[205],Kl

ROS机器人程序设计(原书第2版)第2章

第2章 ROS系统架构及概念 一旦你完成了ROS系统的安装,你肯定会想"好了,我已经安装完成,那么下一步要做什么呢?"在本章我们将学习ROS系统架构及它的组成.然后,我们会开始创建节点和功能包,并使用ROS系统自带的TurtleSim示例. ROS系统的架构主要被设计和划分成了三部分,每一部分都代表一个层级的概念: 文件系统级(The Filesystem level) 计算图级(The Computation Graph level ) 开源社区级(The Community lev