第06章 程序设计语言(计算机科学与技术)课件_第1页
第06章 程序设计语言(计算机科学与技术)课件_第2页
第06章 程序设计语言(计算机科学与技术)课件_第3页
第06章 程序设计语言(计算机科学与技术)课件_第4页
第06章 程序设计语言(计算机科学与技术)课件_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

1第6章程序设计语言6.1历史回顾6.2传统的程序设计概念6.3过程单元6.4语言实现6.5面向对象程序设计6.6程序设计中的并发活动6.7说明性程序设计1第6章程序设计语言6.1历史回顾26.1历史回顾第一代程序设计语言:机器语言:直接用二进制写指令和数据,计算机可以直接识别,执行效率高,速度快;严重依赖于硬件类型,程序不可移植,难记难读易错。每种CPU在硬件上实现了自己专用的机器指令集合。CPU设计者为每条指令分配一个二进制代码来表示它,程序就是这些指令组合而成的序列。例:156C166D505630CEC000

把单元6C和6D中的值相加存入6E单元6.1.1早期程序设计语言26.1历史回顾第一代程序设计语言:6.1.1早期程序设3第二代程序设计语言:最早于50年代汇编语言:为每条机器指令分配一个助记符指令码,操作数用符号地址表示,需汇编器把程序“翻译”成计算机可识别的机器指令。不同CPU的汇编语言也不同,可移植性仍很差,但代码效率高。6.1.1早期程序设计语言例如:计算256+16,80x86汇编代码如下:

MOVAX,256 ;把256放入累加器AX

ADDAX,16 ;把16与AX中值相加,结果存入AX汇编语言源程序机器语言目标程序汇编程序xx.asmxx.exe

3第二代程序设计语言:最早于50年代6.1.1早期程序设计4第三代程序设计语言:最早1954年Fortran高级语言:用近似英语的语句写程序,与机器无关,可移植性好。需编译器或解释器把程序“翻译”成机器码。面向过程的语言,如BASIC、PASCAL、C等;面向对象的语言,如C++、Java、C#等;高级语言的翻译方式:编译器对整个源程序经过编译处理,产生一个包含机器指令的目标程序(.exe,.com),然后执行它;解释器是边解释边执行,即在翻译指令的同时执行指令。6.1.1早期程序设计语言4第三代程序设计语言:最早1954年Fortran.3程序设计范型(软件开发的方法)命令型范型:传统程序设计方法。按照算法编写一个命令序列,然后执行它得到结果。如C。说明型范型:用户只描述要解决的问题,而程序设计平台提供解决各种问题的通用算法。如Prolog。函数式范型:程序由一系列预先定义的函数组成,一个函数的输出作为另一个函数的输入。如LISP。面向对象范型:软件是对象的集合,每个对象有一组方法来描述收到不同消息时应执行的动作。如C++。程序设计范型的演变函数式范型面向对象范型命令型范型说明型范型56.1.3程序设计范型(软件开发的方法)命令型范型:传统66.2传统的程序设计概念程序中的三类语句:声明语句:声明自定义的变量、数据结构等。命令语句:描述要执行的动作、步骤。注释语句:增加程序可读性,可以没有。程序的一般结构:声明语句部分,定义要操作的数据命令语句部分,描述要执行的动作66.2传统的程序设计概念程序中的三类语句:声明语句部分,76.2.1变量和数据类型一个C语言源程序:#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf(“Total=%d”,total);}常量函数函数语句和运算符变量变量:代表该数据所在的存储器地址。

一个变量要先声明其数据类型再使用。76.2.1变量和数据类型一个C语言源程序:常量函数函数语86.2.1变量和数据类型基本数据类型:程序设计语言内置,不能再分解为其它类型。如整型、实数型、字符型、布尔型等。构造数据类型:由基本数据类型按照某种方式组合构成。如数组、结构体、枚举、字符串、文件等。强类型化:每个变量都有一个类型,只有这种类型的值才能存储到该变量。强制类型转换:有些语言允许两种不同类型的数据参与运算,如整数和实数相加,此时其中一个值就要被强制转换为另一种类型。86.2.1变量和数据类型基本数据类型:程序设计语言内置,96.2.2数据结构变量也可以作为用户构造的数据结构的名字。intScores[2][9]

