這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何進(jìn)行java面向?qū)ο缶幊淘淼姆治?,文章?nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比施秉網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式施秉網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋施秉地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
Java 的核心是面向?qū)ο缶幊?。事?shí)上,所有的Java 程序都是面向?qū)ο蟮?,你別無(wú)選擇。這一點(diǎn)與C++ 不同,因?yàn)樵谀抢锬憧梢赃x擇是否面向?qū)ο缶幊獭C嫦驅(qū)ο缶幊膛cJava 密不可分,因此,在你編寫(xiě)哪怕是最簡(jiǎn)單的Java 程序以前,也必須理解它的基本原則。因此,下面先從面向?qū)ο缶幊痰母拍钪v起。
1 兩種范型
我們知道,所有的計(jì)算機(jī)程序都由兩類元素組成:代碼和數(shù)據(jù)。此外,從概念上講,程序還可以以它的代碼或是數(shù)據(jù)為核心進(jìn)行組織編寫(xiě)。也就是說(shuō),一些程序圍繞“正在發(fā)生什么”編寫(xiě),而另一些程序則圍繞“誰(shuí)將被影響”編寫(xiě)。這兩種范型決定程序的構(gòu)建方法。第一種方法被稱為面向過(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)上從若干方面受益。
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í)分類是管理抽象的一個(gè)有效方法。它允許你根據(jù)物理意義將復(fù)雜的系統(tǒng)分解為更多更易處理的小塊。從外表看,汽車(chē)是一個(gè)獨(dú)立的對(duì)象。一旦到了內(nèi)部,你會(huì)看到汽車(chē)由若干子系統(tǒng)組成:駕駛系統(tǒng),制動(dòng)系統(tǒng),音響系統(tǒng),安全帶,供暖,便攜電話,等等。再進(jìn)一步細(xì)分,這些子系統(tǒng)由更多的專用元件組成。例如,音響系統(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)的某些組成部分。
3 面向?qū)ο缶幊痰?個(gè)原則
所有面向?qū)ο蟮木幊陶Z(yǔ)言都提供幫助你實(shí)現(xiàn)面向?qū)ο竽P偷臋C(jī)制,這些機(jī)制是封裝,繼承及多態(tài)性?,F(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),你行駛路面的坡度如何,以及目前的檔位。作為用戶,你影響這個(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 封裝的基本單元是類。盡管類將在以后章節(jié)詳細(xì)介紹?,F(xiàn)在仍有必要對(duì)它作一下簡(jiǎn)單的討論。一個(gè)類(class)定義了將被一個(gè)對(duì)象集共享的結(jié)構(gòu)和行為(數(shù)據(jù)和代碼)。一個(gè)給定類的每個(gè)對(duì)象都包含這個(gè)類定義的行為和結(jié)構(gòu),好像它們是從同一個(gè)類的模子中鑄造出來(lái)似的。因?yàn)檫@個(gè)原因,對(duì)象有時(shí)被看作是類的實(shí)例(instances of a class )。所以,類是一種邏輯結(jié)構(gòu),而對(duì)象是真正存在的物理實(shí)體。
當(dāng)創(chuàng)建一個(gè)類時(shí),你要指定組成那個(gè)類的代碼和數(shù)據(jù)。從總體上講,這些元素都被稱為該類的成員(members )。具體地說(shuō),類定義的數(shù)據(jù)稱為成員變量(member variables)或?qū)嵗兞浚╥nstance variables )。操作數(shù)據(jù)的代碼稱為成員方法(member methods )或簡(jiǎn)稱方法(methods )。如果你對(duì)C/C++ 熟悉,可以這樣理解:Java 程序員所稱的方法,就是C/C++ 程序員所稱的函數(shù)(function )。在完全用Java 編寫(xiě)的程序中,方法定義如何使用成員變量。這意味著一個(gè)類的行為和接口是通過(guò)方法來(lái)定義的,類這些方法對(duì)它的實(shí)例數(shù)據(jù)進(jìn)行操作。
既然類的目的是封裝復(fù)雜性,在類的內(nèi)部就應(yīng)該有隱藏實(shí)現(xiàn)復(fù)雜性機(jī)制。類中的每個(gè)方法或變量都可以被標(biāo)記為私有(private )或公共(public )。類的公共接口代表類的外部用戶需要知道或可以知道的每件事情;私有方法和數(shù)據(jù)僅能被一個(gè)類的成員代碼所訪問(wèn),其他任何不是類的成員的代碼都不能訪問(wèn)私有的方法或變量。既然類的私有成員僅能被程序中的其他部分通過(guò)該類的公共方法訪問(wèn),那么你就能保證不希望發(fā)生的事情就一定不會(huì)發(fā)生。當(dāng)然,公共接口應(yīng)該小心仔細(xì)設(shè)計(jì),不要過(guò)多暴露類的內(nèi)部?jī)?nèi)容。
繼承
繼承(Inheritance )是一個(gè)對(duì)象獲得另一個(gè)對(duì)象的屬性的過(guò)程。繼承很重要,因?yàn)樗С至税磳臃诸惖母拍?。如前面提到的,大多?shù)知識(shí)都可以按層級(jí)(即從上到下)分類管理。例如,尊貴的獵犬是狗類的一部分,狗又是哺乳動(dòng)物類的一部分,哺乳動(dòng)物類又是動(dòng)物類的一部分。如果不使用層級(jí)的概念,我們就不得不分別定義每個(gè)動(dòng)物的所有屬性。使用了繼承,一個(gè)對(duì)象就只需定義使它在所屬類中獨(dú)一無(wú)二的屬性即可,因?yàn)樗梢詮乃母割惸莾豪^承所有的通用屬性。所以,可以這樣說(shuō),正是繼承機(jī)制使一個(gè)對(duì)象成為一個(gè)更具通用類的一個(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)的類型等屬性進(jìn)行描述。動(dòng)物也具有確定的行為,它們也需要進(jìn)食、呼吸,并且睡覺(jué)。這種對(duì)屬性和行為的描述就是對(duì)動(dòng)物類的定義。
如果你想描述一個(gè)更具體的動(dòng)物類,比如哺乳動(dòng)物,它們會(huì)有更具體的屬性,比如牙齒類型、乳腺類型等。我們說(shuō)哺乳類動(dòng)物是動(dòng)物的子類(subclass ),而動(dòng)物是哺乳動(dòng)物的超類(superclass )。
由于哺乳動(dòng)物類是需要更加精確定義的動(dòng)物,所以它可以從動(dòng)物類繼承(inherit )所有的屬性。一個(gè)深度繼承的子類繼承了類層級(jí)(class hierarchy )中它的每個(gè)祖先的所有屬性。
繼承性與封裝性相互作用。如果一個(gè)給定的類封裝了一些屬性,那么它的任何子類將具有同樣的屬性,而且還添加了子類自己特有的屬性。這是面向?qū)ο蟮某绦蛟趶?fù)雜性上呈線性而非幾何性增長(zhǎng)的一個(gè)關(guān)鍵概念。新的子類繼承它的所有祖先的所有屬性。它不與系統(tǒng)中其余的多數(shù)代碼產(chǎn)生無(wú)法預(yù)料的相互作用。
多態(tài)性
多態(tài)性(Polymorphism ,來(lái)自于希臘語(yǔ),表示“多種形態(tài)”)是允許一個(gè)接口被多個(gè)同類動(dòng)作使用的特性,具體使用哪個(gè)動(dòng)作與應(yīng)用場(chǎng)合有關(guān),下面我們以一個(gè)后進(jìn)先出型堆棧為例進(jìn)行說(shuō)明。假設(shè)你有一個(gè)程序,需要3種不同類型的堆棧。一個(gè)堆棧用于整數(shù)值,一個(gè)用于浮點(diǎn)數(shù)值,一個(gè)用于字符。盡管堆棧中存儲(chǔ)的數(shù)據(jù)類型不同,但實(shí)現(xiàn)每個(gè)棧的算法是一樣的。如果用一種非面向?qū)ο蟮恼Z(yǔ)言,你就要?jiǎng)?chuàng)建3個(gè)不同的堆棧程序,每個(gè)程序一個(gè)名字。但是,如果使用Java ,由于它具有多態(tài)性,你就可以創(chuàng)建一個(gè)通用的堆棧程序集,它們共享相同的名稱。
多態(tài)性的概念經(jīng)常被說(shuō)成是“一個(gè)接口,多種方法”。這意味著可以為一組相關(guān)的動(dòng)作設(shè)計(jì)一個(gè)通用的接口。多態(tài)性允許同一個(gè)接口被必于同一類的多個(gè)動(dòng)作使用,這樣就降低了程序的復(fù)雜性。選擇應(yīng)用于每一種情形的特定的動(dòng)作(specific action )(即方法)是編譯器的任務(wù),程序員無(wú)需手工進(jìn)行選擇。你只需記住并且使用通用接口即可。
再拿狗作比喻,一條狗的嗅覺(jué)是多態(tài)的。如果狗聞到貓的氣味,它會(huì)在吠叫并且追著它跑。如果狗聞到食物的氣味,它將分泌唾液并向盛著食物的碗跑去。兩種狀況下是同一種嗅覺(jué)器官在工作,差別在于聞到了什么氣味,也就是有兩種不同類型的數(shù)據(jù)作用于狗的鼻子!在一個(gè)Java 程序中使用方法時(shí),也可以采用這個(gè)通用的概念。
多態(tài)性、封裝性與繼承性相互作用
如果用得當(dāng),在由多態(tài)性、封裝性和繼承性共同組成的編程環(huán)境中可以寫(xiě)出比面向過(guò)程模型環(huán)境更健壯、擴(kuò)展性更好的程序。精心設(shè)計(jì)的類層級(jí)結(jié)構(gòu)是重用你花時(shí)間和努力改進(jìn)并測(cè)試過(guò)的程序的基礎(chǔ),封裝可以使你在不破壞依賴于類公共接口的代碼基礎(chǔ)上對(duì)程序進(jìn)行升級(jí)遷移,多態(tài)性則有助于你編寫(xiě)清楚、易懂、易讀、易修改的程序。
在前面兩個(gè)與現(xiàn)實(shí)生活有關(guān)的實(shí)例中,汽車(chē)更能全面說(shuō)明面向?qū)ο笤O(shè)計(jì)的優(yōu)點(diǎn),為介紹繼承而用狗作類比也很有趣??偟膩?lái)說(shuō),汽車(chē)與程序很相似,所有的駕駛員依靠繼承性很快便能掌握駕駛不同類型(子類)車(chē)輛的技術(shù)。不管是接送學(xué)生的校車(chē),或是默西迪斯私家轎車(chē),或是保時(shí)捷汽車(chē),或是家庭汽車(chē),司機(jī)差不多都能找到方向盤(pán)、制動(dòng)閘和加速器,并知道如何操作。經(jīng)過(guò)一段駕駛,大多數(shù)人甚至能知道手動(dòng)檔與自動(dòng)檔之間的差別,因?yàn)樗麄儚母旧侠斫膺@兩個(gè)檔的超類—— 傳動(dòng)。
人們?cè)谄?chē)上看見(jiàn)的總是封裝好的特性。剎車(chē)和踏腳板隱蔽著不可思議的復(fù)雜性,但接口卻是如此簡(jiǎn)單,你的腳就可以操作它們!引擎、制動(dòng)閘及輪胎的大小對(duì)于你如何定義踏腳板類的接口沒(méi)有任何影響。
最后的屬性,多態(tài)性,在汽車(chē)制造商基于相同的交通工具所提供的多種選擇的能力上得到了充分反映。例如,剎車(chē)系統(tǒng)有正鎖和反鎖之分,方向盤(pán)有帶助力或不帶助力之分,引擎有4缸、6缸或8缸之分。無(wú)論設(shè)置如何,你都得腳踩剎車(chē)板來(lái)停車(chē),轉(zhuǎn)動(dòng)方向盤(pán)來(lái)轉(zhuǎn)向,按離合器來(lái)制動(dòng)。同樣的接口能被用來(lái)控制許多不同的實(shí)現(xiàn)過(guò)程。
正如你所看到的,通過(guò)封裝、繼承及多態(tài)性原理,各個(gè)獨(dú)立部分組成了汽車(chē)這個(gè)對(duì)象。這在計(jì)算機(jī)程序設(shè)計(jì)中也是一樣的。通過(guò)面向?qū)ο笤瓌t的使用,可以把程序的各個(gè)復(fù)雜部分組合成一個(gè)一致的、健壯的、可維護(hù)的程序整體。
上述就是小編為大家分享的如何進(jìn)行java面向?qū)ο缶幊淘淼姆治隽?,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享標(biāo)題:如何進(jìn)行java面向?qū)ο缶幊淘淼姆治?/a>
網(wǎng)址分享:http://muchs.cn/article34/gddepe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)、商城網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、定制開(kāi)發(fā)、網(wǎng)站策劃、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)