第二章程序设计语言.ppt

上传人:本田雅阁 文档编号:3450515 上传时间:2019-08-26 格式:PPT 页数:44 大小:1.54MB
返回 下载 相关 举报
第二章程序设计语言.ppt_第1页
第1页 / 共44页
第二章程序设计语言.ppt_第2页
第2页 / 共44页
第二章程序设计语言.ppt_第3页
第3页 / 共44页
第二章程序设计语言.ppt_第4页
第4页 / 共44页
第二章程序设计语言.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第二章程序设计语言.ppt》由会员分享,可在线阅读,更多相关《第二章程序设计语言.ppt(44页珍藏版)》请在三一文库上搜索。

1、第一章 程序设计语言,软件技术基础,第二章 程序设计语言,程序设计语言是也是人人交换信息的工具,程序设计语言是人机交换信息的媒体,2.1 高级程序设计语言概述,最初的语言是机器语言,例:AXAX46,用容易记忆的英文单词代替约定的指令,易读写程序, 导致了汇编语言的诞生,使用汇编语言编程需要: 直接安排存储,规定寄存器、运算器动作次序 了解数据表示的约定(定点、浮点、双精度) 不同的计算机在指令长度、寻址方式、寄存器数目、指令表示等都不同,使得汇编程序不仅不可移植而且读起来也很费劲 导致了高级语言的出现,汇编语言和高级语言的诞生,DATA SEGMENT XX DB X YY DB ? DAT

2、A ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,XX CMP AL,0 JGE BLGR MOV AL,0FFH MOV YY,AL HLT BLGR: JE EQUT MOV AL,01H MOV YY,AL HLT EQUT: MOVE YY,AL HLT CODE ENDS ENDSTART,例,汇编:,高级语言:,如果用VB编写,本程序是: Dim x,y As Integer if x 0 then Y = 1 else if x = 0 then Y = 0 else Y =

3、 -1 endif endif,2.2 高级程序设计语言实现计算的方式,高级语言程序必须经过翻译变成机器语言程序 翻译有两种做法:编译和解释,相应的翻译工具分别叫做编译器和解释器 2.2.1 编译器工作原理 首先是识别符号串:关键字、字面量、标识符、运算符、注释行、特殊符号等六类符号,这个过程就是词法分析(Lexical Analysis) 第二步作语法分析(Syntax Analysis)一个语句就作为一串记号流由语法分析器处理。按照语言的文法检查每个语法分析树,第三步作语义分析(Semantic Analysis)对各句子的语法树作检查:运算符两边类型是否相兼容;该作哪些类型转换;控制转移

4、到不该去的地方;是否有重名等等。若有错转出错处理,否则生成执行代码 第四步是中间代码生成。中间代码是向目标码过渡的一种编码,形式尽可能和机器的汇编语言相似,但不涉及具体机器的操作码和地址码。好处是可在中间码上作优化 第五步是优化。对中间码程序作局部和全局优化,使运行更快,占用空间最小 第六步是代码生成 。 生成目标机器的目标码(或汇编)程序,源程序.c,目标程序.obj,可执行程序.exe,结果,编译,连接,执行,2.2.2 高级语言程序的解释执行,解释执行需要有一个解释器(lnterpretor ),它先作词法分析,建立内部符号表; 再作语法和语义分析,即以中间码建立语法树,并作类型检查。

