◆OOP的主要特征:
抽象(abstract)
封裝(encapsulation)
繼承(inheritance)
多態(tài)(polymorphism)
關(guān)聯(lián)(association)
聚合(aggregation)
組合(composition)
內(nèi)聚與耦合(cohesion & coupling)
單個(gè)類型 抽象Abstract 封裝encapsulation
層次結(jié)構(gòu) 繼承inheritance 多態(tài)polymorphism
類型之間 關(guān)聯(lián)association 聚合aggregation 組合composition
編程準(zhǔn)則:內(nèi)聚與藕合 cohesion & coupling
◆抽象Abstract:把事物共同點(diǎn)抽取出來(lái),以統(tǒng)一的方式進(jìn)行概要描述的過(guò)程.抽象是存在不同層次的。
在不同的需求環(huán)境下,我們到底把什么抽象成類,把什么當(dāng)作實(shí)例或?qū)ο?是面向?qū)ο笤O(shè)計(jì)一開始最關(guān)鍵的一步,如果抽象過(guò)度,可能導(dǎo)致程序設(shè)計(jì)層次加重,但如果抽象不夠在極端的情況下,可能會(huì)退化到面向過(guò)程設(shè)計(jì)的那種一段程序?qū)?yīng)一個(gè)問(wèn)題的情形。
忽略掉一個(gè)對(duì)象或?qū)嶓w的細(xì)節(jié)而只關(guān)注其本質(zhì)特征的過(guò)程簡(jiǎn)化功能與格式幫助用戶與對(duì)象交互。
◆封裝(encapsulation)
隱藏?cái)?shù)據(jù)和實(shí)現(xiàn)
提供公共方法供用戶調(diào)用功能
對(duì)象的兩種視圖
—— 外部視圖:對(duì)象能做的工作
—— 內(nèi)部視圖:對(duì)象如何完成工作
—— 電視機(jī):調(diào)節(jié)音量
◆繼承(inheritance)
通過(guò)存在的類型定義新類型的機(jī)制。
通常在兩個(gè)類型之間存在“is a”或“kind of”這樣的關(guān)系。
通過(guò)繼承可實(shí)現(xiàn)代碼重用,另外繼承也是多態(tài)的基礎(chǔ)。
如蘋果“is a”水果。
◆多態(tài)(polymorphism)
一個(gè)名稱,多種形式。
一個(gè)類中的方法重載就是一種多態(tài)。
基于繼承的多態(tài)。
調(diào)用方法時(shí)根據(jù)所給對(duì)象的不同選擇不同的處理方式。
如Football——play():使用腳來(lái)完成。
Basketball——play():使用手來(lái)完成。
給出一個(gè)具體的足球或籃球,用戶自動(dòng)知道該使用誰(shuí)的方式去執(zhí)行play()。
◆關(guān)聯(lián)(association)
對(duì)象之間交互時(shí)的一種引用方式。
當(dāng)一個(gè)對(duì)象通過(guò)對(duì)另一個(gè)對(duì)象的引用去使用另一個(gè)對(duì)象的服務(wù)或操作時(shí),兩個(gè)對(duì)象之間便產(chǎn)生了關(guān)聯(lián)。
如person使用computer,person與computer之間就存在了關(guān)聯(lián)關(guān)系。
person
{
Computer.PlayGame();
}
◆聚合(aggregation)
關(guān)聯(lián)關(guān)系的一種,一個(gè)對(duì)象成為另外一個(gè)對(duì)象的組成部分。
是一種關(guān)系較強(qiáng)的關(guān)聯(lián)。
在兩個(gè)對(duì)象之間存在“has a”這樣的關(guān)系,一個(gè)對(duì)象作為另一個(gè)對(duì)象的屬性存在,在外部對(duì)象被生產(chǎn)時(shí),可由客戶端指定與其關(guān)聯(lián)的內(nèi)部對(duì)象。
如汽車與輪胎,輪胎作為汽車的一個(gè)組成部分,它和汽車可以分別生產(chǎn)以后裝配起來(lái)使用,但汽車可以換新輪胎,輪胎也可以卸下來(lái)給其它汽車使用。
抽象(abstract)
封裝(encapsulation)
繼承(inheritance)
多態(tài)(polymorphism)
關(guān)聯(lián)(association)
聚合(aggregation)
組合(composition)
內(nèi)聚與耦合(cohesion & coupling)
單個(gè)類型 抽象Abstract 封裝encapsulation
層次結(jié)構(gòu) 繼承inheritance 多態(tài)polymorphism
類型之間 關(guān)聯(lián)association 聚合aggregation 組合composition
編程準(zhǔn)則:內(nèi)聚與藕合 cohesion & coupling
◆抽象Abstract:把事物共同點(diǎn)抽取出來(lái),以統(tǒng)一的方式進(jìn)行概要描述的過(guò)程.抽象是存在不同層次的。
在不同的需求環(huán)境下,我們到底把什么抽象成類,把什么當(dāng)作實(shí)例或?qū)ο?是面向?qū)ο笤O(shè)計(jì)一開始最關(guān)鍵的一步,如果抽象過(guò)度,可能導(dǎo)致程序設(shè)計(jì)層次加重,但如果抽象不夠在極端的情況下,可能會(huì)退化到面向過(guò)程設(shè)計(jì)的那種一段程序?qū)?yīng)一個(gè)問(wèn)題的情形。
忽略掉一個(gè)對(duì)象或?qū)嶓w的細(xì)節(jié)而只關(guān)注其本質(zhì)特征的過(guò)程簡(jiǎn)化功能與格式幫助用戶與對(duì)象交互。
◆封裝(encapsulation)
隱藏?cái)?shù)據(jù)和實(shí)現(xiàn)
提供公共方法供用戶調(diào)用功能
對(duì)象的兩種視圖
—— 外部視圖:對(duì)象能做的工作
—— 內(nèi)部視圖:對(duì)象如何完成工作
—— 電視機(jī):調(diào)節(jié)音量
◆繼承(inheritance)
通過(guò)存在的類型定義新類型的機(jī)制。
通常在兩個(gè)類型之間存在“is a”或“kind of”這樣的關(guān)系。
通過(guò)繼承可實(shí)現(xiàn)代碼重用,另外繼承也是多態(tài)的基礎(chǔ)。
如蘋果“is a”水果。
◆多態(tài)(polymorphism)
一個(gè)名稱,多種形式。
一個(gè)類中的方法重載就是一種多態(tài)。
基于繼承的多態(tài)。
調(diào)用方法時(shí)根據(jù)所給對(duì)象的不同選擇不同的處理方式。
如Football——play():使用腳來(lái)完成。
Basketball——play():使用手來(lái)完成。
給出一個(gè)具體的足球或籃球,用戶自動(dòng)知道該使用誰(shuí)的方式去執(zhí)行play()。
◆關(guān)聯(lián)(association)
對(duì)象之間交互時(shí)的一種引用方式。
當(dāng)一個(gè)對(duì)象通過(guò)對(duì)另一個(gè)對(duì)象的引用去使用另一個(gè)對(duì)象的服務(wù)或操作時(shí),兩個(gè)對(duì)象之間便產(chǎn)生了關(guān)聯(lián)。
如person使用computer,person與computer之間就存在了關(guān)聯(lián)關(guān)系。
person
{
Computer.PlayGame();
}
◆聚合(aggregation)
關(guān)聯(lián)關(guān)系的一種,一個(gè)對(duì)象成為另外一個(gè)對(duì)象的組成部分。
是一種關(guān)系較強(qiáng)的關(guān)聯(lián)。
在兩個(gè)對(duì)象之間存在“has a”這樣的關(guān)系,一個(gè)對(duì)象作為另一個(gè)對(duì)象的屬性存在,在外部對(duì)象被生產(chǎn)時(shí),可由客戶端指定與其關(guān)聯(lián)的內(nèi)部對(duì)象。
如汽車與輪胎,輪胎作為汽車的一個(gè)組成部分,它和汽車可以分別生產(chǎn)以后裝配起來(lái)使用,但汽車可以換新輪胎,輪胎也可以卸下來(lái)給其它汽車使用。