想請教各位關於界面的定義..繼承..實作..方面問題?

0 views
Skip to first unread message

cmt.77

unread,
Sep 27, 2008, 12:46:01 PM9/27/08
to 台灣 Adobe 使用者俱樂部

以下是節錄help文章
-----------------
IEventDispatcher 介面是做為通訊協定,供 EventDispatcher 實體用來處理事件物件,並將它們傳遞給也是實作
IEventDispatcher 介面的其它物件。

描述介面的另外一種方式就是:它像類別一樣定義資料類型,因此介面可用來做為類型附註,跟類別一樣。做為資料類型的介面也可以配合需要資料類型的運算
子 (例如 is 和 as 運算子) 一併使用;但是跟類別不同的是,介面不能實體化。這項區別讓很多程式設計人員將介面視為抽象資料類型,而將類別
視為具體資料類型。
----------------
定義界面..繼承..實作..方面

請問關於界面的使用上有帶來什麼方便性嗎?
何時能使用上?以往看到都是自定套件類別?
就字面上說明實在感覺不出來?
想請教各位關於界面使用上的經驗..3q!!

Ben Chang

unread,
Sep 27, 2008, 1:25:05 PM9/27/08
to au...@googlegroups.com
界面 (interface) 可以是一種 "約束"、"契約" 的概念,
任何實做 (implements) 介面 (interface) 的類別 (class),
都必須實做 (implements) 介面 (interface) 所定義的 method

interface IXyz{
    function m();
}

class Xyz1 implements IXyz{
    function m(){trace("xxxxxx");}
}

class Xyz2 implements IXyz{
    function m(){trace("yyyyyy");}
}

因為,interface 可以當作是一種契約,所以任何符合這種契約的類別,
我們都可以不用管他是如何去實做這個契約的,
只要知道他有提供契約中所規範的 method 就好了,

function doSomething(arg:IXyz){
    arg.m();
}

doSomething(new Xyz1());
doSomething(new Xyz2());

當分工合作的時候,當解決方案有很多種,
或是在開放架構上,實做方法由每家公司自己提供,
這時候提出規範的人,就是要定義出這個介面

譬如,資料庫連線,每種資料庫 (MS SQL Server, MySQL, Oracle, DB2......) 都有提供各自的 Driver,
但是可能都是用 conn.open() 之類的語法,來開啟資料庫連線,
這是如何做到的,就是因為事前已經定義好共通的介面,每家公司只要實做即可,

interface IConnection{
    function open();
}

class MySQLConnection implements IConnection{
    function open(){......}
}

class OracleConnection implements IConnection{
    function open(){......}
}

(以上範例是我亂寫的~)



當然,還有其他情況 或其他應用方式,來使用介面,
也有可能某個介面沒有規範任何 method 需要實做,
實做此介面的類別,只是一種被下了"標籤"的意味~







2008/9/28 cmt.77 <cmt...@gmail.com>

cmt.77

unread,
Sep 27, 2008, 9:46:38 PM9/27/08
to 台灣 Adobe 使用者俱樂部
to Ben
謝謝你!
不過目前還是感覺似懂非懂
我在想是不是我接觸不深又無實務上經驗,
所以還是無法了解清楚..

再去k一下help..看看相關介面類別資料好了..
Reply all
Reply to author
Forward
0 new messages