Interface pada Bahasa Pemograman Java
Java adalah bahasa pemograman berorientasi objek. Salah satu fitur pemograman berorientasi objek adalah mekanisme pewarisan sifat. Pewarisan sifat pada bahasa pemograman Java, dapat dicapai melalui tiga mekanisme yaitu: inheritance, inferface, dan polymorphism. Artikel ini membahas mekanisme interface. Alasan mengapa kita perlu menggunakan interface dalam bahasa pemograman Java adalah:
1. Java tidak mendukung multiple inheritance.
2. Fokus kepada fungsionalitas, bukan detail implementasi.
Misal pada saat bekerja dengan tim, seorang system analyst merancang kelas yang hendak digunakan dalam sebuah proyek dan mendefinisikan hubungan antar kelas tersebut. System analyst tidak perlu tahu detail kode program, melainkan cukup mendefinisikan:
1. Tipe data.
2. Parameter yang diperlukan.
Mari kita bahas penggunaan interface bahasa pemograman Java melalui sebuah skenario. Terdapat sebuah situs yang mengizinkan orang untuk membaca dan menulis artikel. Setiap orang wajib melakukan registrasi (minimal memiliki nama). Semua orang boleh membaca, namun hanya penulis yang dapat menulis artikel.

Keuntungan penggunaan interface juga dirasakan oleh pemogram dalam tim. Seorang pemogram dapat menggunakan hasil instan interface dalam membuat kode program yang dibuat oleh pemogram lain pada satu tim. Rancangan pada Gambar 1 dibuat oleh seorang system analyst. Kelas Pembaca diimplementasikan oleh pemogram 1 dan kelas Penulis diimplementasikan oleh pemogram 2. Baik pemogram 1 maupun pemogram 2 tidak perlu mencari tahu terlalu dalam tentang kemunculan metode (tidak ada metode pada interface Baca dan Tulis untuk simplifikasi jawaban). Mereka hanya perlu mengimplementasikan metode yang sudah dirancang oleh system analyst. Para pemogram harus paham masukan dan luaran metode yang dikerjakan. Konsep yang hendak dibangun dari Gambar 1 adalah:
1. Pembaca dan penulis sama-sama orang. Boleh juga diartikan ada orang yang bisa membaca dan ada orang yang bisa menulis. Sifat kelas induk Orang diturunkan baik kepada pembaca maupun penulis. Sifat yang diturunkan adalah setiap Orang memiliki nama.
2. Pembaca adalah orang yang diberikan kemampuan baca dan penulis adalah orang yang diberikan kemampuan tulis. Jika ada orang yang tidak diberikan kemampuan baca maka orang tersebut dianggap tidak bisa melakukan kegiatan membaca, demikian juga dengan menulis. Pemberian kemampuan ini kepada kelas Orang direalisasikan dengan menggunakan interface.
Sekarang mari kita tinjau kode program dari rancangan kelas pada Gambar 1.
public class Main {
public static void main(String[] args) {
Main main = new Main();
Artikel artikel = new Artikel("Orang 1"," Artikel 1");Orang orangMembaca = new Pembaca("Pembaca 1");
Orang orangMenulis = new Penulis("Penulis 1");main.baca(orangMembaca, artikel);
main.tulis(orangMenulis, artikel);
}private void baca(Orang orang, Artikel artikel){
// lakukan sesuatu.
}private void tulis(Orang orang, Artikel artikel){
// lakukan sesuatu.
}
}
Pada kode program diatas, terdapat instan dari kelas Artikel. Pada dua baris selanjutnya, terdapat dua instan dari kelas Orang. Namun kedua kelas ini diinisialisasi menggunakan dua kelas yang berbeda, yaitu kelas Pembaca dan Penulis. Perhatikan metode baca dan metode tulis. Kedua metode ini sama-sama menerima instan Orang. Pendekatan ini yang membebaskan pemogram dari pengetahuan detail kode program kelas Pembaca dan kelas Penulis. Pemogram kelas Main cukup mengetahui bahwa Orang yang bisa membaca adalah Orang yang merealisasikan interface Baca dan Orang yang bisa menulis adalah Orang yang merealisasikan interface Tulis. Hal ini didasarkan pada asumsi bahwa implementasi kelas Pembaca dan Penulis bersifat privat kepada satu pemogram, sedangkan interface bersifat publik untuk diketahui oleh semua pemogram.
public class Main {
public static void main(String[] args) {
Main main = new Main();Artikel artikel = new Artikel("Orang 1"," Artikel 1");Orang orangMembaca = new Pembaca("Pembaca 1");
Orang orangMenulis = new Penulis("Penulis 1");main.baca(orangMembaca, artikel);
main.tulis(orangMenulis, artikel);
}private void baca(Orang orang, Artikel artikel){
if(orang instanceof Baca){
// Proses membaca.}}private void tulis(Orang orang, Artikel artikel){
if(orang instanceof Tulis){
// Proses menulis.}}}
Bagaimana cara mengetahui bahwa Orang ini merealisasikan kelas Baca atau Tulis?. Penggalan kode diatas menjelaskan bagaimana membedakan Orang yang diizinkan membaca atau menulis. Kita menggunakan kata kunci instanceof dalam blok kendali (if). Kata kunci instanceof menguji apakah objek Orang merupakan instan dari interface Baca atau Tulis. Jika instan yang diharapkan telah sesuai, maka aksi baca dan tulis dapat diproses lanjut. Catat bahwa inisialisasi:
Orang orangMembaca = new Pembaca("Pembaca 1");
Orang orangMenulis = new Penulis("Penulis 1");
Tidak berada pada blok main. Seharusnya pemogram hanya menerima instan dari kelas Orang tanpa tahu bagaimana inisialisasi objek tersebut.