欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    研究生课程程序语言设计原理教程第08章.ppt

    • 资源ID:2424529       资源大小:162.50KB        全文页数:23页
    • 资源格式: PPT        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    研究生课程程序语言设计原理教程第08章.ppt

    第8章 抽象与封装,函数和过程是封装的程序实体,它有数据和操作,规格说明(型构)和过程体,一体使于人们控制复杂性 Pascal统一的嵌套结构不造于大型程序,数据2sub1-sub10,数据4sub22-sub28,数据1sub11-sub15,数据3sub16-sub21,main,续,将相关的数据和操作封装成大模块(若干类型,若干过程/函数)结构上形成包package或模块 Modula包是可分别编译。随时连接软件资源,是解决复杂系统的有力手段包的规格说明和包体显式分开。语义上正好是“作什麽”,“怎麽做”,8.1 模块和包,规格说明和体在表示结构上的分离。有利于修改,维护 封装实现数据隐藏,有利于安全 规格说明是程序包的抽象,有利于复杂系统简化,模块(包)封装数据与操作,它有可控界面,外界不能操纵私有数据引出公有(public包的使用者可见)、私有(private本包所有操作可访问,包外不可见)、保护(protected,包外不可见,但本包的子包可见)概念 包只是以封装手段,可有/可没有逻辑语义-只有数据无操作,数据块BLOCK DATA(FORTRAN)-只有操作无共享数据如函数包,数学库-有数据有操作,一口对外可模拟自动机-有数据有操作,模拟客观世界对象增加程序表达能力-封装的包可实现复杂的数据类型ADT,Ada 的复数程序包 package COMPLEX is type NUMBER is record REAL_PART:FLOAT;IMAG_PART:FLOAT;end record;function+(A,B:in NUMBER)return NUMBER;function-(A,B:in NUMBER)return NUMBER;function*(A,B:in NUMBER)return NUMBER;end COMPLEX;package body COMPLEX is endCOMPLEX;,有了这个程序包我们可以编出复数应用程序:with COMPLEX;use COMPLEX;procedure MAIN is COMP_1:NUMBER=(1.0,2.0);-1+2i COMP_2:NUMBER:=(3.0,4.0);-3+4i W,X,Z:NUMBER;begin W=COMP_1+COMP_2;-W=4+6i X=COMP_2-COMP_1;-X=2+6i Z=COMP_1*COMP_2;-Z=-5+10i end MAIN;,8.2 抽象数据类型,数据抽象,数据抽象是抽象数据类型的方法学定义一组数据集V,以及其上的操作集Op,构成ADT(Abstract Data Type)T=(V,Op)-什么和怎么做分开(规格说明和体)-实现数据隐藏(体中声明的数据和操作外界不可见)-分别开发分别编译(可做大程序)-简化复杂性便于调试(利用抽象实现分治)-构造新类型,计算直观方便(面向对象的基础),构造新类型,Swith COMPLEY use COMPLEY;Procedure MAIN is C1:NUMBER is=(1.0,2.0);C2:NUMBER is=(3.0,4.0);W,X,Z:NUMBER;begin W:=C1+C2;X:=C2-C1;Z:=C1*C2;end MAIN,-,*,+,NumberLEX,COMP,构造函数和析构函数,变量类型 V:integer;以类型指明程序对象变量抽象数据类型,声明时要指明如何构造C:NUMBER:=(1.0,2.0)较简单可用赋初值办法,复杂在运行中由构造函数(constructor)完成 C=ADT_Name()构造函数(constructor)和ADT同名不再使用的程序对象,用析构函数(destructor)显式删除一般形式是:ADT_Name()和ADT同名 ADT_Name(),C语言以文件实现抽象数据类型,C语言4种文件-头文件“modules.h”定义宏和类型声明-主模块“name.c”给出新类型的数据和操作定义-其它模块“other.c”实现头文件中声明-通过makefile指明各文件关系 make SOMETYPE SOMETYPE:name.o other.o/连续两模块的目标码 文件取名SOMETYPE CC_o SOMETYPE name.o other.o/编译并连成为 SOMETYPE的目标文件 name.o:name.c modules.h/两源文件连成为name.o CC_o name.o name.c/源文件编译后形成目标文件 other.o:other.c modules.h CC_o other.o other.c/SOMETYPE 如预定义的了,8.3 类属,函数是表达式集的抽象、过程是命令集的抽象,类属(generic)是声明集的抽象。即声明的变量、类型、子程序都是参数化的。Ada类属子程序:generic type ELEMENT is pravite;-类属类型参数 procedure EXCHANGE(FIRST,SECOND:in out ELEMENT);TEMP:ELEMENT;-程序中用类属形参 begin TEMP=FIRST;FIRST=SECOND;SECOND=FIRST;end EXCHANGE;关键字procedure换成package即为类属包,参数化类型与实际类型结合。由类属设例指明:procedure INT_EXCHANGE is new EXCHANGE(Integer);实在的Integer与ELEMENT匹配,即在procedure中任何出现ELEMENT的地方以Integer代,等于有了整数的 EXCHANGE 如同样板,可以写出多个过程:procedure CHAR_EXCHANGE is new EXCHANGE(Character);procedure SMALLINT_EXCHANGE is new EXCHANGE(MY_INT);,8.3.1 类属定义一般形式,generic|package GENERIC_PKG is-用类属参数的包.end GENERIC_PKG;类属实例化是在有了实在参数以后作实例声明:package INS_PKG is new GENERIC_PKG();类属形实参数的个数、次序要匹配。,类属参数,原则上声明中的所有程序对象都可以参数化,其实现机制如同子程序中参数结合,类属值一般是复制机制,类属对象(变量)、类型、子程序用引用机制。取决于实现。类属声明是 in 模式变量 可换值 inout模式变量 可换变量类属类型private 私有 可以和任何类型匹配()枚举 可以和任何枚举类型匹配 range 整 可以和任何整型匹配 delta 定点 可以和任何定点类型匹配 digits 浮点 可以和任何浮点类型匹配类属子程序with procedure()可以和任何过程匹配,同时类型参数例化,Ada的类属程序包的例子 程序包中封装一分类和归并程序。被分数据按数组类型设计,它的元素类型,按升序还是降序,数组下标,都参数化:generic type ITEM is private-数组元素类型参数化 type SEQUENCE is array(Integer range)of ITEM;-数组类型参数化。ITEM马上就用了 with function PRECEDES(x,y:ITEM)return Boolean;-参数化操作未定升降序 package SORTING is procedure SORT(S:in SEQUENCE);procedure MERGE(S1,S2:in SEQUENCE;S:out SEQUENCE);end SORTING;,有两个实在函数:function=(X,Y:Float)return Boolean;那么就可以作以下设例声明:type FLPAT_SEQUENCE is array(Integer range)of Float;package ASCENDING is new SORTING(Float,FLOAT_SEQUENCE,=);这样,就有了一个升序,一个降序的两个程序包。,续,类属动态实现问题,类属程序是抽象程序可以编译,但不可执行,每次执行的是实例程序。其编译执行如同C语言之宏替换,也就是参数静态束定于实参,强类型语言可以做到。类属程序只有一个,运行时动态束定就不需要显式设例。因此,动态设例的程序表达能力更强,程序易于扩充。,8.4 类和对象,包充作程序对象with SYSTEM;package STACK is function PUSH(k:Integer)return Boolean;function POP return Integer;function TOP return Integer;-返回栈顶元素end STACK;package body STACK is STKLEN:constant:=10;-堆栈有十元素 STK:array(1.STKLEN)of Integer;-整数堆栈体 TOS:Integer range 1.STKLEN;,function PUSH(k:Integer)is begin if TOS 0 then return STK(TOS);else return SYSTEM.MIN_INT;-交SYSTEM包处理 endif;end TOP,function POP return Integer is ANS:Integer;-工作变量局部量 begin ANS:=TOS;TOS:=TOS-1;return ANS;end POP;begin-程序包是资源,以下执行代码在装入后,TOS:=0-程序运行时首先执行,为了初始化。end STACK;这个对象是实例对象,可以对它施行堆栈操作 stack.PUSH(N);stack.pop;stack.top;包名充作实例对象名。,类对象生成实例对象,C+的类定义 class char_stack/以下是该类的私有部分 int size;char*tos,*end;char*s;public:/以下是该类公共部分 char_stack(int sz)s=new char size=sz;tos=s;end=tos+(size-1);char_stack()delete s;int push(char c)return(tos s?*-tos:);char top();/top的声明;/类定义结束 char char_stack:top()/top的定义 return(tos s?*tos:);,相应主程序main()char c;char_stack stk1(100);/构造子,形同类型说明 char_stack stk2(10);stk3=new char_stack(20);stk1.push(#);/向Stk1发push消息 stk2.push(%);c=stk2.pop();,续,.类、类型、抽象数据类型 同异-都是(A,Op)值集和值上的操作集,在这个意义上,它们通用 C+按此处理-类型和抽象数据类型都是类型。如同人和黑人 都是人,类型沿用历史理解是基元类型+简单结构类型(预定义)抽象数据类型类型是用户可以用基本类型构造 复杂类型(用户定义)-类和抽象数据类型都是在类型体系结构上定义操作集,类是用户定义的程序对象的概括抽象。程序对象是封装的 自主的,主动实施类中定义的操作,加工私有数据。抽象 数据类型只说明程序对象的类型,被动地接受该类型允许 的操作。.ADT:V 抽象数据类型的变量(名)C:V 类的实例对象(名).()OP1(V)V是该类型值的引用 V.OP1 V是实例对象名,不涉及值-类/类型和子类/子类形差异更大 子类是类的特化内涵增加 子类型是类型的子集内涵所小,外延都减小,

    注意事项

    本文(研究生课程程序语言设计原理教程第08章.ppt)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开