Oleh : Reza Ervani
بسم الله الرحمن الرحيم
Interface adalah cara untuk mencapai polimorfisme di Java. Polimorfisme adalah konsep yang membutuhkan praktek dan pemahamaan terus-menerus untuk dikuasai. Secara dasar, polimorfisme berart sebuah instance dari suatu class (suatu objek) dapat digunakan seakan-akan berasal dari berbagai jenis. Disini, tipe yang dimaksud dapat berupa sebuah class atau sebuah interface.
Mari kita lihat diagram sederhana berikut :
Class-class diatas semuanya adalah bagian dari sebuah model yang merepresentasikan berbagai tipe berbeda dari kendaraan dan driver, dengan field dan metode. Itu adalah tanggung jawab dari class-class tersebut – untuk memodel entitas tersebut dari dunia nyata.
Sekarang bayangkan kita perlu memiliki kemampuan untuk menyimpan objek-objek ini di sebuah database, dan juga melakukan serialisasi mereka ke XML, JSON dan format-format lain. Kita ingin hal itu diimplementasikan menggunakan satu metode tunggal untuk tiap operasi, tersedia untuk masing-masing objek Car
, Truck
atau Vehicle.
. Sebuah metode store()
, metode serializeToXML()
dan metode serializeToJSON().
Lupakan hal itu sejenak, karena mengimplementasikan fungsionalitas ini sebagai metode secara langsung pada objek dapat menyebabkan hirarki class menjadi berantakan. Cukup bayangkan itulah yang anda inginkan diimplementasikan oleh operasi yang ada.
Dimana pada diagram diatas kita harus meletakkan ketiga metode tersebut, sehingga mereka dapat diakses oleh seluruh class ?
Salah satu cara untuk memecahkan masalah ini adalah membuat suatu superclass umum untuk class Vehicle
dan Driver
class, yang memiliki metode storage dan serialisasi. Bagaimanapun, ini akan menghasilkan kekacauan konspetual. Hierarki class tidak akan lagi menjadi model vehicle dan driver, tetapi juga terikat ke mekanisme storage dan serialisasi pada aplikasi kita.
Soluasi yang lebih baik adalah membuat beberapa interface dengan metode storage dan serialisasi, dan membiarkan class mengimplementasikan interface-interface tersebut. Berikut contohnya :
public interface Storable { public void store(); } public interface Serializable { public void serializeToXML(Writer writer); public void serializeToJSON(Writer writer); }
Ketika masing-masing class mengimplementasikan dua interface ini dan metodenya, kita akan selalu dapat mengakses metode pada interface ini dengan melemparkan objek ke instance dari tipe interface tersebut. Berikut contonya :
Car car = new Car(); Storable storable = (Storable) car; storable.store(); Serializable serializable = (Serializable) car; serializable.serializeToXML (new FileWriter("car.xml")); serializable.serializeToJSON(new FileWriter("car.json"));
Sebagaimana yang bisa anda lihat sekaran, interface menyediakan cara yang lebih bersih untuk mengimplementasikan fungsionalitas lintas sektor pada class dibandingkan inheritance.
Leave a Reply