(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
.
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.
February 10th, 2007 at 11:11 am
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*
February 10th, 2007 at 11:17 am
Doh, maksudnya membingungkan adalah tampak sama. Maaf, suka gk sinkron nih antara tangan dan otak
February 23rd, 2007 at 9:23 am
i prefer orange than apple, so which one is it?
November 29th, 2008 at 10:23 am
[…] pa Endy, Chen, Agus, Paupau, dan ini […]