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

正文內(nèi)容

畢業(yè)設(shè)計外文文獻翻譯---對象的創(chuàng)建和存在時間(已修改)

2025-05-31 23:22 本頁面
 

【正文】 畢業(yè)設(shè)計 (論文 ) 外文文獻翻譯 專業(yè) 學 生 姓 名 班級 學號 指 導 教 師 信息工程學院 1 中文譯文 對象的創(chuàng)建和存在時間 從技術(shù)角度說, OOP(面向?qū)ο蟪绦蛟O(shè)計)只是涉及抽象的數(shù)據(jù)類型、繼承以及多形性,但另一些問題也可能顯得非常重要。本節(jié)將就這些問題進行探討。 最重要的問題之一是對象的創(chuàng)建及破壞方式。對象需要的數(shù)據(jù)位于哪兒,如何控制對象的 “ 存在時間 ” 呢?針對這個問題,解決的方案是各異其趣的。 C++認為程序的執(zhí)行效率是最重要的一個問題,所以它允許程序員 做出 選擇。為獲 得最快的運行速度,存儲以及存在時間可在編寫程序時決定,只需將對象放置在堆棧(有時也叫自動或定域變量)或者靜態(tài)存儲區(qū)域即可。這樣便為存儲空間的分配和釋放提供了一個優(yōu)先級。某些情況下,這種優(yōu)先級的控制是非常有價值的。然而,我們同時也犧牲了靈活性,因為在編寫程序時,必須知道對象的準確的數(shù)量、存在時間、以及類型。如果要解決的是一個較常規(guī)的問題,如計算機輔助設(shè)計、倉儲管理或者空中交通控制,這一方法就顯得太局限了。 第二個方法是在一個內(nèi)存池中動態(tài)創(chuàng)建對象,該內(nèi)存池亦叫 “ 堆 ” 或者 “ 內(nèi)存堆 ” 。若采用這種方式,除非進入運行期 ,否則根本不知道到底需要多少個對象,也不知道它們的存在時間有多長,以及準確的類型是什么。這些參數(shù)都在程序正式運行時才決定的。若需一個新對象,只需在需要它的時候在內(nèi)存堆里簡單地創(chuàng)建它即可。由于存儲空間的管理是運行期間動態(tài)進行的,所以在內(nèi)存堆里分配存儲空間的時間比在堆棧里創(chuàng)建的時間長得多(在堆棧里創(chuàng)建存儲空間一般只需要一個簡單的指令,將堆棧指針向下或向下移動即可)。由于動態(tài)創(chuàng)建方法使對象本來就傾向于復(fù)雜,所以查找存儲空間以及釋放它所需的額外開銷不會為對象的創(chuàng)建造成明顯的影響。除此以外,更大的靈活性對于常規(guī)編程問 題的解決是至關(guān)重要的。 C++允許我們決定是在寫程序時創(chuàng)建對象,還是在運行期間創(chuàng)建,這種控制方法更加靈活。大家或許認為既然它如此靈活,那么無論如何都應(yīng)在內(nèi)存堆里創(chuàng)建對象,而不是在堆棧中創(chuàng)建。 但還要考慮另外一個問題,亦即對象的 “ 存在時間 ” 或者 “ 生存時間 ”( Lifetime)。若在堆?;蛘哽o態(tài)存儲空間里創(chuàng)建一個對象,編譯器會判斷對象的持續(xù)時間有多長,到時會自動 “ 破壞 ” 或者 “ 清除 ” 它。程序員可用兩種方法來破壞一個對象:用程序化的方式?jīng)Q定何時破壞對象,或者利用由運行環(huán)境提供的一種 “ 垃圾收集器 ” 特性,自動尋找那些不 再使用的對象,并將其清除。當然,垃圾收集器顯得方便得多,但要求所有應(yīng)用程序都必須容忍垃圾收集器的存在,并能默許隨垃圾收集帶來的額外開銷。但這并不符合 C++語言的設(shè)計宗旨,所以未能包括到 C++里。但 Java 確實提供了一個垃圾收集器( Smalltalk 也有這樣的設(shè)計;盡管 Delphi 默認為沒有垃圾收集器,但可選擇安裝;而 C++亦可使用一2 些由其他公司開發(fā)的垃圾收集產(chǎn)品)。 本節(jié)剩下的部分將討論操縱對象時要考慮的另一些因素。 集合與繼承器 針對一個特定問題的解決,如果事先不知道需要多少個對象,或者它們的持續(xù)時間 有多長,那么也不知道如何保存那些對象。既然如此,怎樣才能知道那些對象要求多少空間呢?事先上根本無法提前知道,除非進入運行期。 在面向?qū)ο蟮脑O(shè)計中,大多數(shù)問題的解決辦法似乎都有些輕率 ——只是簡單地創(chuàng)建另一種類型的對象。用于解決特定問題的新型對象容納了指向其他對象的句柄。當然,也可以用數(shù)組來做同樣的事情,那是大多數(shù)語言都具有的一種功能。但不能只看到這一點。這種新對象通常叫 “ 集合 ” (亦叫一個 “ 容器 ” ,但 AWT在不同的場合應(yīng)用了這個術(shù)語,所以本書將一直沿用 “ 集合 ” 的稱呼。在需要的時候,集合會自動擴充自己,以便適應(yīng)我 們在其中置入的任何東西。所以我們事先不必知道要在一個集合里容下多少東西。只需創(chuàng)建一個集合,以后的工作讓它自己負責好了。 幸運的是,設(shè)計優(yōu)良的 OOP 語言都配套提供了一系列集合。在 C++中,它們是以 “ 標準模板庫 ” ( STL)的形式提供的。 Object Pascal 用自己的 “ 可視組件庫 ” ( VCL)提供集合。 Smalltalk 提供了一套非常完整的集合。而 Java 也用自己的標準庫提供了集合。在某些庫中,一個常規(guī)集合便可滿足人們的大多數(shù)要求;而在另一些庫中(特別是 C++的庫),則面向不同的需求提供了不同類型的集合。例如, 可以用一個矢量統(tǒng)一對所有元素的訪問方式;一個鏈接列表則用于保證所有元素的插入統(tǒng)一。所以我們能根據(jù)自己的需要選擇適當?shù)念愋?。其中包括集、隊列、散列表、樹、堆棧等等? 所有集合都提供了相應(yīng)的讀寫功能。將某樣東西置入集合時,采用的方式是十分明顯的。有一個叫 “ 推 ” ( Push)、 “ 添加 ” ( Add)或其他類似名字的函數(shù)用于做這件事情。但將數(shù)據(jù)從集合中取出的時候,方式卻并不總是那么明顯。如果是一個數(shù)組形式的實體,比如一個矢量( Vector),那么也許能用索引運算符或函數(shù)。但在許多情況下,這樣做往往會無功而返。此外,單選定 函數(shù)的功能是非常有限的。如果想對集合中的一系列元素進行操縱或比較,而不是僅僅面向一個,這時又該怎么辦呢? 辦法就是使用一個 “ 繼續(xù)器 ” ( Iterator),它屬于一種對象,負責選擇集合內(nèi)的元素,并把它們提供給繼承器的用戶。作為一個類,它也提供了一級抽象。利用這一級抽象,可將集合細節(jié)與用于訪問那個集合的代碼隔離開。通過繼承器的作用,集合被抽象成一個簡單的序列。繼承器允許我們遍歷那個序列,同時毋需關(guān)心基礎(chǔ)結(jié)構(gòu)是什么 ——換言之,不管它是一個矢量、一個鏈接列表、一個堆棧,還是其他什么東西。這樣一來,我們就可以靈活地改 變基礎(chǔ)數(shù)據(jù),不會對程序里的代碼造成干擾。 Java 最開始(在 和 版中)提供的是一個標準繼承器,名為 Enumeration(枚舉),為它的所有集合類提供服務(wù)。 Java 新增一個更復(fù)雜的集合庫,其中包含了一個名為 Iterator的繼承器,可以做比老式的 Enumeration3 更多的事情。 從設(shè)計角度出發(fā),我們需要的是一個全功能的序列。通過對它的操縱,應(yīng)該能解決自己的問題。如果一種類型的序列即可滿足我們的所有要求,那么完全沒有必要再換用不同的類型。有兩方面的原因促使我們需要對集合 做出 選擇。首先,集合提 供了不同的接口類型以及外部行為。堆棧的接口與行為與隊列的不同,而隊列的接口與行為又與一個集( Set)或列表的不同。利用這個特征,我們解決問題時便有更大的靈活性。 其次,不同的集合在進行特定操作時往往有不同的效率。最好的例子便是矢量( Vector)和列表( List)的區(qū)別。它們都屬于簡單的序列,擁有完全一致的接口和外部行為。但在執(zhí)行一些特定的任務(wù)時,需要的開銷卻是完全不同的。對矢量內(nèi)的元素進行的隨機訪問(存取)是一種常時操作;無論我們選擇的選擇是什么,需要的時間量都是相同的。但在一個鏈接列表中,若想到處移動, 并隨機挑選一個元素,就需付出 “ 慘重 ” 的代價。而且假設(shè)某個元素位于列表較遠的地方,找到它所需的時間也會長許多。但在另一方面,如果想在序列中部插入一個元素,用列表就比用矢量劃算得多。這些以及其他操作都有不同的執(zhí)行效率,具體取決于序列的基礎(chǔ)結(jié)構(gòu)是什么。在設(shè)計階段,我們可以先從一個列表開始。最后調(diào)整性能的時候,再根據(jù)情況把它換成矢量。由于抽象是通過繼承器進行的,所以能在兩者方便地切換,對代碼的影響則顯得微不足道。 最后,記住集合只是一個用來放置對象的儲藏所。如果那個儲藏所能滿足我們的所有需要,就完全沒必要關(guān)心它具體 是如何實現(xiàn)的(這是大多數(shù)類型對象的一個基本概念)。如果在一個編程環(huán)境中工作,它由于其他因素(比如在 Windows下運行,或者由垃圾收集器帶來了開銷)產(chǎn)生了內(nèi)在的開銷,那么矢量和鏈接列表之間在系統(tǒng)開銷上的差異就或許不是一個大問題。我們可能只需要一種類型的序列。甚至可以想象有一個 “ 完美 ” 的集合抽象,它能根據(jù)自己的使用方式自動改變基層的實現(xiàn)方式。 單根結(jié)構(gòu) 在面向?qū)ο蟮某绦蛟O(shè)計中,由于 C++的引入而顯得尤為突出的一個問題是:所有類最終是否都應(yīng)從單獨一個基礎(chǔ)類繼承。在 Java 中(與其他幾乎所有 OOP語言一樣), 對這個問題的答案都是肯定的,而且這個終級基礎(chǔ)類的名字很簡單,就是一個 “ Object” 。這種 “ 單根結(jié)構(gòu) ” 具有許多方面的優(yōu)點。 單根結(jié)構(gòu)中的所有對象都有一個通用接口,所以它們最終都屬于相同的類型。另一種方案(就 像 C++那樣)是我們不能保證所有東西都屬于相同的基本類型。從向后兼容的角度看,這一方案可與 C 模型更好地配合,而且可以認為它的限制更少一些。但假期我們想進行純粹的面向?qū)ο缶幊?,那么必須?gòu)建自己的結(jié)構(gòu),以期獲得與內(nèi)建到其他 OOP 語言里的同樣的便利。需添加我們要用到的各種新類庫,還要使用另一些不兼容的接口。理所 當然地,這也需要付出額外的
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1