首页>参考读物>计算机科学与技术>软件工程及软件方法学

面向对象的分析与设计
作者 : Andrew Haigh
译者 : 贾爱霞
出版日期 : 2003-01-01
ISBN : 7-111-11379-9
定价 : 38.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 335
开本 : 16开
原书名 : Object-Oriented Analysis & Design
原出版社:
属性分类: 店面
包含CD :
绝版 : 已绝版
图书简介

面向对象是目前最通行的软件设计和编程方法,本书用基于面向对象的概念来讨论软件设计方法。通过阅读本书,读者可以理解面向对象的分析以及利用UML v1.4进行设计。本书还为那些已经在从事应用程序开发的程序员提供一些有价值的信息,纠正了一些不正确的观念,有助于他们提高设计水平。
  本书讨论的设计方法不仅适用于C++和Windows平台,也适用于Java和UNIX平台。
  
  本书的主要内容如下:
  ◆什么是对象以及面向对象的基础知识
  ◆如何收集信息
  ◆UML v1.4支持的基本分析文档类型
  ◆如何度量设计
  ◆应避免的设计结构
  ◆如何使用API
  ◆理解测试涉及到的各个层次
  ◆如何开发面向国际市场的应用程序
  ◆学习make工具的使用
  ◆学习源代码管理控制工具
  ◆通过一个简单的应用程序实例,理解开发多线程应用程序时遇到的问题及其解决方法

图书前言

当我去对一些刚毕业的学生和有一些工作经验的候选人进行面试时,我自然会问一些我很熟悉的问题。因此,我常问Java或C++,那正是我起步的地方,而且对大多数人来说并不难。在确信一位候选人是否懂得这些程序设计语言的语法之后,我就将问题转到了面向对象的分析和设计。这时,情况就很不一样了,尽管他们能写一些面向对象的应用程序,但他们不知道如何去设计一个面向对象的应用程序。在有几次的面试中,候选人甚至都没有理解面向对象的概念。
  打个比方:你教会了一个人如何用锯子将木材锯开,并且教会他怎样用锤子和钉子将这些材料组合在一起,然后要求他们去盖一所房子。从技术上说,在给他们设计好之后,他们能够建成这所房子。然而,他们没有能力设计房子,或者说他们所建成的房子至少不是那种我愿意住进去的房子。他们也没有能力去检查一所已有的房子并解释它为什么要盖成现在的样子。
  同样,大学刚毕业的程序员能够写出一个面向对象的应用程序,但这样的程序很难在任意一种环境下都有良好的表现。我也不会信赖这些程序员,不会拿一个已存在的应用程序去要求他们能理解该程序是如何工作的并能对它做一些改进。
  这些不尽人意之处促使我写了这本书。这是一本与面向对象程序设计相关联的书,它提供基本的概念和分析以及设计技术。另外,本书还为那些已经在从事应用程序开发的程序员提供了一些有价值的信息。本书包含一些测试和调试。
  关于读者
  有许多人试图严格服从做增量开发时所要遵循的规则,但他们却对为什么需要如此长的时间才能写出一个成功的面向对象的应用程序感到疑惑不解,本书就是面向这些读者的。当一个增量被开发并被测试时,总有部分源代码需要被重写,以使应用程序进人设计中的下一个阶段。  
  当应用程序所需要的分析和设计完成之后,类及它们具有的功能就可以被适当地实现。常见的错误是写了一个类以完成当时所要求的任务,又不得不拆分这个类以满足应用程序在增量开发阶段的要求。
  从书中可获得什么
  通过阅读本书,可以理解面向对象的分析以及利用UML v1.4进行设计。
  本书的内容
  本书分为五个部分:
  第一部分:什么是面向对象
  第二部分:分析
  第三部分:设计
  第四部分:编程
  第五部分:实例学习
  全书包含11章和一个附录:
  第1章“面向对象简介”:该章介绍了面向对象,给出了面向对象的描述,定义了面向对象及其属性和方法。该章还包含了一个面向对象的基本原理的描述。
  第2章“分析”:在任何设计中,分析都是一个重要阶段,所以该章涵盖了分析过程的所有方面。分析由收集信息开始,下一步就是确定对象是什么。该章介绍了UML v1.4支持的所有基本分析文档类型,另外还包括一个关于用例分析的讨论。
  第3章“设计方案”:该章的核心概念就是向读者提供在设计应用程序时所用的基本结构。
  第4章“需要避免的设计方案”:该章模拟一个新手,真实地告诉你当设计一个应用程序时应该避免什么。其中也包含一些作者个人的观点,例如,笔者不喜欢多重继承及C什中的友元结构。
  第5章“高级设计技术”:在之前的两章介绍了基本的设计结构和设计应避免的问题之后,这一章论及了高级的设计结构,本书中引进它们是为了以后的应用。
  第6章“测试”:本章介绍了测试的概念。通常的课堂训练是不谈论这个题目的,但我门在这里讨论了它。
  第7章“调试”:除测试以外,程序员也很少被教授在调试一个应用程序以确定哪里出错这个过程中所隐藏的概念。
  第8章“移植”:该章是我最倾心的一个主题,也是每一个程序员应该领会的主题。它包括写出一个支持不同的硬件平台和多种自然语言应用程序。
  第9章“应用程序生命周期”:这一章包括书写源代码文档的标准,创建一个好的项目目录布局,使用make工具构造应用程序以及使用源代码管理工具控制源代码的变化。
  第10章“实例学习1——一个模拟的公司”:这是第一个学习案例,它展示了一个简单的应用程序的开发步骤,体现了每一阶段的开发和测试方式。
  第11章“实例学习2——开发一个多线程机场管理模拟程序”:这是第二个学习案例,它表现了开发多线程应用程序的方式、展示如何处理资源使用不当时产生的冲突以及当线程相互等待时将发生的问题。
  最后,附录部分向读者提供了书中引用的关于“哲学家”(Philosopher)的源代码。

