第 5章 程序设计语言
? 本章主要了解计算机语言的发展历程,熟
悉各种语言的特点,特别关注面向对象程
序设计、组件技术等主流发展方向,为
下一步学习语言打下良好基础。
本章内容
? 5.1 程序设计概念
? 5.2 程序设计语言的发展
? 5.3 程序设计语言中的一些术
? 5.4 结构化程序设计方法
? 5.5 面向对象程序设计
? 5.6 流行语言介绍
? 5.7 程序设计语言的发展趋势
5.1程序设计概念
? 程序设计是软件开发过程中的一个重
要环节, 关系到软件总体质量, 一个
好的软件可从其可靠性, 可读性, 可
测性和可维护性等多方面进行考核 。
这部分内容在软件工程中会有详细介
绍 。 计算机科学技术专业的学生将来
大部分要从事程序设计工作, 因此必
须掌握程序设计的基本要领, 才能成
为一个优秀的设计人员 。
? 什么是程序?
所谓程序通常是指一组计算机能够识别的指令,
这组指令用来定义计算机所要执行的任何一个
任务。不管使用哪一种语言编写,最终在计算
机内部都是通过二进制的形式保存和处理。
? 所谓程序设计是指使用计算机语言产生一系列的
指令告诉计算机如何去做的过程。这里涉及到采
用何种语言、何种设计风格、何种算法、程序的
逻辑结构等等一些问题。一般来讲,程序设计包
括:程序说明 → 设计程序 → 编写程序代码 → 程序
测试 → 编写程序文档 → 运行和维护。在此要明确
一点,不能将程序设计单纯理解为代码的编写过
程。
5.2 程序设计语言的发展
? 程序设计语言的发展从面向过程,到面
向对象,现在又进一步发展成为面向组
件,经历了非常曲折的发展过程。
划分 如下,
第一代语言( 1GL),
汇编 语言
高级 语言
非过程性 语言
自然 语言
机器 语言
第二代语言( 2GL),
第三代语言( 3GL),
第四代语言( 4GL),
第五代语言( 5GL),
5.2.2 组件技术
? 目前关于组件( component)尚无确切的
定义,软件组件可理解为自包含的、可编
程的、可重用的、与语言无关的代码片段,
可以作为整体很容易地插入到应用程序中。
? 组件具有明确的接口,软件就是通过这些接口
调用组件所能提供的服务,多种组件可以联合
起来构成更大型的组件乃至直接建立整个系统。
在组件设计中,必须包括需求、源代码和可执
行代码、接口规范、分析和设计模型、测试和
其他同类术语。组件的实现必须支持一种或者
多种用户所希望获得的接口。
? 组件技术的基本思想是创建和利用可重复使
用的软件组件来解决软件的开发问题。与面
向对象语言不同,组件技术是一种更高层次
的对象技术,它独立于语言和面向应用程序,
只规定组件的外在形式,不关心其内部实现
方法;它既可用面向对象编程语言实现,也
可用非面向对象的过程语言实现。
? 基于组件的方法使整个应用程序的复杂性降
低。
5.3程序设计语言中的一些术语
? 在程序设计语言发展的历程中,出现
过上百种编程语言,它们分别用于不
同的目的。因此,有必要了解和掌握
一些相关术语。
1 汇编语言
? 在计算机发展的早期,人们最初使用机器
指令来编写程序。然而,由于以二进制表
示的机器指令编写的程序很难阅读和理解,
于是,在机器指令的基础上,人们提出了
采用字符和十进制数来代替二进制代码的
思想,产生了将机器指令符号化的汇编语
言。
? 汇编语言语句与特定的机器指令有一一
对应的关系,但是它毕竟不同于由二进
制组成的机器指令,它还需要经汇编程
序翻译为机器指令后才能运行,汇编语
言源程序经汇编程序翻译成机器指令,
再在实际的机器中执行 。
2 过程性语言
? 带有过程性特征的语言称为过程性语言。
用过程性语言编写的程序包含一系列的
描述,告诉计算机如何执行这些过程来
完成特定的工作。程序通常有一个起点
和终点,执行的流程呈直线型,至上而
下顺序执行。比如 Pascal,C语言。
主程序
指令 1
指令 2
指令 3
指令 n
结束
指令 n1 指令 n2
…
子程序或过程
3 说明性语言
? 说明性语言只需程序员具体说明问题的
规则并定义一些条件即可。语言自身内
置了方法把这些规则解释为相应解决问
题的步骤。把编程的重心转移到描述问
题和规则上。说明性语言只需要告诉计
算机做什么,而不需要告诉计算机怎么
做。比如 Prolog语言,它更适合于逻辑
性强、数学概念复杂的编程工作。
4 脚本语言
? 脚本语言( Script Language)是一种简
单的描述性语言,它的出现较好地解决
了 Web页的动态交互问题。它通过一个
<SCRIPT>标记或 % 嵌入到 HTML页中。
脚本语言分为客户端和服务端两个不同
的版本,客户端实现改变 Web页外观的
功能,服务器端完成输入验证、表单处
理、数据库查询等功能。
? 脚本需要一个主机应用系统依附来运行,不能
单机运行。例如用 HTML标签为显示网页编写一
个脚本,则脚本由网络浏览器解释,这里的网
络浏览器就是主机应用系统,没有它 HTML脚本
就不能运行。
<html>
<head>
<title>Welcome</title>
</head>
<body>
<p align="center">欢迎走进计算机世界 </p>
<%
Dim computerdate,cihdate
computerdate=Date
cihdate=DateValue ("April 25")
If computerdate=cihdate Then
Response.write"<center>"&"小心 CIH病毒发作 !"
End If
Response.write"<center>"&"当前日期为,"&Now
%>
</body>
</html>
实现
HTML界面
? 高级语言提供给程序员的指令更类似于人类
语言,比如打印命令:我们通常写作
,Print” 。但计算机不能直接识别高级语言
程序,执行前需要进行编译,翻译成计算机
能够执行的指令。前面提到的过程性语言、
说明性语言以及面向对象语言都属于高级语
言。
5 高级语言
? 这是因为有的高级语言执行前需要特定的编
译器把它翻译成低级指令。我们通常把用高
级语言写的程序称为源代码,编译后的程序
称为目标代码。当你的程序在编译时出错,
必须修改源代码并重新编译,直到通过测试
才可以运行。
6 编译性语言
? 对有一些高级语言,需要用解释器而不是用编
译器来生成可执行代码。运行一个解释性语言
编写的程序时,语言解释器读一条指令然后把
它转化成可执行的机器语言指令,执行完一条
指令后解释器再读入下一条指令并解释成机器
语言,如此继续。因此,解释性语言编写的程
序执行速度慢,尤其是循环语句多的情况效率
更低。但优点是不用编译,在调用程序上花费
的时间要少一些。早期初学者熟知的 Basic语
言属于解释语言。
7 解释性语言
? 面向对象的程序设计语言是建立在用对象编程
的方法基础之上的。同一对象可以使用在不同
的程序中,例如许多应用软件都给用户提供了
Open,Save,Print等操作,使你在编程时可
以直接调用这些对象,避免重复开发,从而提
高开发效率。
8 面向对象程序设计语言( OOPL)
? 面向对象的程序设计通常把注意力集中在对象
上,把对象看作程序的基本单元。通过对具体
对象的属性、方法等进行设置来完成某些操作。
例如,我们要在 VB中设置一个窗体,窗体就
是对象,我们可以对它的大小、位置、颜色等
进行设置。
5.4 结构化程序设计方法
? 传统的“结构化程序设计( Structured
Programming),方法是由荷兰学者 Dijkstra
在 70年代提出的,它把面向机器代码的程序
抽象为三种基本程序结构:顺序结构、选择
结构和重复结构(或称循环结构)。
a 顺序结构 b 选择结构 c 循环结构
功能 A
功能 B 功能 A 功能 B
功能 A P
P
F
F T
T
? 顺序结构也就是顺序执行结构,它是最基本、
最常用的结构。所谓顺序执行,就是按照程序
语句行的自然顺序,一条语句接一条语句地执
行程序。
? 选择结构包括简单选择和多分支选择结构,这
种结构可以根据设定的条件,控制语句流程,
有选择地执行不同的语句序列,大部分采用
if-then-else的形式。
? 循环结构是用于某些程序中,常常需要重复使
用某一段相同的或类似的程序段,利用循环结
构可简化大量的程序行。
例 2:求 100个整数中的最大数
解,从数组 a中顺序读出一个数与当前值比较,
如果比当前值大则和当前值替换,否则继续下
一个数,直到结束。
max(int a[100])
{ int c,int i;
c=a[0];
for(i=1;i<100;i++) /*循环结构 */
if (a[i]>c) c=a[i]; /*选择结构 */
return c;
} /*C语言程序 */
例 2演示
例 3:求 1到 n之间的素数。
解:要求 1到 n之间的素数,程序要做的事就
是从 1开始依次找,判断是否是素数,是则打
印出来,否则继续往下找,直到 n为止。则由
算法描述语言描述的算法如下,
begin
read(n);
number:=2;
while number< n do
/*循环结构 */
begin
if number是一个素数 then
write(number); /* 选择结构 */
number,= number+1;
end
end
例 3演示
? 在结构化程序设计过程中,恰当地选用
设计原则非常重要。所谓自顶向下、逐
步求精的设计原则是指:先设计第一层
(即:顶层 ),然后步步深入,逐层细分,
逐步求精,直到整个问题可用程序设计
语言明确地描述出来为止。
? 流程图的画法代表了这种自顶向下的程
序设计理念。首先对问题进行仔细分析,
确定其输入、输出数据,写出程序运行
的主要过程和任务; 然后从大的功能方
面把一个问题的解决过程分成几个问题,
每个子问题形成一个模块。
? 所谓模块化的设计原则是把一个较大的
程序划分为若干子程序,每一个子程序
是一个独立模块;每一个模块又可继续
划分为更小的子模块;程序具有一种层
次结构。
销售部工资单总控模块
打印工资单表头模块 计算销售员的业绩工资
打印销售员姓名
,工号和基本工
资
计算销售员
业绩工资
打印销售员
业绩工资
? 按照这样的规范构成的模块是高度功能性的,
有很强的内聚力。但各模块的数据处于实现功
能的从属地位,因此,各模块与数据间的相关
性较差,无论把数据分放在各个模块里还是作
为全局量放在主模块中,模块之间都有很大的
耦合力。在 Windows程序中,多个模块是并发
执行的,这样,这种耦合力就会极易导致程序
系统出现混乱。
? 现行程序设计方法的弱点是各种软件系统中关
键结构的影响范围很大。许多重要的函数或过
程的实现主要地取决于关键的数据结构。如果
一个或多个这样的数据结构了发生了变化,这
种变化将涉及到许多方面,许多函数和过程必
须重写。有时几个关键的数据结构发生变化,
将导致整个软件系统的结构崩溃。
5.5 面向对象的程序设计方法
? 使用面向对象的程序设计方法并没有摒弃现有
的结构化程序设计方法,相反,它是在充分吸
收结构化程序设计优点的基础上,引进了一些
新的、强有力的概念,从而开创了程序设计工
作的新天地。
? 面向对象程序设计基于两个原则:抽象和分类。
? 抽象与具体相对应,我们说人类是抽象的,它代
表了所有人的共有属性,包括性别、身高、体重、
文化程度等等。但对于某一个具体的人,我们可
以确切地知道他的身高、体重等等,它是具体事
物的描述的一个概括。
? 分类是对类进行划分,使概念逐渐细化、具体
化。如果我们把汽车划为一个类,小汽车是它
的一个子类,小轿车又是小汽车的一个子类,
而桑塔纳同样是小轿车的一个子类。在面向对
象的计算机世界里,我们把一辆具体的桑塔纳
小轿车称为类( class)桑塔纳的一个实例
(instance)或者说是对象( object)。
? 结构化程序设计方法和面向对象程序设
计方法都提供了抽象,但在结构化程序
设计方法中没有分类的概念。因为结构
化程序设计强调的是过程的功能划分,
即使一个功能与另一个已存在的功能实
现类似,也不能为我所用。
5.5.1 对象
? 对象是指应用问题中所出现的各种实体,它由
一组属性值和在这组值上的一组操作构成。对
于面向对象的程序设计而言,一个对象具有状
态 (state)、行为 (behavior)和标识 (identity)。
? 对象的状态包括它的属性和这些属性的当前值。
? 对象的行为包括可以进行的操作以及所伴随的
状态的变化。
? 对象的标识用来区别于其它的对象。
5.5.2 类
? 对象在语言中是用类来定义的,类中定义了
与某一种对象相关联的一组数据以及该数据
中的一组基本操作,对象是数据与方法的统
一体。类描述一类事物,描述这些事物所应
具有的属性。对象是类的一个实例,可以被
创建和销毁,但类是无所不在的。
在 C++中,类可以如下表示,
class Saveings
{
public,
…
private,
…
};
? 在传统设计方法中,划分模块的原则是功能,
而面向对象的划分方法是按对象进行的。由于
对象是实际事物的抽象模型,因此整个软件的
系统结构必然清晰易懂。同时,对象提供抽象
的数据类型、信息隐藏技术、规格描述与现实
分离的技术,这些都是软件可靠性的保证之一。
对象包括,
?, 封装性, (encapsulation)
?,继承性, (inheritance)
? 和, 多态性, (polymorphism)
5.5.3 封装性
? 在程序设计中,对象的实现过程作为私
有部分被封装在类结构里,使用者不能
看到,只能根据对象提供的外部接口来
访问这些数据。即当用户去使用某一个
对象时,只关心要对该对象执行哪些操
作,而不用关心其内部细节 。
5.5.4 继承性
? 从已定义的类中导出新类时,新类将自
动包括原有类的全部数据和方法。即建
立新对象时可以定义它继承另一对象的
全部属性。继承是一个传递过程,从而
构成了类的层次体系。继承可以是多层
的和多重的,即对象可以从多代祖先那
里继承,也可以从多个父辈那里继承。
? 继承在面向对象的程序设计中非常重要,
是面向对象方法中的特色,它可以实现
合理地将各个对象的属性和方法分配到
所有的类中,减少在数据存储中程序代
码的重复。在传统的面向过程的程序设
计方法中是不具备的。
5.5.5 多态性
? 程序在运行时,能依据其类型确认调用哪
个函数的能力,称为多态性,或称迟后联
编 (late binding)。而在编译时就能确定哪
个重载函数被调用,称为先期联编 (early
binding)。
5.6 当前流行语言介绍
? 现在比较流行的编程工具有 Visual
Basic,VisualC++,Delphi,Power
Build,Java等等。下面做一简单的介绍。
? BASIC:该语言与我们日常使用的语言比较相
似,语法简单、随意,例如简单变量不需要预
先定义等等。 Visual Basic保持了 BASIC一贯
拥有的简单、容易学习的风格,加上微软提供
了功能强大、使用方便的图形设计界面,并可
通过动态数据交换( DDE)、动态链接( DLL)
技术,使 VB应用程序可以调用 Windows操作系
统资源,从而使得 VB可实现超越 BASIC语言自
身的功能。
1 BASIC
? C#,C/C++具有很大灵活性,但这是以开
发效率为代价的。一般来说,相同的功能,
C/C++开发周期要比其它的语言长。人们一
直在寻找一种可以在功能和开发效率之间达
到更好平衡的语言。好的替代语言应该能对
现存和潜在平台上的开发提供更高效率,可
以方便地与现存应用结合,并且在必要时可
以使用底层代码。
2 C#
? Delphi:它是 Inprise(原 Borland)出品的开发
工具。 Delphi的强大生命力来自 Pascal,它是
以 Object Pascal为设计语言的开发工具。它为
用户提供了一个快速开发 32位 Windows程序的
集成开发环境,强大丰富的可视化组件库
( VCL)方便了程序员的开发。在 Delphi中可
以直接调用 Windows API,以满足用户的特殊
需求。
3 Delphi
? Java:它是 1995年推出的一种新型面向对
象的 Internet编程语言,它具有简单、动
态、可移植、与平台无关和高性能等优
点。 Java一推出就在业界引起轰动,迅速
成为 Internet/ Intranet应用开发的主要语言。
Java是一种纯面向对象语言,它的语法与
C++很相似,因此很容易被 C++程序员接
受。
4 Java
? PowerBuilder:是著名的数据库应用开发
工具生产厂商 PowerSoft公司(现已被
Sybase收购)推出的产品。 PowerBuilder
不同于其它的程序开发工具,它完全按
照客户 /服务器体系结构,为开发信息管
理系统而研制设计的开发工具。
5 PowerBuilder
? 提到 ASP.NET,就不得不首先搞清楚什么是
ASP。 ASP的全称是 Active Server Pages,即活
动服务器页面,为什么称之为活动服务器页
面,这是因为以前的互联网全部是由静态的
HTML页面组成,如果需要更新你的网站内容,
你不得不制作大量的 HTML页面。
6 Active Server Pages
? 但是由于 ASP程序和网页的 HTML混合在一起,
这就使得程序看上去相当的杂乱。在现在的网
站设计过程中,通常是由程序开发人员做后台
的程序开发,前面有专业的美工设计页面,这
样,在相互配合的过程中就会产生各种各样的
问题。同时,ASP页面是有脚本语言解释执行
的,使得其速度受到影响。受到脚本语言自身
条件的限制,我们在编写 ASP程序的时候不得
不调用 COM组件来完成一些功能。由于以上种
种限制,微软推出了 ASP.NET。
5.7 程序设计语言的发展趋势,
1 易用性
这一直是计算机编程语言的主要发展趋势,
从机器语言 ——符号语言 ——高级语言这个
发展过程就可以明显看出这个趋势。
2 高效与安全性
在 IT业的发展过程中,社会对软件的需求增长
得更快。这就要求软件开发具有一定的时效性,
从而导致对高效程序语言的需求,这可以从几
个方面来加以促进,例如可以消除传统开发语
言容易出错的地方,保证语言开发的应用安全
性。
3 可移植性
Internet的精神是自由、开放和共享,然而全
世界的计算机各种各样,传统高级语言只能做
到代码级可移植,不同的程序到不同的计算机
或操作系统平台上还需要重新编译,这远远不
能满足现在的需要。, 一次编译,处处执行,,
一直是人们的目标,Java语言从某方面上实现
了这种功能。
4 网络化
随着 Internet的发展,越来越多的网络编程语
言得到重视,比如说目前比较流行的 Perl语言,
就是作网站的首选语言之一。
? 本章主要了解计算机语言的发展历程,熟
悉各种语言的特点,特别关注面向对象程
序设计、组件技术等主流发展方向,为
下一步学习语言打下良好基础。
本章内容
? 5.1 程序设计概念
? 5.2 程序设计语言的发展
? 5.3 程序设计语言中的一些术
? 5.4 结构化程序设计方法
? 5.5 面向对象程序设计
? 5.6 流行语言介绍
? 5.7 程序设计语言的发展趋势
5.1程序设计概念
? 程序设计是软件开发过程中的一个重
要环节, 关系到软件总体质量, 一个
好的软件可从其可靠性, 可读性, 可
测性和可维护性等多方面进行考核 。
这部分内容在软件工程中会有详细介
绍 。 计算机科学技术专业的学生将来
大部分要从事程序设计工作, 因此必
须掌握程序设计的基本要领, 才能成
为一个优秀的设计人员 。
? 什么是程序?
所谓程序通常是指一组计算机能够识别的指令,
这组指令用来定义计算机所要执行的任何一个
任务。不管使用哪一种语言编写,最终在计算
机内部都是通过二进制的形式保存和处理。
? 所谓程序设计是指使用计算机语言产生一系列的
指令告诉计算机如何去做的过程。这里涉及到采
用何种语言、何种设计风格、何种算法、程序的
逻辑结构等等一些问题。一般来讲,程序设计包
括:程序说明 → 设计程序 → 编写程序代码 → 程序
测试 → 编写程序文档 → 运行和维护。在此要明确
一点,不能将程序设计单纯理解为代码的编写过
程。
5.2 程序设计语言的发展
? 程序设计语言的发展从面向过程,到面
向对象,现在又进一步发展成为面向组
件,经历了非常曲折的发展过程。
划分 如下,
第一代语言( 1GL),
汇编 语言
高级 语言
非过程性 语言
自然 语言
机器 语言
第二代语言( 2GL),
第三代语言( 3GL),
第四代语言( 4GL),
第五代语言( 5GL),
5.2.2 组件技术
? 目前关于组件( component)尚无确切的
定义,软件组件可理解为自包含的、可编
程的、可重用的、与语言无关的代码片段,
可以作为整体很容易地插入到应用程序中。
? 组件具有明确的接口,软件就是通过这些接口
调用组件所能提供的服务,多种组件可以联合
起来构成更大型的组件乃至直接建立整个系统。
在组件设计中,必须包括需求、源代码和可执
行代码、接口规范、分析和设计模型、测试和
其他同类术语。组件的实现必须支持一种或者
多种用户所希望获得的接口。
? 组件技术的基本思想是创建和利用可重复使
用的软件组件来解决软件的开发问题。与面
向对象语言不同,组件技术是一种更高层次
的对象技术,它独立于语言和面向应用程序,
只规定组件的外在形式,不关心其内部实现
方法;它既可用面向对象编程语言实现,也
可用非面向对象的过程语言实现。
? 基于组件的方法使整个应用程序的复杂性降
低。
5.3程序设计语言中的一些术语
? 在程序设计语言发展的历程中,出现
过上百种编程语言,它们分别用于不
同的目的。因此,有必要了解和掌握
一些相关术语。
1 汇编语言
? 在计算机发展的早期,人们最初使用机器
指令来编写程序。然而,由于以二进制表
示的机器指令编写的程序很难阅读和理解,
于是,在机器指令的基础上,人们提出了
采用字符和十进制数来代替二进制代码的
思想,产生了将机器指令符号化的汇编语
言。
? 汇编语言语句与特定的机器指令有一一
对应的关系,但是它毕竟不同于由二进
制组成的机器指令,它还需要经汇编程
序翻译为机器指令后才能运行,汇编语
言源程序经汇编程序翻译成机器指令,
再在实际的机器中执行 。
2 过程性语言
? 带有过程性特征的语言称为过程性语言。
用过程性语言编写的程序包含一系列的
描述,告诉计算机如何执行这些过程来
完成特定的工作。程序通常有一个起点
和终点,执行的流程呈直线型,至上而
下顺序执行。比如 Pascal,C语言。
主程序
指令 1
指令 2
指令 3
指令 n
结束
指令 n1 指令 n2
…
子程序或过程
3 说明性语言
? 说明性语言只需程序员具体说明问题的
规则并定义一些条件即可。语言自身内
置了方法把这些规则解释为相应解决问
题的步骤。把编程的重心转移到描述问
题和规则上。说明性语言只需要告诉计
算机做什么,而不需要告诉计算机怎么
做。比如 Prolog语言,它更适合于逻辑
性强、数学概念复杂的编程工作。
4 脚本语言
? 脚本语言( Script Language)是一种简
单的描述性语言,它的出现较好地解决
了 Web页的动态交互问题。它通过一个
<SCRIPT>标记或 % 嵌入到 HTML页中。
脚本语言分为客户端和服务端两个不同
的版本,客户端实现改变 Web页外观的
功能,服务器端完成输入验证、表单处
理、数据库查询等功能。
? 脚本需要一个主机应用系统依附来运行,不能
单机运行。例如用 HTML标签为显示网页编写一
个脚本,则脚本由网络浏览器解释,这里的网
络浏览器就是主机应用系统,没有它 HTML脚本
就不能运行。
<html>
<head>
<title>Welcome</title>
</head>
<body>
<p align="center">欢迎走进计算机世界 </p>
<%
Dim computerdate,cihdate
computerdate=Date
cihdate=DateValue ("April 25")
If computerdate=cihdate Then
Response.write"<center>"&"小心 CIH病毒发作 !"
End If
Response.write"<center>"&"当前日期为,"&Now
%>
</body>
</html>
实现
HTML界面
? 高级语言提供给程序员的指令更类似于人类
语言,比如打印命令:我们通常写作
,Print” 。但计算机不能直接识别高级语言
程序,执行前需要进行编译,翻译成计算机
能够执行的指令。前面提到的过程性语言、
说明性语言以及面向对象语言都属于高级语
言。
5 高级语言
? 这是因为有的高级语言执行前需要特定的编
译器把它翻译成低级指令。我们通常把用高
级语言写的程序称为源代码,编译后的程序
称为目标代码。当你的程序在编译时出错,
必须修改源代码并重新编译,直到通过测试
才可以运行。
6 编译性语言
? 对有一些高级语言,需要用解释器而不是用编
译器来生成可执行代码。运行一个解释性语言
编写的程序时,语言解释器读一条指令然后把
它转化成可执行的机器语言指令,执行完一条
指令后解释器再读入下一条指令并解释成机器
语言,如此继续。因此,解释性语言编写的程
序执行速度慢,尤其是循环语句多的情况效率
更低。但优点是不用编译,在调用程序上花费
的时间要少一些。早期初学者熟知的 Basic语
言属于解释语言。
7 解释性语言
? 面向对象的程序设计语言是建立在用对象编程
的方法基础之上的。同一对象可以使用在不同
的程序中,例如许多应用软件都给用户提供了
Open,Save,Print等操作,使你在编程时可
以直接调用这些对象,避免重复开发,从而提
高开发效率。
8 面向对象程序设计语言( OOPL)
? 面向对象的程序设计通常把注意力集中在对象
上,把对象看作程序的基本单元。通过对具体
对象的属性、方法等进行设置来完成某些操作。
例如,我们要在 VB中设置一个窗体,窗体就
是对象,我们可以对它的大小、位置、颜色等
进行设置。
5.4 结构化程序设计方法
? 传统的“结构化程序设计( Structured
Programming),方法是由荷兰学者 Dijkstra
在 70年代提出的,它把面向机器代码的程序
抽象为三种基本程序结构:顺序结构、选择
结构和重复结构(或称循环结构)。
a 顺序结构 b 选择结构 c 循环结构
功能 A
功能 B 功能 A 功能 B
功能 A P
P
F
F T
T
? 顺序结构也就是顺序执行结构,它是最基本、
最常用的结构。所谓顺序执行,就是按照程序
语句行的自然顺序,一条语句接一条语句地执
行程序。
? 选择结构包括简单选择和多分支选择结构,这
种结构可以根据设定的条件,控制语句流程,
有选择地执行不同的语句序列,大部分采用
if-then-else的形式。
? 循环结构是用于某些程序中,常常需要重复使
用某一段相同的或类似的程序段,利用循环结
构可简化大量的程序行。
例 2:求 100个整数中的最大数
解,从数组 a中顺序读出一个数与当前值比较,
如果比当前值大则和当前值替换,否则继续下
一个数,直到结束。
max(int a[100])
{ int c,int i;
c=a[0];
for(i=1;i<100;i++) /*循环结构 */
if (a[i]>c) c=a[i]; /*选择结构 */
return c;
} /*C语言程序 */
例 2演示
例 3:求 1到 n之间的素数。
解:要求 1到 n之间的素数,程序要做的事就
是从 1开始依次找,判断是否是素数,是则打
印出来,否则继续往下找,直到 n为止。则由
算法描述语言描述的算法如下,
begin
read(n);
number:=2;
while number< n do
/*循环结构 */
begin
if number是一个素数 then
write(number); /* 选择结构 */
number,= number+1;
end
end
例 3演示
? 在结构化程序设计过程中,恰当地选用
设计原则非常重要。所谓自顶向下、逐
步求精的设计原则是指:先设计第一层
(即:顶层 ),然后步步深入,逐层细分,
逐步求精,直到整个问题可用程序设计
语言明确地描述出来为止。
? 流程图的画法代表了这种自顶向下的程
序设计理念。首先对问题进行仔细分析,
确定其输入、输出数据,写出程序运行
的主要过程和任务; 然后从大的功能方
面把一个问题的解决过程分成几个问题,
每个子问题形成一个模块。
? 所谓模块化的设计原则是把一个较大的
程序划分为若干子程序,每一个子程序
是一个独立模块;每一个模块又可继续
划分为更小的子模块;程序具有一种层
次结构。
销售部工资单总控模块
打印工资单表头模块 计算销售员的业绩工资
打印销售员姓名
,工号和基本工
资
计算销售员
业绩工资
打印销售员
业绩工资
? 按照这样的规范构成的模块是高度功能性的,
有很强的内聚力。但各模块的数据处于实现功
能的从属地位,因此,各模块与数据间的相关
性较差,无论把数据分放在各个模块里还是作
为全局量放在主模块中,模块之间都有很大的
耦合力。在 Windows程序中,多个模块是并发
执行的,这样,这种耦合力就会极易导致程序
系统出现混乱。
? 现行程序设计方法的弱点是各种软件系统中关
键结构的影响范围很大。许多重要的函数或过
程的实现主要地取决于关键的数据结构。如果
一个或多个这样的数据结构了发生了变化,这
种变化将涉及到许多方面,许多函数和过程必
须重写。有时几个关键的数据结构发生变化,
将导致整个软件系统的结构崩溃。
5.5 面向对象的程序设计方法
? 使用面向对象的程序设计方法并没有摒弃现有
的结构化程序设计方法,相反,它是在充分吸
收结构化程序设计优点的基础上,引进了一些
新的、强有力的概念,从而开创了程序设计工
作的新天地。
? 面向对象程序设计基于两个原则:抽象和分类。
? 抽象与具体相对应,我们说人类是抽象的,它代
表了所有人的共有属性,包括性别、身高、体重、
文化程度等等。但对于某一个具体的人,我们可
以确切地知道他的身高、体重等等,它是具体事
物的描述的一个概括。
? 分类是对类进行划分,使概念逐渐细化、具体
化。如果我们把汽车划为一个类,小汽车是它
的一个子类,小轿车又是小汽车的一个子类,
而桑塔纳同样是小轿车的一个子类。在面向对
象的计算机世界里,我们把一辆具体的桑塔纳
小轿车称为类( class)桑塔纳的一个实例
(instance)或者说是对象( object)。
? 结构化程序设计方法和面向对象程序设
计方法都提供了抽象,但在结构化程序
设计方法中没有分类的概念。因为结构
化程序设计强调的是过程的功能划分,
即使一个功能与另一个已存在的功能实
现类似,也不能为我所用。
5.5.1 对象
? 对象是指应用问题中所出现的各种实体,它由
一组属性值和在这组值上的一组操作构成。对
于面向对象的程序设计而言,一个对象具有状
态 (state)、行为 (behavior)和标识 (identity)。
? 对象的状态包括它的属性和这些属性的当前值。
? 对象的行为包括可以进行的操作以及所伴随的
状态的变化。
? 对象的标识用来区别于其它的对象。
5.5.2 类
? 对象在语言中是用类来定义的,类中定义了
与某一种对象相关联的一组数据以及该数据
中的一组基本操作,对象是数据与方法的统
一体。类描述一类事物,描述这些事物所应
具有的属性。对象是类的一个实例,可以被
创建和销毁,但类是无所不在的。
在 C++中,类可以如下表示,
class Saveings
{
public,
…
private,
…
};
? 在传统设计方法中,划分模块的原则是功能,
而面向对象的划分方法是按对象进行的。由于
对象是实际事物的抽象模型,因此整个软件的
系统结构必然清晰易懂。同时,对象提供抽象
的数据类型、信息隐藏技术、规格描述与现实
分离的技术,这些都是软件可靠性的保证之一。
对象包括,
?, 封装性, (encapsulation)
?,继承性, (inheritance)
? 和, 多态性, (polymorphism)
5.5.3 封装性
? 在程序设计中,对象的实现过程作为私
有部分被封装在类结构里,使用者不能
看到,只能根据对象提供的外部接口来
访问这些数据。即当用户去使用某一个
对象时,只关心要对该对象执行哪些操
作,而不用关心其内部细节 。
5.5.4 继承性
? 从已定义的类中导出新类时,新类将自
动包括原有类的全部数据和方法。即建
立新对象时可以定义它继承另一对象的
全部属性。继承是一个传递过程,从而
构成了类的层次体系。继承可以是多层
的和多重的,即对象可以从多代祖先那
里继承,也可以从多个父辈那里继承。
? 继承在面向对象的程序设计中非常重要,
是面向对象方法中的特色,它可以实现
合理地将各个对象的属性和方法分配到
所有的类中,减少在数据存储中程序代
码的重复。在传统的面向过程的程序设
计方法中是不具备的。
5.5.5 多态性
? 程序在运行时,能依据其类型确认调用哪
个函数的能力,称为多态性,或称迟后联
编 (late binding)。而在编译时就能确定哪
个重载函数被调用,称为先期联编 (early
binding)。
5.6 当前流行语言介绍
? 现在比较流行的编程工具有 Visual
Basic,VisualC++,Delphi,Power
Build,Java等等。下面做一简单的介绍。
? BASIC:该语言与我们日常使用的语言比较相
似,语法简单、随意,例如简单变量不需要预
先定义等等。 Visual Basic保持了 BASIC一贯
拥有的简单、容易学习的风格,加上微软提供
了功能强大、使用方便的图形设计界面,并可
通过动态数据交换( DDE)、动态链接( DLL)
技术,使 VB应用程序可以调用 Windows操作系
统资源,从而使得 VB可实现超越 BASIC语言自
身的功能。
1 BASIC
? C#,C/C++具有很大灵活性,但这是以开
发效率为代价的。一般来说,相同的功能,
C/C++开发周期要比其它的语言长。人们一
直在寻找一种可以在功能和开发效率之间达
到更好平衡的语言。好的替代语言应该能对
现存和潜在平台上的开发提供更高效率,可
以方便地与现存应用结合,并且在必要时可
以使用底层代码。
2 C#
? Delphi:它是 Inprise(原 Borland)出品的开发
工具。 Delphi的强大生命力来自 Pascal,它是
以 Object Pascal为设计语言的开发工具。它为
用户提供了一个快速开发 32位 Windows程序的
集成开发环境,强大丰富的可视化组件库
( VCL)方便了程序员的开发。在 Delphi中可
以直接调用 Windows API,以满足用户的特殊
需求。
3 Delphi
? Java:它是 1995年推出的一种新型面向对
象的 Internet编程语言,它具有简单、动
态、可移植、与平台无关和高性能等优
点。 Java一推出就在业界引起轰动,迅速
成为 Internet/ Intranet应用开发的主要语言。
Java是一种纯面向对象语言,它的语法与
C++很相似,因此很容易被 C++程序员接
受。
4 Java
? PowerBuilder:是著名的数据库应用开发
工具生产厂商 PowerSoft公司(现已被
Sybase收购)推出的产品。 PowerBuilder
不同于其它的程序开发工具,它完全按
照客户 /服务器体系结构,为开发信息管
理系统而研制设计的开发工具。
5 PowerBuilder
? 提到 ASP.NET,就不得不首先搞清楚什么是
ASP。 ASP的全称是 Active Server Pages,即活
动服务器页面,为什么称之为活动服务器页
面,这是因为以前的互联网全部是由静态的
HTML页面组成,如果需要更新你的网站内容,
你不得不制作大量的 HTML页面。
6 Active Server Pages
? 但是由于 ASP程序和网页的 HTML混合在一起,
这就使得程序看上去相当的杂乱。在现在的网
站设计过程中,通常是由程序开发人员做后台
的程序开发,前面有专业的美工设计页面,这
样,在相互配合的过程中就会产生各种各样的
问题。同时,ASP页面是有脚本语言解释执行
的,使得其速度受到影响。受到脚本语言自身
条件的限制,我们在编写 ASP程序的时候不得
不调用 COM组件来完成一些功能。由于以上种
种限制,微软推出了 ASP.NET。
5.7 程序设计语言的发展趋势,
1 易用性
这一直是计算机编程语言的主要发展趋势,
从机器语言 ——符号语言 ——高级语言这个
发展过程就可以明显看出这个趋势。
2 高效与安全性
在 IT业的发展过程中,社会对软件的需求增长
得更快。这就要求软件开发具有一定的时效性,
从而导致对高效程序语言的需求,这可以从几
个方面来加以促进,例如可以消除传统开发语
言容易出错的地方,保证语言开发的应用安全
性。
3 可移植性
Internet的精神是自由、开放和共享,然而全
世界的计算机各种各样,传统高级语言只能做
到代码级可移植,不同的程序到不同的计算机
或操作系统平台上还需要重新编译,这远远不
能满足现在的需要。, 一次编译,处处执行,,
一直是人们的目标,Java语言从某方面上实现
了这种功能。
4 网络化
随着 Internet的发展,越来越多的网络编程语
言得到重视,比如说目前比较流行的 Perl语言,
就是作网站的首选语言之一。