Program to Interface not Implementation

Sekarang, gw bakal nulisin yang agak2 serius… dan lebih serius dari biasanya…. tentang sebuah prinsip berbunyi “program to interface, not implementation”!

Kata2 di atas, pasti paling nyantol di pikiran orang2 yang sedang belajar OOP… Mungkin kalo programmer c enggak yah.. Tapi lebih ke desainer. Jadi, ada satu prinsip pas ngebangun kelas pake prinsip OO… yaitu, “Program to an interface, not an implementation”. Mungkin kamu bingung nangkep maksudnya kalo di-bahasa Indonesia-in… Tapi ringkasnya, lebih baik pake interface dulu untuk membentuk suatu concrete class. Jadi, concrete class itu bukan class yang berdiri sendiri. Hal ini dimaksudkan untuk mencari keseragaman antara 1 kelas dengan yang lainnya.

Contohnya gini… dari stackoverflow… Kita punya kelas untuk membuat objek lalat dan objek telemarketer. 2 hal ini, merupakan kelas yang dapat dibuat terpisah dan berdiri sendiri. Tapi, dengan adanya prinsip di atas, kita harus mencari kesamaan di antara keduanya. Dan, keduanya… sama2 pengganggu. Pest gitu laaah… Jadi, musti kita bikin interface-nya.

interface IPest {
    void BeAnnoying();
 }

 class HouseFly inherits Insect implements IPest {
   void FlyAroundYourHead();
   void LandOnThings();

   void BeAnnoying() {
     FlyAroundYourHead();
     LandOnThings();
   }
 }

 class Telemarketer inherits Person implements IPest {
   void CallDuringDinner();
   void ContinueTalkingWhenYouSayNo();

   void BeAnnoying() {
      CallDuringDinner();
      ContinueTalkingWhenYouSayNo();
   }
 }

Dan… kita bisa memanggil keduanya dengan cara gini:

 class DiningRoom {

   DiningRoom(Person[] diningPeople, IPest[] pests) { ... }
   void ServeDinner() {
     when diningPeople are eating,
       foreach pest in pests
         pest.BeAnnoying();
   }
 }

Perhatiin, pas pemanggilan pest.BeAnnoying(), kita gak perhatiin kalo dia itu telemarketer atau sekedar lalat biasa. Itu semua tergantung kita bentuk objek yang mana dari concrete class-nya. Seandainya ada tambahan concrete class untuk pest tipe yang lain… kita gak perlu ubah logika di DiningRoom. Cukup bentuk 1 objek tambahan, tambahin ke array pest! Selesai!

Intinya, ini berhubungan sama open/closed principle. Dimana kita bebas meng-extends suatu class, tapi sangat terlarang untuk melakukan perubahan di dalamnyan trus terkait jugak ama prinsip enkapsulasi… gitu kira2…

Sumber:
http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface
http://joshldavis.com/2013/07/01/program-to-an-interface-fool/
http://www.fatagnus.com/program-to-an-interface-not-an-implementation/

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s