第一章 软件设计概论
第五章 类与对象
第四章 函数
第三章 结构化程序设计
第二章 C++基础知识
第十章 异常处理
第九章 输入 /输出流类库
第八章 继承与多态
第七章 动态内存分配
第六章 指针与数组
第十一章 标准模板类库 (STL)
附 录
目 录
第一章 软件设计概述
软件设计 是一个将 人类思维 物化为 计算机思维 的
过程,通过这个过程计算机获得一定程度的独立
加工甚至思维的能力,从而将人类思维推向更高
层次。关于软件设计的概念和方法的研究是随着
计算机应用的深入和所处理问题的复杂化而不断
加深的。本章将就软件设计的相关 概念 和程序设
计方法的 演化发展 作一简要介绍。
1.1 软件和软件工程
1.2 程序设计方法 1.4 一个简单的 C++程序
1.3 C语言和面向对象的 C++
第一章 软件设计概述
1.1 软件和软件工程
软件工程的提出和软件的定义
软件 是程序、方法、规则、相关文档以及在计算机上运行
所必需的数据的集合。而 软件工程 是开发、运行、维护软件
的系统方法。
软件生命期
软件生命期指从开始研制到废弃不用的整个期间,可划分
为五个阶段,需求分析, 设计, 编程, 测试 和 运行维护 。
软件的质量标准
正确性 健壮性 可维护性
可用性 可重用性 效率等
1.1 软件和软件工程
正确性
软件的正确性指的是软件系统在 正常
条件下 能够正确工作,完成规定功能。
这是软件的首要指标。
例如,要求设计程序,输入一批数据,
计算它们的累加和。在这里,正确性就
是正确能正确计算累加和。
1.1 软件和软件工程
健壮性
软件的健壮性指的是 在意外情况下 ( 如输入数据不合理或
某些硬件故障 ), 软件系统仍能适当地工作, 并对意外情况
进行适当处理, 而不致于导致错误结果甚至系统的瘫痪或死
机 。
例如, 要求设计程序, 根据输入的三边 a,b,c的长度判别
三角形类型 。 现有如下设计思想:若 a,b,c中只有两个量相
等, 则为等腰三角形, 若三个量均相等, 则为等边三角形,
否则为一般三角形 。 如果输入为 ( -2,-2,-2) 时, 程序输
出为:等边三角形 。 这个结果显然是错误的 。 这是由于程序
对不合理数据不能进行适当处理, 我们就说这个程序的健壮
性不好 。
1.1 软件和软件工程
可维护性
软件的维护包括 发现并改正软件的错误,以
及由于软件运行环境发生变化或软件功能扩充
而 对软件进行的改动 。
软件的可维护性指的是软件容易维护的程度。
一般地说,软件的可读性好,容易理解,维护
起来也就比较容易。因此可读性是可维护性的
基础。
1.2 程序设计方法
1.2.1 传统的结构化程序设计
SP(Structured Programming)
1.2.2 面向对象的程序设计
OOP(Object Oriented Programming)
1.2.1 传统的结构化程序设计
传统的程序设计方法可以归结为, 程序 =
算法 +数据结构,,将程序定义为处理数据
的一系列过程。这种设计方法的着眼点是 面
向过程 的,特点是数据与程序分离,即 数据
与数据处理分离 。
结构化程序设计的基本思想是采用 自顶向
下, 逐步细化 的设计方法和 单入单出 的控制
结构。
1.2.1 传统的结构化程序设计
模块 2
2.1 2.2
模块 1
1.21.1 1.3
1.3.1 1.3.2 1.3.3
模块 3
3.1 3.2
3.1.1 3.1.2
程 序
1.2.1 传统的结构化程序设计
举一个简单的例子, 要求读入一组整数, 统计其中
正整数和负整数的个数 。
该任务的模块结构及细化过程如下:
1.读入数据
2.统计正数、负数
的个数 ;
3,输出结果
2.1 如数大于 0,正整数个数加 1
2.2 如数小于 0,负整数个数加 1
2.3,取下一个整数
正整数个数为 0;负整数个数 0
取第一个整数
重复
至统
计完
1.2.1 传统的结构化程序设计
结构化程序设计 为处理复杂问题提供了有力
手段,但到 80年代末,这种设计方法逐渐暴
露出以下 缺陷,
( 1)难以适应大型软件的设计。
( 2)程序可重用性差。
1.2.2 面向对象的程序设计
为什么要引入面向对象的设计
方法
面向对象的设计方法与面向过
程的设计方法有什么关系
1.2.2 面向对象的程序设计
面向过程程序设计缺点的根源在于 数据与数据处理
分离 。
面向对象程序设计模拟自然界认识和处理事物的方
法,将 数据 和 对数据的操作方法 放在一起,形成一个相
对独立的整体 —— 对象( object),同类对象还可抽象
出 共性,形成 类( class ) 。一个类中的数据通常只能
通过本类提供的方法进行处理,这些方法成为该类与外
部的 接口 。对象之间通过 消息( message) 进行通讯。
1.2.2 面向对象的程序设计
1 基 本 概 念
3,面向对象”程序设计的特点
2 面向对象的软件开发方法
1 基 本 概 念
对 象( object)
类( class)
消 息( message)
1 基 本 概 念
属性
行为
表针
旋钮
其他机械机构
调节旋钮
对 象
1 基 本 概 念
是一个抽象的概念,用来描述某一类对象所共
有的、本质的属性和类行为。