5、完成检查后把每一语句压入执行堆栈,压入后立即解释执行,操作系统的命令、BASIC、VB、Prolog、LISP、Java、Java Script、Post Script都是解释执行的,各种应用软件提供的界面语言(一般都很小)多半是解释执行的。 解释器不大,工作空间也不大、能根据程序执行情况决定下一步做什么(人工智能经常是这样的)是它的优点, 不过,解释执行难于优化、效率较低,这是这类语言的致命缺点,2.3 高级程序设计语言基本特征,2.3.1 变量、表达式、赋值 计算的数据对象特别是计算结果的对象在编程时是不存在的。我们只能用变量表示它 例:已知三角形三边长度求面积: s := 0.5*(a+

6、b+c) area := sqrt(s*(s-a)*(s-b)*(s-c) 其中a,b,c,s,area是变量,0.5是常量(也是字面量),“+”和“*”是运算符,sqrt是开平方函数 表达式是常量、变量、函数调用或者由它们和运算符组成的序列 :=是赋值号它将右端表达式算出的结果赋给左端的变量,2.3.2 程序的控制结构-条件语句,有了条件判断if(E)then TB else FB end if,打破了自上至下逐句执行的模式 当表达式E为真时,执行TB块那一组语句 为假时跳过TB块执行FB块那一组语句 早期的if 语句借助goto语句改变执行顺序,但这种无条件goto不能保证结构的完整性,即

7、另外某处也可以goto到这个条件分支中,2迭代语句,例如,求自然数1到10000之和的程序,迭代结构的一般式有几种:,while (E) do S enddo 表达式E为真执行S ,直至E为假 (a)当循环,Do S Until (E) 先执行S再查看E, E为真不重复 (b) 直到循环,for (i=E0;E1;E2)do S enddo i得初值E0,判断iE2,执行S后i增量E1,判断若iE2, 出for-do (c) 计数循环,(1)结构化程序控制,(2)其它控制结构,方便使用的变体: Case语句是嵌套if的简化,Do-until,for-do均为while-do变体,其它控制,Ca

8、ll-return : 程序单元间的转移,执行后返回原地。 Exception-raise: 程序出了异常情况,raise(引发)后,正常执行转到异常处理程序段,并不再返回。在C+中,使用的是try throw结构,在VB中是ON ERROR GOTO 语句。 Abort(STOP) : 强行停止执行。 Exit: 转到本程序块末端。 Delay XX : 延迟XX时间后继续执行。,2.3.2 数据类型,计算机中计算对象(不管是常量、变量)都是有类型的,类型不同内部表示不同,就是象12+32.7这种简单的计算也是不允许的,要先做类型转换才能计算 1.常用的基本类型,强类型语言(所谓强类型,就是

9、编译时所有变量类型均确定,类型转换必须显式地给出) 无类型语言则无需变量的类型声明,给它什么值它就是什么类型。 2. 数组 Dim Names(15) As String 声明16个元素数组,每个元素都是字符串类型 Dim Matrix(9,9) As Double 是10*10=100元素的方阵,元素为双精度浮点数 不同类型的一维数组能否组成一多维数组?一般语言不可以,VB利用Variant可以把它们联接起来并把它叫做数组的数组,3. 记录,相同或不同类型数据组成的结构叫记录。 记录型记录了对象的属性信息,记录的各个组成部分,称为记录域,各个域的数据类型可以不相同。 用VB声明的一个例子:

10、Type Person Record Name As String Age As Integer Sex As String Telnumber As String Lable As Integer Endtype,在VB中,可以这样声明数组型变量: Dim Student1 As Person Record 访问记录元素用点表示法: Student1.Name=“ChangShan” Student1. Age=20 Student1. Sex=“Male” Student1. Telnumber=“(010)62783294”,4.指针类型,变量P中存放的是另一个变量A的地址,而变量A中存

11、放的却是数值:123,在讲述指针之前,让我们首先来看一个例子(我们采用C语言来描述): int I; /* 定义一个整型变量 I */ I=1; /* I赋值为1 */ I=I+1: /* 表达式计算 */ 计算机语言中的变量,代表的只是计算机内存中的一个存储单元,单元中存放的内容是变化的 若变量中存放的不是对象,而是另一个变量在计算机内存中的存储地址,则 这种变量被称为指针变量,提供指针类型的语言一般都提供两种与指针有关的操作:取地址操作和取值操作 取值操作取的是指针所指的变量的值,*P=123 取地址操作取的是变量的内存地址,P=&A 若给指针赋了初值,并在程序的运行期间不再改变,则称这种

12、指针为常量指针 指针是一种简洁、灵活的语言对象。审慎的使用可以显著提高编程的灵活性和效率,但不负责任的使用将使你掉进错误的深渊。,2.3.4 过程,函数过程 Funcion Fname(形参表) As 返回类型 类型和数据声明 语句集 End Function,子程序过程 Sub 名字(形参表) 类型和数据声明 语句集 End Sub,主程序中的数据通过型构中的形参表进入过程,1.过程的定义 (由型构和过程体组成),在过程中声明的变量是局部变量,只在过程中有效 2.过程调用 函数过程用函数名引用,需有与形参表变元的个数、类型、次序一样的实参表,子程序过程的引用是过程调用,也要有实参表 形参和实

13、参匹配后, 主程序中声明的变量在过程中自动可用。但反过来不行,外块的变量与内块同名: 就近声明优先 通过点表示法才能出现在内块 (P.X5.0) and X,2.3.5 过程的数据传递-无参过程,过程的型构中没有形参表定义,调用时不需要实参。过程中用到的数据是所在环境的全程量或自己内部声明的局部量,2.传递变元 从主程序向过程传递数据可以有两种方式:传值和引用 引用,Function Add(n1,n2 As Integer)As Integer Add=n1+n2 n2=0 n1=0 End Function,Dim A,B As Integer A=10 B=2 Sum=Add(A,B)

14、Debug.Print A Debug.Print B Debug.Print Sum,若函数中不加方括号中内容,则打印结果为:10 2 12 若函数中加上方括号中内容,则打印结果为:0 0 12 主程序向过程Add传递A、B时,把A、B的地址结合到n1、n2上。即引用主程序中的值。, 传值:A B的值拷贝到n1 n2中,过程中n1 n2改变 A B 不变,例如Pascal: Function F (Var X Y:float) return float; -引用 Function F(X,Y:float) return float; -传值,2.3.6 变量的生命期和Static变量,程序中

15、的变量生命期随其声明所在程序块而异 按其“寿命”的长短有:,若需要一个局部变量在局部程序块消失后依然保留其值,又不希望它是全局变量被该局部块以外的程序引用,则可使用静态(Static)局部变量 注意:Static 变量在局部模块中声明,2.3.7 输入/输出,程序的输入/输出分作两大类: 程序之间以文件形式进行数据传递。 人机交互, 一般由高级程序设计语言以过程调用的形式实现。过程在高级语言内部通过操作系统调用完成,2.4 面向对象程序语言的基本特征,面向对象语言是过程式语言的进一步发展。 2.4.1 对象概述,过程式程序的结构是层层调用,下层程序除自己声明的数据而外共享上层程序声明的数据 一

16、个子程序改动了共享数据则另一个必然受影响。我们叫它数据耦合,“分而治之”的思想使我们想到进一步封装,即把相关的数据与过程装在一起,尽可能让它独立。 设想有一程序有100个子程序,经过分析,这100个子程序并不是每个子程序都要用到所有的数据,把数据相关和程序相关(有嵌套调用)的分成组。,数据叫做对象的属性(Attribate), 操作则改称方法(Method), 即改变属性的方法。对象间相互只有通信,“调用”方法叫发消息(Message),这样封装的程序块是一个复杂的计算对象,私有的数据描述了本对象的状态,操作表示了本对象的行为 对象接受外界的消息而动作,改变对象内部的状态,2.4.2 类与对象

17、,对象是封装了属性和方法的实体,客观世界的对象往往有许多相似之处,我们沿用程序中表达数据的抽象办法,定义一类对象然后声明它的不同实例。 Dim v As Double v是双精型的数据变量 Dim OK As Command Button OK是按钮类的对象变量 这个类CommandButton是系统事先定义好的,OK是它的实例对象。有着和CommandButton一样的属 性和方法,只是要给出各属性的值。 类是生成实例的样板,是实例加工厂,堆栈类,Class char_stack int size /私有属性 char *tos, *end; char *s public: /公共方法 ch

18、ar_stack (int sz); char_stack(); int push (char c); char pop(); char top(); ;,再单写各方法定义,如: int char_stack:push(char c) return *tos=end? *tos+=c:0; ,有了这个类就可以对实例对象作计算了,下面给出该类的使用例子: main() char c char_stack stk1(100) /声明一实例对象stk1 stk1.push(%) /压入%到stk1中 stk1.push (#) c=stk1.pop() /从stk1中弹出一字符 if (stk1.t

19、op()=#). else ,2.4.3 类定义,类封装了属性和方法 类中的成员原则上是类私有(private)的,外部是看不到也不得访问的。 为了保证与类外界通信可以定义公有(public)属性。上例中属性全部是私有方法全部是公有的。当然,也可以定义公有数据和私有方法 由于类的数据结构比较复杂,类一般有构造(实例的)函数(constructor)和析构函数(Destructor)。它们都可以重复定义多次(以不同的方法构造实例),面向对象的封装性可以支持各独立对象的协作计算,不需要主控对象。 在其它类的方法定义中,可以嵌入向另外一些类发消息的语句,各类的方法互相发消息,只要其中某几个类的实例是

20、事件触发的,2.4.4 类继承,每个类都可以派生许多子类,子类继承父类的属性和方法。子类子可以派生它的子类 派生类只需定义自己的属性和方法,雇员信息继承关系,2.5 网络计算时代的编程语言,分布式客户/服务器计算时代(1885-1995),大大改变了单主机计算时代的应用开发概念。 Intrenet使计算机应用的概念又面临一次大跃进,数据描述语言(HTML,XML) 脚本语言(JavaScript,VBScript,PostScript) 平台无关的编程语言(Java),2.4.5 多态性,由于继承,属性和方法可能重名,这就产生了多态(同一名字执行内容不同)。 静态(在编译或连接(Linking)时就可以分辨的叫重载(overloading),例如,多个构造函数是最常见的。 运行中根据执行情况才能决定束定到哪个方法体叫动态束定,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1