软件工程-齐志昌版_(13)

2014/5/3

国防科技大学计算机学院

1

软件工程 Software Engineering

国防科技大学计算机学院 \r2004.07

齐治昌 教授, 谭庆平 教授, 宁洪 教授, 董威 博士

2014/5/3

国防科技大学计算机学院

2

第十三章 程序设计语言和编码

软件工程编码阶段的任务是将详细设计翻译成计算机可以“理解”并且最终可运行的代码。\r根据基本机制可将程序设计语言分为过程式程序设计语言、函数式程序设计语言、逻辑程序设计语言和面向对象程序设计语言四类。\r编码阶段不应单纯追求编码效率,而应全面考虑编写程序、测试程序、说明程序和修改程序等各项工作。\r影响编码质量的因素包括编程语言、编程准则和编程风格,它们对程序的可靠性、可读性、可测试性和可维护性都将产生深远的影响。

2014/5/3

国防科技大学计算机学院

3

13.1 程序设计语言

编码的过程就是把详细设计翻译成可执行代码的过程,也是人借助编程语言与计算机通信的过程。\r编程语言的种种特性必然影响到翻译和通信过程的质量和效率。\r程序设计语言既要支持软件工程的原理,又要符合程序员的心理。

第十三章 程序设计语言和编码

2014/5/3

国防科技大学计算机学院

4

13.1.1 程序设计语言的特性

特定的程序设计语言有一些特定的限制,它们影响着程序员描述和处理问题。\r设计程序语言应着重考虑程序员易学易用,不易出错。\r因此程序设计语言必须考虑下列特性:\r一致性\r二义性\r紧致性\r局部性\r线性

13.1程序设计语言

2014/5/3

国防科技大学计算机学院

5

程序设计语言的特性

为满足软件工程的需要,程序设计语言还应考虑:\r(1)将设计翻译为代码的便利程度\r(2)编译器的效率\r(3)源代码的可移植性\r(4)配套的开发工具\r(5)可维护性

13.1程序设计语言

2014/5/3

国防科技大学计算机学院

6

13.1.2 程序设计语言的基本机制

软件工程师应该对程序设计语言的基本机制,以及它们对软件质量的影响有一个全面的了解,以便为一个开发项目选择语言或为一个设计选择实现方案时作出合理的技术抉择。\r过程式程序设计语言的基本机制包括:\r(1)对象说明\r 预先说明程序中将要使用的对象(常量和变量)的名字和类型,便于编译程序检查使用方式的合法性,从而帮助程序员发现错误。

13.1程序设计语言

2014/5/3

国防科技大学计算机学院

7

过程式程序设计语言的基本机制(续)

(2)数据类型的定义和检查\r 数据类型定义是一种抽象机制,它刻画一组数据对象和作用在数据对象上的一组操作。\r(3)子程序\r 子程序是可独立编译的程序单元,包含自己的数据结构和控制结构。在不同的语言中,子程序可能分别称作子例程、过程或函数。子程序一般具备如下三种机制:①子程序说明,它给出子程序与其他程序单元的接口;②子程序体,它实现子程序的数据和控制结构;③调用方式。

13.1程序设计语言

2014/5/3

国防科技大学计算机学院

8

过程式程序设计语言的基本机制(续)

(4)控制结构\r 几乎所有现代程序设计语言都允许程序员使用顺序、分枝和循环三类结构化构件,甚至许多语言的结构编辑器直接给出它们对应的语法框架。\r

13.1程序设计语言

2014/5/3

国防科技大学计算机学院

9

程序设计语言的基本机制

函数式程序设计语言一般包括数据对象定义和函数定义两种基本机制。在其颇具代表性的两种语言中,LISP采用λ—表达式的形式定义函数,而ML采用递归方程描述函数。\r逻辑程序设计语言一般为某种符号逻辑系统,其中基于Horn短句的一类语言(例如Prolog)是迄今为止发展得较完善和实用的语言。它采用特定的逻辑语句形式描述问题域本身的知识和信息(程序中称为事实和规则)以及待解问题(程序中称为目标),计算机采用某种推理规则(如归结原理)模仿逻辑推理过程求解问题。\r面向对象程序设计语言最基本的机制包括类、子类、对象和实例的定义,单继承和多继承,对象的部分—整体关系,消息传递和动态链接等等。

13.1程序设计语言

2014/5/3

国防科技大学计算机学院

10

13.1.3 程序设计语言的演变和分类

程序设计语言发展到今天,大致可划分为四代。

13.1程序设计语言

2014/5/3

国防科技大学计算机学院

11

程序设计语言的演变和分类