C中Scores[1][3],下标从0开始以数组为例:同构数组:同类型数据元素构成的集合,数组长度有限。通过“数组名[下标]”访问元素。异构数组:元素具有不同类型。通过“数组名.元素名”访问元素。(结构体)struct{charName[25];intAge;floatSkillRating;}Employee;96.2.2数据结构变量也可以作为用户构造的数据结构的名字106.2.3常量常量:为特定的、不会改变的值分配的名字。例如:#definePRICE30(C语言)constintAirportAlt=645;(C++,C#)finalintAirportAlt=645;(Java)106.2.3常量常量:116.2.4赋值语句赋值语句:将一个值赋给一个变量。z=x+y;运算符优先级:和四则运算法则相同重载(overloading):一个运算符的多种用法称为重载。如+用于数值和字符串时分别表示“加法”和“连接”。116.2.4赋值语句赋值语句:将一个值赋给一个变量。126.2.5控制语句结构化程序设计:程序通过顺序、分支、循环三种基本控制结构来实现。(goto被弃用)顺序结构:按照语句出现的先后顺序依次执行。分支结构:根据给定条件判断,决定程序执行的顺序。如单分支if-then-else,多分支switch-case。循环结构:重复多次执行语句集合。如while,for。if(B)S1

elseS2;switch(N)

{caseC1:S1;break;

caseC2:S2;break;

caseC3:S3;break;

}while(B)

S1;for(inti=1;i<4;i++)

body;126.2.5控制语句结构化程序设计:程序通过顺序、分支、136.2.6注释注释(comment):有助于理解程序。编译器和解释器将忽略注释语句。注释应该少而精,注释语句主要是描述语句或函数的目的和功能,而不是动作语句。在程序或函数的开始位置注释它的主要功能是个好建议。/*Thisisacomment.*///Thisisacomment.136.2.6注释注释(comment):有助于理解程序。146.3过程单元6.3.1过程procedure过程:实现一个任务的一个小型的子程序。调用(call,invoke):将程序控制权转移给过程的步骤局部变量(localvariable):在过程内部使用的变量全局变量(globalvariable):可在程序任何地方使用调用程序(调用者)过程(被调用者)调用调用返回146.3过程单元6.3.1过程procedure过程156.3.2参数parameter将需要重复使用的程序段或分解的子问题编写为一个逻辑上独立的子程序(过程或函数)。可以重复调用。main(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“Maxis%d”,c);}intmax(intx,inty){intz;z=x>y?x:y;return(z);}定义子程序调用子程序实参形参形参和实参在数量、位置和数据类型上都要一致。156.3.2参数parameter将需要重复使用的程序16参数的按值传递和按引用传递内存地址单元内容6000a=66001b=860026003x=66004按值传递时,实参把值传给形参,子程序中对形参的修改不会影响原来的实参。a按引用传递时,传递的是实参的内存地址,所以现在形参和实参对应同一个内存单元,修改形参也就是修改了原来的实参。&b按引用传递子程序中的形参y与实参b都指向同一内存单元6001c=max(a,&b);按值传递子程序中的形参x,与实参a初值相同main()中的实参amain()中的实参b16参数的按值传递和按引用传递内存地址单元内容6000a=6176.3.3函数function函数:类似于过程,目的是产生一个值,并返回给调用程序。函数头部以要返回数据的类型作为开始声明一个名为Volume的局部变量计算圆柱体的体积终止函数并返回变量Volume的值176.3.3函数function函数:类似于过程,目的18嵌套和事件驱动简介

嵌套:控制结构语句内嵌在其它控制结构语句中。事件驱动(event-driven)的软件系统:在图形用户界面(GUI,GraphicUserInterface)中,过程(子程序)是由一个事件(如点击鼠标、双击等)的发生而激活运行的。一个事件驱动软件系统中的过程描述当各种事件发生时应该做什么。当系统运行时,这些过程等待,直到相关的事件发生,然后它们被激活,完成运行后回到等待状态。例:procedureTForm2.Button1Click(Sender:TObject);

begin

……

end;//Delphi18嵌套和事件驱动简介嵌套:控制结构语句内嵌在其它控制结构196.4语言实现6.4.1翻译过程——编译和解释编译器对整个源程序经过编译处理,产生一个与源程序等价的目标程序;目标程序还可能要调用一些程序库中的标准子程序或其他语言编写的程序,通过连接程序将目标程序和有关的程序库组合成一个完整的可执行程序;执行速度快,修改源程序后都必须重新编译。同一种高级语言在不同CPU平台上需要不同的编译器。目标程序

