充分利用面向?qū)ο笳Z(yǔ)言的接口特性
原創(chuàng)【51CTO快譯】現(xiàn)代的面向?qū)ο笳Z(yǔ)言源自C++的特點(diǎn)之一是使用接口。一個(gè)接口是一個(gè)類,它沒有具體的實(shí)現(xiàn)過(guò)程,只提供一個(gè)用來(lái)訪問(wèn)其資源的接口。(51CTO編輯:有關(guān)面向?qū)ο笳Z(yǔ)言的更多特點(diǎn),可以參考面向?qū)ο蟮乃季S過(guò)程,以及面向?qū)ο缶幊讨蓄愒O(shè)計(jì)的幾個(gè)原則一文)
每個(gè)接口需要用一些具體的類來(lái)實(shí)現(xiàn),但優(yōu)點(diǎn)是,使得實(shí)現(xiàn)細(xì)節(jié)可以可容易地獨(dú)立出來(lái)。因此,你不必同時(shí)擔(dān)心實(shí)現(xiàn)和接口問(wèn)題。
接口可以幫助我不斷建立易于測(cè)試、修改、而且不依賴于具體類的軟件。接口可能不是最***的面向?qū)ο缶幊?,但它在編程、集體的類之上提供了眾多的優(yōu)勢(shì)。
◆接口是你和你的其他應(yīng)用程序之間的一項(xiàng)合約。該合約由編譯器保證,因此無(wú)法在不改變接口的情況下改變你的類中的服務(wù)。
◆創(chuàng)建一個(gè)接口可以讓你好好思考你的類需要給客戶提供哪些功能。建立接口的正規(guī)步驟需要你考慮什么是類中必不可少的,什么是可選的。刪除那些并不重要,然后你將擁有一個(gè)堅(jiān)實(shí)的基礎(chǔ)。
◆接口可以混合。所以即使你想要的所有功能并沒有在一個(gè)接口中呈現(xiàn),你也不必?fù)?dān)心。你可以隨時(shí)添加額外的接口,來(lái)為具體用例提供所需的方法。使用接口,在建立新功能時(shí),你不會(huì)覺得像使用具體類那樣受到限制。接口可以隨時(shí)混合和匹配。
◆接口讓軟件測(cè)試更容易。由于沒有被束縛在具體的實(shí)現(xiàn)過(guò)程上,你可以通過(guò)定義你自己的具體的類,來(lái)自由更改測(cè)試類所使用的代碼。這就會(huì)更加模塊化,測(cè)試結(jié)果更加清晰。
接口的缺點(diǎn)
接口的缺點(diǎn)非常少,唯一主要的缺點(diǎn)是,你需要花費(fèi)一些精力來(lái)維護(hù)一個(gè)獨(dú)立的實(shí)體。但是,現(xiàn)代編程工具使這件事變得很容易,因此它不再像從前那么困難。
使用接口的另一個(gè)需要強(qiáng)調(diào)的方面是,C++中使用虛指針的實(shí)現(xiàn)問(wèn)題。但是,你必須注意,現(xiàn)代面向?qū)ο笳Z(yǔ)言是基于虛擬機(jī)的。這種語(yǔ)言把每種方法描述為一個(gè)虛指針,除非系統(tǒng)決定內(nèi)聯(lián)方法(在這種情況下,不存在實(shí)現(xiàn)問(wèn)題)。除非你有非常重要的軟件(在這種情況下,你可能需要使用的C/ C + +)你不應(yīng)該擔(dān)心這種實(shí)現(xiàn)問(wèn)題,因?yàn)樘摂M機(jī)會(huì)很好地解決這種問(wèn)題。如果對(duì)虛擬機(jī)的概念仍然不很了解,可以參考詳細(xì)介紹什么是Java虛擬機(jī)一文。
結(jié)論
接口是一個(gè)現(xiàn)代化的機(jī)制,用來(lái)改進(jìn)軟件設(shè)計(jì)。盡管這樣,接口還沒有被大多數(shù)開發(fā)人員充分利用。我們應(yīng)該利用接口作為應(yīng)用程序各個(gè)部分之間默認(rèn)的通信方法,只在建立對(duì)象(工廠方法)以及向包中加入類時(shí)使用具體類。
原文:When in Doubt, Create an Interface by Carlos Oliveira
【相關(guān)閱讀】























