2014-03-12 21 views
1

我仍然在學習面向對象程序設計,在我的應用程序中找不到真實的界面使用方法。相反,我使用了很多抽象類。php界面僅適用於團隊項目

我的理解是,接口更像是你和你的代碼之間的契約。對接口進行編碼有助於爲你的類設置標準,但抽象類也是如此。

接口規定如果您構建用戶對象,它將始終有x,y和z。 抽象類是相同的,但它們給你一個額外的好處:它們允許你在定義之上添加具體的實現。

所以唯一真正的用法是在任何實現之前編寫接口,以便其他團隊成員在依賴我們的部分的另一部分lib上並行工作。或者這是對它的錯誤理解?

如果抽象類給你兩個世界的敲打,爲什麼要解決接口+抽象?

說明:我知道我錯了,接口後面必須有一個高度技術性的概念。這就是我要問的原因。

由於

+0

接口的一件事可以讓你,不管你是一個人還是多個人,都可以更清楚地將API定義(進入接口)與內部實現(進入一個類)分開。實現是處於抽象類還是具體類中取決於所討論的類的實現細節。這也意味着如果您的技術設計需要這樣的事情,您可以擁有多個相同API的實現。 – ajp15243

+0

''所以只有真正的用法是,如果你在任何實現之前編寫接口,以便其他團隊成員在依賴於我們的部分的lib的另一部分上並行工作。「 - 不,這不是」唯一真正的用途。 「定義接口可以幫助您區分問題並維護封裝和多態等事物,通常會導致更易維護且更易測試的面向對象代碼。 – David

+0

你已經提出了136個問題,而你還*寫了糟糕的英語。請不要再寫「你」或「你」。這是*從不*合適或正確的,特別是在堆棧溢出。 – meagar

回答

4

由於一個類可擴展的抽象類和實現一個接口 - 或多個接口來這一點。

如果您希望您的班級滿足由特定界面定義的合同 - 例如以便您可以將它傳遞給期望該接口的方法 - 您不必爲了實現這一目的而更改其現有的繼承層次結構 - 只要聲明它實現了接口以及,然後將其全部所需的方法。

接口的要點是定義一個可以實現的合約但是你想要的是 - 它沒有綁定到任何可能已經包含完整或部分實現的特定抽象類。

+0

你的第一句話至關重要,至少在涉及到PHP的時候 - 它不支持通過類的多重繼承。 – jcsanyi

+0

我沒有得到,課程是由你寫的。那麼有什麼機會,或者什麼時候會發生,你通過它失去了一個功能?即使你是因爲缺少方法而死的和接口的死亡一樣。或者不是? – Zalaboza

+0

如果您僅僅依賴於存在的方法,您仍然有合同,但它現在分佈在整個代碼中,而不是由接口定義在一個地方,所以如果您進行更改或提供不同的實現,則更難告訴它是否會破壞某些東西。如果你正在編寫一個小而簡單的單人應用程序,這可能不是什麼問題,但通常使用接口可以讓你的代碼更容易理解,使用和維護 - 當其他人或你自己回到一年時後來又忘記了它是如何工作的! –