(tidak ada) interface vs abstract class
Friday, January 26th, 2007Endy 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.