热门关键字:  听力密码  单词密码  新概念美语  巧用听写练听力  零起点
图书信息

面向对象的思考过程(原书第二版)

中国水利水电出版社
    【作 者】[美] Matt Weisfeld 著 【I S B N 】978-7-5084-2291-0 【责任编辑】吴萍 【适用读者群】研究生 【出版时间】2004-08-01 【开 本】16开 【装帧信息】平装(光膜) 【版 次】第1版第1次印刷 【页 数】 【千字数】296 【印 张】13.25 【定 价】26 【丛 书】暂无分类 【备注信息】
图书详情

    面向对象的程序设计(OOP)是现代程序设计语言的基本概念,本书深入探讨了如何以面向对象的方式来进行思考。全书共分为15章,内容包括:面向对象的基本概念,如何以对象的方式进行思考,高级的面向对象概念,类的剖析,类设计,继承和组合,框架和重用,创建对象,使用UML创建对象模型,持久对象,可移植的数据,分布式对象和企业,设计模式等。

    本书是当代程序员的基础理论读物,适合于大学本科计算机专业的学生以及想要学习面向对象技术的程序员。

    Authorized translation from the English language edition, entitled OBJECT-ORIENTED THOUGHT PROCESS, THE, 2nd Edition, 0672326116 by WEISFELD, MATT, published by Pearson Education, Inc, publishing as Que/Sams, Copyright © 2004 by Sams Publishing.

    All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.CHINESE SIMPLIFIED language edition published by CHINA WATERPOWER PRESS/BEIJING MULTI-CHANNEL ELECTRONIC INFORMATION CO.LTD, Copyright © 2004 by CHINA WATERPOWER PRESS/BEIJING MULTI-CHANNEL ELECTRONIC INFORMATION CO.LTD.

    顾名思义,本书是关于面向对象(OO)的思考过程的。很明显,选择本书的主题和书名都是重要的决定,然而,这些决定并不简单。许多图书讲述面向对象的一种或者另一种层次。若干畅销图书讲述以下主题:OO分析、OO设计、OO程序设计、设计模式、OO数据库、统一建模语言(UML)、各种OO程序设计语言以及许多与OO程序设计有关的其他主题。

    然而,在研究以上所有图书时,许多人忘记各个主题都是建立在下面这个单一基础之上:如何以OO的方式进行思考。遗憾的是,许多软件开发专家常常还没有花适当的时间和精力来真正了解这些图书中的概念,就开始钻研它们。

    我认为学习OO概念不是通过学习某种具体的开发方法或者某组工具就可以实现的。简而言之,以OO的方式完成工作是一种思考方法。本书完全和OO思考过程有关。

    从OO思考过程中分离出方法和工具并不容易。许多人都是通过其中一种方法或者工具来了解OO概念的。许多C程序员是在直接转移到C++时首次了解到面向对象,在此之前甚至没有间接接触这个方法。一些软件专业人员是通过演示文稿(包含使用UML的对象模型)而首次接触面向对象的,在此之前他们也没有直接接触过OO概念。

    理解学习OO概念和使用支持该范例的方法和工具之间的显著区别是很重要的。在“What the UML Is—and Isn’t”一文中,作者Craig Larman说:“遗憾的是,软件工程和UML图表语言领域中,获得阅读和编写UML符号的技能在某些时候似乎和获得面向对象分析和设计的技能同等重要。当然,事实并非如此,后者比前者更重要。因此,我建议寻找以下培训和培训材料:其中面向对象的分析和设计要比UML符号或者某种电脑辅助软件工程工具的用途更为重要。”

    尽管学习一门建模语言是一个很重要的步骤,但是先学习OO技能更重要。在学习OO概念之前先学习UML,类似于在不了解任何电子技术时学习如何阅读电气图。

    程序设计语言存在相同的问题。前面说过,许多C程序员还没有直接接触到OO概念,就通过转移到C++而进入面向对象领域。很多情况下,声称自己是C++程序员的开发人员只是使用C++编辑器的C程序员。

    随着Java、C#.NET、Visual Basic .NET之类的面向对象语言越来越流行,这个问题越来越重要。有很多Visual Basic程序员必须转移到Visual Basic .NET中。类似地,许多可能没有遵守严格的OO惯例的C++程序员,需要转移到Java或者C#中,在使用这些语言时,他们就别无选择,只能以OO方式进行思考。

    早期的Visual Basic版本不是OO的。C不是OO的,而开发C++时考虑了与C的向后兼容性。因此,仅仅使用C++编辑器编写C的句子构造,而抛弃了C++所有的OO特性,这是非常可能的。更坏的情况下,程序员可以使用足够的OO特性,刚好使某个程序不能使用OO进行理解,而非OO程序员也可以这样。

    因此,在开始OO开发的时候,首先学习基本的OO概念是至关重要的。我们应该抵挡住直接跨入某种程序设计语言(如C++、C#或者Java)或者某种建模语言(如UML)的诱惑,而花时间来学习面向对象的思考过程。

    本书是向程序员介绍面向对象技术的概念性图书。它的读者对象当然包括想要跨越到面向对象技术的结构化程序设计人员。因此,书中包括的一些资料实际上是结构化的技术和面向对象技术之间的桥梁。第6章就是该方法的一个好例子,该章添加了结构化程序设计人员所熟悉的技术。重要的是理解面向对象和结构化实践并非是相互排斥的。结构化技术的使用在OO设计中随处可见(仅仅考虑for循环或者if语句)。

    20世纪80年代后期,在我的第一堂Smalltalk课上,教师告诉全班同学,新的OO范例是一种全新的思考方式。他接着说到:“虽然我们差不多都是非常优秀的程序员,但是其中的10%~20%永远都不能真正以OO的方式完成工作。”如果这个陈述确实是正确的,也主要是因为一些人从来没有真正地花时间进行范例转换并学习基础的OO概念。

    第二版的新内容

    正如我常说的,我认为第一版主要是一本概念性的图书。尽管第二版仍然坚持这个目标,但我还添加了若干应用主题,它们非常适合于面向对象的概念。这些应用包括以下几点:

     对象建模

     对象持久性

     XML

     对象和Internet

     企业

     设计模式

    从本质上说,讲述这些主题的章节仍然是概念性的。然而,其中一些章节包括Java代码,它们展示了如何实现这些概念。

    读者对象

    本书是对基本的OO概念的总体介绍。适合的读者包括设计人员、开发人员、项目管理人员以及任何想要总体了解面向对象的人。阅读这本书将为阅读其他讲述更高级的OO主题的图书打下坚实的基础。

    在这些主题更高级的书中,我最喜欢的图书之一仍然是Stephen Gilbert和Bill McCarty所著的《Object-Oriented Design in Java》。我确实非常喜欢该书中的方法,并且在我教过的OO概念课堂上,将它用作教科书。在本书中我经常引用到《Object-Oriented Design in Java》,并且推荐您学完本书之后学习这本书。

    其他我认为非常有用的图书包括Scott Meyers所著的《Effective C++》、Stephen R. Schach所著的《Classical and Object-Oriented Software Engineering》、Bruce Eckel所著的《Thinking in C++》、Martin Fowler所著的《UML Distilled》以及Peter Coad和Mark Mayfield所著的《Java Design》。

    在公司和学校向程序员讲授介绍性的Java时,我很快就发现其中很多程序员很容易掌握Java语法。然而,他们很难了解该语言的OO本质。

    本书的范围

    到目前为止很明显,我坚信在跨入某个程序设计语言或者建模语言之前先熟悉面向对象的思考过程是很有益的。本书处处都是Java代码例子以及UML图,然而,您不必了解Java或者UML来阅读它们。既然我说过先学习概念,为什么这里有这么多Java代码和UML图呢?首先,用它们来阐述OO概念都很棒。其次,它们对OO过程都很重要,并且我们应该对其进行介绍性的讲解。重点并没有放在Java或者UML上,而是使用它们作为辅助工具,以了解基本概念。

    本书中的Java例子说明循环和函数之类的概念。然而,理解这些代码本身并不是理解这些概念的先决条件,手头拥有讲述Java语法的书可能会有所帮助。

    强调一下,本书不讲述Java或者UML,讲述它们都需要几卷的篇幅。我希望本书能激起您学习其他OO主题(如OO分析、面向对象的设计以及OO程序设计)的愿望。

    本书约定

    本书使用以下排版约定:

    代码行、命令、语句以及其他与代码相关的术语是以等宽字体(monospace)出现的。

    代表实际应该键入的内容的占位符是以斜体等宽字体(italic monospace)出现的。应该键入的文本是以粗体等宽字体(bold monospace)出现的。

    贯穿本书,有一些特殊的说明性内容,例如:

    注意

    注意显示关于该讨论的有趣信息,它是一点见解或者对新技术的启示。

    提示

    提示向您提供建议或者展示完成任务的更容易的方式。

    警告

    警告提醒您某个可能的问题并向您提供如何避免该问题的建议。

    本书中使用的源代码

    您可以从http://www.samspublishing.com下载本书中讨论到的所有源代码和例子。在“search”窗口,简单地键入本书的ISBN(0672326116),按下Enter健,然后就出现带有指向源代码链接的页面。

    译者序
    前言
    致谢
    第1章 面向对象的概念简介 1
    1.1 面向过程程序设计和OO程序设计 1
    1.2 从面向过程开发转向面向对象开发 4
    1.2.1 面向过程的程序设计 4
    1.2.2 OO程序设计 4
    1.3 对象的确切定义 5
    1.3.1 对象数据 5
    1.3.2 对象行为 5
    1.4 类的确切定义 8
    1.4.1 类是对象模板 8
    1.4.2 属性 9
    1.4.3 方法 9
    1.4.4 消息 10
    1.5 使用UML构建类图 10
    1.6 封装 10
    1.6.1 接口 11
    1.6.2 实现 11
    1.6.3 接口/实现范例的现实例子 11
    1.6.4 接口/实现范例的Java例子 12
    1.7 继承 13
    1.7.1 超类和子类 14
    1.7.2 抽象 14
    1.7.3 Is-a关系 15
    1.8 多态 16
    1.9 组合 18
    1.10 小结 18
    第2章 如何以对象的方式进行思考 20
    2.1 了解接口和实现的区别 20
    2.1.1 接口 22
    2.1.2 实现 22
    2.1.3 接口/实现的例子 22
    2.2 在设计接口时使用抽象的思想 26
    2.3 尽可能向用户提供最少的接口 27
    2.3.1 确定用户 28
    2.3.2 对象行为 28
    2.3.3 环境限制 28
    2.3.4 确定公共接口 29
    2.3.5 确定实现 29
    2.4 小结 30
    2.5 参考文献 30
    第3章 高级的面向对象概念 31
    3.1 构造函数 31
    3.1.1 何时调用构造函数 31
    3.1.2 构造函数的内部机理 31
    3.1.3 默认构造函数 32
    3.1.4 使用多个构造函数 32
    3.1.5 设计构造函数 36
    3.2 错误处理 36
    3.2.1 忽略问题 36
    3.2.2 检测问题并异常终止应用程序 36
    3.2.3 检测问题并且尝试解决问题 37
    3.2.4 抛出异常 37
    3.3 作用域的概念 39
    3.3.1 局部属性 39
    3.3.2 对象属性 40
    3.3.3 类的属性 42
    3.4 运算符重载 43
    3.5 多重继承 43
    3.6 对象操作 44
    3.7 小结 45
    3.8 参考文献 45
    第4章 类的剖析 46
    4.1 类的名称 46
    4.2 注释 47
    4.3 属性 48
    4.4 构造函数 49
    4.5 访问函数 50
    4.6 公共接口方法 52
    4.7 私有实现方法 53
    4.8 小结 53
    4.9 参考文献 53
    第5章 类设计指导 54
    5.1 标识公共接口 54
    5.2 设计健壮的构造函数(或析构函数) 56
    5.3 在类中设计错误处理 57
    5.3.1 用文档说明类以及使用注释 57
    5.3.2 带着协作的意向创建对象 57
    5.4 在设计时考虑到重用 58
    5.5 设计时考虑扩展 58
    5.5.1 使名称形象化 59
    5.5.2 提取不能移植的代码 59
    5.5.3 提供复制和比较对象的方法 59
    5.5.4 尽可能使作用域最小 60
    5.5.5 类应该对自己负责 60
    5.6 在设计时考虑可维护性 61
    5.6.1 使用迭代 62
    5.6.2 测试接口 62
    5.7 使用对象持久性 64
    5.8 小结 65
    5.9 参考文献 65
    第6章 使用对象进行设计 66
    6.1 设计指导 66
    6.1.1 进行正确的分析 69
    6.1.2 制作工作陈述 69
    6.1.3 收集需求 69
    6.1.4 开发用户接口原型 70
    6.1.5 确定类 70
    6.1.6 确定每一个类的职责 70
    6.1.7 确定类和类之间如何相互作用 70
    6.1.8 创建类模型来描述系统 70
    6.2 案例分析:Blackjack(扑克牌中的二十一点)例子 71
    6.2.1 使用CRC卡片 72
    6.2.2 确定Blackjack的类 73
    6.2.3 确定类的职责 76
    6.2.4 UML用例:确定协作 80
    6.2.5 制作CRC卡片的第一步 83
    6.2.6 UML类图:对象模型 85
    6.2.7 为用户接口设计原型 86
    6.3 小结 86
    6.4 参考文献 86
    第7章 掌握继承和组合 87
    7.1 继承 88
    7.1.1 泛化和特化 90
    7.1.2 设计决策 90
    7.2 组合 92
    7.3 为什么封装对OO很重要 94
    7.3.1 继承是如何削弱封装的 95
    7.3.2 一个详细的多态例子 96
    7.3.3 对象的职责 97
    7.4 小结 100
    7.5 参考文献 100
    第8章 框架和重用:利用接口和抽象类进行设计 101
    8.1 代码的重用 101
    8.2 什么是框架 101
    8.3 什么是契约 103
    8.3.1 抽象类 104
    8.3.2 接口 105
    8.3.3 尝试一起使用它们 107
    8.3.4 编译器证据 109
    8.3.5 制定契约 109
    8.3.6 系统插入点 111
    8.4 一个电子商务的例子 111
    8.4.1 电子商务的问题 111
    8.4.2 非重用方法 112
    8.4.3 电子商务解决方案 114
    8.4.4 UML对象模型 114
    8.5 小结 117
    8.6 参考文献 117
    第9章 创建对象 118
    9.1 组合关系 119
    9.2 协调地创建 119
    9.3 组合的类型 121
    9.3.1 聚合 121
    9.3.2 关联 122
    9.3.3 同时使用聚合和关联 123
    9.4 避免依赖性 123
    9.5 基数(Cardinality) 124
    9.5.1 多个对象的关联 126
    9.5.2 可选的关联 127
    9.6 同时使用这些关系:一个例子 127
    9.7 小结 128
    9.8 参考文献 128
    第10章 使用UML创建对象模型 129
    10.1 什么是UML 129
    10.2 类图的结构 130
    10.3 属性和方法 131
    10.3.1 属性 131
    10.3.2 方法 131
    10.4 访问标号 132
    10.5 继承 132
    10.6 接口 134
    10.7 组合 134
    10.7.1 聚合 134
    10.7.2 关联 135
    10.8 基数 137
    10.9 小结 138
    10.10 参考文献 138
    第11章 持久对象:串行化和关系数据库 139
    11.1 持久对象的基础 139
    11.2 把对象保存到“扁平”文件中 140
    11.2.1 串行化某个文件 141
    11.2.2 回顾实现和接口 142
    11.3 写入关系数据库中 143
    11.4 加载驱动程序 146
    11.4.1 建立连接 147
    11.4.2 SQL语句 147
    11.5 小结 150
    11.6 参考文献 150
    第12章 对象和XML:可移植的数据 151
    12.1 可移植代码 151
    12.2 可扩展标记语言(XML) 152
    12.3 XML与HTML 153
    12.4 XML和面向对象语言 153
    12.5 在两个公司之间共享数据 154
    12.6 用文档类型定义检验文档 155
    12.7 把DTD集成到XML文档中 156
    12.8 使用层叠式样式表 161
    12.9 小结 163
    12.10 参考文献 163
    第13章 对象和Internet 164
    13.1 基于对象的脚本编写语言 164
    13.2 一个JavaScript验证的例子 166
    13.3 Java Applets是对象 170
    13.4 JavaBeans是对象 172
    13.5 小结 174
    13.6 参考文献 174
    第14章 分布式对象和企业 175
    14.1 公共对象请求代理体系结构(CORBA) 176
    14.2 Java的远程方法调用(RMI) 179
    14.3 Java的Enterprise JavaBeans 180
    14.4 企业JavaBeans的类型 182
    14.4.1 会话beans 183
    14.4.2 实体beans 183
    14.5 小结 184
    14.6 参考文献 184
    第15章 设计模式 185
    15.1 为什么需要设计模式 185
    15.2 Smalltalk的模型/视图/控制器 186
    15.3 设计模式的类型 188
    15.3.1 创建模式 188
    15.3.2 结构模式 191
    15.3.3 行为模式 194
    15.4 反模式 195
    15.5 小结 196
    15.6 参考文献 196





最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册