第1章 软件工程概述 1
1.1软件工程的产生和发展 1
1.1.1软件工程的发展过程 1
1.1.2软件危机 2
1.1.3软件工程研究的内容 3
1.2软件与软件工程过程 4
1.2.1软件的概念和特点 4
1.2.2软件工程过程 6
1.3软件过程模型 6
1.3.1瀑布模型 7
1.3.2增量模型 7
1.3.3螺旋模型 8
1.3.4喷泉模型 9
1.3.5智能模型 9
1.4软件开发方法 10
1.4.1结构化开发方法 10
1.4.2原型化开发方法 11
1.4.3面向对象的软件开发方法 12
1.5软件工具与软件开发环境 13
习题1 14
第2章 软件维护 15
2.1软件维护的基本概念 15
2.1.1软件维护的目的 15
2.1.2软件维护的类型 15
2.1.3软件维护的特性 17
2.1.4软件维护的代价 18
2.2软件维护的过程 19
2.3软件维护技术 21
2.4软件可维护性 22
2.4.1软件可维护性的定义 22
2.4.2提高可维护性的方法 24
2.5逆向工程和再工程 28
习题2 30
第3章 软件工具与集成化环境 31
3.1软件工具 31
3.1.1软件开发工具 31
3.1.2软件维护工具 34
3.1.3软件管理与支持工具 35
3.2集成化CASE环境 36
3.2.1概述 36
3.2.2集成化的CASE开发环境的要求 39
3.2.3集成化的CASE开发环境的体系结构 40
3.3软件开发工具Rational Rose 45
3.3.1 Rose工具简介 45
3.3.2业务用例图 46
3.3.3用例图 47
3.3.4类图 48
3.3.5协作图与时序图 49
3.3.6活动图 50
3.3.7状态图 51
3.3.8构件图和部署图 52
习题3 53
第4章 面向对象方法 54
4.1面向对象方法概述 54
4.1.1什么是面向对象方法 54
4.1.2面向对象方法的主要特点 55
4.2面向对象的基本概念 56
4.2.1对象与类 56
4.2.2继承 57
4.2.3多态性 58
4.2.4消息 58
4.3面向对象的分析 58
4.3.1需求分析中的问题 59
4.3.2 OOA的特点 60
4.3.3 OOA的基本任务与分析过程 60
4.4面向对象的设计 62
4.4.1 OOD的准则 62
4.4.2 OOD的基本任务 63
4.5典型的面向对象方法 64
4.5.1 Booch方法 64
4.5.2 Coad/Yourdon方法 66
4.5.3对象模型技术OMT 69
4.5.4 OOSE方法 75
习题4 76
第5章 统一建模语言(UML) 77
5.1 UML概述 77
5.1.1 UML的形成 77
5.1.2 UML的特点 78
5.1.3 UML建模及其构成 78
5.1.4 UML的图形表示 80
5.1.5通用模型元素 81
5.2建立用例模型 83
5.2.1需求分析与用例建模 84
5.2.2确定执行者 85
5.2.3确定用例 86
5.2.4建立用例之间的关系 88
5.2.5用例建模实例 89
5.3建立静态模型 92
5.3.1类图 92
5.3.2包图 102
5.4建立动态模型 103
5.4.1消息 103
5.4.2状态图 104
5.4.3顺序图 107
5.4.4合作图 109
5.4.5活动图 111
5.5建立实现模型 114
5.5.1构件图 114
5.5.2配置图 115
5.6统一过程及其应用 117
5.6.1 UML与RUP 117
5.6.2 RUP的特点 118
5.6.3 RUP的二维开发模型 119
5.6.4 RUP的迭代开发模式 121
习题5 122
第6章 软件测试 124
6.1软件测试概述 124
6.1.1软件测试的基本概念 124
6.1.2软件测试的特点和基本原则 126
6.1.3软件测试过程 129
6.1.4静态分析与动态测试 131
6.2软件测试的策略 133
6.2.1单元测试 133
6.2.2集成测试 136
6.2.3确认测试 138
6.2.4系统测试 139
6.2.5 α测试和β测试 140
6.2.6综合测试策略 141
6.3软件调试 141
6.3.1软件调试过程 142
6.3.2软件调试策略 142
6.4面向对象的测试 144
6.4.1面向对象测试的特点 145
6.4.2面向对象测试的类型 146
6.4.3分析模型测试 148
6.4.4面向对象的测试用例 153
习题6 154
第7章 面向对象程序设计语言的核心概念 155
7.1面向对象的目标 155
7.2面向对象的核心概念 157
7.2.1数据封装 157
7.2.2继承 158
7.2.3多态性 159
7.3按对象方式思维 161
7.4面向对象的思想和方法 163
7.4.1面向对象是一种认知方法学 163
7.4.2面向对象与软件IC 163
7.4.3面向对象方法与结构化程序设计方法 166
7.4.4对象是抽象数据类型的实现 167
7.5面向对象的程序设计语言 168
第8章 C++语言实现数据封装 173
8.1类的定义 173
8.2类的成员 175
8.2.1数据成员 175
8.2.2成员函数 176
8.2.3静态成员 178
8.2.4类外访问成员的方法 182
8.3 C++语言的类 182
8.4数据封装和信息隐蔽的意义 183
8.5构造函数 184
8.5.1构造函数的作用 184
8.5.2构造函数的定义 185
8.5.3重载构造函数 187
8.6复制构造函数 188
8.7析构函数 193
8.8对象的创建、释放和初始化 195
8.9对象和指针 197
8.9.1 this指针 197
8.9.2指向类对象的指针 200
8.9.3指向类的成员的指针 201
8.10友元关系 204
8.10.1友元函数 204
8.10.2友元类 206
8.10.3友元关系的总结 207
8.11与类和对象相关的问题 208
8.11.1类类型作为参数类型 208
8.11.2一个类的对象作为另一个类的成员 210
8.11.3临时对象 211
习题8 212
第9章 C++语言实现多态性 213
9.1重载运算符 213
9.1.1运算符重载的语法形式 216
9.1.2重载运算符规则 217
9.1.3一元运算符和二元运算符 219
9.1.4重载“++”和“--”的前缀和后缀方式 227
9.1.5重载赋值运算符 232
9.1.6重载运算符“()”和“[]” 235
9.1.7重载输入运算符和输出运算符 240
9.1.8指针悬挂问题 242
9.2 C++语言的类型转换 246
9.2.1标准类型转换为类类型 247
9.2.2类类型转换函数 249
9.3实例——复数类重载运算符 260
习题9 264
第10章 C++语言实现继承性 266
10.1继承和派生 266
10.1.1为什么要使用继承 266
10.1.2派生类的声明和继承方式 272
10.1.3基类对象的初始化 281
10.2多继承 288
10.2.1多继承的概念 288
10.2.2虚基类 291
10.3继承的意义 297
10.3.1模块的观点 298
10.3.2类型的观点 298
10.4虚函数 299
10.4.1静态多态性 300
10.4.2基类和派生类的指针与对象的关系 301
10.4.3虚函数与多态性 303
10.5纯虚函数和抽象类 313
10.6虚函数实例——Figure类 314
10.7类属 321
10.7.1无约束类属机制 321
10.7.2约束类属机制 322
10.8模板的概念 323
10.8.1函数模板与模板函数 323
10.8.2类模板与模板类 326
10.9实例——一维数组 331
10.10堆栈、队列的应用 339
习题10 342
第11章 Java语言基础 344
11.1 Java语言的发展历程 344
11.2 Java语言的特点 346
11.2.1简捷性 346
11.2.2面向对象 346
11.2.3动态性 348
11.2.4安全性 349
11.2.5平台无关性和可移植性 349
11.2.6高性能 349
11.2.7多线程 350
11.2.8分布式 350
11.2.9健壮性 350
11.3 Java语言的开发工具包 351
11.3.1 JDK的下载、安装和设置 351
11.3.2 JDK的简介 352
11.4 Java程序的基本结构 355
11.5 Java程序开发实例 356
11.5.1一个简单的Java Application程序 356
11.5.2一个简单的Java Applet程序 357
11.5.3 Java Applet图形界面的输入/输出 359
11.5.4 Java Application图形界面的输入/输出 361
11.6 Java符号集 363
11.7数据的简单类型 364
11.8常量 364
11.9变量 365
11.10运算符与表达式 366
11.10.1赋值运算与类型转换 366
11.10.2算术运算符 367
11.10.3关系与逻辑运算 369
11.10.4位运算 370
11.10.5其他运算符 371
11.10.6优先级 371
11.11流程控制语句 371
11.11.1分支语句 372
11.11.2循环语句 375
11.11.3跳转语句 378
习题11 379
第12章 Java语言程序设计 380
12.1 Java的类和对象 380
12.1.1系统定义的类 380
12.1.2用户程序自定义类 381
12.1.3创建对象与定义构造函数 383
12.1.4类的修饰符 386
12.2域和方法 386
12.2.1域 386
12.2.2方法 389
12.3访问控制符 392
12.4继承 393
12.4.1派生子类 394
12.4.2域的继承与隐藏 396
12.4.3 null、 this与super 400
12.5多态性 402
12.5.1方法的继承 402
12.5.2覆盖 403
12.5.3重载 403
12.5.4构造函数的继承与重载 406
12.6上转型对象 407
12.7接口 408
12.7.1接口的声明 409
12.7.2接口的实现 410
12.7.3接口的回调 410
12.7.4接口作为参数 411
12.8包 412
12.8.1创建包 413
12.8.2包的引用 413
12.9数组 414
12.9.1数组声明 414
12.9.2数组元素的引用及初始化 415
12.10字符串 417
12.10.1 String类 418
12.10.2 StringBuffer类 421
12.10.3 Java Application命令行参数 423
12.11语言基础类库 423
12.11.1 Object类 423
12.11.2数据类型类 424
12.11.3 Math类 425
12.11.4 System类 425
12.12 Applet类与Applet程序 425
12.12.1 Applet类 425
12.12.2 HTML文件的参数传递 428
12.13异常处理 429
12.13.1 Java语言异常处理的特点 429
12.13.2异常类的层次 433
12.13.3抛出异常 435
12.13.4异常处理 436
12.13.5嵌套的异常处理 437
12.14 Java多线程机制 437
12.14.1基本概念 437
12.14.2多线程实现方法 441
12.15 输入/输出流类 447
12.15.1文件系统 447
12.15.2读/写文件 452
12.15.3抽象流类 458
12.15.4文件输入入/输出流类 459
12.15.5加强输入/输出流类 462
12.15.6其他输入入/输出流类 463
12.15.7 Reader和Writer 470
12.16网络编程 471
12.16.1 InetAddress类 471
12.16.2 Socket类和ServerSocket类 473
12.16.3 DatagramPacket类和DatagramSocket类 478
12.16.4 URL类和URLConnection类 481
12.17图形用户界面的设计与实现 484
12.17.1图形用户界面的构成 484
12.17.2布局管理 485
12.17.3组件和事件处理 491
12.17.4 Java Swing基础 506
习题12 508
参考文献 510