第6章 程序设计语言_第1页
第6章 程序设计语言_第2页
第6章 程序设计语言_第3页
第6章 程序设计语言_第4页
第6章 程序设计语言_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章程序设计语言计算机科学概论目标了解计算机语言的发展;理解机器语言、汇编语言、高级语言的概念理解机器语言与汇编语言、高级语言的差异与各自具备的特点与优势理解虚拟机的概念了解高级语言的发展,列出几种高级语言了解程序设计语言的类型和基本知识,了解程序和语句的基本类型理解程序编译生成的过程和原理主要内容计算机语言的发展程序设计语言的几种范型程序设计语言的语法元素和功能划分程序的生成和运行第一节计算机语言的发展6.1计算机语言的发展机器语言汇编语言高级语言非过程语言第5代自然语言的研究也已经成为学术研究的热点。6.1.1自然语言与形式语言1、自然语言自然语言的定义:自然语言是某一社会发展中形成的一种民族语言例如汉语、英语、法语和俄语等。自然语言符号系统的基本特征:歧义性;不够严格和不够统一的语法结构;2、形式语言定义:形式语言是进行形式化工作的元语言它是以数学和数理逻辑为基础的科学语言。形式语言的基本特点如下:有一组初始的专门的符号集有一组精确定义的,由初始的专门的符号组成的符号串,转换成另一个符号串的规则。在形式语言中,不允许出现根据形成规则无法确定的符号串。6.1.2机器语言与汇编语言1、机器语言机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义一条指令就是机器语言的一个语句,它是一组有意义的二进制代码指令的基本格式如:操作码字段地址码字段操作码指明了指令的操作性质及功能,地址码则给出了操作数或操作数的地址。2、汇编语言为了使程序易读,用带符号或助记符的指令和地址代替二进制代码成为语言进化的目标。这些使用助记符语言的语言后来就被称之为汇编语言。例6对2+6进行计算的算法描述(1)机器指令对2+6进行计算的算法描述

10110000000001100000010000000010101000100101000000000000第一条指令表示将6送到寄存器AL中,数字6放在指令后八位第二条指令表示数2与寄存器AL中的内容相加,结果仍存在AL中第三条指令表示把AL中的内容送到地址为5的单元中。(2)汇编语言对2+6进行计算的算法描述

MOVAL6ADDAL2MOVVCAL汇编语言的特点:汇编语言语句与特定的机器指令有一一对应的关系,但是它不同于由二进制组成的机器指令,它还需要经汇编程序翻译为机器指令后才能运行。用汇编语言写的程序必然依赖于机器,不同的机器指令系统不同。汇编语言源程序经汇编程序翻译成机器指令,再在实际的机器中执行,这样就汇编语言的用户而言,该机器是可以直接识别汇编语言的,从而产生了一个属于抽象形态的重要概念,即虚拟机的概念。6.1.3高级语言接近于人类的自然语言20世纪50年代是高级语言兴起的年代,早期的有Fortran、Algol、Cobol、Lisp等高级语言。最著名的有BASIC、COBOL、Pascal、Ada、C、C++和Java。高级语言的主要好处(1)高级语言接近算法语言,易学、易掌握,一般工程技术人员只要几周时间的培训就可以胜任程序员的工作;(2)高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;(3)高级语言远离机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可移植性好,重用率高;(4)由于把繁杂琐碎的事务交给了编译程序去做,所以自动化程度高,开发周期短,且程序员得到解脱,可以集中时间和精力去从事对于他们来说更为重要的创造性劳动,以提高程序的质量。第二节程序设计语言的几种范型6.2程序设计语言的几种范型程序语言的分类没有统一的标准,这里根据程序设计的方法将程序语言大致分为:命令式程序设计语言面向对象的程序设计语言函数式程序设计语言逻辑型程序设计语言等1、命令式程序设计语言命令式语言是基于动作的语言,它关注的是如何让计算机去做人们要求它做的事情。在这种语言中,计算被看成动作的序列。程序形式一般为:

