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

正文內(nèi)容

外文翻譯---對象的創(chuàng)建和存在時間-其他專業(yè)-wenkub

2023-01-30 09:31:07 本頁面
 

【正文】 of object. The new type of object that solves this particular problem holds references to other objects. Of course, you can do the same thing with an array, which is available in most languages. But there’s more. This new object, generally called a container (also called a collection, but the Java library uses that term in a different sense so this book will use “container”), will expand itself whenever necessary to acmodate everything you place inside it. So you don’t need to know how manyobjects you’re going to hold in a container. Just create a container object and let it take care of the details. Fortunately, a good OOP language es with a set of containers as part of the package. In C++, it’s part of the Standard C++ Library and is sometimes called the Standard Template Library (STL). Object Pascal has containers in its Visual Component Library (VCL). Smalltalk has a very plete set of containers. Java also has containers in its standard library. In some libraries, a generic container is considered good enough for all needs, and in others (Java, for example) the library has different types of containers for different needs: a vector (called an ArrayList in Java) for consistent access to all elements, and a linked list for consistent insertion at all elements, for example, so you can choose the particular type that fits your needs. Container libraries may also include sets, queues, hash tables, trees, stacks, etc. All containers have some way to put things in and get things out。 最重要的問題之一是對象的創(chuàng)建及破壞方式。這樣便為存儲空 間的分配和釋放提供了一個優(yōu)先級。 第二個方法是在一個內(nèi)存池中動態(tài)創(chuàng)建對象,該內(nèi)存池亦叫 “ 堆 ” 或者 “ 內(nèi)存堆 ” 。由于存儲空間的管理是運行期間動態(tài)進(jìn)行的,所以在內(nèi)存堆里分配存儲空間的時間比在堆棧里創(chuàng)建的時間長得多(在堆棧里創(chuàng)建存儲空間一般只需要一個簡單的指令,將堆棧指針向下或向下移動即可)。大家或許認(rèn)為既然它如此靈活,那 么無論如何都應(yīng)在內(nèi)存堆里創(chuàng)建對象,而不是在堆棧中創(chuàng)建。當(dāng)然,垃圾收集器顯得方便得多,但要求所有應(yīng)用程序都必須容忍垃圾收集器的存在,并能默許隨垃圾收集帶來的額外開銷。 1 集合與繼承器 針對一個特定問題的解決,如果事先不知道需要多少個對象,或者它們的持續(xù)時間有多長,那么也不知道如何保存那些對象。當(dāng)然,也可以用數(shù)組來做同樣的事情,那是大多數(shù)語言都具有的一種功能。所以我們事先不必知道要在一個集合里容下多少東西。 Object Pascal 用自己的 “ 可視組件庫 ” ( VCL)提供集合。例如,可以用一個矢量統(tǒng)一對所有元素的訪問方式;一個鏈接列表則用于保證所有元素的插入統(tǒng)一。將某樣?xùn)|西置入集合時,采用的方式是十分明顯的。但在許多情況下,這樣做往往會無功而返。利用這一級抽象,可將集合細(xì)節(jié)與用于訪問那個集合的代碼隔離開。 Java 最開始(在 和 版中)提供的是一個標(biāo)準(zhǔn)繼承器,名為 Enumeration( 枚舉),為它的所有集合類提供服務(wù)。如果一種類型的序列即可滿足我們的所有要求,那么完全沒有必要再換用不同的類型。利用這個特征,我 們解決問題時便有更大的靈活性。但在執(zhí)行一些特定的任務(wù)時,需要的開銷卻是完全不同的。但在另一方面,如果想在 序列中部插入一個元素,用列表就比用矢量劃算得多。由于抽象是通過繼承器進(jìn)行的,所以能在兩者方便地切換,對代碼的影響則顯得微不足道。我們可能只需要一種類型的序列。這種 “ 單根結(jié)構(gòu) ” 具有許多方面的優(yōu)點。但假期我們想進(jìn)行純粹的面向?qū)ο缶幊?,那么必須?gòu)建自己的結(jié)構(gòu),以期獲得與內(nèi)建到其他 OOP 語言里的同樣的便利。但假如你是一名新手,首次接觸這類設(shè)計,象 Java 那樣的替換方案也許會更省事一些。 利用單根結(jié)構(gòu),我們可以更方便地實現(xiàn)一個垃圾收集器。這對系統(tǒng)級的操作來說顯得特別重要,比如違例控制;而且也能在程序設(shè)計時獲得更大的靈活性。 下溯造型與模板/通用性 為了使這些集合能夠重復(fù)使用,或者 “ 再生 ” , Java 提供了一種通用類型,以前曾把它叫作 “Object” 。但由于集合只能容納 Object,所以在我們向集合里添加對象句 柄時,它會上溯造型成 Object,這樣便丟失了它的身份或者標(biāo)識信息。而是下溯造型成一種更 “ 特殊 ” 的類型。 但這也不是絕對危險的,因為假如下溯造型成錯誤的東西,會得到我們稱為“ 違例 ” ( Exception)的一種運行期錯誤。既然如此,我們能不能創(chuàng)建一個 “ 智能 ” 集合,令其知道 自己容納的類型呢?這樣做可消除下溯造型的必要以及潛在的錯誤。在 C++中,用于實現(xiàn)參數(shù)化類型的關(guān)鍵字是 template(模板)。 。但這并不能保證以后的版本不會實現(xiàn),因為 “generic” 這個詞已被 Java“ 保留到將來實現(xiàn) ” (在 Ada 語言中, “generic” 被用來實現(xiàn)它的模板)。例如,通過使用一個參數(shù)化集合,編譯器可對那個集合進(jìn)行定制,使其只接受 Shape,而且只提取 Shape。但在從一個集合提取對象句柄時,必須用某種方式準(zhǔn)確地記住它們是什么,以保證下溯造型的正確進(jìn)行。舉個例子來說,我們知道在上溯造型的時候, Circle(圓)屬于 Shape(幾何形狀)的一種類型,所以 上溯造型是安全的。所以怎樣才能歸還它的本來面貌,調(diào)用早先置入集合的那個對象的有用接口呢? 在這里,我們再次用到了造型( Cast)。這使我們對它的重復(fù)使用變得非常簡便。這樣一來,我們就可以方便地取用各種集合,將其插入自己的程序。如果沒有這種單根結(jié)構(gòu),而且系統(tǒng)通過一個句柄來操縱對象,那么實現(xiàn)垃圾收集器的途徑會有很大的不同,而且會面臨許多障礙。在自己的系統(tǒng)中,我們知道對每個對象都能進(jìn)行一些基本操作。理所當(dāng)然地,這也需要付出額外的精力使新接口與自己的設(shè)計方案配合(可能還需要多重繼承)。另一種方案(就象 C++那樣)是我們不能保證所有東西都屬于相同的基本類型。 2 單根結(jié)構(gòu) 在面向?qū)ο蟮某绦蛟O(shè)計中,由于 C++的引入而顯得尤為突出的一個問題是:所有類最終是否都應(yīng)從單獨一個基礎(chǔ)類繼承。如果那個儲藏所能滿足我們的所有需要,就完全沒必要關(guān)心它具體是如何實現(xiàn)的(這是大多數(shù)類型對象的一個基本概念)。在設(shè)計階段,我們可以先從一個列表開始。但在一個鏈接列表中,若想到處移動,并隨機挑選一個元素,就需付出 “ 慘重 ” 的代價。最好的例子便是矢量( Vector)和列表( List)的區(qū)別。首先,集合提供了不同的接口類型以及外部行為。 從設(shè)計角度出發(fā),我們需要的是一個全功能的序列。繼承器允許我們遍歷那個序列,同時毋需關(guān)心基礎(chǔ)結(jié)構(gòu)是什么 —— 換言之,不管它是一個矢量、一個鏈接列表、一個堆棧,還是其他什么東西。如果想對集合中的一系列元素進(jìn)行操縱或比較,而不是僅僅面向一個,這時又該怎么辦呢? 辦法就是使用一個 “ 繼續(xù)器 ” ( Iterator),它屬于一種對象,負(fù)責(zé)選擇集合內(nèi)的元素,并把它們提供給繼承器的用戶。但將數(shù)據(jù)從集合中取出的時候,方式卻并不總是那么明顯。其中包括集 、隊列、散列表、樹、堆棧等等。而 Java 也用自己的標(biāo)準(zhǔn)庫提供了集合。 幸運的是,設(shè) 計優(yōu)良的 OOP 語言都配套提供了一系列集合。這種新對象通常叫作 “ 集合 ”
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1