作者简介

Andrew Haigh:暂无简介

译者简介

贾爱霞:暂无简介

译者序

三个月的辛勤工作之后,整本书终于翻译完毕。即将付稿之际,颇有几点感触。
  中国有很多程序员,但是软件设计人员相对较少,设计水平高的更是凤毛麟角。有不少从事软件开发的人没有软件设计的概念,遇到一个课题,上来就写代码。甚至一些软件公司的管理层也犯同样的错误,认为代码没写出来,什么都不算。
  表面上看起来,有了代码,似乎就有了一切。但是一堆没有经过精心考虑的代码,到后来甚至会编不下去;就算完成了,后期的维护代价也会很高,最后还是要重写,这是非常可怕的重复性劳动。
  没有软件设计阶段,软件的文档就不会齐全。目前,软件行业的人员流动非常普遍。如果没有齐全的文档,走一个关键人员就意味着扔掉一个软件,因为后面的人无法全面了解前任的思路。
  有了明确的设计,可以在宏观上把握一个软件。虽然代码还没编出来,但我们可以非常清楚地知道软件的工作量、难点。一个好的设计可以将编码过程变成“蓝领”的劳动。同时,通过设计,我们可以提高宏观控制水平,可以积累有复用价值的模块。
  总之,我们认为:设计是我们从事软件工作的人必须重视的。
  面向对象是目前最流行的软件设计和编程方法。本书是用基于面向对象的概念讨论软件设计的。它适用于有一定面向对象编程或设计经验的读者。如果对面向对象的概念一点都不了解,恐怕阅读起来会比较困难。对于有一定经验的读者,本书有助于纠正一些不正确的观念,提高设计水平。另外,本书讨论的设计方法不仅适用于C++和Windows平台,也适用于Java和Unix系统。这一点很值得赞赏。  
  前五章是本书的主要理论,当然需要认真阅读。第6章中的测试方法是很多关于编程的书中所没有的,其中几种单元测试的方法比较有用。第8章中有关“移植”的内容很值得一读,因为它谈到如何使写出的代码能够方便地移植到另一个平台,这也是高级程序员与初级程序员之间的差别之一。  
  在我们看来,如果本书能对设计的讨论再深入一些就更好了。
  在本书的翻译过程中,得到宋守许老师、朱士兰老师的热情指导,在此,对他们表示真挚的谢意。
  王岚老师、秦豫川老师对本书进行了精心的校对,陈瑞先生、江宏先生完成了本书的画图工作,李森小姐、张玉灵小姐完成了所有代码的录入,张力娟、周枚完成了本书的文字录入,在此一并致谢。
  译 者
  2002年8月

