面向?qū)ο蠛?jiǎn)稱 OO(Object Oriented),20 世紀(jì) 80 年代以后,有了面向?qū)ο蠓治?OOA)、 面向?qū)ο笤O(shè)計(jì)(OOD)、面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)等新的系統(tǒng)開發(fā)方式模型的研究。
對(duì) Java 語(yǔ)言來說,一切皆是對(duì)象。把現(xiàn)實(shí)世界中的對(duì)象抽象地體現(xiàn)在編程世界中,一個(gè)對(duì)象代表了某個(gè)具體的操作。一個(gè)個(gè)對(duì)象最終組成了完整的程序設(shè)計(jì),這些對(duì)象可以是獨(dú)立存在的,也可以是從別的對(duì)象繼承過來的。對(duì)象之間通過相互作用傳遞信息,實(shí)現(xiàn)程序開發(fā)。
對(duì)象的概念
Java 是面向?qū)ο蟮木幊陶Z(yǔ)言,對(duì)象就是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心。所謂對(duì)象就是真實(shí)世界中的實(shí)體,對(duì)象與實(shí)體是一一對(duì)應(yīng)的,也就是說現(xiàn)實(shí)世界中每一個(gè)實(shí)體都是一個(gè)對(duì)象,它是一種具體的概念。對(duì)象有以下特點(diǎn):
對(duì)象具有屬性和行為。
對(duì)象具有變化的狀態(tài)。
對(duì)象具有唯一性。
對(duì)象都是某個(gè)類別的實(shí)例。
一切皆為對(duì)象,真實(shí)世界中的所有事物都可以視為對(duì)象。
例如,在真實(shí)世界的學(xué)校里,會(huì)有學(xué)生和老師等實(shí)體,學(xué)生有學(xué)號(hào)、姓名、所在班級(jí)等屬性(數(shù)據(jù)),學(xué)生還有學(xué)習(xí)、提問、吃飯和走路等操作。學(xué)生只是抽象的描述,這個(gè)抽象的描述稱為“類”。在學(xué)校里活動(dòng)的是學(xué)生個(gè)體,即張同學(xué)、李同學(xué)等,這些具體的個(gè)體稱為“對(duì)象”,“對(duì)象”也稱為“實(shí)例”。
面向?qū)ο蟮娜蠛诵奶匦?/strong>
面向?qū)ο箝_發(fā)模式更有利于人們開拓思維,在具體的開發(fā)過程中便于程序的劃分,方便程序員分工合作,提高開發(fā)效率。面向?qū)ο蟪绦蛟O(shè)計(jì)有以下優(yōu)點(diǎn)。
可重用性:代碼重復(fù)使用,減少代碼量,提高開發(fā)效率。下面介紹的面向?qū)ο蟮娜蠛诵奶匦?繼承、封裝和多態(tài))都圍繞這個(gè)核心。
可擴(kuò)展性:指新的功能可以很容易地加入到系統(tǒng)中來,便于軟件的修改。
可管理性:能夠?qū)⒐δ芘c數(shù)據(jù)結(jié)合,方便管理。
該開發(fā)模式之所以使程序設(shè)計(jì)更加完善和強(qiáng)大,主要是因?yàn)槊嫦驅(qū)ο缶哂欣^承、封裝和多態(tài) 3 個(gè)核心特性。
繼承性
如同生活中的子女繼承父母擁有的所有財(cái)產(chǎn),程序中的繼承性是指子類擁有父類的全部特征和行為,這是類之間的一種關(guān)系。Java 只支持單繼承。
例如定義一個(gè)語(yǔ)文老師類和數(shù)學(xué)老師類,如果不采用繼承方式,那么兩個(gè)類中需要定義的屬性和方法如圖 1 所示。
圖 1 語(yǔ)文老師類和數(shù)學(xué)老師類中的屬性和方法
從圖 1 能夠看出,語(yǔ)文老師類和數(shù)學(xué)老師類中的許多屬性和方法相同,這些相同的屬性和方法可以提取出來放在一個(gè)父類中,這個(gè)父類用于被語(yǔ)文老師類和數(shù)學(xué)老師類繼承。當(dāng)然父類還可以繼承別的類,如圖 2 所示。
圖 2 父類繼承示例圖
總結(jié)圖 2 的繼承關(guān)系,可以用概括的樹形關(guān)系來表示,如圖 3 所示。
圖 3 類繼承示例圖
從圖 3 中可以看出,學(xué)校主要人員是一個(gè)大的類別,老師和學(xué)生是學(xué)校主要人員的兩個(gè)子類,而老師又可以分為語(yǔ)文老師和數(shù)學(xué)老師兩個(gè)子類,學(xué)生也可以分為班長(zhǎng)和組長(zhǎng)兩個(gè)子類。
使用這種層次形的分類方式,是為了將多個(gè)類的通用屬性和方法提取出來,放在它們的父類中,然后只需要在子類中各自定義自己獨(dú)有的屬性和方法,并以繼承的形式在父類中獲取它們的通用屬性和方法即可。
提示:C++ 支持多繼承,多繼承就是一個(gè)子類可有多個(gè)父類。例如,客輪是輪船也是交通工具,客輪的父類是輪船和交通工具。多繼承會(huì)引起很多沖突問題,因此現(xiàn)在很多面向?qū)ο蟮恼Z(yǔ)言都不支持多繼承。Java 語(yǔ)言是單繼承的,即只能有一個(gè)父類,但 Java 可以實(shí)現(xiàn)多個(gè)接口(接口類似于類,但接口的成員沒有執(zhí)行體。詳細(xì)了解可參考《Java接口》一節(jié)),可以防止多繼承所引起的沖突問題。
封裝性
封裝是將代碼及其處理的數(shù)據(jù)綁定在一起的一種編程機(jī)制,該機(jī)制保證了程序和數(shù)據(jù)都不受外部干擾且不被誤用。封裝的目的在于保護(hù)信息,使用它的主要優(yōu)點(diǎn)如下。
保護(hù)類中的信息,它可以阻止在外部定義的代碼隨意訪問內(nèi)部代碼和數(shù)據(jù)。
隱藏細(xì)節(jié)信息,一些不需要程序員修改和使用的信息,比如取款機(jī)中的鍵盤,用戶只需要知道按哪個(gè)鍵實(shí)現(xiàn)什么操作就可以,至于它內(nèi)部是如何運(yùn)行的,用戶不需要知道。
有助于建立各個(gè)系統(tǒng)之間的松耦合關(guān)系,提高系統(tǒng)的獨(dú)立性。當(dāng)一個(gè)系統(tǒng)的實(shí)現(xiàn)方式發(fā)生變化時(shí),只要它的接口不變,就不會(huì)影響其他系統(tǒng)的使用。例如 U 盤,不管里面的存儲(chǔ)方式怎么改變,只要 U 盤上的 USB 接口不變,就不會(huì)影響用戶的正常操作。
提高軟件的復(fù)用率,降低成本。每個(gè)系統(tǒng)都是一個(gè)相對(duì)獨(dú)立的整體,可以在不同的環(huán)境中得到使用。例如,一個(gè) U 盤可以在多臺(tái)電腦上使用。
Java 語(yǔ)言的基本封裝單位是類。由于類的用途是封裝復(fù)雜性,所以類的內(nèi)部有隱藏實(shí)現(xiàn)復(fù)雜性的機(jī)制。Java 提供了私有和公有的訪問模式,類的公有接口代表外部的用戶應(yīng)該知道或可以知道的每件東西,私有的方法數(shù)據(jù)只能通過該類的成員代碼來訪問,這就可以確保不會(huì)發(fā)生不希望的事情。
多態(tài)性
面向?qū)ο蟮亩鄳B(tài)性,即“一個(gè)接口,多個(gè)方法”。多態(tài)性體現(xiàn)在父類中定義的屬性和方法被子類繼承后,可以具有不同的屬性或表現(xiàn)方式。多態(tài)性允許一個(gè)接口被多個(gè)同類使用,彌補(bǔ)了單繼承的不足。多態(tài)概念可以用樹形關(guān)系來表示,如圖 4 所示。
圖 4 多態(tài)示例圖
從圖 4 中可以看出,老師類中的許多屬性和方法可以被語(yǔ)文老師類和數(shù)學(xué)老師類同時(shí)使用,這樣也不易出錯(cuò)。
以上就是長(zhǎng)沙中公優(yōu)就業(yè)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java面向?qū)ο髴?yīng)用教程,更詳細(xì)了解”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java全套自學(xué)資料
Java自學(xué)視頻教程(免費(fèi)學(xué)習(xí)):http://www.bjpowernode.com/video.html
Java技術(shù)教程:http://www.bjpowernode.com/tutorial/