《面向对象的分析与设计》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(美)Andrew Haigh著;贾爱霞等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2003
  • ISBN:7111113799
  • 页数:335 页
图书介绍:面向对象是目前最通用的软件设计和编程方法。本书是用基于面向对象的概念讨论软件设计的方法,帮助读都理解什么是面向对象的分析以及如何利用UML v1.4进行设计。此外,本书还为那些已经在从事应用程序开发的程序员提供许多有价值的信息,纠正他们一些不正确的观念,提高设计水平。 本书讨论的设计方法不仅造用于C++和Windows平台,也适用于Java和UNIX平台。

第一部分 什么是面向对象 1

第1章 面向对象简介 1

1.1 结构化技术和面向对象技术的比较 3

1.2 什么是面向对象 4

1.2.1 面向对象技术是如何与用户关联的 5

1.2.2 面向对象技术的其他优势 5

1.2.3 面向对象技术的一些弱势 7

1.3 什么是对象 7

1.3.1 识别对象 8

1.3.2 属性 12

1.3.3 方法 13

1.3.4 对象状态 14

1.3.5 类 14

1.4 面向对象基础 15

1.5 继承 17

1.6 重定义 21

1.7 文档 21

1.7.1 类的描述 21

1.7.2 图的使用 22

1.7.3 继承 23

1.7.4 编码规范 23

1.8 小结 24

第二部分 分析 25

第2章 分析 25

2.1 预分析 26

2.2 当一个对象不成为对象时 27

2.1.1 公共汽车站问题域的实例 28

2.2.2 桌子问题域的实例 29

2.3 使用用例分析 31

2.3.1 用例图 31

2.2.3 问题域小结 31

2.3.2 一个简单用例的例子 32

2.3.3 一个用例模板 32

2.3.4 一个用例实例 33

2.3.5 写好用例的七个要点 34

2.4 记录分析 36

2.4.1 分析文档:类的静态特性 36

2.4.2 分析文档:类的动态特性 38

2.4.3 分析文档:系统的静态特性 39

2.4.4 分析文档:系统的动态特性 45

2.5 小结 50

第三部分 设计 51

第3章 设计方案 51

3.1 抽象类 52

3.2.1 API结构出现以前 53

3.2 应用程序编程接口 53

3.2.2 为什么使用API结构 54

3.2.3 从API类中派生 54

3.2.4 使用API类 54

3.2.5 Java原始接口 55

3.3 模板 57

3.3.1 何时使用模板而不使用继承 57

3.3.2 在C++中实现的模板样本 58

3.4 好的设计--原则和度量标准 60

3.4.1 认识设计中“毒瘤”产生的原因 60

3.4.2 面向对象的类的设计原则 61

3.4.3 设计的度量标准 64

3.5 全局对象 71

3.6 确定实现方法 73

3.7 虚方法 74

3.8.1 表层复制构造函数 76

3.8.2 深层复制构造函数 76

3.8 复制构造函数 76

3.9 关联的实现 77

3.9.1 双向关联 77

3.9.2 单向关联 77

3.10 小结 78

第4章 需要避免的设计方案 79

4.1 过程对象 79

4.1.1 过程的变化 81

4.1.2 差异处理 82

4.1.3 增加新的订单类型 82

4.1.4 将控制过程放在对象内部 82

4.2 责任的委托 82

4.2.1 实例1--确定某人的年龄 83

4.2.2 实例2--过滤数据 84

4.3.1 实例1--买一台烤面包炉 85

4.3 方法责任 85

4.3.2 实例2--显示运动队的信息 86

4.3.3 实例3--更新联盟中各运动队列表 87

4.3.4 实例4--对联盟中各运动队排序 88

4.3.5 方法的回顾 89

4.4 C++中的友元结构 90

4.4.1 访问级别 90

4.4.2 友元是如何影响访问级别的 90

4.4.3 使用友元结构 91

4.4.4 对友元结构的评价 92

4.5 多重继承 92

4.5.1 从WorkingStudent派生一个类 94

4.5.2 重新定义被继承的name方法 95

4.5.3 多重继承菱形 96

4.5.4 多重继承的替代方法 98

4.6 继承的不当使用 99

4.7小结 102

第5章 高级设计技术 103

5.1 高级API结构 103

5.1.1 什么是高级API结构 104

5.1.2 如何克服缺点 104

5.2 线程 105

5.2.1 资源同步 106

5.2.2 Java同步的问题 106

5.2.3 资源的死锁 110

5.3 Model/View/Controller机制 113

5.3.1 中心MVC Controller方案 114

5.3.2 线程方案 116

5.3.3 被动反应式方案 118

5.3.4 Java方案 118

5.4 暴露接口方案 125

5.5.1 通过继承实现引用计数 127

5.5 引用计数 127

5.5.2 通过关联实现引用计数 128

5.5.3 多线程应用程序 129

5.6 小结 130

第四部分 编程 132

第6章 测试 132

6.1 测试装备 132

6.2 关于构造方法和析构方法的测试 133

6.3 方法测试 134

6.3.1 if-then-else 135

6.3.2 for循环 135