类的一个具体实现,称为实例
手表 一块手表
类 对象
描述这类对象共有的、本质的属性和行为
手表共有的属性(表针、旋钮、内部结构)
和行为(调节旋钮)
具体到一只圆形的或方形的手表
1 基 本 概 念
我们把对象之间产生 相互作用 所传递的 信息 称做消息。
消 息
启 动
发送消息 接收并响应消息
转 向
2 面向对象的软件开发方法
面向对象软件开发的根本 合理性 在于它符
合客观世界的组成方式和大脑的思维方式 。
在大型程序开发过程中, 编码只是其中很
小一部分, 应当采用工程化的方法, 并将面
向对象的思想贯穿于软件开发全过程, 这就
是 面向对象的软件工程 。
面相对象的软件工程同样遵循 分层抽象,
逐步细化 的原则 。 软件开发过程包括以下五
个阶段:
2 面向对象的软件开发方法
测试的任务在于发现并改正程序中的错误。
面向对象的分析 (OOA)
面向对象的设计 (OOD)
面向对象的编程 (OOP)
面向对象的测试 (OOT)
分析阶段的主要任务是按照面向对象的概念和方法,从问题中 识
别 出有意义的 对象,以及对象的 属性, 行为 和对象间的 通信,进而
抽象 出类结构,最终将它们描述出来,形成一个 需求模型 。
设计阶段从需求模型出发,分别进行类的设计和应用程序的设计。
编程阶段实现由设计表示到面向对象程序设计语言描述的转换。
面向对象的维护 (OOSM)
3,面向对象”程序设计的特点
(1)封装性
(2) 继承与派生性
(3) 多态性
3,面向对象”程序设计的特点
封装性
内 外