statement1;statement2;

…语句的执行(如将两个变量相加而得到第三个变量)可被表示为访问存储位置,以某种方式组合这些值,并将结果存到新的位置。1、命令式程序设计语言大多数程序设计语言采用这种模型,遵循传统计算机的结构,顺序地执行指令。主要有FORTRAN,后来的PASCAL、BASIC和C语言,包括近期出现的Java语言,体现了命令式程序设计的关键思想。2、函数式程序设计语言函数式语言的基本概念来自于LISP语言,1958年为了人工智能应用而设计的语言。典型的函数式语言LispHaskell、ML、Scheme其中,Haskell是现在广泛用于研究的一种函数语言2、函数式程序设计语言函数是一种对应规则(映射),它使定义域中每个元素和值域中惟一的元素相对应。例如:函数定义1:square[x]:=x*x

函数定义2:Plustwo[x]:=Plusone[Plusone[x]]

函数定义3:fact[n]:=ifn=0then1elsen*fact[n-l]3、逻辑型程序设计语言逻辑型语言是一类以形式逻辑为基础的语言,其代表是建立在关系理论和一阶谓词理论基础上的Prolog语言。Prolog程序是一系列事实、数据对象或事实间的具体关系和规则的集合。通过查询操作把事实和规则输入数据库。用户通过输入查询来执行程序。3、逻辑型程序设计语言在Prolog中,关键操作是模式匹配,通过匹配一组变量与一个预先定义的模式并将该组变量赋给该模式来完成操作。Prolog程序没有特定的运行顺序,其运行顺序是由计算机决定,而不是编程序的人。它更像一种描述型的语言,用特定的方法描述一个问题,然后由计算机自动找到这个问题的答案。3、逻辑型程序设计语言Prolog程序和数据高度统一。在Prolog程序中,程序和数据有相同的形式,也就是说数据就是程序,程序就是数据。Prolog程序实际上是一个智能数据库,Prolog的原理是关系数据库,它是建立在关系数据库的基础上的。实际上它和数据库SQL语言有很多相似之处。4、面向对象的程序设计语言面向对象程序语言主要包含下面几个概念。对象:对象是人们要进行研究的任何事物,它具有状态和操作。对象状态的具体表示和操作的具体实现都被隐藏起来了。类:类是面向对象语言必须提供的由用户定义的数据类型,它将具有相同状态、操作和访问机制的多个对象抽象成一个对象类。类代表一般,而该类的一个对象代表具体。继承:继承是面向对象语言的另一个基本要素。继承实现了一般与特殊的关系,解决了软件的重用性和扩充性问题。C++、Java和Smalltalk是面向对象程序设计语言的代表。第三节程序设计语言的语法元素和功能划分6.3程序设计语言的语法元素和功能划分程序设计语言的语法元素和功能往往决定了一种语言的编程风格。在实际编程中,程序员都必须遵循由此形成的特定的编程规范。它适用于命令式程序设计语言和大多数面向对象语言。

1、语法元素程序设计语言的语法元素主要有:字符集表达式语句标识符关键字和保留字注释等1、语法元素(1)字符集字符集的选择是语言设计的第一件事。字符集决定了在语言中可以使用的符号,只有字符集里有的符号才能在语言中出现。在计算机科学中有一些标准字符集,如:ASCII码。