第一代语言指与机器紧密相关的机器语言和汇编语言,其历史可追溯到第一台电子计算机问世,甚至更早。因其与硬件操作一一对应,基本上有多少种计算机就有多少种汇编语言。\r第二代语言是50年代未60年代初先后出现的,它们应用面广,为人们熟悉和接受,有大量成熟的程序库。它们是现代(第三代)程序设计语言的基础和前身。这代语言包括Fortran、Cobol、Algol 60和Basic等。\r第三代语言(也称为现代或结构化程序语言)的特点是直接支持结构化构件,并具有很强的过程能力和数据结构能力。这代语言本身又可细分为三类:通用高级语言、面向对象的语言和专用语言。

13.1程序设计语言

2014/5/3

国防科技大学计算机学院

12

程序设计语言的演变和分类

第四代语言(4GL)上升到更高的一个抽象层次,尽管它仍象其他人工语言一样用自己的语法形式表示控制和数据结构,但已不再涉及太多的算法性细节。迄今,使用最广的四代语言是数据库查询语言,它支持用户以复杂的方式操作数据库。\r程序生成器(Program Generators)代表更为复杂的一类4GL,它输入由甚高级语言书写的语句,自动产生完整的三代语言程序。\r此外,一些决策支持语言,原型语言,形式化规格说明语言,甚至个人计算机环境中的一些工具也被认为属于4GL的范畴。

13.1程序设计语言

2014/5/3

国防科技大学计算机学院

13

13.1.4 程序设计语言的选择

一般而言,衡量某种程序语言是否适合于特定的项目,应考虑下面一些因素:\r(1)应用领域;\r(2)算法和计算复杂性;\r(3)软件运行环境;\r(4)用户需求中关于性能方面的需要;\r(5)数据结构的复杂性;\r(6)软件开发人员的知识水平;\r(7)可用的编译器与交叉编译器。

13.1程序设计语言

2014/5/3

国防科技大学计算机学院

14

13.2 程序设计过程

程序设计即用某种程序设计语言将详细设计编码为计算机可接受的形式。\r过程式程序设计因过程式语言与大多数过程设计描述有直接的对应关系,所以编码过程相对直观、易掌握。\r函数程序设计简单地讲就是以某种方式描述和定义函数。\r逻辑程序设计被R.Kowalski概括为:在计算机中用逻辑描述信息;用逻辑向计算机提出问题;用逻辑推理解决这些问题。

第十三章 程序设计语言和编码

2014/5/3

国防科技大学计算机学院

15

13.2.1 面向对象语言对OOD的支持

直接支持面向对象方法的语言一般提供抽象数据类型(即类)和继承的机制。\r例13.1:定义抽象数据类型Sensor(传感器)\r例13.2:定义Sensor的子类CriticalSensor\r例13.3:假设一个传感器一定装在某座建筑物上,而一座建筑物内可安装多种传感器,表示此关系。

13.2程序设计过程

2014/5/3

国防科技大学计算机学院

16

13.2.2 基于对象语言对OOD的支持

Ada这类语言虽能支持抽象数据类型,但不能直接支持继承、消息传递、动态链接等概念,一般认为Ada是基于对象的语言。\rAda的程序包能将数据结构(属性)和作用在数据结构上的操作(方法)很好地封装起来,形成一个类。\r例13.1、13.2、13.3用Ada对应的描述。

13.2程序设计过程

2014/5/3

国防科技大学计算机学院

17

13.2.3 过程式语言对OOD的支持

传统语言(如C语言)对数据抽象、封装等概念的支持较基于对象的语言(如Ada)更弱。\r类与对象在C语言中,只好用结构表示。\r例13.1、13.2、13.3用C语言的描述。

13.2程序设计过程

2014/5/3

国防科技大学计算机学院

18

13.3 编程标准

人们总是希望编制清晰、紧凑、高效的程序,但这些特性在编码时往往互相矛盾,一般应依次考虑下列原则:\r(1)编制易于修改、维护的代码\r 主要措施是在模块化和面向对象详细设计的基础上,进一步按属性划分程序。\r(2)编制易于测试的代码\r 一般来说,人们总是通过运用条件编译语句尽早设计出测试用例、采用统一的命名规则管理这些测试用例并适时地进行回归测试等一系列措施提高程序的可测试性。\r

第十三章 程序设计语言和编码

2014/5/3

国防科技大学计算机学院

19

编程标准(续)

(3)必须将编程与编文档的工作统一开来。一个程序段的文档应包括下列内容:\r①代码的功能;\r②代码的完成者;\r③代码在整个软件系统中的位置;\r④代码编制、复审的时间;\r⑤保留代码的原因;\r⑥代码中如何使用数据结构和算法。\r (4)编程中采用统一的标准和约定,降低程序复杂性\r (5)限定每一层的副作用,减少耦合度\r (6)尽可能地重用

13.3编程标准

2014/5/3

国防科技大学计算机学院

20

13.4 编程风格

