Antara Abstract Class dan Interface?
Banyak programmer pemula biasanya kesulitan membedakan antara abstract class dan interface. Apa perbedaan antara abstract class dan interface? Kapan kita harus menggunakan abstract class dan kapan harus menggunakan interface?
Endy Muhardin dalam blognya menjelaskan secara teknis sebagai berikut :
Abstract class itu digunakan untuk mengimplementasikan pattern Template Method. Sedangkan interface digunakan (diantaranya) untuk mengimplementasikan pattern Observer.
Jadi di dalam abstract class kita diperbolehkan membuat implemantasi sebuah method, sedangkan dalam Interface semuanya harus dalam bentuk abstract. Untuk memahami apa yang dimaksud Endy, silahkan baca blog beliau selengkapnya.
Saya merasa ada yang hilang dari penjelasan diatas. Filosofi, yah filosofi apa itu abstract class dan apa itu interface belum tersentuh. Saya melihat sebenarnya ada perbedaan fungsional antara abstract class dan interface.
Abstract class secara filosofis lebih menekankan pada pembuatan kerangka untuk class-class lain yang ada kemiripan atau mempunyai tugas(method) yang mirip atau sama. Sebagai contoh kita ingin membuat class Square dan Circle, keduanya mempunyai method setCenter() dan draw(). Maka kita bisa membuat abstract class bernama Shape, dimana class Square dan class Circle diturunkan dari class Shape ini.
Sedangkan interface secara filosofis lebih berfungsi sebagai antarmuka yang membentuk komunikasi dengan code lain. Misalnya membentuk hubungan antara sebuah object dengan object yang lain atau hubungan antara object sebagai penyedia dengan code pengguna. Karena itulah interface ini banyak digunakan dalam dunia design pattern. Sebab kebanyakan dari design pattern ini menekankan hubungan antar object.
Mungkin karena berfungsi sebagai antarmuka itulah, mengapa sebuah object/class - dalam C#, Java dan PHP - bisa diturunkan dari banyak interface tetapi hanya boleh diturunkan dari sebuah abstract class. Itu artinya, sebuah object kemungkinan besar akan berkomunikasi dengan banyak code/object lain, dengan antarmuka yang berbeda-beda.
Nah, dari pemikiran filosofis di atas, ternyata di dunia realitas yang lebih cenderung pragmatis, perbedaan antara abstract class dan interface ini sangat tipis. Saya pernah menemukan artikel tentang design pattern menggunakan Delphi, semuanya memakai abstract class, bukan interface. Lalu kapan kita menggunakan abstract class dan kapan menggunakan interface? Tentu saja masing-masing programmer mempunyai cara yang unik yang dianggap memudahkan bagi dia. Saya sendiri lebih suka memakai pendekatan filosofis seperti yang saya jelaskan di atas. Tetapi penjelasan dari Endy Muhardin sangat membantu kita dalam mengidentifikasi perbedaan filosofis ini.
Bagaimana dengan Anda?
November 29th, 2008 10:23
[...] Endy, Chen, Agus, Paupau, dan [...]