![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/11/f5cce402-3613-4e61-bf86-ff323417bac6/f5cce402-3613-4e61-bf86-ff323417bac6pic.jpg)
![外文翻譯---java的思考_第1頁(yè)](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/11/f5cce402-3613-4e61-bf86-ff323417bac6/f5cce402-3613-4e61-bf86-ff323417bac61.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> Java的思考</b></p><p><b> 抽象過(guò)程</b></p><p> 所有編程語(yǔ)言都提供抽象(abstraction)機(jī)制。可以認(rèn)為,你所能夠解決的問題的復(fù)雜性直接取決于抽象的類型和質(zhì)量。我所謂的“類型”是指“你所抽象的是什么?”匯編語(yǔ)言是對(duì)底層機(jī)器的小型抽象。接著出現(xiàn)的許多所謂“命令式(Impe
2、rative)”語(yǔ)言(諸如FORTRAN、BASIC、C等)都是對(duì)匯編語(yǔ)言的抽象。這些語(yǔ)言在匯編語(yǔ)言之上有了大幅的改進(jìn),但是它們所作的主要抽象仍要求你在解決問題時(shí)要基于計(jì)算機(jī)的結(jié)構(gòu),而不是基于你試圖要解決的問題的結(jié)構(gòu)來(lái)考量。程序員必須建立在機(jī)器模型(Machine Model)(位于你對(duì)問題建模所作的解空間(Solution)內(nèi),例如計(jì)算機(jī))和實(shí)際待解決問題模型(Problem Model)(位于問題所在的問題空間(Problem Sp
3、ace)內(nèi))之間的關(guān)聯(lián)。建立這種映射(Mapping)是費(fèi)力的,而且它不屬于編程語(yǔ)言的內(nèi)在性質(zhì),這使得程序難以編寫,并且維護(hù)代價(jià)高昂。由此,產(chǎn)生了完整的“編程方法(Programming Method)”產(chǎn)業(yè)。</p><p> 另一種對(duì)機(jī)器建模的方式就是對(duì)待解決問題建模。早期的編程語(yǔ)言,諸如LISP和APL都選擇世界的某種特定視圖(分別對(duì)應(yīng)于“所有問題最終都是列表(List)”或者“所有問題都是算法形式的(a
4、lgorithmic)”)。PROLOG則將所有文圖轉(zhuǎn)換成為決策鏈(Chain of decisions)。此外還產(chǎn)生了基于約束條件(constraint-based)編程的語(yǔ)言(后者被證明限制性過(guò)強(qiáng))。這些方式對(duì)于它們被設(shè)計(jì)時(shí)所瞄準(zhǔn)要解決的特定類型的問題都是不錯(cuò)的解決方案,但是一旦超出其特定領(lǐng)域,它們就力不從心了。</p><p> 面向?qū)ο蠓绞?Object-oriented approach)通過(guò)向程序員
5、提供用來(lái)表示在問題空間中的元素的工具而更進(jìn)一步。這種表示方式具有足夠的概括性,使得程序員不會(huì)受限于任何特定類型的問題。我們將問題空間中的元素及其在解空間中的表示成為“對(duì)象(Object)”。(你還需要一些無(wú)法類比為問題空間元素的對(duì)象)。這是一種更靈活和更強(qiáng)有力的語(yǔ)言抽象。所以,OOP允許以問題的形式來(lái)描述問題,而不是以執(zhí)行解決方案的計(jì)算機(jī)的形式來(lái)描述問題。但是它仍然與計(jì)算機(jī)有聯(lián)系:每個(gè)對(duì)象看起來(lái)都有點(diǎn)像一臺(tái)微型計(jì)算機(jī)——它具有狀態(tài),并且
6、能夠執(zhí)行你賦予它的各種操作。如果要在現(xiàn)實(shí)世界中對(duì)對(duì)象作類比,那么說(shuō)它們都具有特性(Characteristic)和行為(Behavior)似乎不錯(cuò)。</p><p> Alan Kay曾經(jīng)總結(jié)了第一個(gè)成功的面向?qū)ο笳Z(yǔ)言,同時(shí)也是Java賴為根基的語(yǔ)言之一的。</p><p> Smalltalk的五個(gè)基本特性,這些特性表現(xiàn)了一種純粹的面相對(duì)象程序設(shè)計(jì)方式:</p><
7、;p> 萬(wàn)物皆為對(duì)象。將對(duì)象視為奇特的變量,它可以存儲(chǔ)數(shù)據(jù),除此之</p><p> 外,你還可以要求它在自身上執(zhí)行操作。理論上講,你可以抽取待解決問題的任何概念化構(gòu)建(狗、建筑物、服務(wù)等),將其表示為程序中的對(duì)象。</p><p> 程序是對(duì)象的集合,它們彼此通過(guò)發(fā)送消息來(lái)調(diào)用對(duì)方。要想產(chǎn)生</p><p> 一個(gè)對(duì)象的請(qǐng)求,就必須對(duì)該對(duì)象發(fā)送一條消
8、息。更具體地說(shuō),你可以把消息想象為對(duì)某個(gè)特定對(duì)象的方法的調(diào)用請(qǐng)求。</p><p> 每個(gè)對(duì)象都擁有由其它對(duì)象所構(gòu)成的存儲(chǔ)。你可以通過(guò)創(chuàng)建包含現(xiàn)</p><p> 有對(duì)象集合的包的方式來(lái)創(chuàng)建新類型的對(duì)象。因此,你可以在程序中構(gòu)建復(fù)雜的體系,同時(shí)將其復(fù)雜性通過(guò)對(duì)象的質(zhì)樸性得以屏蔽。</p><p> 每個(gè)對(duì)象都擁有其類型(Type)。按照通用的說(shuō)法,“每個(gè)對(duì)象都
9、是某</p><p> 個(gè)類(Class)的一個(gè)實(shí)例(Instance) ”,其中“類”就是“類型”的同義詞。每個(gè)類中最重要的區(qū)別于其它類的特性就是“你可以發(fā)生什么消息給他?”</p><p> 某一特定類型的所有對(duì)象都可以接收(Receive)同樣的消息。這是一</p><p> 句意味深長(zhǎng)的表述,你在稍后便會(huì)看到。因?yàn)椤皥A形(circle)”類型的對(duì)象同時(shí)
10、也是“幾何形(shape)”類型的對(duì)象,所以一個(gè)“圓形”對(duì)象必定能夠接受(accept)發(fā)送給“幾何形”對(duì)象的消息。這意味著你可以編寫與“幾何形”交互并自動(dòng)處理所有與幾何形性質(zhì)相關(guān)的事務(wù)的代碼。這種“可替代性(substitutability)”是OOP中最強(qiáng)有力的概念之一。</p><p> Booch提出了一個(gè)對(duì)對(duì)象的更加簡(jiǎn)潔的描述:對(duì)象擁有狀態(tài)(State)、行為(Behabviour)和標(biāo)識(shí)(Ident
11、ity).這意味著每一個(gè)對(duì)象都可以擁有內(nèi)部數(shù)據(jù)(它們給出了該對(duì)象的狀態(tài))和方法(它們產(chǎn)生行為),并且每一個(gè)對(duì)象都可以唯一地與其他對(duì)象區(qū)分開,具體說(shuō)來(lái),就是每一個(gè)對(duì)象在內(nèi)存中都有一個(gè)唯一的地址。</p><p> 每個(gè)對(duì)象都有一個(gè)接口</p><p> 亞里士多德大概是第一個(gè)深入研究類型(Type)的哲學(xué)家,他曾提出過(guò)魚類和鳥類這樣的概念。所有的對(duì)象都是唯一的,但同時(shí)也是具有相同的特性和
12、行為的對(duì)象所歸屬的類的一部分,這種思想被直接應(yīng)用于第一個(gè)面向?qū)ο笳Z(yǔ)言Simula-67,他在程序中使用基本關(guān)鍵詞class來(lái)引入新的類型。</p><p> Simula就像其名字一樣,是為了開發(fā)諸如經(jīng)典的“銀行出納員問題(Bank teller problem)”這樣的仿真程序而創(chuàng)建的。在銀行出納員問題中,有出納員、客戶、賬戶、交易和貨幣單位等許多“對(duì)象”。在程序執(zhí)行期間具有不同的狀態(tài)而其他方面都相似的對(duì)象會(huì)
13、被分組到對(duì)象的類中,這就是關(guān)鍵詞class的由來(lái)。創(chuàng)建抽象數(shù)據(jù)類型(類)是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念之一。抽象數(shù)據(jù)類型的運(yùn)行方式與內(nèi)置(built-in)類型幾乎完全一致;你可以創(chuàng)建某一類型的變量(按照面向?qū)ο蟮恼f(shuō)法,稱其為對(duì)象或?qū)嵗?,然后操作這些變量(稱其為發(fā)送消息或請(qǐng)求:你發(fā)送消息,對(duì)象就能夠知道需要做什么)。每個(gè)類的成員(member)或元素(element)都共享相同的性質(zhì):每個(gè)賬戶都有結(jié)余金額,每個(gè)出納都可以處理存款請(qǐng)求等。
14、同時(shí)每個(gè)成員都有其自身狀態(tài):每個(gè)賬戶都有不同的結(jié)余金額,每個(gè)出納都有自己的名稱。因此,出納、客戶、賬戶、交易等都可以在計(jì)算機(jī)程序中被表示成為唯一的實(shí)體(entity)。這些實(shí)體就是對(duì)象,每一個(gè)對(duì)象都屬于定義了特性和行為的某個(gè)特定的類。</p><p> 所以,盡管我們?cè)诿嫦驅(qū)ο蟪绦蛟O(shè)計(jì)中實(shí)際所作的是創(chuàng)建新的數(shù)據(jù)類型,但事實(shí)上所有的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言都使用Class關(guān)鍵詞來(lái)表示數(shù)據(jù)類型。當(dāng)你看到類型(Type)
15、一詞時(shí),請(qǐng)將其作為類(Class)來(lái)考慮,反之亦然。</p><p> 既然類被描述成了具有相同特性(數(shù)據(jù)元素)和行為(功能)的對(duì)象集合,那么一個(gè)類就確實(shí)是一個(gè)數(shù)據(jù)類型,就像所有浮點(diǎn)型數(shù)字具有相同的特性和行為集合一樣。二者的差異在于,程序員通過(guò)定義類來(lái)適應(yīng)問題,而不再被強(qiáng)制只能使用現(xiàn)有的被設(shè)計(jì)用來(lái)表示在機(jī)器中的存儲(chǔ)單元的數(shù)據(jù)類型。你可以根據(jù)需求,通過(guò)添加新的數(shù)據(jù)類型來(lái)擴(kuò)展編程語(yǔ)言。編程系統(tǒng)欣然接受新的類,并且給
16、予它們與內(nèi)置類型相同的管護(hù)和類型檢查(Type-checking)。</p><p> 面向?qū)ο蟮姆椒ú皇莾H局限于構(gòu)件仿真程序。無(wú)論你是否同意任何程序都是你所設(shè)計(jì)的系統(tǒng)的一個(gè)仿真的觀念,面向?qū)ο蠹夹g(shù)確實(shí)可以將大量的問題降解為一個(gè)簡(jiǎn)單的解決方案。</p><p> 一旦類被建立,你想要?jiǎng)?chuàng)建該類的多少個(gè)對(duì)象,就可以創(chuàng)建多少個(gè)了,然后去操作它們,就像它們是存在于你的待解問題中的元素一樣。事實(shí)
17、上,面向?qū)ο蟪绦蛟O(shè)計(jì)的挑戰(zhàn)之一,就是在問題解決空間的元素和解空間的對(duì)象之間建立一對(duì)一的映射。</p><p> 但是,你怎樣才能獲得對(duì)你有用的對(duì)象呢?必須有某種方式產(chǎn)生對(duì)對(duì)象的請(qǐng)求,使對(duì)象完成諸如完成一筆交易、在屏幕上畫圖、打開開關(guān)之類的任務(wù)。每個(gè)對(duì)象都只能滿足某些請(qǐng)求,這些請(qǐng)求由對(duì)象的接口(Interface)所定義,決定接口的便是類型(Type)。以電燈泡為例來(lái)做一個(gè)簡(jiǎn)單的比喻:接口定義了你能夠?qū)δ骋惶囟▽?duì)
18、象發(fā)出的請(qǐng)求。但是,在程序中必須有滿足這些請(qǐng)求的代碼。這些代碼與隱藏的數(shù)據(jù)儀器構(gòu)成了實(shí)現(xiàn)。從過(guò)程型編程的觀點(diǎn)來(lái)看,這并不太復(fù)雜。在類型中,每一個(gè)可能的請(qǐng)求都有一個(gè)方法與之相關(guān)聯(lián),當(dāng)你像對(duì)象發(fā)送請(qǐng)求時(shí),與之相關(guān)聯(lián)的方法就會(huì)被調(diào)用。此過(guò)程通常被總結(jié)為:你向某個(gè)對(duì)象發(fā)送消息(產(chǎn)生請(qǐng)求),這個(gè)對(duì)象便知道此消息的目的,然后執(zhí)行對(duì)應(yīng)的程序代碼。</p><p><b> 每個(gè)對(duì)象都提供服務(wù)</b>&l
19、t;/p><p> 當(dāng)你正是如開放或理解一個(gè)程序時(shí),最好的方法之一就是將對(duì)象想象為“服務(wù)提供者(Service Provider)”。你的程序本身將向用戶提供服務(wù),它將通過(guò)調(diào)用其它對(duì)象提供的服務(wù)來(lái)實(shí)現(xiàn)這一目的。你的目標(biāo)就是去創(chuàng)建(或者最好是在現(xiàn)有代碼庫(kù)中尋找)能夠提供理想的服務(wù)來(lái)解決問題的對(duì)象集合。</p><p> 著手從事這件事的方式之一是詢問“如果我可以將問題從表象中抽取出來(lái),那么什
20、么樣的對(duì)象可以馬上解決我的問題呢?”例如:假設(shè)你正在創(chuàng)建一個(gè)簿記(Bookkeeping)系統(tǒng),你可以想象系統(tǒng)應(yīng)該具有某些包括了預(yù)定義的簿記輸入屏幕的對(duì)象,一個(gè)執(zhí)行簿記計(jì)算的對(duì)象集合,以及一個(gè)處理在不同的打印機(jī)上打印支票和開發(fā)支票的對(duì)象。也許上述對(duì)象中的某些已經(jīng)存在了,但是對(duì)于那些并不存在的對(duì)象,它們看起來(lái)怎么樣?它們能夠提供哪些服務(wù)?它們需要哪些對(duì)象才能履行它們的義務(wù)?如果你持續(xù)這樣做,你最終會(huì)發(fā)現(xiàn)你將到達(dá)這樣一個(gè)節(jié)點(diǎn):你會(huì)說(shuō)“那個(gè)對(duì)
21、象看起來(lái)很簡(jiǎn)單,以至可以坐下來(lái)寫代碼了”,或者會(huì)說(shuō)“我肯定那個(gè)對(duì)象已經(jīng)存在了”。這是將問題分解為對(duì)象集合的一種合理方式。</p><p> 將對(duì)象看作是服務(wù)提供者還有一個(gè)附加的好處:它有助于提高對(duì)象的內(nèi)聚性(cohesiveness)。高內(nèi)聚是軟件設(shè)計(jì)的基本質(zhì)量要求之一:這意味著一個(gè)軟件構(gòu)件(例如一個(gè)對(duì)象,盡管它也有可能被用來(lái)指代一個(gè)方法或一個(gè)對(duì)象庫(kù))的各個(gè)方面“組合(fit together)”得很好。人們?cè)?/p>
22、設(shè)計(jì)對(duì)象時(shí)所面臨的一個(gè)問題是將過(guò)多的功能都填塞在一個(gè)對(duì)象中。例如,在你的檢查打印模式模塊中,你可以設(shè)計(jì)一個(gè)對(duì)象,它了解所有的格式和打印技術(shù)。你可能對(duì)發(fā)現(xiàn)這些功能對(duì)于一個(gè)對(duì)象來(lái)說(shuō)太多了,你需要的是三個(gè)甚至更多個(gè)對(duì)象,其中,一個(gè)對(duì)象可以使所有可能的支票排版的目錄,它可以被用來(lái)查詢有關(guān)如何打印一張支票的信息;另一個(gè)對(duì)象或是對(duì)象集合可以是一個(gè)通用的打印接口,它知道有關(guān)所有不同類型的打印信息(但是不包含任何有關(guān)簿記的內(nèi)容,它更應(yīng)該是一個(gè)需要購(gòu)買而
23、不是自己編寫的對(duì)象);第三個(gè)對(duì)象通過(guò)調(diào)用另外兩個(gè)對(duì)象的服務(wù)來(lái)完成打印任務(wù)。因此,每個(gè)對(duì)象都有一個(gè)它所能提供服務(wù)的高內(nèi)聚的集合。在良好的面向?qū)ο笤O(shè)計(jì)中,每個(gè)對(duì)象都可以很好的完成一項(xiàng)任務(wù),但是它并不試圖做更多的事。就像在這里看到的,不僅允許某些對(duì)象可以通過(guò)購(gòu)買獲得(打印機(jī)接口對(duì)象),而且還</p><p> 將對(duì)象作為服務(wù)提供者看待是一個(gè)偉大的簡(jiǎn)化工具,它不僅在設(shè)計(jì)過(guò)程中非常有用,而且當(dāng)其他人試圖理解你的代碼或重用
24、某個(gè)對(duì)象時(shí)(如果他們看出了這個(gè)對(duì)象所能提供的服務(wù)的價(jià)值的話),它會(huì)使將對(duì)象調(diào)整到適應(yīng)其設(shè)計(jì)的過(guò)程變得簡(jiǎn)單得多。</p><p> Thinking in Java</p><p> The progress of abstraction</p><p> All programming languages provide abstractions. It ca
25、n be argued that the complexity of the problems you’re able to solve is directly related to the kind and quality of abstraction. By “kind” I mean, “What is it that you are abstracting?” Assembly language is a small abstr
26、action of the underlying machine. Many so-called “imperative” languages that followed (such as FORTRAN, BASIC, and C) were abstractions of assembly language. These languages are big improvements over assembly language, b
27、ut thei</p><p> The alternative to modeling the machine is to model the problem you’re trying to solve. Early languages such as LISP and APL chose particular views of the world (“All problems are ultimately
28、 lists” or “All problems are algorithmic,” respectively). Prolog casts all problems into chains of decisions. Languages have been created for constraint-based programming and for programming exclusively by manipulating g
29、raphical symbols. (The latter proved to be too restrictive.) Each of these approaches may </p><p> The object-oriented approach goes a step further by providing tools for the programmer to represent element
30、s in the problem space. This representation is general enough that the programmer is not constrained to any particular type of problem. We refer to the elements in the problem space and their representations in the solut
31、ion space as “objects”. (You will also need other objects that don’t have problem-space analogs.)The idea is that the program is allowed to adapt itself to the lingo of the </p><p> Alan Kay summarized five
32、 basic characteristics of Smalltalk, the first successful object-orienteer language and one of the languages upon which Java is based. These characteristics represent a pure approach to object-orienteer programming:</
33、p><p> Everything is an object. Think of an object as a fancy variable; it stores </p><p> data, but you can “make requests” to that object, asking it to perform operations on itself. In theory,
34、you can take any conceptual component in the problem you’re trying to solve (dogs, buildings, services, etc.) and represent it as an object in your program.</p><p> A program is a bunch of objects telling e
35、ach other what to do by sending</p><p> messages. To make a request of an object, you “send a message” to that object. More concretely, you can think of a message as a request to call a method that belongs
36、to a particular object.</p><p> Each object has its own memory made up of other objects. Put another </p><p> way, you create a new kind of object by making a package containing exiting obje
37、cts. Thus, you can build complexity into a program while hiding it behind the simplicity of objects. </p><p> Every object has a type. Using the parlance, each object is an instance of</p><p>
38、 a class, in which “class” is synonymous with “type”. The most important distinguishing characteristic of a class is “What messages can you send to it? ” </p><p> All objects of a particular type can receiv
39、e the same messages. This is </p><p> actually a loaded statement, as you will see later. Because an object of type “circle” is also an object of type “shape”, a circle is guaranteed to accept shape messag
40、es. This means you can write code that talks to shapes and automatically handle anything that fits the description of a shape. This substitutability is one of the powerful concepts in OOP.</p><p> Booch off
41、ers an even more succinct description of an object: An object has state, behavior and identity. This means that an object can have internal data(which gives it state), methods(to produce behavior), and each object can be
42、 uniquely distinguished from every other object-to put this in a concrete sense, each object has a unique address in memory.</p><p> An object has an interface</p><p> Aristotle was probably t
43、he first to begin a careful study of the concept of type; he spoke of “the class of fishes and the class of birds.” The idea that all objects, while being unique, are also part of a class of objects that have characteris
44、tics and behaviors in common was used directly in the first object-oriented language, Simula-67, with its fundamental keyword class that introduces a new type into a program.</p><p> Simulate, as its name i
45、mplies, was created for developing simulations such as the classic “bank teller problem”. In this, you have numerous tellers, customers, accounts, transactions, and units of money-a lot of “objects”. Objects that are ide
46、ntical except for their state during a program’s execution are grouped together into “classes of objects”, and that’s where the keyword class came form. Creating abstract data types (classes) is a fundamental concept in
47、object-oriented programming. Abstract</p><p> So, although what we really do in object-oriented programming is create new data types, virtually all object-oriented programming languages use the “class” keyw
48、ord. When you see the word “type” think “class” and vice versa.</p><p> Since a class describes a set of objects that have identical characteristics (data elements) and behaviors (functionality), a class is
49、 really a data type because a floating point number, for example, also has a set of characteristics and behaviors. The difference is that a programmer defines a class to fit a problem rather than being forced to use an e
50、xisting data type that was designed to represent a unit of storage in a machine. You extend the programming language by adding new data type’s spe</p><p> The object-oriented approach is not limited to buil
51、ding simulations. Whether or not you agree that any program is a simulation of the system you’re designee, the use of OOP techniques can easily reduce a large set of problems to a simple solution.</p><p> O
52、nce a class is established, you can make as many objects of that class as you like, and then manipulate those objects as if they are the elements that exist in the problem you are trying to solve. Indeed, one of the chal
53、lenges of object-oriented programming is to create a one-to-one mapping between the elements in the problem space and objects in the solution space.</p><p> But how do you get an object to do useful work fo
54、r you? There needs to be a way to make a request of the object so that it will do something, such as complete a transaction, draw something on the screen, or turn on a switch. And each object can satisfy only certain req
55、uests. The requests you can make of an object are defined by its interface, and the type is what determines the interface. A simple example might be a representation of a light bulb: The interface determines the requests
56、 that you c</p><p> An object provides services</p><p> While you’re trying to develop or understand a program design, one of the best ways to think about objects is as “service providers.” Yo
57、ur program itself will provide services to the user, and it will accomplish this by using the services offered by other objects. Your goal is to produce (or even better, locate in existing code libraries) a set of object
58、s that provide the ideal services to solve your problem.</p><p> A way to start doing this is to ask, “If I could magically pull them out of a hat, what objects would solve my problem right away?” For examp
59、le, suppose you are creating a bookkeeping program. You might imagine some objects that perform bookkeeping on all different kinds of printers. Maybe some of these objects already exist, and for the ones that don’t, what
60、 would they look like? What services would those objects provide, and what objects would they need to fulfill their obligations? If you kee</p><p> Thinking of an object as a service provider has an additio
61、nal benefit: It helps to improve the cohesiveness of the object. High cohesion is a fundamental quality of software design: It means that the various aspects of a software component (such as an object, although this coul
62、d also apply to a method or a library of objects) “fit together” well. One problem people have when designing objects is cramming too much functionality into one object. For example, in your check printing module, you ma
63、y </p><p> Treating objects as service providers is a great simplifying tool. This is useful not only during the design process, but also when someone else is trying to understand your code or reuse an obje
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java 外文翻譯
- java外文翻譯
- java外文翻譯---java和因特網(wǎng)
- java的基礎(chǔ)外文翻譯
- java介紹外文翻譯
- java介紹外文翻譯
- java 編程外文翻譯
- java思想外文翻譯---java編程思想 (java和因特網(wǎng))
- java外文文獻(xiàn)翻譯
- 外文翻譯--java技術(shù)介紹
- 外文翻譯---java學(xué)習(xí)過(guò)程
- java相關(guān)外文翻譯
- java io系統(tǒng)外文翻譯
- java io 系統(tǒng)外文翻譯
- java和因特網(wǎng)外文翻譯
- JAVA外文文獻(xiàn)+翻譯.doc
- java的面向?qū)ο缶幊掏馕馁Y料翻譯
- 畢業(yè)論文外文翻譯-java的歷史
- java相關(guān)畢業(yè)論文外文翻譯
- 計(jì)算機(jī)專業(yè) java外文翻譯
評(píng)論
0/150
提交評(píng)論