模块化程序设计中隐藏同名变量的应用

来源 :硅谷 | 被引量 : 0次 | 上传用户:vvx888
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要: 结构化程序设计尽管简化程序设计过程,然而也给变量的使用带来一些问题。其中尤为突出的是同名变量的重叠,相互影响。通过隐藏变量,消除重叠影响,可以高效正确实现模块之间的相互调用。
  关键词: VF;模块化;同名变量
  中图分类号:TP3文献标识码:A文章编号:1671-7597(2010)0910128-01
  
  1 提出问题
  程序模块是以完成某特定功能为目的具有相对独立性的程序。一个较大的程序一般应分为若干个程序模块,每个模块用来实现一个特定的功能。
  应用模块化程序设计方法,大大简化了程序设计过程,然而也给变量的使用带来了一些问题。这主要跟变量的作用范围有关。比如调用程序和被调用程序往往由不同的人编写,而他们可能使用了相同的变量名,这时就有可能出现问题。
  2 同名变量在相互调用模块中的相互影响
  在处理VF变量时发现了这样一个问题:对于不同函数(模块的一种)中定义的同名变量,我原来只是简单根据变量名称进行区分,由于作用范围不同,因为虽然同名但互不影响;但这样的方法用在相互调用的模块中就会出问题。因为此时同名变量会重叠,并相互影响。
  例如:计算1!+3!+5!,编程如下:
  s=0
  fori=1to5step 2
   s= s+ funjc(i)
  endfor
  ?"s=" , s
  return
  functionfunjc
  parameterk
  s=1
  for i=1 to k
  s=s*i
  endfor
  ? str(k,1)+"!=",s
  return s
  endfunc
  程序运行结果:
  1!= 1
  4!= 24
  s= 25
  运行结果,明显错误。分析上述程序,可以发现,自定义函数funjc中用到的变量i,实际上主程序中已经建立,这时子程序的运行改变了主程序中变量的取值,造成结果错误。
  其本质问题是主程序的变量的作用范围问题。每个变量都有它的作用范围,在它的定义域内有效。VF中变量的作用范围有三种:全局变量在整个程序中,包括上下级过程中都有效用,用public声名;局部变量只在定义它的模块内有效,用local声名;私有变量在定义它的模块和它的下级子程序或过程内有效,用PRIVATE命令声明,在程序中可以直接使用(没有预先声明),即在程序中没有通过PUBLIC和LOCAL命令事先声明,而直接使用的变量都是私有变量。
  上例主程序模块同名变量i在它本身及下级子程序模块或过程内均有效。为了得到正确的结果应该史主程序同名变量i在子程序中无效,即同名变量i的作用范围仅在主程序模块中。
  3 用PRIVATE命令隐藏主程序中可能存在的变量
  为解决上述问题,可以在子程序中用PRIVATE命令隐藏主程序中可能存在的变量,使这些变量在子程序中暂时无效。有两种命令格式:
  【格式1】PRIVATE<内存变量表>
  【格式2】PRIVATEALL[LIKE|EXCEPT<通配符>]
  在这里应该注意:
  1)对PRIVATE中内存变量的修改并不影响上级程序中与之同名的内存变量的值。此命令只对本级程序及以下各级子程序有效,当返回到上级程序时,被PRIVETE隐藏的当前程序中的内存变量自动删除。
  2)在它们被隐藏期间,程序就不能再调用这些被隐藏的上级内存变量,但实际上它们仍然存在,一旦含有PRIVATE内存变量的程序结束后,被PRIVATE隐藏起来的那些以前建立的同名的上级内存变量自动恢复以前的内容和状态。
  现可将上述程序略加修改,便得到正确结果。修改如下:
  s=0
  fori=1to5step 2
   s= s+ funjc(i)
  endfor
  ?"s=" , s
  return
  functionfunjc
  parameterk
  privateI
  s=1
  fori=1tok
  s=s*i
  endfor
  ? str(k,1)+"!=",s
  return s
  endfunc
  运行结果:
  1!= 1
  3!= 6
  5! = 120
  s= 127
  上例,通过“隐藏”操作隐藏了子程序funjc中的和主程序同名的变量i。改变了主程序的变量i的作用范围。
  4 LOCAL隐藏与PRIVATE隐藏的不同
  实际上,LOCAL命令在建立局部变量的同时,也具有隐藏上层模块中
