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