2009-01-09 42 views

回答

12

爲了幫助您的團隊對這個想法感到滿意,最好的途徑是展示基於接口的開發可以實現什麼,以及如何在沒有它的情況下完成同樣的任務。爲了讓他們「真正」接受並開始理解它,他們首先需要理解並感受到它所解決問題的痛苦。他們真的需要擁有「我每次發生與自己或團隊對話時都必須做X的病態和厭倦」。有一兩件事,我的父親在我的「形成性」多年鑽入我是這個小寶石:

無論它有多少次被 告訴你,你永遠不會有 答案,直到你問的問題。

一旦這個對話發生(由個人或團隊自發)這是真正的學習發生的地方。訣竅是培養一個能夠激發這些類型問題的環境。如果你能向他們表明他們想要接口解決的問題的答案,那麼他們會自己提出問題。

一個很好的例子演示接口的用途如下:

你被分配爲在國際數學會議保鏢。你被告知只能讓那些人能夠爲「什麼是二加二」這個問題提供正確的答案。由於這是一個國際事件,因此很多人試圖進入那些講不同語言的人。起初,你的策略是找出(或猜測)一個請求入口的人講什麼語言,然後找到一個口譯員講同樣的問題,並通過他提出問題。事實證明,這是有效的,很快你就會學會快速識別一些語言,並且現在知道哪些口譯員說這種語言,但是當說出一種你無法識別的語言的人出現時,你會很痛苦必須花費所有時間來弄清楚它是什麼,然後找到合適的解釋器。所以,知道必須有一個更好的方法,你試着找出一個改進的方法來完成你的工作,那就是當你談到你的時候。你得到每一個有人想出時間進入公約的一令紙以及一些記號筆和,你寫在一張紙上如下:

2 + 2 = 

你瞧,它的工作原理!每個人都快速提供答案。你不必知道該人說什麼語言或找到翻譯。哎呀,你甚至不在乎他們說什麼語言,他們只是回答這個問題,因爲他們都知道數學!您不必單獨計算每個案例,而是使用參加數學會議的每個人都能理解的「IKnowMath」界面。

11

An Interface is a Contract。它只是指定了Class的某個特定類別(很難在此處找到)作爲公共API提供的內容。

+0

這是很好的閱讀。接口是我一直有點害羞拉起觸發器。你多久使用一次接口?何時何時不使用它們的最佳實踐是什麼?對我來說,在Andrew的例子中,它似乎創造了許多額外的工作。該應用程序需要相當大的證明。 – 2009-01-09 19:03:11

+0

我一直都在使用它們。如果應用程序很小,但有可能增長,那麼您仍然可以使用接口而不是編程實現。 – 2009-01-09 19:08:34

+0

請參閱http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface瞭解更多示例和原因,以便您編程到界面。 – 2009-01-09 19:18:07

2

什麼他們熟悉?

當我學過C++,建立在我現有的C知識的老師,例如:

  • 乘坐的C庫函數文件I/O:打開,讀取,並關閉使用文件處理
  • 展示如何將這些可改寫爲文件類的方法:創建,調用read方法,調用File實例上最重要的是

大樓的析構函數,我可能會一個的IFile接口比較文件通過說IFile沒有公開實現細節全部:如果應用程序使用IFile而不是File,那麼您可以更改底層文件系統/實現細節)。

+0

好點,這些開發大多數是經典的asp,非oop,非comp sci背景,所以程序員程序員... – 2009-01-09 18:20:05

3

我建議你向他們展示可以從中獲益的好處。想象一下這樣的C#情景:

class User 
{ 
    public String GetFirstName() { return "foo"; } 
} 

class App 
{ 
    void Run() 
    { 
     User user = new User(); 
     String firstName = user.GetFirstName(); 
    } 
} 

在這裏,我們有一個User類,會去從什麼地方獲得頭名,並將其返回。現在,您的應用程序與此課程相關聯,並且稍後將難以更改您的名字,因爲您已在各地使用User課程。如果您實施服務並希望開始致電FirstName價值服務,會發生什麼情況?你會有一些重構。

考慮使用此方法:

interface IUser 
{ 
    String GetFirstName(); 
} 

class User : IUser 
{ 
    public String GetFirstName() { return "foo"; } 
} 

static class UserFactory 
{ 
    public static IUser GetUser() { return new User(); } 
} 

class App 
{ 
    void Run() 
    { 
     IUser user = UserFactory.GetUser(); 
     String firstName = user.GetFirstName(); 
    } 
} 

現在你可以實現你要喜歡的任何類接口:

class UserService : IUser 
{ 
    public String GetFirstName() { return "bar"; } 
} 

,只是改變像工廠方法:

static class UserFactory 
{ 
    public static IUser GetUser() { return new UserService(); } 
} 

而你的應用程序代碼將不會更聰明。

6

接口就像一個班級的着裝要求。如果一個類實現了一個接口,那麼它的公共成員(如果你願意的話,它將出現在其他類中)將包含接口聲明的最小值。

2

教學在我們公司的新員工大三時,我已經成功地用另一種方式是考慮一個接口爲「尋找對象的方式」,從字面上。

模擬:採取的3D對象,像一塊管。根據您查看的方向,它看起來像(「表現爲」)圓形,矩形或3D對象。鑄造的概念可以很容易地等同於「嘗試旋轉對象,所以你可以把它看你想要的方式/需求」,這無論是成功或失敗根據目的,你正在尋找的視圖上。

這個模擬結果並不是100%,但它可以幫助爲那些還沒有把概念理解成具體的東西的人提供一些非常抽象的東西。

1

告訴他們接口是個詭計。因爲這個意思是隱藏在公開的:P

接口描述...接口。他們告訴你如何與實現它的類進行交互。

2

從Head First設計模式

講故事像其在Head First設計模式做的方式深入淺出設計模式或至少示例代碼副本的實際工作大量的時間與懷疑論者

問候 Edwards

1

我喜歡Legos的類比,它們分別是類和實例,以及頂部/底部的掛釘/孔以及尺寸和形狀,它們是界面。例如,我可能需要一個矩形塊,其格子爲2x4。這些是我感興趣的界面 - 掛鉤的男性/女性界面,以及矩形界面。這些可以通過矩形塊樂高的實例或兩個半尺寸的樂高玩家「組成」的另一個實例來滿足,每個實例爲2x2個螺釘,從而仍然遵守所述界面。因爲所有的樂高玩家都有一個共同的界面(男性和女性的釘子),我們可以混合並組合一個必要的組合,不管這個組合是來自哪一個新的組合,我可以製作一個巨大的機器人螞蟻,或者只是一個普通的舊方形或矩形。來到你曾經在白天迴歸的巨大桶中的樂高。地獄,我甚至可以將官方的Legos與X品牌的Legos混合使用,因爲「男性/女性的盯着界面」非常瞭解。

接口編程允許我們混合和匹配可重用的代碼組件,就像我們做的樂高玩具一樣。

相關問題