Tagebuch 18.08.12


 


「介面」這個詞,我在學習程式的過程中聽到好幾遍、學了好幾遍,又忘了好幾遍。今天寫程式的時候又碰到這個概念,於是在複習搞懂之後,把我最後理解的結果記錄在我的日記裡。


寫物件導向的程式會建立好多的類別來解決問題。通常的情況是,把大問題分成很多個小問題。為了解決問題,建立好多了類別。有些類別寫的好的話,會被其他的類別繼承,這樣的話,在其他的類別裡面,也可以使用原來類別好用的方法。


不過有時候情況不是這樣子的。如果一開始的A類別很大,只為了使用A類別裡面的某一個方法,就繼承或匯入所有A類別的程式碼實在不是一件很聰明的事。因為這樣,所以就有了「介面」的出現。


打個比方來說,工廠、麥當勞、攤販、還有我自己個人,這四個名詞看起來好像是不同的存在,但是其中可能會有共同的地方。比方說:都可以和他們「買東西」。不過寫程式的時候,如果為了想和我自己買東西,就讓我繼承一個工廠的話,那實在是太奇怪了!而且我並不是工廠,我和工廠、攤販和麥當勞都是不同的事物。只是這些事物都可以和他們「買東西」。想要買東西的時候,不需要知道對方是工廠、還是攤販,裡面有多少員工、資本額有多大,只要知道對方可以買東西就夠了。


介面就是規定這樣的事情。口說無憑。如果某一個類別答應實作某個介面的話,那就會實作這個介面的裡面的方法。使用的時候,我們不必知道類別有些什麼成員、有些什麼資料。我們只要知道我要他做介面裡的事情時,該類別會做就好了。


我碰到的情況是,在遊戲裡外星人要在畫面裡發射飛彈。如果單單為了發射飛彈,就把整個畫面的類別匯入到外星人的類別的話,那實在匯入了太多不必要的程式碼。於是解決的方法是,在外星人的類別裡定義介面,在介面裡規定日後實作介面的類別要實作發射飛彈的方法。


 


介面的特色就是不會實作其中的方法。


 


使用的情況是,先在外星人的類別裡定義好了介面之後,接著在畫面的類別裡實作介面。外星人要發射飛彈的時候,不必知道畫面的情況,就只是透過介面,告訴實作介面的畫面要發射飛彈就好了。畫面收到外星人的要求,就會發射外星人會發射的飛彈。


這樣,當後來遊戲畫面又出現正義超人的角色時,正義超人也定義同樣的介面。介面裡面也是包含著沒有實作的、發射飛彈的方法。正義超人要在畫面發射飛彈的話,也不用匯入整個畫面的程式碼。只要透過介面,告訴實作介面的畫面要發射飛彈就好了。畫面收到正義超人的要求,就會發射正義超人會發射的飛彈。


以上,就是我理解的介面觀念。聽不懂很正常,我一開始也沒有搞懂。不過學過很多次之後,你就會懂了。


 


其他程式設計相關的文章


********************************************************************


程式名稱支援多國語系的作法 [頁面連結]


cocos2d做遊戲,支援iPhoneiPhone 4S,以及iPad,但是因為v.1.0.1沒辦法支援new iPad的解決方法 [頁面連結]


文字和圖片支援多國語系的作法 [頁面連結]

arrow
arrow
    全站熱搜

    Thomas 發表在 痞客邦 留言(0) 人氣()