按照软件工程的观点,程序是软件设计的自然结果,程序的质量主要取决于设计的质量,根据设计的要求选择了程序设计语言之后,编程的风格在很大程度上影响着程序的可读性、可测试性和可维护性。\r鉴于软件开发的绝大部分成本消耗在测试和维护阶段,努力追求可测试性和可维护性极其重要。\r编程风格是在不影响性能的前提下,有效地编排和组织程序以提高可读性和可维性。

第十三章 程序设计语言和编码

2014/5/3

国防科技大学计算机学院

21

(1)节俭化

提供尽可能简洁的代码。具体措施包括:\r·避免程序中不必要的动作和变量;\r·避免变量名重载;\r·减小程序的体积;\r·减少程序的执行时间(提高速度);\r·避免模块冗余和重复;\r·检查全局变量的副作用。

13.4编程风格

2014/5/3

国防科技大学计算机学院

22

(2)模块化

把代码划分为内聚度高、富有意义的功能块。通常是把长且复杂的程序段或子程序分解为小且定义良好的程序段,具体措施包括:\r·确保物理和逻辑功能密切相关;\r·限定一个模块完成一个独立的功能;\r·检查代码的重复率。

13.4编程风格

2014/5/3

国防科技大学计算机学院

23

(3)简单化

去掉过分复杂和不必要的矫揉造作。具体措施包括:\r·采用简单和直截了当的算法;\r·使用简单的数据结构,避免使用多维数组、指针和复杂的表;\r·注意对象命名的一致性;\r·以手工方式简化算术和逻辑表达式。

13.4编程风格

2014/5/3

国防科技大学计算机学院

24

(4)结构化

把程序的各个构件组织成一个有效系统。具体措施包括:\r·按标准化的次序说明数据;\r·按字母顺序说明对象名;\r·使用读者明了的结构化程序部件;\r·采用直接了当的算法;\r·根据应用背景排列程序各部分;\r·不随意为效率而牺牲程序的清晰度和可读性;\r·让机器多做琐碎、繁琐的工作,如重复工作和库函数;\r·用公共函数调用代替重复出现的表达式;\r·检查参数传递情况保证有效性;\r·检查多层嵌套结构,确认是否存在某些语句可从内层循环中提出,避免大量\r使用嵌套循环结构和嵌套分枝结构;\r·坚持使用统一缩进规则;\r·只编制单入口单出口的代码。

13.4编程风格

2014/5/3

国防科技大学计算机学院

25

(5)文档化

程序能自说明。具体措施包括:\r·有效、适当地使用注释,保证注释有意义,说明性强;\r·使用含义鲜明的变量名;\r·协调使用程序块注释和程序行注释;\r·始终坚持编制文档。

13.4编程风格

2014/5/3

国防科技大学计算机学院

26

(6)格式化

尽量使程序布局合理、清晰、明了。具体措施包括:\r·有效地使用编程空间(水平和垂直两个方向),以助于读者理解;\r·适当插入括号,使表达式的运算次序清晰直观,排除二义性;\r·有效地使用空格符以区别程序的不同意群(例如,注释与程序、一个分程序与另一个分程序等等),提高程序的可读性。

13.4编程风格

2014/5/3

国防科技大学计算机学院

27

13.5 程序设计支持环境(PSE)

现今编程过程大多在一组CASE工具的支持下进行,这组工具辅助完成编辑、编译、调试、项目管理等一系列任务,人们称这组工具构成一个程序设计支持环境(PSE),一个富有吸引力的PSE应具备下列特性:\r①通用性——适用于不同的语言、不同的应用领域和开发方法;\r②适应性——能通过开关设置配制出满足不同需要的PSE实例;\r③开放性——能方便地增加新工具;\r④支持重用——能支持可重用模块的存储、索引和查找;\r⑤自控性——保证自身操作的正确和协调;\r⑥自带数据库——提供数据库机制存储、管理已开发的软件产品;\r⑦保证质量——有助于提高所开发软件的质量;\r⑧吸引用户——用户愿意使用;\r⑨具有市场竞争力——PSE能真正提高软件生产力。

第十三章 程序设计语言和编码

2014/5/3

国防科技大学计算机学院

28

示例:

2014/5/3

国防科技大学计算机学院

29

示例:

13.5程序设计支持环境(PSE)

2014/5/3

国防科技大学计算机学院

30

小结

编程就是将软件设计的结果用某种程序设计语言描述出来,因此所选择的语言应尽量自然地支持软件设计方法,适合于所求解问题的领域。\r此外,编程时应综合考虑时空特性,理解、测试与维护程序的便利等因素。\r本章概要介绍了编程语言、编程准则、编程风格以及支持程序设计的环境。

第十三章 程序设计语言和编码

2014/5/3

国防科技大学计算机学院

31

谢谢

2014/5/3

国防科技大学计算机学院

32