(2)标识符标识符是程序设计时设计人员用来命名事物的符号,通常为字符和数字组成的串。不同的语言中,对标识符的命名规则不同,通常以字母开头。也可能使用特殊字符,如用下划线“_”或连接符“-”来改善易读性和长度限制。命名规则通常很简单,主要是为了防止出现系统的误操作。匈牙利命名法。其基本原则是:标识符=属性+类型+对象描述其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。匈牙利命名法优点非常便于记忆,而且使变量名非常清晰易懂增强了代码的可读性,方便各程序员之间相互交流代码。(3)操作符符号操作符是用来代表运算操作的符号,每个操作符表示一种运算操作。通常语言中具备赋值操作符、算术操作符、比较操作符、逻辑操作符、位操作符等几类。用“+,-,*,/”表示基本的数学算术操作。比较操作符通常包括“大于”、“小于”、“大于等于”和“小于等于”及“不等于”等。逻辑操作符也叫布尔操作符,通常用来表示“与”、“或”、“非”、“异或”等逻辑运算。特殊的运算,特殊操作符,比如C语言中的“自增”和“自减”操作。(4)保留字∕关键字保留字也叫关键字。指在语言中已经定义过的字,使用者不能再将这些字来命名其他事物。例如:BASIC语言规定不能使用LIST作为变量名或过程名,因为LIST是一个BASIC语言专用于显示内存程序。(4)保留字∕关键字每种程序设计语言都规定了自己的一套保留字。保留字通常是语言自身的一些命令、特殊的符号等。语言中的保留字大多与含义相同英文单词类似比如几乎所有语言中都将“AND”、“OR”、“NOT”、“if”等作为保留字用来表示逻辑运算的“与”、“或”、“非”和选择语句的标识。(5)空白(空格)语言中常使用空白规则,通常都是作为分隔符,也有的语言中空格有其他用途。(6)界定符(分界符)和括号用于标记语法单位的开始和结束,例如C语言的一对大括号“{}”表示函数的开始和结束。括号“(”和“)”是一对分界符,通常用于确定运算的优先级。(7)表达式表达式(expression)是用来表示运算的语言描述形式。将同类型的数据(如常量、变量、函数等),用运算符号按一定的规则连接起来的、有意义的式子称为表达式。表达式可以是常量也可以是变量或算式表达式又可分为:算术表达式、逻辑表达式和字符串表达式。(8)语句语句是程序设计语言中最主要的语法部件。语句的语法对语言整体的正则性、易读性和易写性有着关键影响。有的语言采用单一语句格式,强调正则性;而其它语言对不同语句类型使用不同语法,着重于易读性。语句结构中的一个重要的差异是:结构性(或嵌套)语句和简单语句。一般简单语句能够在一行中完成,而结构性语句通过使用多行的组合表示。(9)注释注释是程序中的重要部分,用来说明程序中某些部分的设计。比如变量的作用、某个程序段的设计思想或一些需要注意的事项等。注意一般使用自然语言表述。有经验程序员发现即使是自己写的程序代码,在一段时间后也会忘记当时的一些设计细节,如果完全没有注释,自己以前编写的程序读起来也会很费力。注释有几种方式:1、注释段,即规定注释的区域,在这个区域中,所有行都是注释的内容;2、注释行,即只有当前行是注释,其后的行仍为一般的程序语句;3、注释区,在程序语句行中,通常是附在语句后面。在有些语言中,将注释作为一种特殊的语句看待。2、功能划分程序设计语言的基本功能成分:数据运算控制传输等2、功能划分(1)数据成分数据是程序操作的对象,具有存储类、类型、名称、作用域和生存期等属性,使用时要为它分配内存空间。

常量和变量全局量和局部量数据类型(2)运算成分程序语言的运算成分指明允许使用的运算符号及运算规则。运算符号就是我们前面介绍的操作符。运算符号的使用与数据类型密切相关。为了确保运算结果的惟一性,运算符号要规定优先级和结合性,必要时还要使用括号。(3)控制成分控制成分指明语言允许表述的控制结构,程序员使用控制成分来构造程序中的控制逻辑。理论上已经证明,可计算问题的程序都可以用顺序、选择和重复这三种控制结构来描述。顺序结构选择结构循环结构(4)子程序子程序是能被其他程序调用,在实现某种功能后能自动返回到调用程序去的程序。其最后一条指令一定是返回指令,故能保证重新返回到调用它的程序中去。也可调用其他子程序,在支持递归时可自身调用。子程序在结构上与一般的程序相似。在调用子程序时,需要注意的是参数的传递。

