Fortran95第三篇--计算任务的剖分与组合--第12章--程序的单位.docx

上传人:李司机 文档编号:7216790 上传时间:2024-06-29 格式:DOCX 页数:21 大小:78.47KB
返回 下载 相关 举报
Fortran95第三篇--计算任务的剖分与组合--第12章--程序的单位.docx_第1页
第1页 / 共21页
Fortran95第三篇--计算任务的剖分与组合--第12章--程序的单位.docx_第2页
第2页 / 共21页
Fortran95第三篇--计算任务的剖分与组合--第12章--程序的单位.docx_第3页
第3页 / 共21页
Fortran95第三篇--计算任务的剖分与组合--第12章--程序的单位.docx_第4页
第4页 / 共21页
Fortran95第三篇--计算任务的剖分与组合--第12章--程序的单位.docx_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《Fortran95第三篇--计算任务的剖分与组合--第12章--程序的单位.docx》由会员分享,可在线阅读,更多相关《Fortran95第三篇--计算任务的剖分与组合--第12章--程序的单位.docx(21页珍藏版)》请在三一办公上搜索。

1、第三篇计算任务的剖分与组合从前,有两个及匠,一个叫发拉,一个叫Ia普斯。两人都很受族客的欢迎,他们各自的工场中的电话总是响个不停,因为老有新主顾上门。不过,也拉发了大财,坦香斯却越来越穷,靛终连店铺裁给亏没了.这是为什么呢?他们做的表裁是由100O个家件蛆成“坦瞥斯做表的方式是连坡地把一只表从头做列足,tt尚表袋完一只次就不辞不中途放下(比如说要去接客户电话了),那么装了一半的我就会立即我掉,又得从我装起:Si客们越再爱他的哀,他的电话就越多,也就越难得列足移的不板打断的时网来装成一只木.笈拉做的火并不比妲普斯的角洁。但他及过设计,用十个事件笈成一个加件:十个姐件又可装成更大的炉件。十个大轨件

2、构成的系统就是按只衣。因此,当左拉不得不放下装了一部分的表去接电话时,他只领失了一小部分活儿,他装表所用工时只是坦普斯所用工时的一个零头。在这个寓言里面,我的中心w炒光.,具有用难控的系统就好是实行层圾.结构的型式而区嫉好构有一些与系统的具体内容无关的共用性质.我将论证说,层级结构是构造田中事物的战扰师们所运用的主要结构方式之*-IISimOnWTheSacnccsoftheArtificial一个计算任务可以很简洁.运用几个讲句进行描述,执行之后就可以得到结果,但是假如说我们人类运用计W机只是进行那种简洁的计算,明显是奢侈.而困难的计W任务,则和任何困难M物一样,具有特别浩大的内部结构,人类

3、解决困理问遨的一般思跖,就是把一个大的结构分解为相对比较小的结构,假如可能就始终分解到特别简洁的结构,分别斛决了那些简洁结构的何SS,依据我们分解大问遨的逻轲,也就解决了起先的困难问遨-如何运用程序语言来表达这个解构的思路,就是本篇我们要探讨的主要论胭。首先我们探讨一个FORTRAN程序所可以具有的结构,依据这个语言对程序结构模本的规定,我们就可以规划相W的针对计克任务的问跑解构方式.所谓FORTRAN程序的结构,就地个FORTRAN程序可以包含那些程序单位,然后这些单位又必需如何组装在起。所以我们分类探讨了FORTRAN的程序单位之后,就须要探讨数据流与指令流是如何进行不同程序班位之间的通讯

4、的,通过这种通讯,一个由很多程序雎位组成的FORTRAN程序就构成了一个有机的整体,或原了被支解的问册的原来结构,特殊的,我们还须要探讨最为重要的程序单位,就是过程,它的可执行程序单位.的主体.其中FORTRAN谙有以标准形式给出的固行过程,相当于为解决常见计算问遨而打算的常用J1.具.娴熟运用它们可以达到事半功倍的效果.第12章程序的单位一个H)RTRAN程序可以由那些单位组成,在第一篇以及第4章都巴经简洁涉及过.在这里我Q要详尽地探讨这个问题.特殊是给出每种程序单位的结构与功能.12.1程序单位FORTRAN的程序单位分为两大类: 可执行程序单位; 不行执行程序单位.其中可执行程序单位,用

