第三章-过程式程序的设计语言-课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第三章-过程式程序的设计语言-课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 程式 程序 设计 语言 课件
- 资源描述:
-
1、第三章 过程式程序设计语言基本观点:计算实现的模型如果按冯诺依曼原理强制改变内存中的值叫命令(或译指令、强制Imperative式)的。由于强制改变值,程序状态的变化没有一定规则,程序大了就很难查错,很难调试,不易证明其正确。组织程序的范型即:算法过程+数据结构(计算控制+计算对象)3.1 计算对象表示值与类型3.2 计算对象实现存储3.3 计算对象连接束定3.4 计算组织-程序控制3.5 计算组织-函数与过程3.6 计算组织-抽象与封装类型是计算机可能实现的结构和约定对客观世界差异的刻划。同一类型的外延,即同一结构表示所有可能的值构成一个域。分类原则:同样表示结构,同样语义解释,同样的操作。
2、同类型值运算结果:同类型。无符号整数:二进制解释的值整数:符号 值 3.1 计算对象-值与类型0 10 0 0 1 1 11 11 0 1 0 0 0 1 0 1 0 1 00 0 0 0 1 0 1 0 1 0 1 1 浮点数:符号 阶码 尾数程序语言中:基元(primitive)类型:整型/实(定,浮)/字符/真值/枚举结构(structured)类型:元组/数组/记录(结构)/表/串3.1.1 字面量、变量、常量 名字操纵值,名:字面量 从名字即知类型 字面值不变 变量 符号名要声明类型 值可变 常量 符号名要声明类型 值不变 基元值的名字是地址的别名,地址值在计算机中不恒定 操纵地址的
3、名字是指针(地址变量)float *p,x=37.32;p=&x;(p)203C(x)117F117F37.32续名值可分导致 x =x +1;按名 按名取值:引用reference 存值 左值 右值 int&Rint=Svar Rint 是引用类型的变量,即左值变量必须给一右值,因 而成Svar别名 y=x+;x 既是右值也是左值3.1.2 值是头等程序对象程序语言中的值 字面量(整、实、布尔、字符、枚举、串)复合量(记录、数组、元组、结构、表、联合、集合、文件)指针值 变量引用(左值、右值)函数和过程抽象,数学对象参与运算的权利是一样的,值是计算对象也要按一致性原则:可出现在表达式中并求值
4、 可作函数返回值 可单独存储 可以构成复杂的数据结构 可作函数参数3.1.3 类型系统类型定义 值的集合和值上操作集合(V,Op)类型系统 一组可直接使用的类型类型规则类型检查机制3.1.3 类型系统 静态与动态 静 动 变量 有类型 无类型 动态简洁、灵活 参数 有类型 无类型 静态清晰、死板 值 有类型 有类型 弱/强类型无类型 LISP,Smalltalk弱类型 变量有类型。类型兼容性大,系统不作检查强制类型 隐式类型强制(转换),自动截尾,补零。显式 类型强制 PL/1伪强类型 静态均有类型且作检查,由于不严,导出等价准则 Pascal强类型 类型有严格定义,均作检查 Ada类型等价
5、按结构等价 type A is array(range 1.100)of INTEGER;type B is array(range 1.100)of INTEGER;OA1,0A2:A;OB1,OB2:B;OC1:array(range 1.100)of INTEGER;OD1,OD2:array(range 1.100)of INTEGER;OE1:A;OA1,OA2,OB1,OB2,OC1,OD1,OD2,OE1均等价 续 按名等价 OA1,OA2 是同一类型(都用A声明)OA1,OB1,OC1是不同类型(类型名为A,B,无)OD1,OD2 是同一类型(同时声明,虽无名)OD1,OC1
6、是不同类型(两次声明)OA1,OE1 是同一类型(虽两次声明,但同名)类型完整性准则 涉及值的类型中不能随意限定操作,力求没有第二类的值续3.1.4 类型兼容 不同类型值混合运算,人为定出计算级别,由低 层升格为高层,结果值是高层的 隐式转换 弱类型 I:=R;显式转换 强类型 I:=Integer(R);强类型按名判定,不同类型名则不兼容只有子类型不同名可以兼容 显式和隐式混合type BASE is INTEGER;subtype SON_TYPE is BASE range 1.1000;-子类型type DIVERSE is new BASE range 1.1000;-派生类型A,B
7、:BASE;C,D:SON_TYPE;E:DIVERSE;A:=B+C,-合法,结果为B类型赋给AA:=C+E;-不合法A:=C+SON_TYPE(E);-合法,有显式强制A:=E;-不合法,两个类型E:=B+BASE(E);-不合法续3.2 3.2 计算对象的实现计算对象的实现-存存 储储 存储对象是程序对象在计算机中的实现存储对象是程序对象在计算机中的实现 程序对象不一一对应为存储对象程序对象不一一对应为存储对象 x:=0;x,0是两程序对象是两程序对象 只有一个存储对象只有一个存储对象x加指令清零加指令清零 初值常量也不作为单独存储对象初值常量也不作为单独存储对象3.2.1 3.2.1
8、程序变量的时空特性程序变量的时空特性引用和指针引用和指针P指针是地址变量指针是地址变量 *P是是P所指的内容所指的内容,也有左值和右值也有左值和右值 *P左值是左值是P所指地址值,即所指地址值,即P的值的值 *P右值是所指地址内的内容值右值是所指地址内的内容值136140144A AB BC C3 31 12 23 31 16 63 32 20 0136140144(R RA A)3 31 12 2(R RB B)3 31 16 6(R RC C)3 32 20 0136144(p p1 1)4 44 48 8(p p2 2)4 45 50 04274.543312.27607.01(A A)
9、1 13 36 6(B B)1 14 40 0(C C)1 14 44 4引用是常指针是变量的别名引用是常指针是变量的别名,但实现是不一样的但实现是不一样的递引用递引用 dereferencedereference通过指针变量引用变量的值为递引用通过指针变量引用变量的值为递引用*P1右值即递引用右值即递引用有些语言显式递引用算符如有些语言显式递引用算符如FORTH的的1 13 1 13 VARIABLE xx (VARIABLE xx (声明变量声明变量xxxx并赋初值并赋初值13)13)2 0 2 0 VARIABLE Y (VARIABLE Y (声明变量声明变量Y Y并赋初值并赋初值0)
10、0)3 3 xx 2 xx 2*Y!(Y!(相当于相当于Y=xxY=xx*2)2)如果只写如果只写xx 2 xx 2*则为将则为将xxxx的地址乘以的地址乘以2 2放在放在Y Y之中之中3.2.1 变量的时态变量的时态 分配分配/未分配未分配/除分配除分配 分配分配:为程序对象创建为程序对象创建存储对象存储对象 编译时分配叫静态分配编译时分配叫静态分配 allocate 运行时分配叫动态分配如声明指针运行时分配叫动态分配如声明指针p,执执new才分配才分配 未分配未分配:声明了未分配运行时分配声明了未分配运行时分配 除分配除分配:取消存储对象取消存储对象(程序对象程序对象)delete操作显式
11、操作显式 自动除配自动除配:无用单元收集无用单元收集Garbage collection动态语言有,静态可有动态语言有,静态可有Ada可没有可没有C续续43?a b c d e f 声明和定义:定义必然声明;反之不然声明和定义:定义必然声明;反之不然 声明的两个作用声明的两个作用:给出对象:给出对象,该对象的时间有效性该对象的时间有效性 出了声明的作用域该对象失去定义。在声明的作用出了声明的作用域该对象失去定义。在声明的作用 域内显式删除也失去定义域内显式删除也失去定义定义定义/未定义未定义/失去定义失去定义 只要分配存储对象必然有残值只要分配存储对象必然有残值,无意义即未定义无意义即未定义
12、赋值或初值变量得以定义赋值或初值变量得以定义a,b:分配且有定义分配且有定义c,d:分配未定义或失去定义分配未定义或失去定义e,f:未分配或除配未分配或除配3.2.2 存储模型 基元类型值基元类型值 仅除数组仅除数组 记录、构造、表记录、构造、表 不可更新其中一元素不可更新其中一元素 函数抽象函数抽象,ML重过程重过程 变量引用变量引用可存储值可存储值StorableStorable:指最小的可直接访问的可存储单元中的值指最小的可直接访问的可存储单元中的值Pascal可存储值可存储值:集合不选择更新某一元素是可存储值,集合不选择更新某一元素是可存储值,Pascal,C ,Ada数组可选择更新数
13、组可选择更新,不是可存储值。不是可存储值。引用非可存储引用非可存储(C+可存储可存储),过程和函数名也非可存储过程和函数名也非可存储ML几乎都是可存储值几乎都是可存储值,也带来毛病:每次更新结构数据都要重也带来毛病:每次更新结构数据都要重来。它们是:来。它们是:(if exp then sin else cos)(x)得得sin(x)cos(x)可存储值可存储值 存储对象的生存期存储对象的生存期 全局变量全局变量 和引用程序寿命一样长和引用程序寿命一样长 局部变量局部变量 和程序中的一个模块寿命一样长和程序中的一个模块寿命一样长 持久变量持久变量 比程序寿命长除非显式撤销比程序寿命长除非显式撤
14、销 文件变量文件变量 瞬间变量(瞬间变量(transient)持久变量的逆持久变量的逆每个存储对象都有创建每个存储对象都有创建(生生),可用可用(活着活着),撤销,撤销(死死)的的生命期。按生命期长短分:生命期。按生命期长短分:静态存储对象静态存储对象 编译时分配存储对象编译时分配存储对象,近代语言类属对象直到装入后近代语言类属对象直到装入后确立确立(elaboration)之时才定下存储对象叫静态分配之时才定下存储对象叫静态分配 一旦执行不再改动其存储,直至所在存储单元无效一旦执行不再改动其存储,直至所在存储单元无效叫静态叫静态(Static)存储对象存储对象 全局变量均为隐式的静态对象全局
15、变量均为隐式的静态对象,COBOL,BASIC全全静态,静态,ALGOL,C是显示声明静态,是显示声明静态,Pascal除全局,除全局,Ada 不能。不能。C语言的静态变量是既私有又不随所在声明块中消逝语言的静态变量是既私有又不随所在声明块中消逝,全局于所在文件。全局于所在文件。auto是静态分配动态装入不叫静态对是静态分配动态装入不叫静态对象。象。Extern是静态对象。是静态对象。externstaticauto动态存储对象动态存储对象 把寿命特长的(如文件,全局量)排出来归到栈底的某一组,把寿命特短的(如循环控制变量)另立嵌套组,这个问题也就解决。块5块66块1块2块3块45466546
16、寿寿命命动态存储对象动态存储对象XX 二叉树其大小由输入值定在运行中确立。内存开二叉树其大小由输入值定在运行中确立。内存开辟堆(辟堆(heap)随生成随堆放动态存储对象。指针(即随生成随堆放动态存储对象。指针(即堆变量)所指程序对象用堆存放堆变量)所指程序对象用堆存放 问题:多次重分,内存成了小洞问题:多次重分,内存成了小洞 解决办法:按寿命分组寿命最长的放在较低(按解决办法:按寿命分组寿命最长的放在较低(按其所在块生命期)。其所在块生命期)。重复使用重复使用无法再分无法再分堆栈帧管理堆栈帧管理 由动态堆栈联想到一般嵌套式语言可按动态堆栈式管由动态堆栈联想到一般嵌套式语言可按动态堆栈式管理理,
17、多数变量和所在块寿命一样长多数变量和所在块寿命一样长(语言称之为自动变量语言称之为自动变量)动态堆栈式存储动态堆栈式存储 按程序动态执行按程序动态执行,以动态堆栈管理局部数据和动态生以动态堆栈管理局部数据和动态生成数据成数据 运行时堆栈运行时堆栈Run-time stack其底压入程序代码和全局,其底压入程序代码和全局,静态量。每执行到调用时生成一个堆栈帧静态量。每执行到调用时生成一个堆栈帧(frame)记录该记录该块数据信息块数据信息,每当返回则局部量自动撤销对于递归块的每当返回则局部量自动撤销对于递归块的局部量可多次生成多次消除。局部量可多次生成多次消除。动态链描述调用父辈地址动态链描述调
18、用父辈地址,返回地址是继续执行的下返回地址是继续执行的下一地址。一地址。静态链描述词法父辈静态链描述词法父辈lexical parent块地址块地址,按该块复制按该块复制局部变量。局部变量。参数参数 返回地址返回地址动态链动态链静态链静态链返回值返回值局部变量局部变量程序代码程序代码全局静态存储全局静态存储首先调用块首先调用块堆栈帧堆栈帧第二调用块第二调用块堆栈帧堆栈帧最新最新调用块调用块堆栈帧堆栈帧临时变量空间临时变量空间栈顶栈顶堆栈帧堆栈帧组织组织运行时堆栈运行时堆栈续续调调用用块块首首地地址址本本帧帧词词法法父父辈辈 举例举例 求整数连乘积之递归程序求整数连乘积之递归程序:functio
19、n product(jj:Integer):Integer;var kk:Integer;begin if jj (does (运行时动作指令,运行时动作指令,取下标取下标)5 5 rangecheckrangecheck (函数调用,函数调用,检查下标检查下标)6 6 if (if (如果不越界如果不越界)7 7 linearsublinearsub (函数调用,函数调用,计算线性下标值计算线性下标值)8 8 then (then (给出数组基地址和位移给出数组基地址和位移)9 9 ;(;切换成解释执行,切换成解释执行,数据类型定义毕数据类型定义毕)10 10 11 211 2by3arra
20、y box (by3array box (声明并分配名为声明并分配名为boxbox的数组变量的数组变量)12 10 1 2 12 10 1 2 box (box (给给box(1box(1,2)2)赋值赋值10)10)3.3.3 3.3.3 无类型语言束定无类型语言束定名字名字 束定束定length age 符号表符号表 运行时内存存储对象:类型标签运行时内存存储对象:类型标签scalar numberarray of 4 number不同时刻可以将一名字束定到不同存储对象上。不同时刻可以将一名字束定到不同存储对象上。APL语言可显式操纵束定:束定符号语言可显式操纵束定:束定符号 APLAPL
21、是无类型解释执行语言,以下是计算税金的程序:是无类型解释执行语言,以下是计算税金的程序:TAXCALCTAXCALC 1 ENTER GROSS PAY 1 ENTER GROSS PAY 2 GROSS 2 GROSS /输入什么值输入什么值GROSSGROSS就是就是 什么类型什么类型,表示终端输入。表示终端输入。3 3 LESS LESS GROSS 18000/GROSS (n mod 2=0)函数型构函数型构 函数体函数体 束定束定 函数定义函数定义 值定义值定义 fun even(n:int)=(n mod 2=0)函数抽象函数抽象 体体顺序声明的顺序声明的Ada例子例子packa
22、ge MANAGER is -package MANAGER is -声明程序包规格说明声明程序包规格说明 type PASSWORD is privatetype PASSWORD is private;-声明私有类型未定义声明私有类型未定义 NULL_PASSWORD:coustantNULL_PASSWORD:coustant PASSWORD PASSWORD;-立即立即用私有类型声明变量用私有类型声明变量 function GET return PASSWORDfunction GET return PASSWORD;-返回私有类型函数返回私有类型函数 function IS_VAL
23、ID(P:in PASSWORD)return BOOLEANfunction IS_VALID(P:in PASSWORD)return BOOLEAN;PrivatePrivate type PASSWORD is range 0.700 type PASSWORD is range 0.700;-定义私有类型定义私有类型 NULL_PASSWORD:constant PASSWORD:=0 NULL_PASSWORD:constant PASSWORD:=0;-此时才定义此时才定义end MANAGERend MANAGER;顺序与并行声明顺序与并行声明 声明是顺序的声明是顺序的,声明后
24、立即有用声明后立即有用,次序是重要的次序是重要的 D1;D2;D3 /D2中可利用中可利用D1的声明,的声明,D3可利用可利用D1,/D2的声明(见的声明(见Ada例)例)并行声明并行声明D1D2它们一般相互独立它们一般相互独立,确立次序不影响语义确立次序不影响语义 ML的例子:的例子:Val Pi=3.14159 and sin=fn(x:real)=(.)and cos=fn(x:real)=(.)and tan=fn(x:real)=sin(x)/con(x)非法非法 并行声明仅当声明语句结束,各并行子声明同时生效并行声明仅当声明语句结束,各并行子声明同时生效 递归声明递归声明 用声明定
25、义自己的声明用声明定义自己的声明 D=D 直接递归。名字一样就是递归直接递归。名字一样就是递归 D1=D2 间接递归,或相互递归间接递归,或相互递归 D2=D1 指明递归(指明递归(ML)val rec power=fn(x:real,n:int)=if n=0 then 1.0 else if n S1;case v1:S1;when v2=S2;break;.case v2:S2;when vm|vn=Sn;break;when others=St;default:St;end case;next;执行一个Si跳到end case 没有break要顺序执行,直到next e1e2e3S1S
展开阅读全文