6.3.3 while循环 136

6.3.4 switch语句 137

6.3.5 try-catch 137

6.3.6 函数调用 138

6.3.7 测试单个方法的例子 138

6.4 类测试 139

6.5 整体测试 147

6.6 图形用户界面测试 153

6.6.1 基本窗口测试 153

6.6.2 使用菜单 156

6.7 强度测试 160

6.8 系统测试 160

6.9 规模测试 163

6.10 回归测试 163

6.11 小结 163

第7章 调试 164

7.1 使用调度工具前的准备 165

7.2 启动调试工具 165

7.2.1 首先启动调试工具 165

7.2.2 将调试工具联上运行中的应用程序 165

7.3 调试工具的子命令 166

7.2.3 使用调试工具和核心文件 166

7.3.1 使应用程序停止 167

7.3.2 运行应用程序 167

7.3.3 检查应用程序 168

7.3.4 检查数据 169

7.3.5 确定逐行控制 170

7.3.6 检查多线程应用程序 170

7.3.7 别名 173

7.4 调试实例 173

7.4.1 实例代码 173

7.4.2 使用调试工具 175

7.5 小结 186

第8章 移植 187

8.1 移植到新的操作系统 187

8.1.1 Microsoft Visual C++中的线程支持 188

8.1.2 UNIX中的线程支持 189

8.1.3 Java中的线程支持 191

8.2 移植到新的硬件平台 192

8.2.1 支持Endianism 192

8.2.2 32位和64位机器的比较 195

8.3 移植到新的语言 195

8.3.1 国际化和本地化 195

8.3.2 应用程序国际化时需要考虑的问题 196

8.3.3 单字节和双字节字符集 199

8.3.4 宽字符串 200

8.3.5 Unicode 200

8.4 将消息中的字符串本地化 201

8.4.1 创建消息目录--UNIX 201

8.4.2 资源文件--Microsoft 205

8.5 开发国际化应用程序 205

8.5.1 策划一个国际化应用程序 205

8.5.5 测试应用程序 206

8.5.4 设计用户界面 206

8.5.2 确定接受哪些数据 206

8.5.3 编写代码 206

8.6 设计用户界面 207

8.6.1 创建应用程序消息文本 207

8.6.2 设计菜单和表单 207

8.6.3 使用图标和位图 207

8.7 建立可被移植的应用程序的目标结构 208

8.8 小结 208

第9章 应用程序生命周期 209

9.1 写出源代码的文档 209

9.1.1 一般的注释 209

9.1.2 C++文件的文档 210

9.1.3 C++头文件的语法 211

9.1.4 Java文件的文档 212

9.1.5 源代码语句的安排 213

9.2 组织项目的目录结构 215

9.3 使用make工具 216

9.3.1 选项 217

9.3.2 操作数 217

9.3.3 读取makefile和环境 218

9.3.4 makefile目标项 218

9.3.5 特殊字符 218

9.3.6 特殊功能目标 219

9.3.7 后缀替换宏引用 219

9.3.8 makefile的例子 222

9.3.9 可移植makefile的例子 222

9.3.10 创建依赖条件 227

9.4 使用源代码管理控制工具 227

9.4.1 源代码管理控制系统 227

9.4.2 SCCS的例子 231

9.5 错误报告 238

9.6 改进需求 238

9.7 修改记录 238

9.8 回归测试 238

9.9 小结 239

第五部分 实例学习 242

第10章 实例学习1--一个模拟的公司 242

10.1 项目需求 242

10.2 用例 242

10.2.1 用例模板的翻版 243

10.2.2 Use Case #1--贷款申请 243

10.2.3 Use Case #2--购置机器设备 245

10.2.4 Use Case #3--生产运营 245

10.2.5 Use Case #4--处理公司的财务 247

10.3 分析文档--类的静态特性 248

10.2.6 Use Case #5--显示公司的详细信息 248

10.3.1 类图 249

10.3.2 CRC卡片 250

10.3.3 脚本 250

10.4 分析文档--类的动态特性 253

10.5 分析文档--系统的静态特性 255

10.5.1 类关系图 255

10.5.2 协作图 258

10.6 分析文档--系统的动态特性 262

10.6.1 活动图 263

10.6.2 序列脚本 267

10.6.3 序列图 272

10.7 小结 274

第11章 实例学习2--开发一个多线程机场管理模拟程序 275

11.1 一次只有一架飞机 275

11.2.1 降落过程 280

11.2 一个停机位入口同时有两架飞机 280

11.2.2 起飞过程 281

11.2.3 修改后的降落/起飞过程 282

11.2.4 修改后的Java代码 283

11.3 一个停机位入口同时有三架飞机 289

11.3.1 降落过程 289

11.3.2 起飞过程 290

11.3.3 修改后的降落过程 291

11.3.4 修改后的Java代码 291

11.4 更多的飞机--再增加一些停机位入口 293

11.5 飞机在机场活动的整个生存周期 295

11.6 最终的解决方案 305

11.6.1 机场细节信息窗口 305

11.6.2 Java代码 306

11.7 小结 306

附录 “哲学家”源代码 307