5、来执行一个完整的功能,包括: 主程序: 外部南致子程序: 外部于例行程序子程序.不行执行程序单位,用来为其他程序单位供应定义,包括: 模块程序单位: 数据块程序单位.因此上面的五种类型的程序单位构成了ToRTRAN程序的基本单位,不过在后面我们会看到,数据块程序单位属于早期版木的遗留物,完全是多余的, 个完整的FORTRAN程序至少须要一个主程序,而且也只能有一个主程序.一般说来,要完成一个完整的计算任务,除了一个主程序之外,往往还须要有函数以及子例行程序作为协助,这时,主程序的作用就还包括驱动与管理这些作为过程的外部子程序,使得它们构成一个整体,从而完整地解决相关计修何物.模块程序单位主要是

6、供应应漏程者用来组织程序元素的,一个模块程序单位包含了如下几个方面的内容: 数据声明; 派生类型定义: 过程界面信息: 供其他程序单位运用的子程序定义,因此这样一个程序单位本身不是可执行程序单位。数据块程序单位用于给出命名公用块里面的变出的初始值,因此同样不是可执行程序单位。由于FORTRAN的现代版本引入了模块结构,而模块能够供应全局的数据初始化,因此数据块程序单位几乎何以说是多余的。由于在第13章我们构特地探讨过程以及过程的应用,因此属于过程的外部函数子程序和外部予例行程序f程序,在本章都只是简略说明,须耍具体探讨的地主程序利模块.谱句类型与旌序单位之间的各种程序单位里面并不是能够运用任何

7、FORTRAN谙句.兼容性在下面的衣中)以说明。121语句与程序单元的兼容性语句主程序模块说明部分数据块外部于程序模块子程序内85子程序界面体USE语句可可可可可可可ENlTiY用句否否否可可否否FORMAT语句可Sf.-可叫T否几种出明语句”可可可可灯1DATA语句可可可可可1否派生类型定义可可可BJ可可可界面块可可否可可可可语句函数”可否S可可可否CONTAINS可可三可可否否可执行语句可否否可可可否留意:*几种声明语句包括:PARAMETER语句,1MP1.laT语句,类型声明语句以及说明语旬. ifi句函数语句M于过时语成分.一个FORTRAN程序总是从主程序的第个可执行语句起先运行,

8、在第三章我们已经探讨过一个完整FORTRAN程序的结构.在下面的图12-1中,我们再给出一个完整FORTRAN程序的示意图,它包含了一个主程序,一个模块,以及两个子例行程序.PROGRAMtimekeeperUUQCtSSo*vgxCA1.1.TO0CTNEUF)ENDPROGRAMTIMEKEEPERSubroutinoparts&(PARTKOE1.PRCUSEACCWSsoRV_BoXENDSUBROUTlSttPARTSMOOU占ACCESSORYBOXDSOMOD1.1.EACCCSSORVgXSUBROUTINGTOOUSCVC三)USECCSSORVBOXCA1.1.RTS(FA

9、1.1.1T.*C.22ENDS1.ROUTNGTOO1.112-钟&M作树侪的结构在上面的例子里面,我们假设在装配一块钟表时.零件装配与工具配套分别由两个徒弟完成居么等负说工具配套的徒弟把零件都放式在适当的工具旁边的时候,就可以让钟衣匠起先总的钟表装配工作了.因此模块ACCESSORY_BoXM件箱)里面包含了于例行程序PARTs(零件)与ToO1.a具)所须要的一切数据与过程信息,主程序调用了子例行程序TOO1.而主程序本身不须要模块ACCESSORY_BoX里.面的信息。12.2主程序主程序说明白整个FORTRAN程序的逻轼结构,同时整个程序的运行就是从主程序的第一个可执行语句起先的。不

