国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Java語(yǔ)言概述

2019-11-18 11:50:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

   java語(yǔ)言概述
  像所有其他的計(jì)算機(jī)語(yǔ)言一樣,Java的各種要素不是獨(dú)立存在的,它們作為一個(gè)整體共同構(gòu)成了Java語(yǔ)言。這種關(guān)聯(lián)使得不講其他方面而單獨(dú)描述Java的某一方面是困難的。討論一個(gè)特性經(jīng)常要先具有另外一個(gè)特性的知識(shí)。因此,本章先對(duì)Java的若干主要特性做簡(jiǎn)單綜述。這里描述的主題將給你一個(gè)立足點(diǎn):能夠使你編寫(xiě)和理解簡(jiǎn)單的Java程序。大多數(shù)討論話(huà)題將在第1部分的其他章節(jié)具體敘述
  1、 面向?qū)ο缶幊?br />  Java的核心是面向?qū)ο缶幊獭J聦?shí)上,所有的Java程序都是面向?qū)ο蟮模銊e無(wú)選擇。這一點(diǎn)與C++不同,因?yàn)樵谀抢锬憧梢赃x擇是否面向?qū)ο缶幊獭C嫦驅(qū)ο缶幊膛cJava密不可分,因此,在你編寫(xiě)哪怕是最簡(jiǎn)單的Java程序以前,也必須理解它的基本原則。因此,本章先從面向?qū)ο缶幊痰母拍钪v起。
  1.1 兩種范型
  我們知道,所有的計(jì)算機(jī)程序都由兩類(lèi)元素組成:代碼和數(shù)據(jù)。此外,從概念上講,程序還可以以它的代碼或是數(shù)據(jù)為核心進(jìn)行組織編寫(xiě)。也就是說(shuō),一些程序圍繞“正在發(fā)生什么”編寫(xiě),而另一些程序則圍繞“誰(shuí)將被影響”編寫(xiě)。這兩種范型決定程序的構(gòu)建方法。第一種方法被稱(chēng)為面向過(guò)程的模型(PRocess-oriented model),用它編寫(xiě)的程序都具有線性執(zhí)行的特點(diǎn)。面向過(guò)程的模型可認(rèn)為是代碼作用于數(shù)據(jù),像C這樣的過(guò)程式語(yǔ)言采用這個(gè)模型是相當(dāng)成功的。然而,正如在第1章提到的,當(dāng)程序變得更大并且更復(fù)雜時(shí),就會(huì)出現(xiàn)問(wèn)題。
  為了治理不斷增加的復(fù)雜性,第二種方式,也就是面向?qū)ο蟮木幊蹋╫bject-oriented programming)被構(gòu)思出來(lái)了。面向?qū)ο蟮木幊虈@它的數(shù)據(jù)(即對(duì)象)和為這個(gè)數(shù)據(jù)嚴(yán)格定義的接口來(lái)組織程序。面向?qū)ο蟮某绦驅(qū)嶋H上是用數(shù)據(jù)控制對(duì)代碼的訪問(wèn)。下面你將看到,將控制的實(shí)體變換為數(shù)據(jù),可使程序在組織結(jié)構(gòu)上從若干方面受益。
  1.2 抽象
  面向?qū)ο缶幊痰囊粋€(gè)實(shí)質(zhì)性的要素是抽象。人們通過(guò)抽象(abstraction)處理復(fù)雜性。例如,人們不會(huì)把一輛汽車(chē)想象成由幾萬(wàn)個(gè)互相獨(dú)立的部分所組成的一套裝置,而是把汽車(chē)想成一個(gè)具有自己獨(dú)特行為的對(duì)象。這種抽象使人們可以很輕易地將一輛汽車(chē)開(kāi)到雜貨店,而不會(huì)因組成汽車(chē)各部分零件過(guò)于復(fù)雜而不知所措。他們可以忽略引擎、傳動(dòng)及剎車(chē)系統(tǒng)的工作細(xì)節(jié),將汽車(chē)作為一個(gè)整體來(lái)加以利用。
  使用層級(jí)分類(lèi)是治理抽象的一個(gè)有效方法。它答應(yīng)你根據(jù)物理意義將復(fù)雜的系統(tǒng)分解為更多更易處理的小塊。從外表看,汽車(chē)是一個(gè)獨(dú)立的對(duì)象。一旦到了內(nèi)部,你會(huì)看到汽車(chē)由若干子系統(tǒng)組成:駕駛系統(tǒng),制動(dòng)系統(tǒng),音響系統(tǒng),安全帶,供暖,便攜電話(huà),等等。再進(jìn)一步細(xì)分,這些子系統(tǒng)由更多的專(zhuān)用元件組成。例如,音響系統(tǒng)由一臺(tái)收音機(jī)、一個(gè)CD播放器、或許還有一臺(tái)磁帶放音機(jī)組成。從這里得到的重要啟發(fā)是,你通過(guò)層級(jí)抽象對(duì)復(fù)雜的汽車(chē)(或任何另外復(fù)雜的系統(tǒng))進(jìn)行治理。
  復(fù)雜系統(tǒng)的分層抽象也能被用于計(jì)算機(jī)程序設(shè)計(jì)。傳統(tǒng)的面向過(guò)程程序的數(shù)據(jù)經(jīng)過(guò)抽象可用若干個(gè)組成對(duì)象表示,程序中的過(guò)程步驟可看成是在這些對(duì)象之間進(jìn)行消息收集。這樣,每一個(gè)對(duì)象都有它自己的獨(dú)特行為特征。你可以把這些對(duì)象當(dāng)作具體的實(shí)體,讓它們對(duì)告訴它們做什么事的消息作出反應(yīng)。這是面向?qū)ο缶幊痰谋举|(zhì)。
  面向?qū)ο蟮母拍钍荍ava 的核心,對(duì)程序員來(lái)講,重要的是要理解這些概念怎么轉(zhuǎn)化為程序。你將會(huì)發(fā)現(xiàn),在任何主要的軟件工程項(xiàng)目中,軟件都不可避免地要經(jīng)歷概念提出、成長(zhǎng)、衰老這樣一個(gè)生命周期,而面向?qū)ο蟮某绦蛟O(shè)計(jì),可以使軟件在生命周期的每一個(gè)階段都處變不驚,有足夠的應(yīng)變能力。例如,一旦你定義好了對(duì)象和指向這些對(duì)象的簡(jiǎn)明的、可靠的接口,你就能很從容很自信地解除或更替舊系統(tǒng)的某些組成部分。
  1.3 面向?qū)ο缶幊痰?個(gè)原則
  所有面向?qū)ο蟮木幊陶Z(yǔ)言都提供幫助你實(shí)現(xiàn)面向?qū)ο竽P偷臋C(jī)制,這些機(jī)制是封裝,繼續(xù)及多態(tài)性。現(xiàn)在讓我們來(lái)看一下它們的概念。
  封裝
  封裝(Encapsulation)是將代碼及其處理的數(shù)據(jù)綁定在一起的一種編程機(jī)制,該機(jī)制保證了程序和數(shù)據(jù)都不受外部干擾且不被誤用。理解封裝性的一個(gè)方法就是把它想成一個(gè)黑匣子,它可以阻止在外部定義的代碼隨意訪問(wèn)內(nèi)部代碼和數(shù)據(jù)。對(duì)黑匣子內(nèi)代碼和數(shù)據(jù)的訪問(wèn)通過(guò)一個(gè)適當(dāng)定義的接口嚴(yán)格控制。假如想與現(xiàn)實(shí)生活中的某個(gè)事物作對(duì)比,可考慮汽車(chē)上的自動(dòng)傳送。自動(dòng)傳送中包含了有關(guān)引擎的數(shù)百比特的信息,例如你正在以什么樣的加速度前進(jìn),你行駛路面的坡度如何,以及目前的檔位。作為用戶(hù),你影響這個(gè)復(fù)雜封裝的方法僅有一個(gè):移動(dòng)檔位傳動(dòng)桿。例如,你不能通過(guò)使用拐彎信號(hào)或擋風(fēng)玻璃擦拭器影響傳動(dòng)。所以檔位傳動(dòng)桿是把你和傳動(dòng)連接起來(lái)的惟一接口。此外,傳動(dòng)對(duì)象內(nèi)的任何操作都不會(huì)影響到外部對(duì)象,例如,檔位傳動(dòng)裝置不會(huì)打開(kāi)車(chē)前燈!因?yàn)樽詣?dòng)傳動(dòng)被封裝起來(lái)了,所以任何一家汽車(chē)制造商都可以選擇一種適合自己的方式來(lái)實(shí)現(xiàn)它。然而,從司機(jī)的觀點(diǎn)來(lái)看,它們的用途都是一樣的。與此相同的觀點(diǎn)能被用于編程。封裝代碼的好處是每個(gè)人都知道怎么訪問(wèn)它,但卻不必考慮它的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),也不必害怕使用不當(dāng)會(huì)帶來(lái)負(fù)面影響。
  Java封裝的基本單元是類(lèi)。盡管類(lèi)將在以后章節(jié)具體介紹。現(xiàn)在仍有必要對(duì)它作一下簡(jiǎn)單的討論。一個(gè)類(lèi)(class)定義了將被一個(gè)對(duì)象集共享的結(jié)構(gòu)和行為(數(shù)據(jù)和代碼)。一個(gè)給定類(lèi)的每個(gè)對(duì)象都包含這個(gè)類(lèi)定義的行為和結(jié)構(gòu),似乎它們是從同一個(gè)類(lèi)的模子中鑄造出來(lái)似的。因?yàn)檫@個(gè)原因,對(duì)象有時(shí)被看作是類(lèi)的實(shí)例(instances of a class)。所以,類(lèi)是一種邏輯結(jié)構(gòu),而對(duì)象是真正存在的物理實(shí)體。
  當(dāng)創(chuàng)建一個(gè)類(lèi)時(shí),你要指定組成那個(gè)類(lèi)的代碼和數(shù)據(jù)。從總體上講,這些元素都被稱(chēng)為該類(lèi)的成員(members)。具體地說(shuō),類(lèi)定義的數(shù)據(jù)稱(chēng)為成員變量(member variables)或?qū)嵗兞浚╥nstance variables)。操作數(shù)據(jù)的代碼稱(chēng)為成員方法(member methods)或簡(jiǎn)稱(chēng)方法(methods)。假如你對(duì)C/C++熟悉,可以這樣理解:Java程序員所稱(chēng)的方法,就是C/C++程序員所稱(chēng)的函數(shù)(function)。在完全用Java編寫(xiě)的程序中,方法定義如何使用成員變量。這意味著一個(gè)類(lèi)的行為和接口是通過(guò)方法來(lái)定義的,類(lèi)這些方法對(duì)它的實(shí)例數(shù)據(jù)進(jìn)行操作。
  既然類(lèi)的目的是封裝復(fù)雜性,在類(lèi)的內(nèi)部就應(yīng)該有隱藏實(shí)現(xiàn)復(fù)雜性機(jī)制。類(lèi)中的每個(gè)方法或變量都可以被標(biāo)記為私有(private)或公共(public)。類(lèi)的公共接口代表類(lèi)的外部用戶(hù)需要知道或可以知道的每件事情;私有方法和數(shù)據(jù)僅能被一個(gè)類(lèi)的成員代碼所訪問(wèn),其他任何不是類(lèi)的成員的代碼都不能訪問(wèn)私有的方法或變量。既然類(lèi)的私有成員僅能被程序中的其他部分通過(guò)該類(lèi)的公共方法訪問(wèn),那么你就能保證不希望發(fā)生的事情就一定不會(huì)發(fā)生。當(dāng)然,公共接口應(yīng)該小心仔細(xì)設(shè)計(jì),不要過(guò)多暴露類(lèi)的內(nèi)部?jī)?nèi)容(見(jiàn)圖1)。
  : Java語(yǔ)言概述(圖一)
  
  圖1 封裝:可用來(lái)保護(hù)私有數(shù)據(jù)的公共方法
  
  繼續(xù)
  繼續(xù)(Inheritance)是一個(gè)對(duì)象獲得另一個(gè)對(duì)象的屬性的過(guò)程。繼續(xù)很重要,因?yàn)樗С至税磳臃诸?lèi)的概念。如前面提到的,大多數(shù)知識(shí)都可以按層級(jí)(即從上到下)分類(lèi)治理。例如,尊貴的獵犬是狗類(lèi)的一部分,狗又是哺乳動(dòng)物類(lèi)的一部分,哺乳動(dòng)物類(lèi)又是動(dòng)物類(lèi)的一部分。假如不使用層級(jí)的概念,我們就不得不分別定義每個(gè)動(dòng)物的所有屬性。使用了繼續(xù),一個(gè)對(duì)象就只需定義使它在所屬類(lèi)中獨(dú)一無(wú)二的屬性即可,因?yàn)樗梢詮乃母割?lèi)那兒繼續(xù)所有的通用屬性。所以,可以這樣說(shuō),正是繼續(xù)機(jī)制使一個(gè)對(duì)象成為一個(gè)更具通用類(lèi)的一個(gè)特定實(shí)例成為可能。下面讓我們更具體地討論這個(gè)過(guò)程。
  大多數(shù)人都認(rèn)為世界是由對(duì)象組成的,而對(duì)象又是按動(dòng)物、哺乳動(dòng)物和狗這樣的層級(jí)結(jié)構(gòu)相互聯(lián)系的。假如你想以一個(gè)抽象的方式描述動(dòng)物,那么你可以通過(guò)大小、智力及骨胳系統(tǒng)的類(lèi)型等屬性進(jìn)行描述。動(dòng)物也具有確定的行為,它們也需要進(jìn)食、呼吸,并且睡覺(jué)。這種對(duì)屬性和行為的描述就是對(duì)動(dòng)物類(lèi)的定義。
  假如你想描述一個(gè)更具體的動(dòng)物類(lèi),比如哺乳動(dòng)物,它們會(huì)有更具體的屬性,比如牙齒類(lèi)型、乳腺類(lèi)型等。我們說(shuō)哺乳類(lèi)動(dòng)物是動(dòng)物的子類(lèi)(subclass),而動(dòng)物是哺乳動(dòng)物的超類(lèi)(superclass)。
  
  : Java語(yǔ)言概述(圖二)
  
  由于哺乳動(dòng)物類(lèi)是需要更加精確定義的動(dòng)物,所以它可以從動(dòng)物類(lèi)繼續(xù)(inherit)所有的屬性。一個(gè)深度繼續(xù)的子類(lèi)繼續(xù)了類(lèi)層級(jí)(class hierarchy)中它的每個(gè)祖先的所有屬性。
  繼續(xù)性與封裝性相互作用。假如一個(gè)給定的類(lèi)封裝了一些屬性,那么它的任何子類(lèi)將具有同樣的屬性,而且還添加了子類(lèi)自己特有的屬性(見(jiàn)圖2-2)。這是面向?qū)ο蟮某绦蛟趶?fù)雜性上呈線性而非幾何性增長(zhǎng)的一個(gè)要害概念。新的子類(lèi)繼續(xù)它的所有祖先的所有屬性。它不與系統(tǒng)中其余的多數(shù)代碼產(chǎn)生無(wú)法預(yù)料的相互作用。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柘城县| 乳山市| 西充县| 阿巴嘎旗| 女性| 乐东| 白河县| 于都县| 仙游县| 靖宇县| 仙游县| 琼海市| 同江市| 正宁县| 县级市| 航空| 灵丘县| 青田县| 易门县| 雷波县| 观塘区| 双鸭山市| 分宜县| 兴城市| 兴隆县| 都安| 江口县| 金溪县| 嵩明县| 遂川县| 比如县| 屯门区| 兰溪市| 镇远县| 土默特右旗| 朝阳县| 萨迦县| 庐江县| 溧阳市| 新闻| 安塞县|