其他文献
第四届两岸三地价值工程会议在浙江大学举行  11月13日,由中国技术经济研究会价值工程专业委员会主办、浙江大学管理学院承办、浙江省技术经济与管理现代化研究会协办的第四届两岸三地价值工程会议在浙江大学举行。  会议围绕价值工程、企业价值系统和工程价值系统的核心,强化价值工程的理论研究与应用推广,同时促进了两岸三地价值工程与价值系统的理论研究与应用的成果交流。本次会议共举行了7场学术报告和1场预备会,
期刊
中国水土保持学会开四大刘宁任理事长  12月14~15日,中国水土保持学会第四次全国会员代表大会在京隆重召开。水利部副部长刘宁当选为中国水土保持学会第四届理事会理事长,北京林业大学党委书记吴斌当选为中国水土保持学会第四届理事会秘书长。  中国科协学会学术部副部长朱雪芬,国家林业局造林绿化管理司巡视员丁付林,中国水土保持学会第三届理事会副理事长朱金兆,中国水土保持学会第三届理事会秘书长、北京林业大学
期刊
广西自治区副主席会员日作专题报告  12月16日,第五届广西青年学术年会在南宁召开,此活动是广西实施中国科协会员日的重要活动之一,由广西科协、广西社科联和共青团广西区委主办。当天,广西壮族自治区副主席陈章良出席年会并做专题报告,成为会员日的特色亮点。  广西自治区政府副主席陈章良在会员日重要活动青年学术年会上做专题报告  陈章良向与会青年朋友谈了三个问题,广西面临的大好发展机遇、广西面临的挑战和问
期刊
12月19日上午,2010年中国土地学会学术年会暨纪念学会成立30周年大会在安徽省合肥市召开。会议传达了国土资源部部长、党组书记、国家土地总督察徐绍史对做好中国土地学会工作的重要批示。国土资源部党组成员、副部长、中国土地学会理事长王世元出席会议,并围绕“土地节约集约利用与转变发展方式”的年会主题,对中国土地学会的工作提出了新的要求。安徽省政府副省长倪发科出席会议并致词。中国土地学会名誉理事长邹玉川
期刊
该电吹风是一个很好的工具,极为简洁的造型让我们耳目一新。设计者的设计目的不仅是造型上的创新,而是更好的收纳电吹风的电源线,在电吹风的末端有一个空的半透明圆筒,电源线就可以收纳在里面,而插头更巧妙地设计在该末端圆筒的后盖上面。    创意酷
期刊
国家医药专家组来我省考察医药产业发展情况和创新药物孵化(吉林)基地建设情况。副省长陈晓光,全国政协常委、省科协主席刘淑莹陪同考察。  专家组首先来到长春高新区生物医药科技产业园考察。长春高新区生物医药科技产业园是我省重点建设的4大医药科技产业园区之一。今年3月,我省以长春高新医药产业园、通化医药科技产业园区为载体,申报了“创新药物孵化(吉林)基地建设”项目。考察过程中,专家组对我省建设创新药物孵化
期刊
德国卡尔斯鲁厄技术研究所17日发表新闻公报说,通过对大气红外光谱测量值的分析,该所科学家确认了过氧化氯在极地大气臭氧层损耗中所起的关键作用。这一研究反驳了美国科学家前些年对于极地臭氧层损耗理论的质疑。  公报说,多年来,大多数科学家都赞同这样的理论,即人类活动排放的氟氯烃及其在大气中化学反应的产物过氧化氯破坏极地臭氧层,这一理论已经成为国际环保条约的基础。这些条约的实施已使大气中氯含量开始缓慢下降
期刊
好的摄影作品的诞生往往取决于摄影师而不是器材本身。这款特殊的照相机或许可以帮您快速提高摄影水平,成长为大师级的人物。与一般相机拍摄后会提供短暂的照片回放功能不同的是,这款相机每拍摄一张相片会用百分比的方式显示出您刚刚拍摄照片的评分。如果您的评分比较低,您可以试着变换拍摄角度、重新构图或是调整光圈大小和快门速度重新拍摄,直至分数有所提高。相信在不断的练习中,您很快就可以提高摄影水平。  专利之家
期刊
7月,高新区(滨江)2009年R&D投入数据正式出炉:全区R&D投入45.5亿元,比上年增长10%,占GDP比重15.5%,占杭州作市投入比重约30%。  由此带来的一个可喜现象是:2009年,新获授权专利1200件,增长20.7%,其中发明专利420件,新获市级以上科技进步18项。2009年,高新技术产业实现技工贸总收入850亿元,占全区技工贸总收入的55.6%,新产品产值率45.7%。  近年
期刊
摘要: 在变电运行当中,经常会发生各种异常现象和事故,科学正确及时处理是变电站运行值班人员一项重要的基本职责,尤其要在由于人为因素或是其它不可预测的原因造成事故时能够正确及时地进行处理,对于减少停电范围,降低企业损失具有重大意义。主要从跳闸故障和非跳闸故障两方面浅谈变电运行故障处理。  关键词: 变电运行;故障;处理方法  中图分类号:TM7文献标识码:A文章编号:1671-7597(2010)0
期刊