面向?qū)ο?/h2>

面向?qū)ο蟮乃枷?/h2>

在初學(xué)Java時(shí)看了畢向東的視頻課,對(duì)于面向?qū)ο笥∠笞钌羁痰木褪桥e“把大象放進(jìn)冰箱里”的例子(可見一個(gè)有趣恰當(dāng)?shù)睦訉?duì)于抽象的思想是多么好理解)。

而“把大象放進(jìn)冰箱里”方式是:

  1. 把冰箱門打開
  2. 把大象放進(jìn)去
  3. 把冰箱門關(guān)上

面向過程:

  1. 打開冰箱
  2. 存儲(chǔ)進(jìn)冰箱
  3. 關(guān)閉冰箱

我們把冰箱當(dāng)做一個(gè)對(duì)象,它有打開、存儲(chǔ)、關(guān)閉的功能。

面向?qū)ο螅?/strong>

  1. 冰箱.打開
  2. 冰箱.存儲(chǔ)
  3. 冰箱.關(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é)

  1. 面向?qū)ο罂梢园褟?fù)雜的問題簡單化,可以讓我們的角度從執(zhí)行者變成指揮者。
  2. 輸入需求,輸出對(duì)象(分析需求的名稱、動(dòng)詞、形容詞)。
  3. 面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)。
  4. 多態(tài)是對(duì)象在編譯期執(zhí)行哪個(gè)方法并不確定,在執(zhí)行時(shí)才確定的。
  5. 實(shí)現(xiàn)多態(tài)必要條件:繼承、重寫和向上轉(zhuǎn)型。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容