面向?qū)ο蟮某绦蛟O(shè)計(jì)(Object Oriented Programming,OOP)方法是目前比較流行的程序設(shè)計(jì)方法,和面向過(guò)程的程序設(shè)計(jì)比,它更符合人類(lèi)的自然思維方式。
面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征是:封裝性、繼承性、多態(tài)性。(推薦學(xué)習(xí):PHP視頻教程)
1、封裝性
封裝就是隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開(kāi)接口,控制在程序中屬性的讀和修改的訪(fǎng)問(wèn)級(jí)別,將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合,形成一個(gè)有機(jī)的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進(jìn)行有機(jī)的結(jié)合,形成“類(lèi)”,其中數(shù)據(jù)和函數(shù)都是類(lèi)的成員。
封裝的目的是增強(qiáng)安全性和簡(jiǎn)化編程,使用者不必了解具體的實(shí)現(xiàn)細(xì)節(jié),而只是要通過(guò)外部接口,以特定的訪(fǎng)問(wèn)權(quán)限來(lái)使用類(lèi)的成員。
面相對(duì)象的不就是使用程序處理事情時(shí)以對(duì)象為中心去分析嗎,與面向過(guò)程不同,面向過(guò)程關(guān)心處理的邏輯、流程等問(wèn)題,而不關(guān)心事件主體。而面向?qū)ο蠹疵嫦蛑黧w,所以我們?cè)诮鉀Q問(wèn)題時(shí)應(yīng)該先進(jìn)行對(duì)象的封裝(對(duì)象是封裝類(lèi)的實(shí)例,比如張三是人,人是一個(gè)封裝類(lèi),張三只是對(duì)象中的一個(gè)實(shí)例、一個(gè)對(duì)象)。比如我們?nèi)粘I钪械男⊥米?、小綿羊都可以封裝為一個(gè)類(lèi)。
比如兔子的屬性有兩只耳朵、四只腿、一雙眼睛、三瓣嘴等;行為(功能)有跑、跳、吃素等。
2、繼承性
繼承是面向?qū)ο蟮幕咎卣髦?,繼承機(jī)制允許創(chuàng)建分等級(jí)層次的類(lèi)。繼承就是子類(lèi)繼承父類(lèi)的特征和行為,使得子類(lèi)對(duì)象(實(shí)例)具有父類(lèi)的實(shí)例域和方法,或子類(lèi)從父類(lèi)繼承方法,使得子類(lèi)具有父類(lèi)相同的行為。類(lèi)似下面這個(gè)圖:
我們?cè)谏厦嬉呀?jīng)封裝了兔子這個(gè)類(lèi),其他動(dòng)物也一樣可以進(jìn)行封裝。在封裝過(guò)程中我們發(fā)現(xiàn)兔子、綿羊這兩個(gè)類(lèi)具有相似的功能或特性如吃草,所以我們可以抽取共有特征和方法形成高一層的類(lèi),如這里的食草動(dòng)物、食肉動(dòng)物。繼承之間是子父類(lèi)的關(guān)系。繼承機(jī)制可以很好的描述一個(gè)類(lèi)的生態(tài),也提高了代碼復(fù)用率,在Java中的Object類(lèi)是所有類(lèi)的超類(lèi),常稱(chēng)作上帝類(lèi)。
3、多態(tài)性
多態(tài)同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。是指一個(gè)類(lèi)實(shí)例(對(duì)象)的相同方法在不同情形有不同表現(xiàn)形式。多態(tài)機(jī)制使具有不同內(nèi)部結(jié)構(gòu)的對(duì)象可以共享相同的外部接口。這意味著,雖然針對(duì)不同對(duì)象的具體操作不同,但通過(guò)一個(gè)公共的類(lèi),它們(那些操作)可以通過(guò)相同的方式予以調(diào)用。
多態(tài)的優(yōu)點(diǎn):
1.消除類(lèi)型之間的耦合關(guān)系
2. 可替換性
3. 可擴(kuò)充性
4. 接口性
5. 靈活性
6. 簡(jiǎn)化性
多態(tài)存在的三個(gè)必要條件:
繼承重寫(xiě)(子類(lèi)繼承父類(lèi)后對(duì)父類(lèi)方法進(jìn)行重新定義)父類(lèi)引用指向子類(lèi)對(duì)象
簡(jiǎn)言之,多態(tài)其實(shí)是在繼承的基礎(chǔ)上的。比如說(shuō)今天我們要去動(dòng)物園參觀動(dòng)物,那么你說(shuō)我們?nèi)⒂^兔子、參觀綿羊、參觀獅子、參觀豹子都是對(duì)的,但你不能說(shuō)我們?nèi)⒂^汽車(chē)。在這個(gè)例子中,子類(lèi)具有多態(tài)性:除了使用自己的身份,還能充當(dāng)父類(lèi)。