对象是一个 封装体,在其中封装了该
对象的属性和操作。通过限制对属性和操
作的访问权限,可以将属性“隐藏”在对
象内部,对外提供一定的 接口,在对象之
外只能通过接口对对象进行操作。
C++通过建立数据类型 ——类 来支持封
装和数据隐藏。封装性增加了 对象的独
立性,从而保证了 数据的可靠性 。一个
定义完好的类可以作为 独立模块 使用。
汽车
客车 货车
小轿车 大客车
载货载人
小,速度快 大,速度慢
3,面向对象”程序设计的特点
继承与派生
以汽车为例看客观世界描述事物的方式:
当定义了一个类后,又需定义
一个新类,这个新类与原来的类
相比,只是增加或修改了部分属
性和操作,这时可以用原来的类
派生 出新类,新类中只需描述自
己所特有的属性和操作。
面向对象程序设计提供了类似的机制:
继承性大大简化了对问题的描述,大大提高了程序的可重
用性,从而提高了程序设计、修改、扩充的效率。
新类称为 子类 或 派生类,原来的类称为 基类 。派生可以一直
进行下去,形成一个派生树。
3,面向对象”程序设计的特点
语文、数学、英语、政治、
物理、化学、生物
多态性
多态性指,同一个 消息 被 不同对象 接收时,
产生 不同结果,即实现 同一接口,不同方法 。
高中生计 算
平均成绩
大学生 高数、英语、计算机、线
性代数
3,面向对象”程序设计的特点
继承 和 多态 性组合,可以生成很多相
似但又独一无二的对象。 继承 性使得这
些对象可以共享许多相似特性,而 多态
又使同一个操作对不同对象产生不同表
现形式。这样不仅提高了程序设计的灵
活性,而且减轻了分别设计的负担。
1.3 C语言与面向对象的 C++
C 语 言 是 七 十 年 代 初 贝 尔 实 验 室 的 Dennis
Richie 等人在 B语言基础上开发出来的 。 C最初是作
为 UNIX操作系统的开发语言为人们所认识 。 七十年
代末, 随着微型计算机的发展, C语言开始移植到非
UNIX环境中, 并逐步脱离 UNIX系统成为一种独立的
程序设计语言 。 C 语言版本很多, 为了让开发出来
的代码能够在多种平台上运行, 1988年美国国家标
准协会 ANSI对 C语言进行了标准化, 产生了 ANSI C。
1.3 C语言与面向对象的 C++
( 1) C语言既具备高级语言的结构和编程环境, 又提供类似于汇
编语言那样的系统资源操纵能力及程序执行效率 。 适合解决有实时要
求的问题 。
C语言的主要特点:
( 2) 有丰富的运算符和数据类型, 表达式类型多样化, 可以方
便地实现在其他语言中较难实现的运算, 对各种不同类型的程序设
计都有良好的适应性 。
( 3) 以函数为基础实现程序的结构化设计, 支持大型程序的多
文件构成及单个文件独立编译, 适合大型复杂程序的设计 。
( 4) 语言简洁, 紧凑, 使用方便, 灵活, 书写形式自由 。
( 5) 可移植性好 。
1.3 C语言与面向对象的 C++
C++是由 C发展成为的以面向对象为主要特征的语
言 。 作为 C语言的超集, C++继承了 C的所有优点, 又
对数据类型做了扩充, 使得编译系统可以检查出更多
类型错误 。
C++支持 面向对象程序设计,通过类和对象的概念
把数据和对数据的操作封装在一起,通过派生、继承、
重载和多态性等特征实现了软件重用和程序自动生成,
使得大型复杂软件的构造和维护变得更加有效和容易。
此外,在 一致性( Consistency)检查机制 方面也
作了加强,提高了软件开发的效率和质量。
1.3 C语言与面向对象的 C++
C++与 C完全兼容, 很多用 C编写的库函数和应用
程序都可以为 C++所用 。
但正是由于与 C兼容, 使得 C++不是纯正的面向对
象的语言, 它既支持面向对象程序设计, 也支持面向
过程设计 。 但我们应当注意用面向对象的思想进行设
计, 以发挥出 C++的优势 。
C++有许多版本, 国内较为流行的有 Microsoft公
司的 Visual C++。
1.4 一个简单的 C++程序
# include <iostream.h>
max(int i,int j) { //A
if(i>=j) return i;
else return j;
}
void main(void){ //B
int i,j; //说明变量
cout<<“输入 i,j”; //显示提示信息
cin>>i>>j; //从键盘上输入变量值
cout<<“最大值是:” <<max(i,j)
<<endl; //输出提示和结果
}
【 例 1,8】 一个简单的 C++程序。
程序组成:
注释
编译预处理指令
程序体
由若干函数组成,
其中有且仅有一个主函
数 main(),这是程
序的执行入口。在
Windows 编程中定义
为 winmain() 。
下面进入 VC++ 运行