10、过从形式上看,一个主程序和外部子程序其实的特别类似的。一个主程序包括如下三个基本部分: 说明部分.这个部分定义了程序的数据环境。 运行部分.整个程序从这个部分的第一个可执行语句起先,该部分给出了整个程序运行的逻辑结构。 内部子程序部分。处于主程序内部的与主程序共享数擀的过程.下面我们分小节说明主程序的说明部分和运行部分,由于内部子程序部分由一个或多个内部过程组成,而内部过程的探讨见12.3,因此在12.2珞过。终止主程序运行的方式有如下两种: 在程序的随意位置执行STOP语句,就能即刻终止整个程序.所谓前意位置.包括组成程序的随意程序单位的随意位置。 程序的运行到达主程序的最终一个语句.12.

11、2.1主程序的组织主程序的形式(RUOl)如下:fPRCXjRAMpforanvwmcIspecification-partIcxccution-panItnlemul-ubpr(run-nrlENDIPKOGRAMpngran-!une卜面是一个,M响沽的FORTRAN程序:【例3】END下面是一个略微有意思点的最简沽程序:【例12-2】PR()GRAMHIMuNT,“HE1.1.O”END主程序的一殷规则如下: PRoGRAM语句作为主程序的程序头是可选的.但是其他的程序单位都必需具有科序头. 假如程序名称出现在END谱句当中的话.那么该名称必需和PRoGRAM-甸里面的名称一样,井且放置

12、在关键诃的后面.不能单独出现END语句当中. 主程序不供应呼元. 主程序不能在任何位置被引用,也就是说,主程序不能被干腌或间接地递归运行. 主程序不能包含RETURN语句和ENTRY语句,不过主程序里面的内部过程可以包含RETURN语句。12.2.2 主程序的说明部分主程序的说明部分主要就是用来描述程序的数据环境.主程序里面所能桃包含的谙句类型见表12-1.具体列出如下表12-2:*12-2主程序说明部分允许运用的语句A1.1.OCATAB1.EPARAMETERCOMMONPOINTERDATASAVEDIMENSIONTARGErEQUIVA1.ENCEUSEEXTERNA1.派生类型定义

13、H)RMA界面块IMP1.ICITi科句由数i句INTRINSIC类型泗明追句NAMtlJST主程序的说明部分的一般规则如卜。 OPTIONA1.以及INTENT屈性或谱句都不能在主程序的说明部分出现,因为它们都只能应用于喳元. 可访问性说明PUB1.IC以及PRlVATE都不能出现于主程序,因为它们都只能应用于模块内部。 在主程序里面,动态对象没有意义 尽管在主程序里面可以运用SAVE属性或语句,但它们在主程序里面并没有实际的作用。12.2.3 主程序的运行部分主程序的运行部分的可执行谙句构成,能蜂出现在主程序的运行部分的语句列出如下表12-3所示;表123主程序运行部分允许运用的语句A1.

14、1.OCATEoBACKSPACEIFCA1.1.IF玷构CASE结构INQUIREC1.OSENU1.1.IFYCONTINUEOPENCYC1.EPRINTDATAREADDEA1.1.OCATEREWINDDO结构STOPENDWHEREENDFI1.HWHERE”,构ENTRYWRITEEXIT算术IF语句FORI,I.从俗语句H)RA1.1.fft构计算GOToift句FORMAT指针Wttt15句12.3内部过程内部过程和外部过程的主要差别就在于它们的的位置不同:内部过程必需封袋在主程序或其他过程子程序内部,这就导致以下后果: 内部过程的名称是局部的而不是全同的: 内部过程只能被包

15、含了它的定义的程序单位所引用: 内部过程能够访问它的宿主的数据时象: 内部过程可以递归,不能包含ENTRY语句,也不能作为实元传递。构造内部过程的主要绿由如下: 内部过程供应了能膨很便利地访问宿主环境的过程, 内部过程供应了一种具有语句函数功能的多语句形式。 便干模块设计以及具有更好的软件工程效能.内部过程之所以能峪提岛平安性以及敏播性,是因为我界面特别消她.宿主的内部过程部分的形式(R210)为:CONTAINSinccmnl-subprogramIintcmalgjam).其中的内部子程序由一个或多个内部过程组成,而内部过程或者由如下形式(R1216)的函数组成:funccion*stat

