freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計(jì)算機(jī)專業(yè)外文文獻(xiàn)中英文翻譯(object)-閱讀頁

2024-12-23 17:52本頁面
  

【正文】 ly change the underlying data structure without disturbing the code in your program. Java began (in version and ) with a standard iterator, called Enumeration, for all of its container classes. Java 2 has added a much more plete container library that contains an iterator called Iterator that does more than the older Enumeration. From a design standpoint, all you really want is a sequence that can be manipulated to solve your problem. If a single type of sequence satisfied all of your needs, there’d be no reason to have different kinds. There are two reasons that you need a choice of containers. First, containers provide different types of interfaces and external behavior. A stack has a different interface and behavior than that of a queue, which is different from that of a set or a list. One of these might provide a more flexible solution to your problem than the other. Second, different containers have different efficiencies for certain operations. The best example is an ArrayList and a LinkedList. Both are simple sequences that can have identical interfaces and external behaviors. But certain operations can have radically different costs. Randomly accessing elements in an ArrayList is a constanttime operation。本節(jié)將就這些問題進(jìn)行探討。對象需要的數(shù)據(jù)位于哪兒,如何控制對象的 “ 存在時間 ” 呢?針對這個問題,解決的方案是各異其趣的。為獲得最快的運(yùn)行速度,存儲以及存在時間可在編寫程序時決定,只需將對象放置在堆棧(有時也叫作自動或定域變量)或者靜態(tài)存儲區(qū)域即可。某些情況下,這種優(yōu)先級的控制是非常有價值的。如果要解決的是一個較常規(guī)的問題,如計(jì)算機(jī)輔助設(shè)計(jì)、倉儲管理或者空中交通控制,這一方法就顯得太局限了。若采用這種方式,除非進(jìn)入運(yùn)行期,否則根本不知道到底需要多少個對象,也不知道它們的存在時間有多長,以及準(zhǔn)確的類型是什么。若需一個新對 象,只需在需要它的時候在內(nèi)存堆里簡單地創(chuàng)建它即可。由于動態(tài)創(chuàng)建方法使對象本來就傾向于復(fù)雜,所以查找存儲空間以及釋放它所需的額外開銷不會為對象的創(chuàng)建造成明顯的影響。 C++允許我們決定是在寫程序時創(chuàng)建對象,還是在運(yùn)行期間創(chuàng)建,這種控制方法更加靈活。 但還要考慮另外一個問題,亦即對象的 “ 存在時間 ” 或者 “ 生存時間 ”( Lifetime)。程序員可用兩種方法來破壞一個對象:用程序化的方式?jīng)Q定何時破壞對象,或者利用由運(yùn)行環(huán)境提供的一種 “ 垃圾收集器 ” 特性,自動尋找那些不再使用的對象,并將其清除。 但這并不符合 C++語言的設(shè)計(jì)宗旨,所以未能包括到 C++里。 本節(jié)剩下的部分將討論操縱對象時要考慮的另一些因素。既然如此,怎樣才能知道那些對象要求多少空間呢?事先上根本無法提前知道,除非進(jìn)入運(yùn)行期。用于解決特定問題的新型對象容納了指向其他對象的句柄。但不能只看到這一點(diǎn)。在需要的時候,集合會自動擴(kuò)充自己,以便適應(yīng)我們在其中置入的任何東西。只需創(chuàng)建一個集合,以后的工作讓它自己負(fù)責(zé)好了。在 C++中,它們是以 “ 標(biāo)準(zhǔn)模板庫 ” ( STL)的形式提供的。 Smalltalk 提供了一套非常完整的集合。在某些庫中,一個常規(guī)集合便可滿足人們的大多數(shù)要求;而在另一些庫中(特別是 C++的庫),則面向不同的需求提供了不同類型的集合。所以我們能根據(jù)自己的需要選擇適當(dāng)?shù)念愋汀? 所有集合都提供了相應(yīng)的讀寫功能。有一個叫作 “ 推 ” ( Push)、 “ 添加 ” ( Add)或其他類似名字的函數(shù)用于做這件事情。如果是一個數(shù)組形式的實(shí)體,比如一個矢量( Vector),那么也許能用索引運(yùn)算符或函數(shù)。此外,單選定函數(shù)的功能是非常有限的。作為一個類,它也提供了一級抽象。通過繼承器的作用,集合被抽象成一個簡單的序列。這樣一來,我們就可以靈活地改變基礎(chǔ)數(shù)據(jù),不會對程序里的代碼造成干擾。 Java 新增一個更復(fù)雜的集合庫,其中包含了一個名為 Iterator 的繼承器,可以做比老式的 Enumeration 更多的事情。通過對它的操縱,應(yīng)該能解決自己的問題。有兩方面的原因促使我們需要對集合作出選擇。堆棧的接口與行為與隊(duì)列的不同,而隊(duì)列的接口與行為又與一個集( Set)或列表的不同。 其次,不同的集合在進(jìn)行特定操作時往往有不同的效率。它們都屬于簡單的序列,擁有完全一致的接口和外部行為。對矢量內(nèi)的元素進(jìn)行的隨機(jī)訪問(存取)是一種常時操作;無論我們選擇的選擇是什么,需要的時間量都是相同的。而且假設(shè)某個元素位于列表較遠(yuǎn)的地方,找到它所需的時間也會長許多。這些以及其他操作都有不同的執(zhí)行效率,具體取決于序列的基礎(chǔ)結(jié)構(gòu)是什么。最后調(diào)整性能的時候,再根據(jù)情況把它換成矢量。 最后,記住集合只是一個用來放置對象的儲藏所。如果在一個編程環(huán)境中工作,它由于其他因素(比如在 Windows下運(yùn)行,或者由垃圾 收集器帶來了開銷)產(chǎn)生了內(nèi)在的開銷,那么矢量和鏈接列表之間在系統(tǒng)開銷上的差異就或許不是一個大問題。甚至可以想象有一個 “ 完美 ” 的集合抽象,它能根據(jù)自己的使用方式自動改變基層的實(shí)現(xiàn)方式。在 Java 中(與其他幾乎所有 OOP語言一樣),對這個問題的答案都是肯定的,而且這個終級基礎(chǔ)類的名字很簡單,就是一個 “Object” 。 單根結(jié) 構(gòu)中的所有對象都有一個通用接口,所以它們最終都屬于相同的類型。從向后兼容的角度看,這一方案可與 C 模型更好地配合,而且可以認(rèn)為它的限制更少一些。需添加我們要用到的各種新類庫,還要使用另一些不兼容的接口。為得到 C++額外的 “ 靈活性 ” ,付出這樣的代價值得 嗎?當(dāng)然,如果真的需要 —— 如果早已是 C 專家,如果對 C 有難舍的情結(jié) —— 那么就真的很值得。 單根結(jié)構(gòu)中的所有對象(比如所有 Java 對象)都可以保證擁有一些特定的功能。一個單根結(jié)構(gòu),加上所有對象都在內(nèi)存堆中創(chuàng)建,可以極大簡化參數(shù)的傳遞(這在 C++里是一個復(fù)雜的概念)。與此有關(guān)的必要支持可安裝于基礎(chǔ)類中,而垃圾收集器可將適當(dāng)?shù)南?發(fā)給系統(tǒng)內(nèi)的任何對象。 由于運(yùn)行期的類型信息肯定存在于所有對象中,所以永遠(yuǎn)不會遇到判斷不出一個對象的類型的情況。 3 集合庫與方便使用集合 由于集合是我們經(jīng)常都要用到的一種工具,所以一個集合庫是十分必要的,它應(yīng)該可以方便地重復(fù)使用。 Java 提供了這樣的 一個庫,盡管它在 Java 和 中都顯得非常有限( Java 的集合庫則無疑是一個杰作)。單根結(jié)構(gòu)意味著、所有東西歸根結(jié)底都是一個對象 ” !所以容納了 Object 的一個集合實(shí)際可以容納任何東西。 為使用這樣的一個集合,只需添加指向它的對象句柄即可,以后可以通過句柄重新使用對象。再次使用它的時候,會得到一個 Object 句柄,而非指向我們早先置入的那個類型的句柄。但這一次不是在分級結(jié)構(gòu)中上溯造型成一種更 “ 通用 ” 的類型。這種造型方法叫作 “ 下溯造型 ” ( Downcasting)。但我們不知道一個 Object 到底是 Circle 還是 Shape,所以很難保證下溯造型的安全進(jìn)行,除非確切地知道自己要操作的是什么。我們稍后即會對此進(jìn)行解釋。 下溯造型和運(yùn)行期檢查都要求花額外的時間來運(yùn)行程序,而且程序員必須付出額外的精力。答案是肯定的,我們可以采用 “ 參數(shù)化類型 ” ,它們是編譯器能自動定制的類,可與特定的類型配合。 參數(shù)化類型是 C++一個重要的組成部分,這部分是 C++沒有單根結(jié)構(gòu)的緣故。 Java 目前尚未提供參數(shù)化類型,因?yàn)橛捎谑褂玫氖菃胃Y(jié)構(gòu),所以使用它顯得有些笨拙。 Java 采取的這種關(guān)鍵字保留機(jī)制其實(shí)經(jīng)常讓人摸不著頭腦,很難斷定以后會發(fā)生什么
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1