首页 B设计论文外文文献中英文翻译[]

B设计论文外文文献中英文翻译[]

举报
开通vip

B设计论文外文文献中英文翻译[]皮晨晖软件081班7023108043ObjectlandscapesandlifetimesTechnically,OOPisjustaboutabstractdatatyping,inheritance,andpolymorphism,butotherissuescanbeatleastasimportant.Theremainderofthissectionwillcovertheseissues.Oneofthemostimportantfactorsisthewayobjectsarecreatedand...

B设计论文外文文献中英文翻译[]
皮晨晖软件081班7023108043ObjectlandscapesandlifetimesTechnically,OOPisjustaboutabstractdatatyping,inheritance,andpolymorphism,butotherissuescanbeatleastasimportant.Theremainderofthissectionwillcovertheseissues.Oneofthemostimportantfactorsisthewayobjectsarecreatedanddestroyed.Whereisthedataforanobjectandhowisthelifetimeoftheobjectcontrolled?Therearedifferentphilosophiesatworkhere.C++takestheapproachthatcontrolofefficiencyisthemostimportantissue,soitgivestheprogrammerachoice.Formaximumrun-timespeed,thestorageandlifetimecanbedeterminedwhiletheprogramisbeingwritten,byplacingtheobjectsonthestack(thesearesometimescalledautomaticorscopedvariables)orinthestaticstoragearea.Thisplacesapriorityonthespeedofstorageallocationandrelease,andcontrolofthesecanbeveryvaluableinsomesituations.However,yousacrificeflexibilitybecauseyoumustknowtheexactquantity,lifetime,andtypeofobjectswhileyou'rewritingtheprogram.Ifyouaretryingtosolveamoregeneralproblemsuchascomputer-aideddesign,warehousemanagement,orair-trafficcontrol,thisistoorestrictive.Thesecondapproachistocreateobjectsdynamicallyinapoolofmemorycalledtheheap.Inthisapproach,youdon'tknowuntilrun-timehowmanyobjectsyouneed,whattheirlifetimeis,orwhattheirexacttypeis.Thosearedeterminedatthespurofthemomentwhiletheprogramisrunning.Ifyouneedanewobject,yousimplymakeitontheheapatthepointthatyouneedit.Becausethestorageismanageddynamically,atrun-time,theamountoftimerequiredtoallocatestorageontheheapissignificantlylongerthanthetimetocreatestorageonthestack.(Creatingstorageonthestackisoftenasingleassemblyinstructiontomovethestackpointerdown,andanothertomoveitbackup.)Thedynamicapproachmakesthegenerallylogicalassumptionthatobjectstendtobecomplicated,sotheextraoverheadoffindingstorageandreleasingthatstoragewillnothaveanimportantimpactonthecreationofanobject.Inaddition,thegreaterflexibilityisessentialtosolvethegeneralprogrammingproblem.Javausesthesecondapproach,exclusivelyHYPERLINK"../../../DocumentsandSettings/gg/LocalSettings/Temp/e/TIJ303.htm"\l"fn8#fn8"].Everytimeyouwanttocreateanobject,youusethenewkeywordtobuildadynamicinstanceofthatobject.There'sanotherissue,however,andthat'sthelifetimeofanobject.Withlanguagesthatallowobjectstobecreatedonthestack,thecompilerdetermineshowlongtheobjectlastsandcanautomaticallydestroyit.However,ifyoucreateitontheheapthecompilerhasnoknowledgeofitslifetime.InalanguagelikeC++,youmustdetermineprogrammaticallywhentodestroytheobject,whichcanleadtomemoryleaksifyoudon’tdoitcorrectly(andthisisacommonprobleminC++programs).Javaprovidesafeaturecalledagarbagecollectorthatautomaticallydiscoverswhenanobjectisnolongerinuseanddestroysit.Agarbagecollectorismuchmoreconvenientbecauseitreducesthenumberofissuesthatyoumusttrackandthecodeyoumustwrite.Moreimportant,thegarbagecollectorprovidesamuchhigherlevelofinsuranceagainsttheinsidiousproblemofmemoryleaks(whichhasbroughtmanyaC++projecttoitsknees).Therestofthissectionlooksatadditionalfactorsconcerningobjectlifetimesandlandscapes.1.ThesinglyrootedhierarchyOneoftheissuesinOOPthathasbecomeespeciallyprominentsincetheintroductionofC++iswhetherallclassesshouldultimatelybeinheritedfromasinglebaseclass.InJava(aswithvirtuallyallotherOOPlanguages)theansweris“yes〞andthenameofthisultimatebaseclassissimplyObject.Itturnsoutthatthebenefitsofthesinglyrootedhierarchyaremany.HYPERLINK"mailto:TIJ3@MindView.net?Subject=%5bTIJ3%5dChap01_186"\o"SendBackTalkComment"Allobjectsinasinglyrootedhierarchyhaveaninterfaceincommon,sotheyareallultimatelythesametype.Thealternative(providedbyC++)isthatyoudon’tknowthateverythingisthesamefundamentaltype.Fromabackward-compatibilitystandpointthisfitsthemodelofCbetterandcanbethoughtofaslessrestrictive,butwhenyouwanttodofull-onobject-orientedprogrammingyoumustthenbuildyourownhierarchytoprovidethesameconveniencethat’sbuiltintootherOOPlanguages.Andinanynewclasslibraryyouacquire,someotherincompatibleinterfacewillbeused.Itrequireseffort(andpossiblymultipleinheritance)toworkthenewinterfaceintoyourdesign.Istheextra“flexibility〞ofC++worthit?Ifyouneedit—ifyouhavealargeinvestmentinC—it’squitevaluable.Ifyou’restartingfromscratch,otheralternativessuchasJavacanoftenbemoreproductive.HYPERLINK"mailto:TIJ3@MindView.net?Subject=%5bTIJ3%5dChap01_187"\o"SendBackTalkComment"Allobjectsinasinglyrootedhierarchy(suchasJavaprovides)canbeguaranteedtohavecertainfunctionality.Youknowyoucanperformcertainbasicoperationsoneveryobjectinyoursystem.Asinglyrootedhierarchy,alongwithcreatingallobjectsontheheap,greatlysimplifiesargumentpassing(oneofthemorecomplextopicsinC++).HYPERLINK"mailto:TIJ3@MindView.net?Subject=%5bTIJ3%5dChap01_188"\o"SendBackTalkComment"Asinglyrootedhierarchymakesitmucheasiertoimplementagarbagecollector(whichisconvenientlybuiltintoJava).Thenecessarysupportcanbeinstalledinthebaseclass,andthegarbagecollectorcanthussendtheappropriatemessagestoeveryobjectinthesystem.Withoutasinglyrootedhierarchyandasystemtomanipulateanobjectviaareference,itisdifficulttoimplementagarbagecollector.HYPERLINK"mailto:TIJ3@MindView.net?Subject=%5bTIJ3%5dChap01_189"\o"SendBackTalkComment"Sincerun-timetypeinformationisguaranteedtobeinallobjects,you’llneverendupwithanobjectwhosetypeyoucannotdetermine.Thisisespeciallyimportantwithsystemleveloperations,suchasexceptionhandling,andtoallowgreaterflexibilityinprogramming.HYPERLINK"mailto:TIJ3@MindView.net?Subject=%5bTIJ3%5dChap01_190"\o"SendBackTalkComment"2.CollectionlibrariesandsupportforeasycollectionuseBecauseacontainerisatoolthatyou’llusefrequently,itmakessensetohavealibraryofcontainersthatarebuiltinareusablefashion,soyoucantakeoneofftheshelfBecauseacontainerisatoolthatyou’llusefrequently,itmakessensetohavealibraryofcontainersthatarebuiltinareusablefashion,soyoucantakeoneofftheshelfandplugitintoyourprogram.Javaprovidessuchalibrary,whichshouldsatisfymostneeds.Downcastingvs.templates/genericsTomakethesecontainersreusable,theyholdtheoneuniversaltypeinJavathatwaspreviouslymentioned:Object.ThesinglyrootedhierarchymeansthateverythingisanObject,soacontainerthatholdsObjectscanholdanything.Thismakescontainerseasytoreuse.Tousesuchacontainer,yousimplyaddobjectreferencestoit,andlateraskforthemback.But,sincethecontainerholdsonlyObjects,whenyouaddyourobjectreferenceintothecontaineritisupcasttoObject,thuslosingitsidentity.Whenyoufetchitback,yougetanObjectreference,andnotareferencetothetypethatyouputin.Sohowdoyouturnitbackintosomethingthathastheusefulinterfaceoftheobjectthatyouputintothecontainer?Here,thecastisusedagain,butthistimeyou’renotcastinguptheinheritancehierarchytoamoregeneraltype,youcastdownthehierarchytoamorespecifictype.Thismannerofcastingiscalleddowncasting.Withupcasting,youknow,forexample,thataCircleisatypeofShapesoit’ssafetoupcast,butyoudon’tknowthatanObjectisnecessarilyaCircleoraShapesoit’shardlysafetodowncastunlessyouknowthat’swhatyou’redealingwith.It’snotcompletelydangerous,however,becauseifyoudowncasttothewrongthingyou’llgetarun-timeerrorcalledanexception,whichwillbedescribedshortly.Whenyoufetchobjectreferencesfromacontainer,though,youmusthavesomewaytorememberexactlywhattheyaresoyoucanperformaproperdowncast.Downcastingandtherun-timechecksrequireextratimefortherunningprogram,andextraeffortfromtheprogrammer.Wouldn’titmakesensetosomehowcreatethecontainersothatitknowsthetypesthatitholds,eliminatingtheneedforthedowncastandapossiblemistake?Thesolutionisparameterizedtypes,whichareclassesthatthecompilercanautomaticallycustomizetoworkwithparticulartypes.Forexample,withaparameterizedcontainer,thecompilercouldcustomizethatcontainersothatitwouldacceptonlyShapesandfetchonlyShapes.ParameterizedtypesareanimportantpartofC++,partlybecauseC++hasnosinglyrootedhierarchy.InC++,thekeywordthatimplementsparameterizedtypesis“template.〞Javacurrentlyhasnoparameterizedtypessinceitispossibleforittogetby—howeverawkwardly—usingthesinglyrootedhierarchy.However,acurrentproposalforparameterizedtypesusesasyntaxthatisstrikinglysimilartoC++templates.对象的创立和存在时间从技术角度说,OOP〔面向对象程序设计〕只是涉及抽象的数据类型、继承以及多形性,但另一些问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 也可能显得非常重要。本节将就这些问题进行探讨。最重要的问题之一是对象的创立及破坏方式。对象需要的数据位于哪儿,如何控制对象的“存在时间〞呢?针对这个问题,解决的 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 是各异其趣的。C++认为程序的执行效率是最重要的一个问题,所以它允许程序员作出选择。为获得最快的运行速度,存储以及存在时间可在编写程序时决定,只需将对象放置在堆栈〔有时也叫作自动或定域变量〕或者静态存储区域即可。这样便为存储空间的分配和释放提供了一个优先级。某些情况下,这种优先级的控制是非常有价值的。然而,我们同时也牺牲了灵活性,因为在编写程序时,必须知道对象的准确的数量、存在时间、以及类型。如果要解决的是一个较常规的问题,如计算机辅助设计、仓储管理或者空中交通控制,这一 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 就显得太局限了。第二个方法是在一个内存池中动态创立对象,该内存池亦叫“堆〞或者“内存堆〞。假设采用这种方式,除非进入运行期,否那么根本不知道到底需要多少个对象,也不知道它们的存在时间有多长,以及准确的类型是什么。这些参数都在程序正式运行时才决定的。假设需一个新对象,只需在需要它的时候在内存堆里简单地创立它即可。由于存储空间的管理是运行期间动态进行的,所以在内存堆里分配存储空间的时间比在堆栈里创立的时间长得多〔在堆栈里创立存储空间一般只需要一个简单的指令,将堆栈指针向下或向下移动即可〕。由于动态创立方法使对象本来就倾向于复杂,所以查找存储空间以及释放它所需的额外开销不会为对象的创立造成明显的影响。除此以外,更大的灵活性对于常规编程问题的解决是至关重要的。C++允许我们决定是在写程序时创立对象,还是在运行期间创立,这种控制方法更加灵活。大家或许认为既然它如此灵活,那么无论如何都应在内存堆里创立对象,而不是在堆栈中创立。但还要考虑另外一个问题,亦即对象的“存在时间〞或者“生存时间〞〔Lifetime〕。假设在堆栈或者静态存储空间里创立一个对象,编译器会判断对象的持续时间有多长,到时会自动“破坏〞或者“去除〞它。程序员可用两种方法来破坏一个对象:用程序化的方式决定何时破坏对象,或者利用由运行环境提供的一种“垃圾收集器〞特性,自动寻找那些不再使用的对象,并将其去除。当然,垃圾收集器显得方便得多,但要求所有应用程序都必须容忍垃圾收集器的存在,并能默许随垃圾收集带来的额外开销。但这并不符合C++语言的设计宗旨,所以未能包括到C++里。但Java确实提供了一个垃圾收集器〔Smalltalk也有这样的设计;尽管Delphi默认为没有垃圾收集器,但可选择安装;而C++亦可使用一些由其他公司开发的垃圾收集产品〕。本节剩下的局部将讨论操纵对象时要考虑的另一些因素。1单根结构在面向对象的程序设计中,由于C++的引入而显得尤为突出的一个问题是:所有类最终是否都应从单独一个根底类继承。在Java中〔与其他几乎所有OOP语言一样〕,对这个问题的答案都是肯定的,而且这个终级根底类的名字很简单,就是一个“Object〞。这种“单根结构〞具有许多方面的优点。单根结构中的所有对象都有一个通用接口,所以它们最终都属于相同的类型。另一种方案〔就象C++那样〕是我们不能保证所有东西都属于相同的根本类型。从向后兼容的角度看,这一方案可与C模型更好地配合,而且可以认为它的限制更少一些。但假期我们想进行纯粹的面向对象编程,那么必须构建自己的结构,以期获得与内建到其他OOP语言里的同样的便利。需添加我们要用到的各种新类库,还要使用另一些不兼容的接口。理所当然地,这也需要付出额外的精力使新接口与自己的设计方案配合〔可能还需要多重继承〕。为得到C++额外的“灵活性〞,付出这样的代价值得吗?当然,如果真的需要——如果早已是C专家,如果对C有难舍的情结——那么就真的很值得。但假设你是一名新手,首次接触这类设计,象Java那样的替换方案也许会更省事一些。单根结构中的所有对象〔比方所有Java对象〕都可以保证拥有一些特定的功能。在自己的系统中,我们知道对每个对象都能进行一些根本操作。一个单根结构,加上所有对象都在内存堆中创立,可以极大简化参数的传递〔这在C++里是一个复杂的概念〕。利用单根结构,我们可以更方便地实现一个垃圾收集器。与此有关的必要支持可安装于根底类中,而垃圾收集器可将适当的消息发给系统内的任何对象。如果没有这种单根结构,而且系统通过一个句柄来操纵对象,那么实现垃圾收集器的途径会有很大的不同,而且会面临许多障碍。由于运行期的类型信息肯定存在于所有对象中,所以永远不会遇到判断不出一个对象的类型的情况。这对系统级的操作来说显得特别重要,比方违例控制;而且也能在程序设计时获得更大的灵活性。2集合库与方便使用集合由于集合是我们经常都要用到的一种工具,所以一个集合库是十分必要的,它应该可以方便地重复使用。这样一来,我们就可以方便地取用各种集合,将其插入自己的程序。Java提供了这样的一个库,尽管它在Java1.0和1.1中都显得非常有限〔Java1.2的集合库那么无疑是一个杰作〕。下溯造型与模板/通用性为了使这些集合能够重复使用,或者“再生〞,Java提供了一种通用类型,以前曾把它叫作“Object〞。单根结构意味着、所有东西归根结底都是一个对象〞!所以容纳了Object的一个集合实际可以容纳任何东西。这使我们对它的重复使用变得非常简便。为使用这样的一个集合,只需添加指向它的对象句柄即可,以后可以通过句柄重新使用对象。但由于集合只能容纳Object,所以在我们向集合里添加对象句柄时,它会上溯造型成Object,这样便丧失了它的身份或者标识信息。再次使用它的时候,会得到一个Object句柄,而非指向我们早先置入的那个类型的句柄。所以怎样才能归还它的本来面貌,调用早先置入集合的那个对象的有用接口呢?在这里,我们再次用到了造型〔Cast〕。但这一次不是在分级结构中上溯造型成一种更“通用〞的类型。而是下溯造型成一种更“特殊〞的类型。这种造型方法叫作“下溯造型〞〔Downcasting〕。举个例子来说,我们知道在上溯造型的时候,Circle〔圆〕属于Shape〔几何形状〕的一种类型,所以上溯造型是平安的。但我们不知道一个Object到底是Circle还是Shape,所以很难保证下溯造型的平安进行,除非确切地知道自己要操作的是什么。但这也不是绝对危险的,因为假设下溯造型成错误的东西,会得到我们称为“违例〞〔Exception〕的一种运行期错误。我们稍后即会对此进行解释。但在从一个集合提取对象句柄时,必须用某种方式准确地记住它们是什么,以保证下溯造型的正确进行。下溯造型和运行期检查都要求花额外的时间来运行程序,而且程序员必须付出额外的精力。既然如此,我们能不能创立一个“智能〞集合,令其知道自己容纳的类型呢?这样做可消除下溯造型的必要以及潜在的错误。答案是肯定的,我们可以采用“参数化类型〞,它们是编译器能自动定制的类,可与特定的类型配合。例如,通过使用一个参数化集合,编译器可对那个集合进行定制,使其只接受Shape,而且只提取Shape。参数化类型是C++一个重要的组成局部,这局部是C++没有单根结构的缘故。在C++中,用于实现参数化类型的关键字是template〔模板〕。Java目前尚未提供参数化类型,因为由于使用的是单根结构,所以使用它显得有些笨拙。但这并不能保证以后的版本不会实现,因为“generic〞这个词已被Java“保存到将来实现〞〔在Ada语言中,“generic〞被用来实现它的模板〕。Java采取的这种关键字保存机制其实经常让人摸不着头脑,很难断定以后会发生什么事情。
本文档为【B设计论文外文文献中英文翻译[]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
电气工程师
暂无简介~
格式:doc
大小:40KB
软件:Word
页数:0
分类:生产制造
上传时间:2021-10-18
浏览量:2