2013年10月26日 星期六

[Programming] Interface and Abstract Class

Interface (from Java):
Following reference from my colleague YaChun:
A Interface can help designer to implement one function (method) for different class.
Example:
Interface CanFlying {
     public void doFlying();
}

Interface CanWalking {
     public void doWalking();
}

class ActionManager(){
     void doAction() {
      if (obj instanceof CanFlying) {                      <----- 是可飛的東西,就執行飛吧~
                     CanFlying flyObj = (CanFlying) obj;
                     flyObj.onFlying();
               }

               if (obj instanceof CanWalking) {                         <----- 是會走的東西,就執行走吧~
                     CanWalking walkObj = (CanWalking) obj;
                     walkObj.onWalking();
               }
      }
}

-> one method ActionManager.doAction can deal with walking and flying of different classes 
-> Polymorphism

Abstract Class
而Abstract class in C++, 一旦定義了一個pure virtual function 這個function 雖然定義好了傳進去的參數, 但是真實的動作會在 derived class 才定義, 這也是為了那實際上使用時只要有一個 actionManager 去 使用這個virtual function 那 也是可以透過一個actionManager 管理多個classes-> 同樣也是為了polymorphism

兩個一起看的話在C++中, 若同時繼承多個abstract class 跟 Java 同時 implement 多個 interface 感覺概念上是類似的

因此基於以上兩點, 我覺得 Interface 和 Abstract class 都是同樣目的 (polymorphism), 只是Java 透過 interface的定義, 而 C++透過繼承 abstract class 來達到.

另外還有一點不同 可能是 java 在 compile time 的時候就會做到這個 polymorphism
而C++ 的Pure function 應該是runtime 才會做的

有關 C++ Abstract class 的文件
http://www.parashift.com/c++-faq-lite/abcs.html