面向?qū)ο蟮乃枷?/h2>
在初學(xué)Java時(shí)看了畢向東的視頻課,對(duì)于面向?qū)ο笥∠笞钌羁痰木褪桥e“把大象放進(jìn)冰箱里”的例子(可見一個(gè)有趣恰當(dāng)?shù)睦訉?duì)于抽象的思想是多么好理解)。
而“把大象放進(jìn)冰箱里”方式是:
- 把冰箱門打開
- 把大象放進(jìn)去
- 把冰箱門關(guān)上
面向過程:
- 打開冰箱
- 存儲(chǔ)進(jìn)冰箱
- 關(guān)閉冰箱
我們把冰箱當(dāng)做一個(gè)對(duì)象,它有打開、存儲(chǔ)、關(guān)閉的功能。
面向?qū)ο螅?/strong>
- 冰箱.打開
- 冰箱.存儲(chǔ)
- 冰箱.關(guān)閉
面向?qū)ο罂梢园褟?fù)雜的問題簡單化,可以讓我們的角度從執(zhí)行者變成指揮者。
我們可以將對(duì)象看作是服務(wù)提供者。
下面可以結(jié)合公司開發(fā)項(xiàng)目為例子:
首先我們把項(xiàng)目經(jīng)理當(dāng)做指揮者,項(xiàng)目的開發(fā)需要前端、后端、測(cè)試人員。
項(xiàng)目經(jīng)理指揮后端人員開發(fā)系統(tǒng)(相當(dāng)于new一個(gè)后端人員對(duì)象,并調(diào)用他開發(fā)后端的功能),再指揮前端人員、測(cè)試,后續(xù)還需要運(yùn)維人員等都類似。
面向?qū)ο蠓椒ㄕ?/h2>
我剛畢業(yè)入職的第一家公司,上班第一天總監(jiān)說要給我們培訓(xùn)面向?qū)ο?,首先講的就是面向?qū)ο蠓椒ㄕ?,總結(jié)來說:
輸入需求,輸出對(duì)象
需求就是需求文檔中的語言文字(核心是名稱、動(dòng)詞、形容詞)
名詞,表示對(duì)象的生命周期,如何出現(xiàn)、如何運(yùn)作、如何結(jié)束(
如:權(quán)限,定義、分配、驗(yàn)證等)
動(dòng)詞,表示具體的邏輯(如:審核功能)
形容詞,表示對(duì)象的狀態(tài)
我們?cè)趯?shí)際開發(fā)中也可以運(yùn)用關(guān)鍵字提取的方式來將需求落地實(shí)現(xiàn)。
面向?qū)ο蟮娜筇匦?/h2>
面向?qū)ο笕筇匦裕?strong>封裝、繼承、多態(tài)
封裝:指隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問方式。
(優(yōu)點(diǎn):便于使用,提高復(fù)用性和安全性)
繼承:提高代碼復(fù)用性;繼承是多態(tài)的前提。所屬關(guān)系 is a。(注:想要使用體系,先查閱體系父類的描述,因?yàn)楦割愔卸x的是該體系中共性功能。通過了解共性功能,就可以知道該體系的基本功能。)
多態(tài):事物存在的多種體現(xiàn)形態(tài)。
抽象:屬于繼承的一部分。當(dāng)多個(gè)類出現(xiàn)相同功能,但功能主體不同。這時(shí)可以向上抽取,只抽取功能定義,而不抽取功能主體。(在父類和子類之間加一層抽象類,定義抽象方法)
抽象類特點(diǎn):
1、抽象方法一定中抽象類中。
2、抽象方法和抽象類都必須被abstract關(guān)鍵字修飾。
3、抽象類不可以new創(chuàng)建對(duì)象,因?yàn)檎{(diào)用抽象方法沒意義。
4、抽象類中的方法要被使用,必須由子類重寫后,建立子類對(duì)象調(diào)用。
如果子類只覆蓋了部分抽象方法,該子類還是一個(gè)抽象類。
重點(diǎn)說多態(tài)
定義:我們?cè)诔绦蛑卸x的引用變量所指向的具體類型和通過該引用變量的方法調(diào)用在編程的時(shí)候并不確定,當(dāng)處于運(yùn)行期間才確定。就是這個(gè)引用變量究竟指向哪一個(gè)實(shí)例對(duì)象,在編譯期間是不確定的,只有運(yùn)行期才能確定,這樣不用修改源碼就可以把變量綁定到不同的類實(shí)例上,讓程序擁有了多個(gè)運(yùn)行狀態(tài),這就是多態(tài)。
多態(tài)也屬于后期綁定。當(dāng)向?qū)ο蟀l(fā)送消息時(shí),被調(diào)用的代碼直到運(yùn)行時(shí)才能確定。編譯器確保被調(diào)用方法的存在,并對(duì)調(diào)用參數(shù)和返回值執(zhí)行類型檢查,但是并不知道將被執(zhí)行的確切代碼。
多態(tài)又分為 編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。
編譯時(shí)多態(tài):比如重載。
運(yùn)行時(shí)多態(tài):比如重寫。
動(dòng)物:貓、狗。
貓 x = new 貓();
動(dòng)物 x = new 貓();
Java 實(shí)現(xiàn)多態(tài)有3個(gè)必要條件:繼承、重寫和向上轉(zhuǎn)型。只有滿足這3個(gè)條件,開發(fā)人員才能夠在同一個(gè)繼承結(jié)構(gòu)中使用統(tǒng)一的邏輯實(shí)現(xiàn)代碼處理不同的對(duì)象,從而執(zhí)行不同的行為。
多態(tài)的體現(xiàn):父類的引用指向自己的子類對(duì)象或接收自己的子類對(duì)象
多態(tài)的前提:必須是類與類之間有關(guān)系。要么繼承、要么實(shí)現(xiàn)。
多態(tài)的好處:提高程序的擴(kuò)展性
總結(jié)
- 面向?qū)ο罂梢园褟?fù)雜的問題簡單化,可以讓我們的角度從執(zhí)行者變成指揮者。
- 輸入需求,輸出對(duì)象(分析需求的名稱、動(dòng)詞、形容詞)。
- 面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)。
- 多態(tài)是對(duì)象在編譯期執(zhí)行哪個(gè)方法并不確定,在執(zhí)行時(shí)才確定的。
- 實(shí)現(xiàn)多態(tài)必要條件:繼承、重寫和向上轉(zhuǎn)型。