图书目录

第一部分 什么是面向对象
第1章 面向对象简介
1.1 结构化技术和面向对象技术的比较
1.2 什么是面向对象
1.2.1 面向对象技术是如何与用户关联的
1.2.2 面向对象技术的其他优势
1.2.3 面向对象技术的一些弱势
1.3 什么是对象
1.3.1 识别对象
1.3.2 属性
1.3.3 方法
1.3.4 对象状态
1.3.5 类
1.4 面向对象基础
1.5 继承
1.6 重定义
1.7 文档
1.7.1 类的描述
1.7.2 图的使用
1.7.3 继承
1.7.4 编码规范
1.8 小结
第二部分分 析
第2章 分析
2.1 预分析
2.2 当一个对象不成为对象时
2.2.1 公共汽车站问题域的实例
2.2.2 桌子问题域的实例
2.2.3 问题域小结
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.5 小结
第三部分设 计
第3章 设计方案
3.1 抽象类
3.2 应用程序编程接口
3.2.1 API结构出现以前
3.2.2 为什么使用API结构
3.2.3 从API类中派生
3.2.4 使用API类
3.2.5 Java原始接口
3.3 模板
3.3.1 何时使用模板而不使用继承
3.3.2 在C++中实现的模板样本
3.4 好的设计--原则和度量标准
3.4.1 认识设计中"毒瘤"产生的原因
3.4.2 面向对象的类的设计原则
3.4.3 设计的度量标准
3.5 全局对象
3.6 确定实现方法
3.7 虚方法
3.8 复制构造函数
3.8.1 表层复制构造函数
3.8.2 深层复制构造函数
3.9 关联的实现
3.9.1 双向关联
3.9.2 单向关联
3.10 小结
第4章 需要避免的设计方案
4.1 过程对象
4.1.1 过程的变化
4.1.2 差异处理
4.1.3 增加新的订单类型
4.1.4 将控制过程放在对象内部
4.2 责任的委托
4.2.1 实例1--确定某人的年龄
4.2.2 实例2--过滤数据
4.3 方法责任
4.3.1 实例1--买一台烤面包炉
4.3.2 实例2--显示运动队的信息
4.3.3 实例3--更新联盟中各运动队列表
4.3.4 实例4--对联盟中各运动队排序
4.3.5 方法的回顾
4.4 C++中的友元结构
4.4.1 访问级别
4.4.2 友元是如何影响访问级别的
4.4.3 使用友元结构
4.4.4 对友元结构的评价
4.5 多重继承
4.5.1 从WorkingStudent派生一个类
4.5.2 重新定义被继承的name方法
4.5.3 多重继承菱形
4.5.4 多重继承的替代方法
4.6 继承的不当使用
4.7 小结
第5章 高级设计技术
5.1 高级朋结构
5.1.1 什么是高级API结构
5.1.2 如何克服缺点
5.2 线程
5.2.1 资源同步
5.2.2 Java同步的问题
5.2.3 资源的死锁
5.3 Model/View/Controller机制
5.3.1 中心MVC Controller方案
5.3.2 线程方案
5.3.3 被动反应式方案
5.3.4 Java方案
5.4 暴露接口方案
5.5 引用计数
5.5.1 通过继承实现引用计数
5.5.2 通过关联实现引用计数
5.5.3 多线程应用程序
5.6 小结
第四部分 编 程
第6章 测试
6.1 测试装备
6.2 关于构造方法和析构方法的测试
6.3 方法测试
6.3.1 if-then-else
6.3.2 for循环
6.3.3 while循环
6.3.4 switch语句
6.3.5 try-catch
6.3.6 函数调用
6.3.7 测试单个方法的例子
6.4 类测试
6.5 整体测试
6.6 图形用户界面测试
6.6.1 基本窗口测试
6.6.2 使用菜单
6.7 强度测试
6.8 系统测试
6.9 规模测试
6.10 回归测试
6.11 小结
第7章 调试
7.1 使用调试工具前的准备
7.2 启动调试工具
7.2.1 首先启动调试工具
7.2.2 将调试工具联上运行中的应用程序
7.2.3 使用调试工具和核心文件
7.3 调试工具的子命令
7.3.1 使应用程序停止
7.3.2 运行应用程序
7.3.3 检查应用程序
7.3.4 检查数据
7.3.5 确定逐行控制
7.3.6 检查多线程应用程序
7.3.7 别名
7.4 调试实例
7.4.1 实例代码
7.4.2 使用调试工具
7.5 小结
第8章 移植
8.1 移植到新的操作系统
8.1.1 Microsoft Visual C++中的线程支持
8.1.2 UNIX中的线程支持
8.1.3 Java中的线程支持
8.2 移植到新的硬件平台
8.2.1 支持Endianism
8.2.2 32位和64位机器的比较
8.3 移植到新的语言
8.3.1 国际化和本地化
8.3.2 应用程序国际化时需要考虑的问题
8.3.3 单字节和双字节字符集
8.3.4 宽字符串
8.3.5 Unicode
8.4 将消息中的字符串本地化
8.4.1 创建消息目录--UNIX
8.4.2 资源文件--Microsoft
8.5 开发国际化应用程序
8.5.1 策划一个国际化应用程序
8.5.2 确定接受哪些数据
8.5.3 编写代码
8.5.4 设计用户界面
8.5.5 测试应用程序
8.6 设计用户界面
8.6.1 创建应用程序消息文本
8.6.2 设计菜单和表单
8.6.3 使用图标和位图
8.7 建立可被移植的应用程序的目标结构
8.8 小结
第9章 应用程序生命周期
9.1 写出源代码的文档
9.1.1 一般的注释
9.1.2 C++文件的文档
9.1.3 C++头文件的语法
9.1.4 Java文件的文档
9.1.5 源代码语句的安排
9.2 组织项目的目录结构
9.3 使用make工具
9.3.1 选项
9.3.2 操作数
9.3.3 读取makefile和环境
9.3.4 makefile目标项
9.3.5 特殊字符
9.3.6 特殊功能目标
9.3.7 后缀替换宏引用
9.3.8 makefile的例子
9.3.9 可移植makefile的例子
9.3.10 创建依赖条件
9.4 使用源代码管理控制工具
9.4.1 源代码管理控制系统
9.4.2 SCCS的例子
9.5 错误报告
9.6 改进需求
9.7 修改记录
9.8 回归测试
9.9 小结
第五部分 实例学习
第10章 实例学习1--一个模拟的公司
10.1 项目需求
10.2 用例
10.2.1 用例模板的翻版
10.2.2 Use Case #1--贷款申请
10.2.3 Use Case #2--购置机器设备
10.2.4 Use Case #3--生产运营
10.2.5 Use Case #4--处理公司的账务
10.2.6 Use Case #5--显示公司的详细信息
10.3 分析文档--类的静态特性
10.3.1 类图
10.3.2 CRC卡片
10.3.3 脚本
10.4 分析文档--类的动态特性
10.5 分析文档--系统的静态特性
10.5.1 类关系图
10.5.2 协作图
10.6 分析文档--系统的动态特性
10.6.1 活动图
10.6.2 序列脚本
10.6.3 序列图
10.7 小结
第11章 实例学习2--开发一个多线程机场管理模拟程序
11.1 一次只有一架飞机
11.2 一个停机位人口同时有两架飞机
11.2.1 降落过程
11.2.2 起飞过程
11.2.3 修改后的降落/起飞过程
11.2.4 修改后的Java代码
11.3 一个停机位入口同时有三架飞机
11.3.1 降落过程
11.3.2 起飞过程
11.3.3 修改后的降落过程
11.3.4 修改后的Java代码
11.4 更多的飞机--再增加一些停机位人口
11.5 飞机在机场活动的整个生存周期
11.6 最终的解决方案
11.6.1 机场细节信息窗口
11.6.2 Java代码
11.7 小结
附录 "哲学家"源代码

教学资源推荐
作者: (美)Larry L.Constantine,Lucy A.D.Lockwood
作者: [美]Richard O.Duda,Peter E.Hart,David G.Stork
参考读物推荐
作者: [德] 库尔特·比特纳(Kurt Bittner) 帕特丽夏·孔(Patricia Kong)戴夫·韦斯特(Dave West) 著
作者: 张瑾 杜春晖
作者: Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal
作者: Chris Raistrick, Paul Francis, John Wright, Colin Carter, Lan Wilkie