.obj源程序

.c可执行程序

.exe编译器连接程序数据运行结果196.4语言实现6.4.1翻译过程——编译和解释编译器206.4.1翻译过程——编译和解释解释方式的翻译工作由解释程序来完成。解释程序对源程序进行逐句分析,若没有错误,将该语句翻译成一个或多个机器语言指令,然后立即执行这些指令;若解释时发现错误,则立即停止,报错并提醒用户更正代码。解释方式不生成目标程序,执行速度慢。如Basic,HTML,Java字节码。数据高级语言源程序解释程序计算结果206.4.1翻译过程——编译和解释解释方式的翻译工作由解21编译器——编译时的三个步骤词法分析器:识别源程序中构成单个实体的符号串。逐个字符地读源程序,跳过所有注释,识别哪些符号组合可以代表一个单元,并按照数、词、算术运算符等将单元分类,然后提交给语法分析器。语法分析器代码生成器源程序词法

分析器语法

分析器代码

生成器目标程序实际上这三步是交织进行的21编译器——编译时的三个步骤词法分析器:识别源程序中构成单22编译器——编译时的三个步骤语法分析器:识别程序的语法结构及单元的作用。用;表示语句结束,用()避免语法解释时的混乱。如ifB1thenifB2thenS1elseS2,需写成下图2两种形式之一。在识别声明语句时,把声明的变量及其数据类型或结构记录在符号表中。如intx,chary,floatz在识别命令语句时,根据符号表分析。如z=x+y,为了确定"+"实际的操作,需查看符号表得到x,y,z的数据类型,必要时进行“强制类型转换”。布尔表达式语句ifthenelse语句ifB1嵌套

then(ifB2thenS1)

elseS2ifB1

嵌套

then(ifB2thenS1

elseS2)或22编译器——编译时的三个步骤语法分析器:识别程序的语法结构23编译器——编译时的三个步骤代码生成器:为语法分析器识别出的语句生成机器指令,同时进行代码优化。例如有两条语句:x=y+z;w=x+z,单条语句执行时每条语句都需要从内存读取数据到CPU的寄存器,但实际上第一条语句执行后,x,z都已在寄存器中,于是第二条语句不需要读内存。23编译器——编译时的三个步骤代码生成器:为语法分析器识别出24Java程序的执行——先编译再解释当需要在远程机器上运行程序时,如果服务器提供源程序,那么在客户机端需要花时间翻译成机器语言;如果服务器提供机器语言程序,那么服务器需要为每种客户机上的机器语言提供不同版本。Java源程序先经过编译生成Java字节码,然后由JVM(JavaVirtualMachine,Java虚拟机)解释执行。Java字节码相当于是“标准的机器语言”,速度快,唯一,只要有相应的JVM解释器,Java字节码可在任何环境下运行。字节码文件

.class源程序

.java编译器javac解释器java运行结果24Java程序的执行——先编译再解释当需要在远程机器上运行25Java小程序——JavaApplet在WWW浏览器中,JVM是标准组件。控制网页动画的字节码文件被传送到本地机执行,此时也称在浏览器中运行的Java字节码为JavaApplet(Java小程序)。例如:IE执行下面的html文件<html><appletcode="welcome.class"width=275height=35></applet></html>25Java小程序——JavaApplet在WWW浏览器中266.4.2软件开发包

现在有很多支持不同高级语言的集成化的软件包,也称软件开发平台、软件开发环境等。程序员可以在其中方便地编辑、调试、编译、运行程序。如支持Java开发的NetBeans,用户可以创建一个“项目”,开始编写Java源程序,然后编译生成.class字节码文件,还可以Build(生成)对应的.jar可执行程序。266.4.2软件开发包现在有很多支持不同高级语言的集成276.5面向对象程序设计面向对象的程序设计方法,如C++、Java、C#等面向对象=类+对象+继承+消息+通信对一组具有相同属性和行为的对象的抽象描述。对象是类的实例。具有属性和方法。子类可以继承父类的属性和方法,实现代码重用。对象间通过消息(事件)进行通信,执行其它对象的方法。276.5面向对象程序设计面向对象的程序设计方法,如C++286.5.1类和对象对象object:在问题背景中有意义的事物或实体。一个对象有自己的名字,是代码和数据的组合。属性property:对象的状态,用数据的值表示。方法method:对象的行为,用代码表示。类class:一组具有相似属性和行为的对象的抽象。类是对象的模板,对象是类具体化的实例。消息message:一个对象对另一个对象的请求,包括消息接收者、消息接收者需要完成的方法及必要的参数。消息传递一般通过函数调用实现。286.5.1类和对象对象object:在问题背景中有意29类和对象的创建例该类的对象的内部变量(属性)该类的对象能执行的各种方法,以应对各种消息定义一个类——激光武器C++:LaserClassLaser1,Laser2;创建新对象Java和C#:LaserClassLaser1=newLaserClass();Laser1.fire();Laser2.turnLeft();调用对象的方法29类和对象的创建例该类的对象的内部变量(属性)该类的对306.5.2构造器通过构造器对类的对象设置不同的初始值。该类中包含一个构造器,创建对象时将给RemainingPower赋初值。C++:

