抽象和抽象原則(Abstraction Principle)

抽象的定義:

在軟件工程和計(jì)算機(jī)科學(xué)中,抽象是一種隱藏計(jì)算機(jī)系統(tǒng)復(fù)雜性的技術(shù)。他的工作原理是在用戶和計(jì)算機(jī)系統(tǒng)的交互之間建立一個(gè)簡(jiǎn)單的層次,隱藏更多的底部復(fù)雜細(xì)節(jié)【wikipedia

可以看出這里的抽象就是指復(fù)雜功能的抽象出來的接口層;PS:希望誰能提出更好的理解或者定義。

抽象的時(shí)機(jī):

Abstraction: The Rule Of Three 文章中講到了三種抽象的時(shí)機(jī)

Don't Repeat Yourself

這個(gè)大概是指“if you need it once, build it. If you need it twice, abstract it ”。我認(rèn)為即使指需要一次也需要進(jìn)行某種程度的抽象,這可以讓你的程序更加清晰,結(jié)構(gòu)性更好。當(dāng)然通過抽象的手段如何你設(shè)計(jì)的夠好的話,肯定會(huì)符合Don't Repeat Yourself這個(gè)原則的。

You Aint Gonna Need It

Always implement things when you actually need them, never when you just foresee that you need them

這個(gè)原則來自極限編程思想是說當(dāng)你真正需要一件事物時(shí),再去構(gòu)造它。放在這里是講,在很早的時(shí)候真的需要進(jìn)行抽象嗎?主要的擔(dān)心是來自過早優(yōu)化。那么什么時(shí)候進(jìn)行優(yōu)化呢?就引入了The Rule of Three.

The Rule Of Three

當(dāng)你第三次需要他的時(shí)候,再去抽象他。解決了You Aint Gonna Need It的疑問,但是和DRY想沖突(一次都不允許重復(fù)的話)

總結(jié)來就是:第一次需要時(shí)構(gòu)造它,第二次需要時(shí)拷貝它,第三次需要時(shí)抽象它。這樣是因?yàn)榈谝淮魏偷诙涡枰獣r(shí)你沒有足夠的條件知道個(gè)組件要達(dá)到的要求?!酒鋵?shí)這里談的抽象更偏向于如果某個(gè)東西多次用到,然后把它拿出來獨(dú)立抽象成一個(gè)組件,那么怎么進(jìn)行這種抽象呢?下面引出 Abstraction Principle】

抽象的原則:

The interface of a component should be independent of its implementation 。

一個(gè)組件的接口應(yīng)該和它的實(shí)現(xiàn)分離。組件的接口是用戶的視角,組件的實(shí)現(xiàn)是開發(fā)者的視角,如果組件的設(shè)計(jì)采用了Abstraction Principle,那么用戶在使用組件的過程中,并不需要知道組件是如何工作的。并且如果開發(fā)者要修改組件的實(shí)現(xiàn)時(shí)也不需要通知使用者。

最典型的例子:

汽車,我們可以把接口看做儀表盤,油門,剎車,和方向盤等。而實(shí)現(xiàn)是引擎和傳統(tǒng)裝置,而過司機(jī)想要駕駛汽車不必要懂得引擎的知識(shí)。

另外的例子是面向接口編程,如果定義了每個(gè)模塊的接口,每個(gè)模塊就可以通過接口進(jìn)行通信,而不必關(guān)心模塊是怎么實(shí)現(xiàn)的,并且一個(gè)模塊實(shí)現(xiàn)的修改也不會(huì)影響到其他的模塊。

那總結(jié)怎么實(shí)踐抽象原則呢?

如果你要開發(fā)一個(gè)組件,那么這個(gè)組件就要使用相應(yīng)的對(duì)外接口,和對(duì)內(nèi)實(shí)現(xiàn)的方式進(jìn)行抽象。

The Abstraction Principle

Abstraction: The Rule Of Three

最后編輯于
?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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