第四节程序的生成和运行6.4程序的生成和运行用程序设计语言直接编写的程序实际上主要是为人服务的,它是人们使用计算机的工具,帮助人们工作,提供人与人的交流共享,供人们学习、理解,我们称之为源程序。真正能够在机器上运行的机器语言代码是为机器服务的,用于控制计算机运行,我们称之为可执行程序。从源程序到可执行程序之间的转换有编译和解释两类基本方式,近来随着网络应用的发展两者混合的方式开始流行。

6.4.1编译和解释1、编译编译是使用编译器将高级语言编写的源程序转换成计算机可以执行的机器语言可执行程序的过程,也可以理解为用编译器产生可执行程序的动作。编译工作是一个自动化的过程,主要工作由编译器这个工具完成。编译器是一个或一套专门设计的软件,也称做编译程序。编译器把一个源程序转换成可执行程序的编译工作过程分为五个阶段:词法分析;语法分析;中间代码生成;代码优化;目标代码生成。

2、解释解释是另一种将高级语言转换为可执行程序的方式。与编译不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,解释性语言每执行一次就要翻译一次,效率比较低。采用编译模式时,只需要有可执行程序就可以完成用户的工作,而解释性语言需要源程序和解释器同时工作才能执行。解释方式的优点是修改方便。3、混合方式Java即不是完全的编译方式也不是单纯的解释方式。Java在源程序编写完成后,首先使用编译器将源代码转换成为Java的二进制代码,称为字节码。字节码是与具体硬件平台无关的Java标准代码方式。然后利用Java虚拟机(JavaVirtualMachine)对Java二进制代码进行解释执行。

4、动态链接库动态链接库(DynamicLinkLibrary,简称DLL)是一种特殊形式的作为共享函数库的可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。4、动态链接库DLL还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL副本的内容。DLL是一个包含可由多个程序同时使用的代码和数据的库。这有助于促进代码重用和内存的有效使用。通过使用DLL,程序可以实现模块化,由相对独立的组件组成。例如,一组程序可以按模块来销售。。此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。

6.4.2程序设计环境通常编译器和解释器不是孤立存在的,除了这两个核心工具以外,程序开发人员工作时还需要一系列其他辅助工具,包括编辑器、连接程序、调试工具等,对于复杂的软件开发还需要项目管理工具。

1、编辑器(editor)任何程序设计语言都需要用编辑器来进行文字处理。从形式上看,大多数程序设计语言的源程序都是纯文本的。因此可以使用标准的文本处理工具作为编辑器,如Windows系统自带的“记事本”就是很好的纯文本编辑器。但是专门针对某种程序设计语言的编辑器往往功能更加强大,比如可以用不同的颜色区分程序中的语法成分,如保留字、变量、注释等,有些编辑器针对支持的语言提供模板等功能,方便程序员的输入、修改和排版,使得编辑出的程序格式规范,便于阅读。2、连接程序(linker)编译器和汇编程序都依赖于连接程序,它将分别在不同的目标文件中编译或汇编的代码收集到一个可直接执行的文件中。在这种情况下,目标代码,即还未被连接的机器代码,与可执行的机器代码之间就有了区别。连接程序还连接目标程序和用于标准库函数的代码,以及连接目标程序和由计算机的操作系统提供的资源。3、调试程序(debugger)调试程序是可在被编译了的程序中判定执行错误的程序,它经常与编译器一起配合使用。运行一个带有调试程序的程序与直接执行不同,这是因为调试程序保存着所有的或大多数源代码信息(诸如行数、变量名和过程)。它还可以在预先指定的位置,即断点(breakpoint)暂停执行,并提供有关已调用的函数以及变量的当前值的信息。任何程序员都不能保证其编写的程序是完全正确的,调试工具是非常必要的工具,编写的源程序,只有经过调试才可能成为比较正确的程序。单步跟踪和查看运行过程中变量的中间状态是最有效的调试手段。

4、项目管理程序(projectmanager)现在的软件项目通常大到需要由一组程序员来共同完成,这时对那些由不同人员操作的文件进行整理就非常重要了,而这正是项目管理程序的任务。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论