LaserClassLaser1(50),Laser2(100);Java和C#:

LaserClassLaser1=newLaserClass(50);306.5.2构造器通过构造器对类的对象设置不同的初始值。316.5.3附加特性——继承、多态、封装继承inheritance:子类得到父类的全部属性和方法,还可以扩充和覆盖父类的属性和方法。classRechargeableLaserextendsLaserClass{doubleRechargeTime;voidRecharging(){……}}RechargeableLaserLaser3=newRechargeableLaser();Laser3.Recharging();Laser3.Fire();子类是对父类的继承和扩充316.5.3附加特性——继承、多态、封装继承inher32classtriangle{voiddrawme(){……}}classcircle{voiddrawme(){……}}多态多态polymorphism:也称重载。不同子类中同一方法名可定义成不同代码,所以它们在收到同一消息时做出的响应行为也不同。类的三种附加特性——继承、多态、封装32classtriangle{多态多态polymor33封装encapsulation:将属性和行为隐藏起来,外部通过特定的接口访问对象属性和方法。好处是保护属性和方法,修改程序时只涉及类的内部。类的三种附加特性——继承、多态、封装classLaserClass{privateintRemainingpower;publicvoidturnRight()

{……}publicvoidturnLeft()

{……}publicvoidfire()

{……}}私有属性或方法只能由本对象内的方法访问或调用。公有属性或方法可以被其它对象访问或调用。

33封装encapsulation:将属性和行为隐藏起来,346.6程序设计中的并发活动调用程序(调用者线程)过程(被调用者线程)过程被调用当有多个任务需要同时执行时,可以创建多个线程thread分别执行它们,每个线程的代码可以相同也可以不同。这称为并行处理或并发处理。并行处理:有多个CPU或Core,各自执行一个线程。并发处理:只有一个CPU,多个线程分享CPU时间。两个线程同步执行346.6程序设计中的并发活动调用程序(调用者线程)过程(356.7说明性程序设计(略)356.7说明性程序设计(略)36练习题1、如果函数f需要两个数值参数,并返回其中较小的数作为输出,那么f(f(w,x),f(y,z))的结果是什么?w,x,y,z中的最小值2、把下面的程序用if-then-else语句重写:

if(x>5)thengoto80

x=x+1

goto90

80x=x+2

90stopif(x>5)then

x=x+2

else

x=x+13、简化程序:while(x!=5)dox=5;x=536练习题1、如果函数f需要两个数值参数,并返回其中较小374、下列关于面向对象的描述中,不正确的是______。

A.每个对象都有一个唯一的标识符

B.一个子类能继承父类的属性和方法

C.一个父类包含了它所有子类的属性和方法

D.封装和继承是面向对象的两个主要特性C5、在面向对象方法中,一个对象请求另一个对象为其服务是通过发送________。

A.调用语句B.命令C.指令D.消息D练习题374、下列关于面向对象的描述中,不正确的是______。

38第6章程序设计语言6.1历史回顾6.2传统的程序设计概念6.3过程单元6.4语言实现6.5面向对象程序设计6.6程序设计中的并发活动6.7说明性程序设计1第6章程序设计语言6.1历史回顾396.1历史回顾第一代程序设计语言:机器语言:直接用二进制写指令和数据,计算机可以直接识别,执行效率高,速度快;严重依赖于硬件类型,程序不可移植,难记难读易错。每种CPU在硬件上实现了自己专用的机器指令集合。CPU设计者为每条指令分配一个二进制代码来表示它,程序就是这些指令组合而成的序列。例:156C166D505630CEC000

把单元6C和6D中的值相加存入6E单元6.1.1早期程序设计语言26.1历史回顾第一代程序设计语言:6.1.1早期程序设40第二代程序设计语言:最早于50年代汇编语言:为每条机器指令分配一个助记符指令码,操作数用符号地址表示,需汇编器把程序“翻译”成计算机可识别的机器指令。不同CPU的汇编语言也不同,可移植性仍很差,但代码效率高。6.1.1早期程序设计语言例如:计算256+16,80x86汇编代码如下:

MOVAX,256 ;把256放入累加器AX

ADDAX,16 ;把16与AX中值相加,结果存入AX汇编语言源程序机器语言目标程序汇编程序xx.asmxx.exe

3第二代程序设计语言:最早于50年代6.1.1早期程序设计41第三代程序设计语言:最早1954年Fortran高级语言:用近似英语的语句写程序,与机器无关,可移植性好。需编译器或解释器把程序“翻译”成机器码。面向过程的语言,如BASIC、PASCAL、C等;面向对象的语言,如C++、Java、C#等;高级语言的翻译方式:编译器对整个源程序经过编译处理,产生一个包含机器指令的目标程序(.exe,.com),然后执行它;解释器是边解释边执行,即在翻译指令的同时执行指令。6.1.1早期程序设计语言4第三代程序设计语言:最早1954年Fortran6.1.1426.1.3程序设计范型(软件开发的方法)命令型范型:传统程序设计方法。按照算法编写一个命令序列,然后执行它得到结果。如C。说明型范型:用户只描述要解决的问题,而程序设计平台提供解决各种问题的通用算法。如Prolog。函数式范型:程序由一系列预先定义的函数组成,一个函数的输出作为另一个函数的输入。如LISP。面向对象范型:软件是对象的集合,每个对象有一组方法来描述收到不同消息时应执行的动作。如C++。程序设计范型的演变函数式范型面向对象范型命令型范型说明型范型56.1.3程序设计范型(软件开发的方法)命令型范型:传统436.2传统的程序设计概念程序中的三类语句:声明语句:声明自定义的变量、数据结构等。命令语句:描述要执行的动作、步骤。注释语句:增加程序可读性,可以没有。程序的一般结构:声明语句部分,定义要操作的数据命令语句部分,描述要执行的动作66.2传统的程序设计概念程序中的三类语句:声明语句部分,446.2.1变量和数据类型一个C语言源程序:#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf(“Total=%d”,total);}常量函数函数语句和运算符变量变量:代表该数据所在的存储器地址。

一个变量要先声明其数据类型再使用。76.2.1变量和数据类型一个C语言源程序:常量函数函数语456.2.1变量和数据类型基本数据类型:程序设计语言内置,不能再分解为其它类型。如整型、实数型、字符型、布尔型等。构造数据类型:由基本数据类型按照某种方式组合构成。如数组、结构体、枚举、字符串、文件等。强类型化:每个变量都有一个类型,只有这种类型的值才能存储到该变量。强制类型转换:有些语言允许两种不同类型的数据参与运算,如整数和实数相加,此时其中一个值就要被强制转换为另一种类型。86.2.1变量和数据类型基本数据类型:程序设计语言内置,466.2.2数据结构变量也可以作为用户构造的数据结构的名字。intScores[2][9]

C中Scores[1][3],下标从0开始以数组为例:同构数组:同类型数据元素构成的集合,数组长度有限。通过“数组名[下标]”访问元素。异构数组:元素具有不同类型。通过“数组名.元素名”访问元素。(结构体)struct{charName[25];intAge;floatSkillRating;}Employee;96.2.2数据结构变量也可以作为用户构造的数据结构的名字476.2.3常量常量:为特定的、不会改变的值分配的名字。例如:#definePRICE30(C语言)constintAirportAlt=645;(C++,C#)finalintAirportAlt=645;(Java)106.2.3常量常量:486.2.4赋值语句赋值语句:将一个值赋给一个变量。z=x+y;运算符优先级:和四则运算法则相同重载(overloading):一个运算符的多种用法称为重载。如+用于数值和字符串时分别表示“加法”和“连接”。116.2.4赋值语句赋值语句:将一个值赋给一个变量。496.2.5控制语句结构化程序设计:程序通过顺序、分支、循环三种基本控制结构来实现。(goto被弃用)顺序结构:按照语句出现的先后顺序依次执行。分支结构:根据给定条件判断,决定程序执行的顺序。如单分支if-then-else,多分支switch-case。循环结构:重复多次执行语句集合。如while,for。if(B)S1

elseS2;switch(N)

{caseC1:S1;break;

caseC2:S2;break;

caseC3:S3;break;

}while(B)

S1;for(inti=1;i<4;i++)

body;126.2.5控制语句结构化程序设计:程序通过顺序、分支、506.2.6注释注释(comment):有助于理解程序。编译器和解释器将忽略注释语句。注释应该少而精,注释语句主要是描述语句或函数的目的和功能,而不是动作语句。在程序或函数的开始位置注释它的主要功能是个好建议。/*Thisisacomment.*///Thisisacomment.136.2.6注释注释(comment):有助于理解程序。516.3过程单元6.3.1过程procedure过程:实现一个任务的一个小型的子程序。调用(call,invoke):将程序控制权转移给过程的步骤局部变量(localvariable):在过程内部使用的变量全局变量(globalvariable):可在程序任何地方使用调用程序(调用者)过程(被调用者)调用调用返回146.3过程单元6.3.1过程procedure过程526.3.2参数parameter将需要重复使用的程序段或分解的子问题编写为一个逻辑上独立的子程序(过程或函数)。可以重复调用。main(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“Maxis%d”,c);}intmax(intx,inty){intz;z=x>y?x:y;return(z);}定义子程序调用子程序实参形参形参和实参在数量、位置和数据类型上都要一致。156.3.2参数parameter将需要重复使用的程序53参数的按值传递和按引用传递内存地址单元内容6000a=66001b=860026003x=66004按值传递时,实参把值传给形参,子程序中对形参的修改不会影响原来的实参。a按引用传递时,传递的是实参的内存地址,所以现在形参和实参对应同一个内存单元,修改形参也就是修改了原来的实参。&b按引用传递子程序中的形参y与实参b都指向同一内存单元6001c=max(a,&b);按值传递子程序中的形参x,与实参a初值相同main()中的实参amain()中的实参b16参数的按值传递和按引用传递内存地址单元内容6000a=6546.3.3函数function函数:类似于过程,目的是产生一个值,并返回给调用程序。函数头部以要返回数据的类型作为开始声明一个名为Volume的局部变量计算圆柱体的体积终止函数并返回变量Volume的值176.3.3函数function函数:类似于过程,目的55嵌套和事件驱动简介

嵌套:控制结构语句内嵌在其它控制结构语句中。事件驱动(event-driven)的软件系统:在图形用户界面(GUI,GraphicUserInterface)中,过程(子程序)是由一个事件(如点击鼠标、双击等)的发生而激活运行的。一个事件驱动软件系统中的过程描述当各种事件发生时应该做什么。当系统运行时,这些过程等待,直到相关的事件发生,然后它们被激活,完成运行后回到等待状态。例:procedureTForm2.Button1Click(Sender:TObject);

begin

……

end;//Delphi18嵌套和事件驱动简介嵌套:控制结构语句内嵌在其它控制结构566.4语言实现6.4.1翻译过程——编译和解释编译器对整个源程序经过编译处理,产生一个与源程序等价的目标程序;目标程序还可能要调用一些程序库中的标准子程序或其他语言编写的程序,通过连接程序将目标程序和有关的程序库组合成一个完整的可执行程序;执行速度快,修改源程序后都必须重新编译。同一种高级语言在不同CPU平台上需要不同的编译器。目标程序

.obj源程序

.c可执行程序

.exe编译器连接程序数据运行结果196.4语言实现6.4.1翻译过程——编译和解释编译器576.4.1翻译过程——编译和解释解释方式的翻译工作由解释程序来完成。解释程序对源程序进行逐句分析,若没有错误,将该语句翻译成一个或多个机器语言指令,然后立即执行这些指令;若解释时发现错误,则立即停止,报错并提醒用户更正代码。解释方式不生成目标程序,执行速度慢。如Basic,HTML,Java字节码。数据高级语言源程序解释程序计算结果206.4.1翻译过程——编译和解释解释方式的翻译工作由解58编译器——编译时的三个步骤词法分析器:识别源程序中构成单个实体的符号串。逐个字符地读源程序,跳过所有注释,识别哪些符号组合可以代表一个单元,并按照数、词、算术运算符等将单元分类,然后提交给语法分析器。语法分析器代码生成器源程序词法

分析器语法

分析器代码

生成器目标程序实际上这三步是交织进行的21编译器——编译时的三个步骤词法分析器:识别源程序中构成单59编译器——编译时的三个步骤语法分析器:识别程序的语法结构及单元的作用。用;表示语句结束,用()避免语法解释时的混乱。如ifB1thenifB2thenS1elseS2,需写成下图2两种形式之一。在识别声明语句时,把声明的变量及其数据类型或结构记录在符号表中。如intx,chary,floatz在识别命令语句时,根据符号表分析。如z=x+y,为了确定"+"实际的操作,需查看符号表得到x,y,z的数据类型,必要时进行“强制类型转换”。布尔表达式语句ifthenelse语句ifB1嵌套

then(ifB2thenS1)

elseS2ifB1

嵌套

then(ifB2thenS1

elseS2)或22编译器——编译时的三个步骤语法分析器:识别程序的语法结构60编译器——编译时的三个步骤代码生成器:为语法分析器识别出的语句生成机器指令,同时进行代码优化。例如有两条语句:x=y+z;w=x+z,单条语句执行时每条语句都需要从内存读取数据到CPU的寄存器,但实际上第一条语句执行后,x,z都已在寄存器中,于是第二条语句不需要读内存。23编译器——编译时的三个步骤代码生成器:为语法分析器识别出61Java程序的执行——先编译再解释当需要在远程机器上运行程序时,如果服务器提供源程序,那么在客户机端需要花时间翻译成机器语言;如果服务器提供机器语言程序,那么服务器需要为每种客户机上的机器语言提供不同版本。Java源程序先经过编译生成Java字节码,然后由JVM(JavaVirtualMachine,Java虚拟机)解释执行。Java字节码相当于是“标准的机器语言”,速度快,唯一,只要有相应的JVM解释器,Java字节码可在任何环境下运行。字节码文件

.class源程序

.java编译器javac解释器java运行结果24Java程序的执行——先编译再解释当需要在远程机器上运行62Java小程序——JavaApplet在WWW浏览器中,JVM是标准组件。控制网页动画的字节码文件被传送到本地机执行,此时也称在浏览器中运行的Java字节码为JavaApplet(Java小程序)。例如:IE执行下面的html文件<html><appletcode="welcome.class"width=275height=35></applet></html>25Java小程序——JavaApplet在WWW浏览器中636.4.2软件开发包

现在有很多支持不同高级语言的集成化的软件包,也称软件开发平台、软件开发环境等。程序员可以在其中方便地编辑、调试、编译、运行程序。如支持Java开发的NetBeans,用户可以创建一个“项目”,开始编写Java源程序,然后编译生成.class字节码文件,还可以Build(生成)对应的.jar可执行程序。266.4.2软件开发包现在有很多支持不同高级语言的集成646.5面向对象程序设计面向对象的程序设计方法,如C++、Java、C#等面向对象=类+对象+继承+消息+通信对一组具有相同属性和行为的对象的抽象描述。对象是类的实例。具有属性和方法。子类可以继承父类的属性和方法,实现代码重用。对象间通过消息(事件)进行通信,执行其它对象的方法。276.5面向对象程序设计面向对象的程序设计方法,如C++656.5.1类和对象对象object:在问题背景中有意义的事物或实体。一个对象有自己的名字,是代码和数据的组合。属性property:对象的状态,用数据的值表示。方法method:对象的行为,用代码表示。类class:一组具有相似属性和行为的对象的抽象。类是对象的模板,对象是类具体化的实例。消息message:一个对象对另一个对象的请求,包括消息接收者、消息接收者需要完成的方法及必要的参数。消息传递一般通过函数调用实现。286.5.1类和对象对象object:在问题背景中有意66类和对象的创建例该类的对象的内部变量(属性)该类的对象能执行的各种方法,以应对各种消息定义一个类——激光武器C++:LaserClassLaser1,Laser2;创建新对象Java和C#:LaserClassLaser1=newLaserClass();Laser1.fire();Laser2.turnLeft();调用对象的方法29类和对象的创建例该类的对象的内部变量(属性)该类的对676.5.2构造器通过构造器对类的对象设置不同的初始值。该类中包含一个构造器,创

温馨提示

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

评论

0/150

提交评论