上一页 下一页
第一章 程序设计概述
1.1 程序设计发展概述
1.2 结构化程序设计概述
1.3 面向对象程序设计概述
退 出
习题一
上一页 下一页
1.1 程序设计发展概述
1.1.1 计算机程序设计语言
1.1.2 程序设计的发展历程
上一页 下一页
计算机之所以能自动进行计算, 是因为采用了程序存储
的原理, 计算机的工作体现为 执行程序 。 程序 是控制计算机
完成特定功能的一组有序指令的集合, 编写程序所使用的语
言称为程序设计语言, 它是人与计算机之间进行信息交流的
工具 。
从 1946年世界上诞生第一台计算机起, 在短短的 50余年
间, 计算机技术迅速发展, 程序设计语言经历了机器语言,
汇编语言到高级语言的多个阶段 。 目前世界上已经设计和实
现的计算机语言有上千种之多, 但实际被人们广泛使用的计
算机语言不过数十种 。
1.1.1 计算机程序设计语言
上一页 下一页
计算机语言按其与硬件接近的程度, 可以划分为 低级
语言 和 高级语言 两大类 。
( 1) 低级语言,机器语言和汇编语言, 它们分别被称
为第一代语言和第二代语言 。
( 2) 高级语言,包括过程式语言和非过程式语言, 称
为第三代语言 。
计算机程序
设计语言
低级语言
高级语言
机器语言
汇编语言
过程式语言
非过程式语言
上一页 下一页
1.1.2 程序设计的发展历程
结构化程序设计:
算法 +数据结构 =程序设计
程序设计的发展
50年代
60年代
70年代
80年代
指令代码或汇编语言
高级语言,fortran,pascal,basica
面向对象程序:对象 +消息
上一页 下一页
回顾程序设计发展的历史, 大体上可以划分为如下几
个不同的时期 。
50年代的程序 都是用 指令代码或汇编语言 来编写的, 程
序的编制和调试必须是专门的人员来完成, 影响了计算机
的普及应用 。
60年代 高级语言 的出现大大简化了程序设计,缩短了解
题周期,因此显示出强大的生命力。编制程序已不再是软
件专业人员才能做的事了,一般工程技术人员花上较短的
时间学习,也可以使用计算机解题。
随着计算机的应用日益广泛,出现了多种程序设计语言
。其中较为著名的有 FORTRAN,COBOL,ALGOL,LISP
,PL/1,PASCAL等十几种语言。高级语言的蓬勃兴起,使
得编译和形式语言理论相应日趋完善,这是该时期的主要
特征。但就整个程序设计方法而言,并无实质性的改进。
上一页 下一页
自 60年代末到 70年代初, 出现了大型软件系统, 如操
作系统, 数据库, 这给程序设计带来了新的问题 。 大型系
统的研制需要花费大量的资金和人力, 可是研制出来的产
品却是可靠性差, 错误多, 且不易维护和修改 。 一个大型
操作系统有时需要几千人 /年的工作量, 而所获得的系统又
常常会隐藏着几百甚至几千个错误 。 当时, 人们称这种现
象为, 软件危机, 。
为了解决上述问题,1969年,提出了 结构化程序设计
的概念,强调从 程序结构和风格 上来研究程序设计。该方
法的应用确实取得了成效,编写出来的程序不仅结构良好
,易写易读,而且易于证明其正确性。
70年代末 又提出了, 算法 +数据结构 = 程序设计, 的
程序设计方法, 将软件划分成若干个可单独命名和编址的
部分, 称为模块, 模块化 使软件能够有效地被管理和维护
,能够有效的分解和处理复杂问题 。 在 80年代, 模块化程
序设计方法普遍被人们接受 。
上一页 下一页
由于软件开发是对问题的求解过程, 它 包括人们对要解
决问题及相关事物的认识和基于认识所进行的描述 。 而结构
化设计方法不能直接反映出人类认识问题的过程, 并且程序
模块和数据结构是松散地耦合在一起的 。 因此, 当应用程序
比较复杂时, 容易出错, 难以维护 。 随着计算机软件的发展,
软件系统越来越复杂庞大, 结构化程序设计方法已显得力不
从心 。
80年代, 人们提出了 面向对象的程序设计 方法 。 面向对
象的方法不再将问题分解为过程, 而是将问题分解为对象 。
对象将自己的属性和方法封装成一个整体, 供程序设计者使
用 。 对象之间的相互作用则通过消息传递来实现 。 用面向对
象的程序设计方法, 可以使人们对复杂系统的认识过程与系
统的程序设计与实现过程尽可能地一致 。 有人预测, 这种
,对象 +消息, 的面向对象的程序设计模式将逐渐取代, 数
据结构 +算法, 的面向过程的程序设计模式 。
上一页 下一页
1.2 结构化程序设计概述
1.2.1 结构化程序设计概念
1.2.2 结构化程序设计方法
上一页 下一页
自提出结构化程序设计的概念后,经过十几年的发
展,结构化程序设计已经具有了很广泛的内容,大体上
可以归纳为以下几点:
1.2.1 结构化程序设计概念
1,结构化程序的基本结构
2,结构化程序的设计方法
3,结构化程序的组织结构
上一页 下一页
结构化程序包含有三种基本结构, 这三种基本结构为 顺
序结构, 选择结构和循环结构 。
A
B
a
b
图 1.1 顺序结构示意图
1,结构化程序的基本结构
⑴ 顺序结构
顺序结构是一种最简单、最基本的结构
,在顺序结构内,各块是按照它们出现的先
后顺序依次执行。图 1.1表示了一个顺序结构
形式,从图中可以看出它有一个入口 a点,
一个出口 b点,在结构内 A框和 B框都是顺序
执行的处理框。
⑵ 选择结构
选择结构中包含一个判断框,根据给定的条件 p是否成立
而选择执行 A框或 B框,当条件成立时,执行 A,否则执行 B
。 A框或 B框可以是空框,即不执行任何操作,但判断框中的
两个分支,执行完 A或 B后都必须汇合在一起,从出口 b 退出
,然后接着执行其后的过程。
上一页 下一页
图 1.2所示的虚线部分就是选择结构, 在选择结构中程序产生
了分支, 但对于整个的虚线框而言, 它仍然只具有一个入口
a和一个出口 b。
条件 P
A B
a
b
Y N
图 1.2 选择结构流程图
上一页 下一页
⑶ 循环结构
循环结构又称重复结构, 是指在一定条件下反复执
行一个程序块的结构 。 循环结构也是只有一个入口, 一
个出口 。 根据循环条件的不同, 循环结构分为当型循环
结构和直到型循环结构两种 。
① 当型循环的结构
如图 1.3,其功能是:当给定的
条件 p成立时, 执行 A框操作,
执行完 A操作后, 再判断 p条件
是否成立, 如果成立, 再次执
行 A操作, 如此重复执行 A操作,
直到判断 p条件不成立才停止循
环 。 此时不执行 A操作, 而从出
口 b脱离循环结构 。
A
条件 P
a
b
Y
N
图 1.3 当型循环结构流程图
上一页 下一页
图 1.4 直到型循环结构流程图
a
b
N
Y
条件 P
A
② 直到型循环的结构
如图 1.4,其功能是, 先执
行 A框操作, 然后判断给定条
件 p是否成立, 如果不成立, 再
次执行 A操作;然后再对 p进行
判断, 如此反复, 直到给定的 p
条件成立为止 。 此时不再执行
A框, 从出口 b脱离循环 。
上一页 下一页
由以上三种基本结构构成的程序, 称为结构化程序 。
一个结构化程序, 以及三种基本结构中的每一种结构都应
具有以下特点:
? 有一个入口
? 一个出口
? 没有死语句, 即每一个语句都应该有一条从入口到出口
的路径通过它 ( 至少通过一次 ) 。
? 没有死循环 ( 无限制的循环 ) 。
实践证明,任何满足以上四个条件的程序,都可以表
示为由以上三种基本结构所构成的结构化程序;反之,任
何一个结构化程序都可以分解为一个个基本结构。
上一页 下一页
结构化程序主要采用自上而下, 逐步细化的设计方法, 即先
全局后局部, 先整体后细节, 先抽象后具体的设计方法 。
2,结构化程序的设计方法
3,结构化程序的组织结构
在结构化
程序中常常用
模块化结构来
组织程序, 图
1.5 给出了用
模块化结构组
织程序的示意
图 。 模块 A1(小功
能)
模块 A2
(小功
能)
模块 A(较小功能) 模块 C
C1 C2 C3 C4
模块 B
B1 B2
主模块(主功能)
图 1.5程序模块化分图
上一页 下一页
1.2.2 结构化程序设计方法
该节内容自学
上一页 下一页
将一个完整的问题分解 成 若干相对独立的问题, 只要这
些问题能分别得到正确的解决, 整个问题也就解决了 。 子问
题又可进一步分解为若干子问题, 这样可以一直重复下去,
直到每个问题都已简单到我们满意的程度 。 对每步分解, 都
要作出分解方法的决策, 不同的决策会导致不同的解法 。 把
这种程序设计方法称之为逐步细化法, 也就是在编写程序时
一步一步地不断细化的过程 。
细化过程可以 自顶开始向下进行, 也可以从 底端开始向
上进行 。 根据经验, 程序自顶向下设计, 再不断细化这种处
理方法效果较好 。 细化过程的技术有三种, 分别称为, 划分
和解决, 的 分割技术,, 作出有限进展, 的 递推技术 和, 分
析情况, 的 分析技术 。
1.逐步细化法
上一页 下一页
⑴ 分割技术
分割技术大致可以分为以下几个步骤:
第一步:把问题划分成不相交的一些部分, 直到可用复合语
句为止 。
第二步:依次解决划分后的每一部分问题 。
⑵ 递推技术
对问题作出有限进展, 直到用循环语句实现 。 如果我们对
问题找到一个解的方向, 并作出了有限进展, 这时再重复递推
,直到最终达到完全解 。 这是我们在程序设计时常用的方法 。
⑶ 分析技术
对问题用情况分析来精细化, 直到可用条件语句为止 。
上一页 下一页
模块化设计技术与方法,是程序设计中应用最早的一
种重要方法,它早在使用低级语言时期就已出现,但是,
只有在结构化程序设计中,这种技术与方法才得以发展、
充实、提高与完善。
2.模块法
模块化程序设计方法是只在程序设计中,将一个
复杂的算法(或程序)分解成 若干个相对独立、功能
单一的模块,利用这些模块即可适当地组合成所需的
全局算法(或程序)。
上一页 下一页
这里所说的模块, 是一个可供调用 ( 即让其它模块
调去使用 ) 的相对独立的操作块 ( 或程序段 ), 每个
模块都是由三种基本结构组成的结构化模块 。 在模块
化结构中, 整个系统犹如搭积木一样, 是由各模块适
当组合而成 。 模块之间的相对独立性, 使每个模块均
可各自独立地分别进行分析, 设计, 编写, 调试, 修
改和扩充, 并且不会影响到其它模块和全局算法 ( 或
程序 ), 这表明模块化结构不仅使复杂的软件研制工
作得以简化, 缩短开发周期, 节省开发费用, 提高软
件质量, 而且还可以有效地防止模块间错误的扩张,
增加整个系统的稳定性与可靠性 。 同时还可使软件具
备结构灵活, 便于组装, 层次分明利于维护, 条理清
晰容易理解的优点 。 因此, 模块化程序设计方法使结
构化程序设计的重要方法之一, 主要用于算法设计阶
段 。
上一页 下一页
1.3 面向对象程序设计概述
1.3.1 面向对象的程序设计概念
1.3.2 面向对象的程序设计语言
1.3.3 两种程序设计方法的比较
上一页 下一页
结构化程序设计技术虽已使用了几十年,但有些问题仍未
得到很好的解决。比如,不能自然准确的反映真实世界,开发
出的软件很难保证质量;程序模块和数据结构松散地耦合在一
起,容易出错,难以维护等。
由于上述缺陷,一种全新的软件开发技术应运而生,这就
是 面向对象的程序设计 ( Object Oriented Programming,简称
OOP) 。
1.3.1 面向对象的程序设计概念
面向对象的程序设计用面向对象的方法来解决问题, 不
再将问题分解为过程, 而是将 问题分解为对象 。 世界是由许
多对象组成的 。 对象有自己的数据 ( 属性 ), 也包括作用于
数据的操作 ( 方法 ) 。 对象将自己的属性和方法封装成一个
整体, 供程序设计者使用 。 对象之间的相互作用通过消息传
递来实现 。 下面介绍面向对象的程序设计中经常用到的一些
术语:
上一页 下一页
① 对象,属性和服务的封装体 。
对象的属性用于描述对象的静态数据特征, 对象
的属性 可用系统的或用户自定义的数据类型来表示
,也可用抽象的数据类型表示 。 对象属性值的集合称
为对象的状态 ( state) 。
对象的服务用于描述对象的动态特征, 也称之为
行为或功能, 它是定义在对象属性基础上的一组操作
方法 ( method) 的集合 。
② 类,对象的抽象及定义, 是具有共同属性和操
作的多个对象的相似特征的统一描述 。 类就成为 具有
共同特征的对象的集合, 而对象只是类的一个实例 。
③ 消息,是面向对象系统中实现对象间的通讯和
请求任务的操作 。 消息传递是程序运行的基本处理活
动 。
上一页 下一页
1.3.2 面向对象的程序设计语言的发展
60年代
80年代
Simula67语言,具有类和对象的概念
Smalltalk语言,丰富了面向对象的概念,有配
套的工具环境,
C++语言 高效使用的混合型编程语言,它以 c语言为核心,
扩充了支持面向对象的编程技术。该语言既支持
面向对象的程序设计,又支持结构化程序设计的
方法
可视化编程语言 把面向对象的程序设计方法和可视化技术结
合在一起。有 Visual asic和 visual C++
上一页 下一页
随着面向对象的程序设计的普及, 面向对象的程序设计
语言已形成几大类别:
? 第一类:纯面向对象的语言, 如 Smalltalk和 Eiffel。
? 第二类:混合型的面向对象语言,如 C++和 Objective C。
? 第三类:与人工智能语言结合形成的,如 LOOPS、
? Flavors和 CLOS。
? 第四类:适合网络应用的有 JAVA语言等。
随着基于图形界面操作系统 Windows的流行,面向对象
的程序设计方法也开始与 可视化技术 相结合,其典型代表是
Visual C++和 Visual Basic。这些面向对象的程序设计语言虽
然风格各异,但都具有共同的概念和编程模式。
上一页 下一页
上一页 下一页
⑴ 符合人们的习惯的思维方法
由于对象对应用于现实世界的实体, 因而可以很自然地按照现
实世界中处理实体的方法来处理对象, 软件开发者可以很方便地
与问题提出者进行沟通和交流 。
⑵ 易于软件的维护和功能的增减
对象的封装性及对象之间的松散耦合性, 都给软件的修改和维
护带来了方便 。
⑶ 可重用性好, 易于扩充
重复使用一个类(类是对象的定义,对象是类的实例化),可
以比较方便地构造软件系统,加上其具有的独特的继承性和更丰
富的多态性,极大地提高了软件开发的效率。并使软件更易于扩
充,能很好地适应复杂大系统不断发展与变化的要求。
以对象为中心的面向对象的程序设计方法较之以过程为中心的结
构化程序设计方法更为优越。具体表现在如下几个方面:
1.3.3面向对象的程序设计的特点
上一页 下一页
⑷ 与可视化技术相结合, 改善了工作界面
随着基于图形界面操作系统的流行, 面向对象的程序设计方法
也将深入人心 。 它与可视化技术相结合, 已经使人机界面进入
GUI时代 。
⑸ 支持复杂大系统的分析与运行
由于采用了消息传递机制作为对象之间相互通信的唯一方式,
这样就使消息传递的机制能很自然地与分布式并行程序, 多机
系统, 网络通讯等模型取得一致, 从而强有力地支持复杂大系
统的分析与运行 。
作业题:
第 7页 1.1,1.2,1.3, 1.4