




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 程序设计言语和编码 编码阶段的义务是根据详细设计阐明书编码阶段的义务是根据详细设计阐明书编写程序编写程序 程序设计言语的特性和程序设计风格会程序设计言语的特性和程序设计风格会深化地影响软件的质量和可维护性深化地影响软件的质量和可维护性 为了保证程序编码的质量,程序员必需为了保证程序编码的质量,程序员必需深化了解、熟练掌握并正确地运用程序深化了解、熟练掌握并正确地运用程序设计言语的特性设计言语的特性 此外,还要求源程序具有良好的构造性此外,还要求源程序具有良好的构造性和良好的程序设计风格和良好的程序设计风格程序设计言语程序设计言语程序设计风格程序设计风格 程序设计言语是指用于书写计算机
2、程序的程序设计言语是指用于书写计算机程序的言语,它是一种实现性的软件言语言语,它是一种实现性的软件言语 语法语法syntax用来表示构成言语的各用来表示构成言语的各个记号之间的组合规那么,它是构成言语个记号之间的组合规那么,它是构成言语构造正确成分所需遵照的规那么集合构造正确成分所需遵照的规那么集合 如如C言语中言语中for语句的构成规那么是:语句的构成规那么是:for表达式表达式1;表达式;表达式2;表达式;表达式3语语句句语法中不涉及到这些记号的含义,也不涉语法中不涉及到这些记号的含义,也不涉及运用者及运用者 语义语义semantic用来表示按照各种表示方式所表用来表示按照各种表示方式所表
3、示的各个记号的特定含义,但它不涉及到运用者。示的各个记号的特定含义,但它不涉及到运用者。 如上述如上述for语句中:表达式语句中:表达式1表示循环初值;表表示循环初值;表达式达式2表示循环条件;表达式表示循环条件;表达式3表示循环的增量;表示循环的增量;语句为循环体。整个语句的语义是:语句为循环体。整个语句的语义是: 1计算表达式计算表达式1 2计算表达式计算表达式2,假设计算结果为,假设计算结果为0,那么终止,那么终止循环;否那么转循环;否那么转3 3执行循环体执行循环体 4计算表达式计算表达式3 5转向转向2 语用语用pragmatic用来表示构成言语的各用来表示构成言语的各个记号和运用者
4、的关系。个记号和运用者的关系。 如:言语能否允许递归?能否要规定递如:言语能否允许递归?能否要规定递归层数的上界?这种上界如何确定?这些都归层数的上界?这种上界如何确定?这些都属于语用上的问题。属于语用上的问题。 程序设计言语根本成份可归纳为四种:数程序设计言语根本成份可归纳为四种:数据成分、运算成分、控制成分、传输成分据成分、运算成分、控制成分、传输成分 数据成分:它指明该言语能接受的数据,数据成分:它指明该言语能接受的数据,用来描画程序中的数据。如各种类型的变用来描画程序中的数据。如各种类型的变量、数组、指针、记录等。作为程序操作量、数组、指针、记录等。作为程序操作的对象,具有称号、类型和
5、作用域等特征。的对象,具有称号、类型和作用域等特征。运用前要对数据的这些特征加以阐明。数运用前要对数据的这些特征加以阐明。数据称号由用户经过标识符命名,类型阐明据称号由用户经过标识符命名,类型阐明数据需占用存储单元的多少和存放方式,数据需占用存储单元的多少和存放方式,作用域阐明数据可以运用的范围。作用域阐明数据可以运用的范围。 以以 C言语为例,其数据构造方式可分为根言语为例,其数据构造方式可分为根本类型和派生类型本类型和派生类型 运算成分:它指明该言语允许执行的运算成分:它指明该言语允许执行的运算,用来描画程序中所需进展的运运算,用来描画程序中所需进展的运算。如算。如 + 、- 、* 、/
6、等。等。 控制成分:它指明该言语允许的控制控制成分:它指明该言语允许的控制构造,人们可利用这些控制成分来构构造,人们可利用这些控制成分来构造程序中的控制逻辑。根本的控制成造程序中的控制逻辑。根本的控制成分包括:顺序构造、条件选择构造和分包括:顺序构造、条件选择构造和反复构造。如下页图反复构造。如下页图根本程序控制构造根本程序控制构造 传输成分:它指明该言语允许的数据传传输成分:它指明该言语允许的数据传输方式,在程序中可用它进展数据传输。输方式,在程序中可用它进展数据传输。 例如:例如:Turbo C言语规范库提供了两言语规范库提供了两个控制台格式化输入、输出函数个控制台格式化输入、输出函数pr
7、intf ( )和和scanf ( ),这两个函数可以在规范,这两个函数可以在规范输入输出设备上以各种不同的格式读写输入输出设备上以各种不同的格式读写数据。数据。 Printf ( )函数用来向规范输出函数用来向规范输出设备设备(屏幕屏幕)写数据写数据 ,scanf ( ) 函数用函数用来从规范输入设备来从规范输入设备(键盘键盘)上读数据。上读数据。 心思特性心思特性 从设计到编码的转换根本上是人的活动,从设计到编码的转换根本上是人的活动,因此,言语的性能对程序员的心思影响将因此,言语的性能对程序员的心思影响将对转换产生艰苦影响对转换产生艰苦影响 在维持现有机器的效率、容量和其它硬件在维持现有
8、机器的效率、容量和其它硬件限制条件的前提下,程序员总希望选择简限制条件的前提下,程序员总希望选择简单易学、运用方便的言语,以减少程序出单易学、运用方便的言语,以减少程序出错率,提高软件可靠性,从而提高用户对错率,提高软件可靠性,从而提高用户对软件质量的可信度软件质量的可信度 影响程序员心思的言语特性有:影响程序员心思的言语特性有:一致性:指言语采用的标志法运用的符一致性:指言语采用的标志法运用的符号协调一致的程度。如,一符多用的号协调一致的程度。如,一符多用的标志法容易导致错误。标志法容易导致错误。二义性:对语句不同了解所产生的二义性二义性:对语句不同了解所产生的二义性将导致程序员对程序了解的
9、混乱。如,将导致程序员对程序了解的混乱。如, if then if then else x := a * b * c 紧致性紧致性compactness:指程序员必需:指程序员必需记忆的与编码有关的信息总量。描写紧致记忆的与编码有关的信息总量。描写紧致性的目的有:对构造化部件的支持程度,性的目的有:对构造化部件的支持程度,可用关键字和缩写的种类,算术及逻辑操可用关键字和缩写的种类,算术及逻辑操作符的数目,预定义函数的个数等。作符的数目,预定义函数的个数等。 部分性:程序由模块组成,应采用高内聚部分性:程序由模块组成,应采用高内聚低耦合、模块独立、部分化等原那么。低耦合、模块独立、部分化等原那么
10、。 线性:人们习惯于按逻辑上线性的次序了线性:人们习惯于按逻辑上线性的次序了解程序,程序中大量的分支和循环、随意解程序,程序中大量的分支和循环、随意的的GOTO语句会破坏程序的线性,提倡构语句会破坏程序的线性,提倡构造化程序设计。造化程序设计。 传统性:传统性容易影响人们学习新语种传统性:传统性容易影响人们学习新语种的积极性的积极性 工程特性工程特性 程序设计言语的特性影响人们思索程序程序设计言语的特性影响人们思索程序的方式,从而也限制了人们与计算机进的方式,从而也限制了人们与计算机进展通讯的方式。为满足软件工程的需求,展通讯的方式。为满足软件工程的需求,程序设计言语还应该思索:将设计翻译程序
11、设计言语还应该思索:将设计翻译成代码的便利程度、编译器的效率、源成代码的便利程度、编译器的效率、源代码的可移植性、配套的开发工具、软代码的可移植性、配套的开发工具、软件的可复用性和可维护性。件的可复用性和可维护性。 将设计翻译成代码的便利程度:言语假设将设计翻译成代码的便利程度:言语假设直接支持构造化部件、复杂的数据构造、直接支持构造化部件、复杂的数据构造、特殊特殊I/O处置、按位操作和处置、按位操作和OO方法,那么方法,那么便于将设计转换成代码。便于将设计转换成代码。 编译器的效率:编译器应生效果率高的代编译器的效率:编译器应生效果率高的代码码 源代码的可移植性:言语的规范化有助于源代码的可
12、移植性:言语的规范化有助于提高程序代码的可移植性,源程序中应尽提高程序代码的可移植性,源程序中应尽量不用规范文本以外的语句。量不用规范文本以外的语句。 配套的开发工具:配套的开发工具:CASE工具可减少编码工具可减少编码时间,提高代码质量。尽能够运用工具和时间,提高代码质量。尽能够运用工具和程序设计支撑环境。程序设计支撑环境。 可复用性:指编程言语能否提供可复用的可复用性:指编程言语能否提供可复用的软件成分,复用时需求修正调整的内容多软件成分,复用时需求修正调整的内容多少少 可维护性:包括可了解性、可测试性、可可维护性:包括可了解性、可测试性、可修正性。源程序的可读性和文档化特性是修正性。源程
13、序的可读性和文档化特性是影响可维护性的重要要素。影响可维护性的重要要素。 运用特性运用特性 不同的程序设计言语满足不同的技术特不同的程序设计言语满足不同的技术特性,可以对应于不同的运用。例如性,可以对应于不同的运用。例如Prolog言语适用于人工智能领域、言语适用于人工智能领域、SQL言语适用于关系数据库。言语的技术特言语适用于关系数据库。言语的技术特性对软件工程各阶段有一定的影响,特性对软件工程各阶段有一定的影响,特别是确定了软件需求之后,程序设计言别是确定了软件需求之后,程序设计言语的特性就很重要了,要根据不同工程语的特性就很重要了,要根据不同工程的特性选择相应特性的言语。的特性选择相应特
14、性的言语。 程序设计言语的分类程序设计言语的分类 按言语级别:低级言语和高级言语;按言语级别:低级言语和高级言语; 按运用范围:通用言语和公用言语;按运用范围:通用言语和公用言语; 按用户要求:过程式言语和非过程式言按用户要求:过程式言语和非过程式言语;语; 按言语所含的成分:顺序文语、并发言按言语所含的成分:顺序文语、并发言语和分布式言语语和分布式言语 程序设计言语的开展史 第一代言语:机器言语和汇编言语 第二代言语:早期的高级言语,如BASIC,FORTRAN,COBOL等 第三代言语:具有很强的数据构造和过程描画才干,支持构造化编程,如Pascal,Modula,C,Ada等 第四代言语
15、4GL:这类言语出现于七十年代,其目的是为了提高程序开发速度,以及让非专业用户能直接编制计算机程序第四代言语的特点:第四代言语的特点:对用户友善,普通用类自然言语、图形或表对用户友善,普通用类自然言语、图形或表格等描画方式,普通用户很容易掌握格等描画方式,普通用户很容易掌握多数与数据库系统相结合,可直接对数据库多数与数据库系统相结合,可直接对数据库进展操作进展操作对许多运用功能均有默许的假设,用户不用对许多运用功能均有默许的假设,用户不用详细阐明每一件事情的做法详细阐明每一件事情的做法程序码长度及获得结果的时间与运用程序码长度及获得结果的时间与运用COBOL言语相比约少一个数量级言语相比约少一
16、个数量级支持构造化编程,易于了解和维护支持构造化编程,易于了解和维护 目前,第四代言语的种类繁多,尚无规范,目前,第四代言语的种类繁多,尚无规范,在语法和才干上有很大差别,其中一些支在语法和才干上有很大差别,其中一些支持非过程式编程,更多的是既含有非过程持非过程式编程,更多的是既含有非过程语句,也含有过程语句。语句,也含有过程语句。 典型的典型的4GL有:数据库查询言语、报表生有:数据库查询言语、报表生成程序、运用生成程序、电子表格、图形成程序、运用生成程序、电子表格、图形言语等。言语等。 多数多数4GL是面向领域的,很少是通用的。是面向领域的,很少是通用的。 自然言语自然言语 最理想的是可以
17、运用自然言语如英语、最理想的是可以运用自然言语如英语、法语或汉语,使计算机能了解并立刻法语或汉语,使计算机能了解并立刻执行恳求。但迄今为止,自然言语了解执行恳求。但迄今为止,自然言语了解依然是计算机科学研讨中的一个难点,依然是计算机科学研讨中的一个难点,虽然在实验室的研讨中获得了一定的成虽然在实验室的研讨中获得了一定的成果,但在现实中的运用依然是相当有限果,但在现实中的运用依然是相当有限的。的。 为一个特定的开发工程选择编程言语时,为一个特定的开发工程选择编程言语时,通常要思索如下要素:通常要思索如下要素: 运用领域运用领域 算法和计算复杂性算法和计算复杂性 软件运转环境软件运转环境 用户需求
18、,特别是性能需求用户需求,特别是性能需求 数据构造的复杂性数据构造的复杂性 软件开发人员的知识程度软件开发人员的知识程度 可用的编译器与交叉编译器可用的编译器与交叉编译器 工程所属的运用领域经常是首要的规范工程所属的运用领域经常是首要的规范 COBOL适用于商业领域适用于商业领域 FORTRAN适用于工程和科学计算领域适用于工程和科学计算领域 Prolog、Lisp适用于人工智能领域适用于人工智能领域 Smalltalk、C+适用于适用于OO系统的开发系统的开发 有些言语适用于多个运用领域,如有些言语适用于多个运用领域,如C 假设有多种言语都适宜于某工程的开发假设有多种言语都适宜于某工程的开发
19、时,也可思索选择开发人员比较熟习的时,也可思索选择开发人员比较熟习的言语言语 选择高级言语还是低级言语 优先选择高级言语 开发和维护高级言语程序比开发和维护低级言语程序容易得多 必要时运用低级言语 高级言语程序经编译后所产生的目的程序的效果要比完成一样功能的低级言语程序低得多,所以在有些情况下会部分或全部运用低级言语 运用低级言语的情况:运用低级言语的情况:对运转时间和存储空间有过高要求的工程,对运转时间和存储空间有过高要求的工程,如电子笔记本中的软件如电子笔记本中的软件在某些不能提供高级言语编译程序的计算在某些不能提供高级言语编译程序的计算机上开发程序,如单片机上的软件机上开发程序,如单片机
20、上的软件大型系统中对系统执行时间起关键作用的大型系统中对系统执行时间起关键作用的模块模块 编程的根据是详细设计的结果,因此程序编程的根据是详细设计的结果,因此程序的质量主要取决于设计,但编程的质量也的质量主要取决于设计,但编程的质量也在很大程度上影响着程序的质量在很大程度上影响着程序的质量 编程风格主要包括:编程风格主要包括: 源程序中的内部文档源程序中的内部文档 数听阐明数听阐明 语句构造语句构造 输入输出输入输出 在源程序中可包含一些内部文档,在源程序中可包含一些内部文档,以协助阅读和了解源程序以协助阅读和了解源程序 在源程序中的内部文档主要包括:在源程序中的内部文档主要包括: 标识符的命
21、名标识符的命名 注解注解 程序的视觉组织程序的视觉组织 选择含义明确的名字,使其能正确提示标选择含义明确的名字,使其能正确提示标识符所代表的实体识符所代表的实体 例如,表示总量的变量名用例如,表示总量的变量名用Total,表示,表示平均值的用平均值的用Average等等 名字不要太长,太长会添加打字量,且易名字不要太长,太长会添加打字量,且易出错。必要时可运用缩写出错。必要时可运用缩写 不用类似的名字,类似的名字容易混淆,不用类似的名字,类似的名字容易混淆,不易发现错误不易发现错误 如如cm,cn,cmn,cnm,cnn,cmm 不用关键字作标识符不用关键字作标识符 同一个名字不要有多个含义同
22、一个名字不要有多个含义 名字中防止运用易混淆的字符。名字中防止运用易混淆的字符。如数字如数字0与字母与字母O; 数字数字1与字母与字母I或或l; 数字数字2与字母与字母z等等 程序中的注解用来协助人们了解程序,程序中的注解用来协助人们了解程序,决不是可有可无的决不是可有可无的 一些正规的程序文本中,注解行的数一些正规的程序文本中,注解行的数量约占整个源程序的量约占整个源程序的13到到12,甚至更多甚至更多 注解分为序文性注解和功能性注解注解分为序文性注解和功能性注解 通常置于每个程序模块的开头部分,主要描画: 模块的功能 模块的接口:包括调用格式、参数的解释、该模块需求调用的其它子模块名 重要
23、的部分变量:包括用途、约束和限制条件 开发历史:包括模块的设计者、评审者、评审日期、修正日期以及对修正的描画 通常嵌在源程序体内,主要描画程序段的功能。 书写功能性注解时应留意的问题: 注解要正确,错误的注解比没有注解更坏; 为程序段作注解,而不是为每一个语句作注解; 用缩进和空行,使程序与注释容易区分; 注解应提供一些从程序本身难以得到的信息,而不是语句的反复。例如,下面的模块级注释描画了公共的和私有的过程在类模块中称为“方法、属性及其数据类型,以及如何将该类作为对象来运用的有关信息:公共方法: MailAddRecipient(strName As String, Optional fTy
24、pe As Boolean) strName: /要参与到邮件中的收件人称号。 fType: Outlook MailItem Type /属性设置。 SendMail(Optional blnShowMailFirst As Boolean) blnShowMailFirst: /发送前能否显示 Outlook邮件信息。假设不能解析收件人的地址,让代码将它设置为 True。私有方法: InitializeOutlook() CreateMail() 公共属性: MailSubject:(Write only, String) MailMessage:(Write only, String)
25、MailAttachments:(Write only, String) 经过在程序中添加一些空格、空经过在程序中添加一些空格、空行和缩进等技巧,协助人们从视行和缩进等技巧,协助人们从视觉上看清程序的构造觉上看清程序的构造 例如,经过缩进技巧可明晰地察例如,经过缩进技巧可明晰地察看到程序的嵌套层次,同时还容看到程序的嵌套层次,同时还容易发现诸如易发现诸如“脱漏脱漏end那样的那样的错误错误 IF THEN IF THEN ELSE ENDIF ELSE ENDIF 自然的程序段之间可用空行隔开 可经过添加空格使语句成分明晰,如(A17)ANDNOT(B49)ORC可写成(A17) AND NO
26、T (B49) OR C 也可以经过添加括号突出运算的优先级,防止发生运算的错误,如 a*( b*c )放置大括号普通首选的方法是K&R方法:把左括号放在行尾,右括号放在行首。如:if (X) Y定义函数时该当把左右括号都放在行首,如: int F(int x) / 留意,右括号所在的行不该当有其它语句,除非跟随着一个条件判别。也就是do-while语句中的“while和if-else语句中的“else。例如: do body of do-loop while (condition);if (x = y) else if (x y) . else 为了使程序中数听阐明更易于了解和维护,
27、可采用以下风格: 数听阐明的次序该当规范化 阐明语句中变量安排有序化 运用注讲解明复杂数据构造 数听阐明次序规范化,使数据属性容数听阐明次序规范化,使数据属性容易查找,也有利于测试,排错和维护易查找,也有利于测试,排错和维护 原那么上,数听阐明的次序与语法无原那么上,数听阐明的次序与语法无关,其次序是恣意的。但出于阅读、关,其次序是恣意的。但出于阅读、了解和维护的需求,最好使其规范化,了解和维护的需求,最好使其规范化,使阐明的先后次序固定使阐明的先后次序固定 当多个变量名在一个阐明语句中阐明当多个变量名在一个阐明语句中阐明时,可以将这些变量按字母的顺序陈时,可以将这些变量按字母的顺序陈列,以便
28、于查找列,以便于查找 假设设计了一个复杂的数据构造,该假设设计了一个复杂的数据构造,该当运用注释来阐明在程序实现时这个当运用注释来阐明在程序实现时这个数据构造的固有特点数据构造的固有特点 例如用户自定义的数据类型,该当在例如用户自定义的数据类型,该当在注释中做必要的补充阐明注释中做必要的补充阐明 编码阶段的主要义务就是书写程序语句。编码阶段的主要义务就是书写程序语句。有关书写语句的原那么有几十种,总起有关书写语句的原那么有几十种,总起来说,希望每条语句尽能够简单明了,来说,希望每条语句尽能够简单明了,能直截了当地反映程序员的意图,不能能直截了当地反映程序员的意图,不能为了片面追求效率而使语句复
29、杂化。为了片面追求效率而使语句复杂化。 常用的规那么如下:常用的规那么如下: 在一行内只写一条语句,并且采取适当添加空格的方法,使程序的逻辑和功能变得更加明确。 许多程序设计言语允许在一行内写多个语句。但这种方式会使程序可读性变差。因此不可取。 程序编写首先该当思索明晰性,不要刻意追求技巧性,使程序编写得过于紧凑。 例如,有一个用 C 语句写出的程序段: AI = AIAT; AT = AIAT; AI = AIAT; 此段程序能够不易看懂,有时还需用实践数据实验一下。 实践上,这段程序的功能就是交换AI和AT中的内容。目的是为了节省一个任务单元。假设改一下: WORK = AT; AT =
30、AI; AI = WORK;就能让读者一目了然了。 程序编写得要简单,写清楚,直截了当地阐明程序员的意图。例如, for ( i = 1; i = n; i+ ) for ( j = 1; j = n; j+ ) Vij ( ij ) * ( ji )除法运算在除数和被除数都是整型量时,其结果只取整数部分,而得到整型量。 当 ij 时, i / j = 0 当 ji 时, j / i = 0 得到的数组 当ij时 Vij = ( ij ) * ( ji ) = 0 当ij时 Vij = ( ij ) * ( ji ) = 1这样得到的结果 V 是一个单位矩阵。 写成以下的方式,就能让读者直接了解程序编写者的意图。 for ( i1; i = n; i+ ) for ( j1; j = n; j+ ) i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设定目标土木考试试题及答案
- 从内到外全方位保障药品与设备安全
- 解析乐理考试样题及试题及答案
- 逻辑思维培养与实践试题及答案
- 物理实验安全与注意事项试题及答案
- 班级助力面试题及答案
- 无损检测学会试题及答案
- 电商平台对农业产业链的影响试题及答案
- 曲流地理试题及答案详解
- 轻松提高计算能力试题及答案在幼儿园
- 人音版四年级音乐下册全册教学设计教案表格式
- 《高速铁路客运服务礼仪》课件 项目7 高铁站车服务礼仪
- 子宫内膜癌(妇产科)
- 《MBA毕业论文指导》课件
- 医学课件:糖尿病(英文版)完整版
- 国开土地利用规划形考任务1-4答案
- 地下工程监测与检测技术
- 客供物料管理规范
- 七年级下学期家长会课件
- 休闲度假地产新模式的探讨与实践-阿那亚
- 文史哲考试总题库
评论
0/150
提交评论