16、cmcn(Ispecitkalionpaitl(execution-piirtIENDFUNCTIONfuncion-namc或者是由如下形式(R122I)的子例行程序组成:HlblnXHinertNtCvneMspcci11caiix)prt!execution-pan)tNDSUBROUTINE11ubuleune【例12-3PROGRAMWEATHERCONTAINSFUNCTIONrORM(CWUmENDFUNCTIONSTORMEND其中的过程STORM就是主程序WETHER里面的一个内部过程。内部过程的一般规则如F: 内部过程内部不能再包含内能过程,即内部过程不能嵌套. 内部过程不

17、能包含ENTRY谓句. 内茄过程不能包含PUB1.IC和PRIVATE属性或语句 内部过程不能作为实元传递. 内部过程的说明部分除了可以包含主程序的说明部分所许可的语句之外,还可以包含INTENT语句以及OpTloNA1.语句。 内部过程的运行部分除了可以包含主程序的运行部分所许可的谱句之外.还可以包含RETURN语句. 在CONTAlNS语句之后,至少须要有一个内部子程序。内部过程可以被它的宿主的运行部分引用,也能弊被同一个宿主里面的全部内部过程引用.包括它自身.因此内部过程可以干脆或间接地运用递归的形式.内部过程名称属于局部名称,因此满意如下规则: 内部过程名称具有比相同名称的外部过程或固

18、有过程更高的优先级. 内部过程名称必露不同于任何同一个宿主里面的其他内部过程的名称,也必需不同于任何通过模块进入宿主或进入该内部过程的名称,内部过程的名称必需不同于任何宿主或自身内部的其他局部名称,也必需不同于通过USE语句可访问的名称.有关宿主以及内部过程里面的其他名称所须要遵循的规则参见比15章有关宿主关联的内容.12.4 宿主关联内部过程当中的某些变量有可能并非源自内部过程本身,而是从内部过程的宿主单位继承而来的,这样的变成被称为宿主关联的,它反映了内部程序与宿主在数据沟通方面的亲密关系。宿主关联作为一种数据通讯方式,同样存在于模块过程与其作用域单位之间,因此我的将在第15章的更为一般的

19、情形下探讨它.12.5 外部子程序同样外部子程序是由一个或多个外部过程组成,因此下文当中,我们格依据具体的上下文交苦运用外部子程序与外部过程这两个慨令。外部过程与内部过程从语法上来看,实质上是一样的,因为终归它们都是属于过程,因此外部子程序的语法形式和内部子程序一样,即:外郃子程序由一个或多个外部过程组成,而外部过程或者是由如下形式(R1216)的函数组成:func(ion*sta!cmcn(%peciealionpaft(cxccution-fKfl)IinWmal-VUbprogram-part)ENDFUNCTIONIfunciion-name)或者是由如下形式(R1221)的子例行程序

20、组成:Wbroutinc-SUtcincntISPCdfkaUOfbprnie.eculiunpartIintcmal-Mibprojnim-partlENDSUBROUTINE(subroiMinc-namc)这是两种不同风格的过程形式.同时,外部过程与内部过程又具有如下一些很史要的差别:对于一个FoRTRAN程序来说,外部子程序是全局性的,因为它可以在任何位置被调用或引用,相反,内部过程则只是对于它的宿主而言是已知的。 外部过程的界面在它被其他过程引用的时候并非已知的.因为外部过程一般都是单独编译的:相反,而于内部过程来说,它是由它的宿主雌位编译的,因此在它的宿主单位引用它的时候,它的界面

21、信息必定己经给出了。具有与生供来的显式界面是内部过程或模块过程的一个很大的优点,它的好处将在第13欧探讨.相比之下,外部过程就只能单独给出它的界面信息. 从FoRTRAN标准语法上来看,外部过程可以包含内部过程,而内部过程则不能包含内部过程,不过也有很多FORTRAN的实现都允许内部过程的假食,下面是外部过程的两个不同形式的例子:【例12-41FUNEoMCIRC1.EduJenaespedGcalinn-part|(modulc-Mibprogrum-panIEND(MODU1.EImOdUlCnamCH模块的名称假如出现在END语句,那么必需和MODU1.E语句里面的模块Z称一样.12.6

22、.2 模块的说明部分模块的说明部分与其他的程序单位的说明部分特别类似,它可以包含的语句如下表124所示:表12Y模块说明部分允许运用的语句A1.1.OCATAB1.EPOINTERCOMMONPRIVATEDATAPUB1.ICDIMENSIONSAVEEQ1.lIVAUiNCETARGETHXTT-RNalUSBIMP1.ICIT派生类里定义INTRINSIC界面块NM(IJST类型尚明语句PARAMETER模块的说明部分的一般规则如下: 不允许运用OpTIONA1.和INTENTM性或语句. 不允许运用ENTRY语句. 不允许运用FORMAT谙句 不允许运用动态对象, 不允许运用语句函数语

23、句。 可以运用PUB1.IC和PRIVATE属性或语句,用鲂在模块的说明部分中运用SAVE属姓咸,语句是拈别必要的.raSAVE施,够保证梗块里面的数据对象,不会受到运用该模块的其他程序单位的影响.必如没有运用SAVE属性*语句的话,邺么相应的数据对京及常会被运用该模块的其他程序单位去定义,而运用SAVE属性或语句,则能妙假汪相应的数据对泰保真定义状态。【例12-6)MODU1.EDATAISAVEINTEGER.X.IXREA1.:K=O.OIREA1.:Y(K).2(.Zn-Slaleniefilspccifkali4)11pnrlcxe或者是由如下形式(RI22I)的子例行程序殂成:Hi

24、broutinc-SUtCTncniISpeifkiHiCfbPmHeeculiun-panIintcmul-Mhr)gnifnrTERNA1.(KEY)ENDFUNCnONEND的富模块过程通过痞主关联来访问它的宿主板块的数据对象,但不赖.访问运用该板块的程序单位的数据对第.CoNTAlNS语句后面至少须要有一个内部子租用。12.6.4 模块的运用方法任何一个程序单位都UJ以通过USE语句来运用一个模块里面的说明与定义.这样一-种从模块外部的程序的位到模块内部的命名对象的访问,导致一种关联.称为运用关联.USE语句必需跟在要运用模块的程序单位的头语句后面,对于USE语句的数目并没有具体的限制

25、。短个模块里面的命名对象都具有PUB1.ICM性或齐PRIVATE属性,这两个属性确定了该对纵是否可以被运用该模块的程序单位所运用,即:假如具有PuBUC双性,则可以被运用该模块的程序单位所运用,当然这种可访问性也有可能遭到USE谱句本身的限制.假如具有PRIVATE强性,则不能被运用该模块的程序单位所运用.下面的图122表示了模块内对象与外部程序单位的运用关联,.覆块图12-2KJ块内刻软与外部程序胞位的运用关联1 .访问模块内的全部公用对象USE语句最简洁的功能就是通过运FH该语句,外部程序单位可以访问模块内部的全部公用对象.USE语句的语法形式(RIlo7)为:USEmntxluk-en

26、lily*naxe即给出个模块内须要运用的对象的名称X_PRES的京改名的册式与蚊依语句的相似性,但兴.我名属于USE语句内的一个选项.而不态一个单独的语句.2 .访问模块内的部分公用对象假如要想让外部程序单位只是访问一个模块的部分公用对象,则运用如下形式的USE语旬:USEmrXkllCnameON1.Y:iccoslisi即在USE语句的ON1.Y子句里面显式指出可以访问的公用对象,对于这些公用对象也可以依据程序单位的本地要求进行改名。可访问对象列表里面的元素的形式可以具有如下这些形式(RlIo9):lcal.name=modk-entiJAN.MAY3 .模块内的对象的可访问性在模块内部

27、,如下类型的对象都可以被声明.定义.或说明,并且可以具有公用属性.然后就可以被外部程序单位通过USE谱旬而运用,其中除了自定义运算和赋值界面之外.还可以被改名,这些对象包括: 经过声明的变房: 命名常量: 派生类型定义: 过程界面; 模块过程和固有过程: 通用识别符: 名称列去集合。公用块也可以放置在模块里面,由于公用块的名称总是全局性的,因此公用块名称总是可以被模块外部访问,并且不须要运用额外的USE语句,不过粮如要对公用块里面的变址进行改名,则可以运用加改名选项的USE语句.在默认状况下,模块里面的上述全部对象都是具有PUB1.IC属性的,假如运用一个PRIVATEi普句加上空的对象列表,

28、则把铢块内的全部对象的树性改为私用的九当然可以运用PRIVATE语句或在类型声明语句当中附加PRIvATE展性的方式单独地对单个对象给予私用属性,而一旦默认可访问属性被改为PRlVATE之后,还可以运用PUB1.IC语句或在类型声明谱句当中附加PUB1.IC制性的方式单独地对单个对象给予公用属性.相比之下,模块内部的任何时象,包括模块内部的模块过程里面的时效,都可以通过宿主关联而被模块过程访问。模块内部对象的这两种被访问方式以及它们各自的特点,示意于下面的图12-3-三*dInI图12-3模块内对象的运用关联与宿主美联把USE-ON1.Y语句和模块内的PUB1.IC以及PRIVATE屈性这两种

29、方式像合起来,就使得模块兼具了信息平安性和数据访问敏捷性.4 .运用模块时的可能的名称冲突当一个外部程序单位运用某个模块时,有可能出现以卜两种名称冲突的情形:模块内的公用对象和外部程序单位内的本地对象具有相同的名称:一个外部程序垠位同时运用了两个或多个模块,它们的公用对象具有相同的名称.这样的冲窕只有在产生冲突的名称恒久也不会被里用的情形下才能好容忍,否则,就必需运用改名选项或USE语句的ON1.Y子句.来限制相关对象的运用.【例12-10MODU1.EB1.UEINTEGERA.B.CENDMODU1.EB1.UEMODU1.EGREENUSEB1.UE.ON1.Y:AI=AREA1.B.C

30、bNDMODU1.EGREEN!在下面的程序RED里面.!川Al成A访问帙型A,I用B访同整型B:!用Bl访何实里B;!C不能被访问,因为存在名林冲突,PROGRAMREDUSEB1.1.E!访利fA.B.CSEGREENBI=B!HIAl访问.JHBl访何B.访问C.ENDPROGRAM5 .运用关联当个外部程序电位通过运用USE语句而访问一个模块里面它自身所不具有的对象时,就意味莉这的被访问的对象与外部程序发生了关联,这种关战称为运用关联;相比之下,在模块的内部,当模块里面的模块过程访问其宿主模块的对望时所发生的关联.称为宿主关联.运用美联与宿主关联具有如下两个IR要的差别; 一个模块的隐

31、式类蟹规则时于运用它的外部程序单位的环境没有影响。 通过USE语句来访问的对望.不能在它所在的本地重说明.改名不屈于重说明范畴.不过这个赛则存在一个例外,呻假如外部程序单位本身是一个模块,那么它从某个模块访问得到的对象,可以在它的内部重新说明为具有PRIVATE属性,明该对象在原来的模块里,是具有PUBUC属性的.【例12-11设一个程序单位运用如下所示的模块M2,加么它就只能送用对象X,而不能运用对象Y,因为Y在M2里面被重说明为具有PRIVATE属性,尽管丫来自模块Ml,并且在Ml里面是具有PUB1.IC届件的“MODUl.FM2USEMl.ON1.Y:X.YPRIVATEYENDMODU

32、1.EM2对象不能被取说明意味着同一个公用块,也不能在模块和相应的外部程序单位里面被说明.这也就意味着本地的对望不能和从模块里面访问得到的对象等价.一个模块可以一个或多个CoMMoN块,这些CoMMoN块总是可以被访问的,这意味着它们不能在运用它们的宿主模块的外部程序单位不能再次声明它们。因为从一个模块里面访问得到的名称不能在本地被重新说明,所以要从不同的模块里面访问同一个名称,就只有在下面的两种情形下,才有可能: 从不同的模块里面访问得到的同名对象本身就是同一个对软: 但如从不同的模块里面访问得到的同名对象不是同一个对象,那么只鬟该名称并没有被外部程序单位引用,加么也是可能的.12.6.5模

33、块的典型应用如下几种功能可以很简洁地包装在一个模块里面: 全局数据,包括数据结构和公用块, 自定义运算, 软件库. 数据抽象。全部模块的典型应用也就集中在这4种功能上.卜面分别予以探讨。1 .全局数据利用模块可以很商洁地在整个程序当中进行全局性的类型定义与数据声明。模块当中的数据并不存在阳式的存催关联.也不存在任何隐式地对这些数据的的排列依次的约定。模块当中的全局数据可以是随意的类型,或随意类型的组合,【例】2/2】MODU1.EMODE1.SCOMP1.EX:A(33,98)REA1.:1X(50)REA1.1.1.CXTATABIJ::Y1.V通过这种方式可以运用模块内的磁意对象以及它们的

34、属性.只是其中的整型1.VA须要改名为K.2 .模块内的公用块把一个公用块封装起来的一种方法,就是把它放置在一个模块里面.【例12-13MODU1.ECObTCOMMON.COMMON.COMMON.COMMONB1.OCK1.ENDMODC1.EPR(XiRMEQUIUSECOFFfcND上面的例子电面,在程序EQUl里面运用了USE语句后,就可以访问模块CoFF里面的公用块里面的全部变埴。运用模块来封装公用块,明显最大程度地削当公用块被多个程序单位运用时,所产生的错误。3 .全局派生类型模块当中的派生类里定义可以通过USE语句而得到多个程序单位的运用.12-14MODU1.ENEWjYPE

35、TYPENODE_STATREA1.XCOMP1.EXZENDTYPENODE_STATENDMODU1.ENHW_TYPE然后,只要任何程序单位通过USE来运用该模块的话,就UJ以在它的内部声明属于派生类型NoDi1.STAT的数据对象.4 .算符的扩展算符与机值符号都可以进行如下形式的扩展:一个界面块可以用来出明新的算符,或者对固有算符定义新的含义赋值符号=也可以定义新的含义,或者对于派生类型的固有赋值也可以进行卡定义。府意.只有对于薇生类型的赋值.才能进行同有尊符或同有赋值的理定义.在进行这样的犷展时,要求界面块具有OPERATOR读ASSIGNMENT属性.一般说来,这样的界面块都放置

36、在个模块里面,以便利用模块的牢席性与敏捷性。【例12-15INirRFACEOPERATOR.INVERSE.FUNCTIONNVHRSIMTRIXI)11PEMATRIX).INTENTdNhsMATRIXIIYPE(MAIRiX)::INVERSEENDFUNCTIONINVERSEENDINTERFACE在上面的例子当中,运用具书QPERAToR双性的界面来定义矩阵的逆,这就要求定义个求逆的函数以及定义自定义运算的界面块,这就是上面定义的函数INVERSE与算符NVERSE,然后就UJ以把这个自定义算符运用于其他衣达式,例如:RI)INAESTYPEPO1.ARPRIVATEREA1.RHO.THETAENDTYreKM.ARINTERFACEOPERATOR(*MODU1.EPROCEDUREPo1.ARjMU1.TENDINERFAC1:CONTAINSFUNCTIONPO1.AR.MU1.T(P.P2TYPE(PO1.AR).(NTENT(IN):P1J2TYPRPOIR)POI.AR_MU1.TPO1.AR.MU1.T=PO1.ARiPI%RHOP2%R

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号