X
T r a s h :: l o g BETA
{ Chen Hendrawan }
chenz v.A-01 chenz v.T23s chenz v.X0-KZ

(tidak ada) interface vs abstract class

Endy Muhardin menjawab pertanyaan seseorang mengenai bagaimana kita menentukan kapan saatnya menggunakan interface ataukah abstract class.

Dalam sedikit hal saya kurang sepaham, mestinya penjelasan bisa lebih sederhana tanpa perlu menyinggung tentang pattern, karena belum tentu pembaca paham pattern. Dan memang tak perlu paham design pattern untuk memahami perbedaan interface & abstract class.

Saya sendiri menggunakan interface jika ingin class saya dikenal oleh class-class lain, terutama (tak selalu) jika berbeda package / namespace. Interface sesuai namanya berguna untuk menjadi antarmuka atau kontrak antara satu kelas dengan kelas lain. Bahwa class yang mengimplementasikan interface tersebut memiliki method-method tertentu. Contohnya interface java.util.Collection, orang cukup tahu bahwa class-class yang implement interface tersebut akan memiliki method-method seperti add(), remove(), iterator(), dsb.

Menurut saya, jangan pernah membandingkan interface dengan abstract class. Selalu gunakan interface! Selalu gunakan interface untuk memperkenalkan method-method apa saja yang akan diekspos oleh sebuah class. Pikiran mengenai interface ada saat tahap design.

Baru saat implementasi, kita boleh berpikir apakah class-class tersebut akan kita buat abstract atau concrete. Apakah sebuah method punya implementasi yang generik ataukah bahkan belum bisa didefinisikan (abstract) sampai kita beranjak ke hal yang lebih detail implementasi method tersebut pada suatu kasus tertentu (concrete subclass).

Dengan begini, kita nggak perlu bingung toh kapan harus membuat interface atau abstract class :D .

Bagi penganut test-first development, pemahaman seperti ini juga lebih mudah. Pertama buat saja semua interface (dan mungkin dummy factory), kemudian buat test-nya, jadi test kita nggak error saat dicompile. Baru buat implementasinya.

4 Responses to “(tidak ada) interface vs abstract class”

  1. Akhmad Fathonih Says:

    Setuju :) Interface adalah konvensi, sekaligus suatu identitas bahwa suatu class memiliki fungsionalitas yang terdefinisikan dalam interface.

    Abstract dan interface adalah apple and orange :) . Meskipun kadangkala menjadi membingungkan kalau dipakai untuk hal sama: enforcing implementation of a method

    *bukan^Wbelum p^Hmenganut test first development*

  2. Akhmad Fathonih Says:

    Doh, maksudnya membingungkan adalah tampak sama. Maaf, suka gk sinkron nih antara tangan dan otak :D

  3. kocu Says:

    i prefer orange than apple, so which one is it? :D

  4. Blog berisi catatan yang pernah dilakukan Says:

    […] pa Endy, Chen, Agus, Paupau, dan ini […]

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

*
To prove that you're not a bot, enter this code
Anti-Spam Image