Membahas Apa Itu Interface Di Bahasa Pemrograman

Satu kemungkinan kenapa anda membuka artikel ini adalah: anda sedang belajar mengenai OOP (Object Oriented Programming). Atau mungkin anda yang memang sudah terbiasa dengan programming namun mulai kesulitan mengikuti struktur kode baik di kampus atau pun pekerjaan karena skalanya sudah mulai besar.

Sebelum saya sharing sedikit soal apa itu interface di bahasa pemrograman, saya ingin membuat disclaimer terlebih dahulu bahwa definisi yang ada di artikel ini berdasarkan pengalaman saya saja. Jadi, bagi anda yang sedang mencari referensi resmi, anda tidak bisa mengambil dari sini dan juga definisi yang saya berikan mungkin akan berbeda dari programmer lain. Interface di sini juga lebih merujuk ke bahasa yang berbasiskan JVM seperti Java, Kotlin dll. Untuk bentuk interface seperti di typescript rasanya artikel ini sedikit tidak on-point.


Jadi, Apa Itu Interface Sebenarnya?

Singkatnya, interface adalah referensi dari sebuah abstraksi. Aduh apaan lagi tuh, mas? Mari kita sedikit analogikan dengan starter elektrik sepeda motor. Saat anda menaiki motor, dan hendak menyalakan mesin, apa yang pertama kali anda cari? Yak, tombol starter. Tapi apakah anda tahu apa yang sebenarnya terjadi saat tombol starter ditekan? Hmmm... mungkin yang punya pemahaman soal otomotif pasti tau, tapi mostly orang awam seperti saya akan jawab tidak tahu. Itulah yang dinamakan abstraksi, yaitu gambaran lebih sederhana dari sebuah sistem yang rumit.

[ABSTRAKSI] Tombol starter adalah (abstraksi) gambaran sederhana dari sebuah rangkaian elektro starter sebenarnya




[IMPLEMENTASI] Sebuah implementasi / gambaran sebenarnya dari sistem starter motor


Jika kita memindahkan analogi ini ke sebuah bahasa pemrograman, kurang lebih akan seperti berikut:


Di bahasa kotlin, keyword implements disimbolkan dengan tanda : (titik dua), jika di java, akan tertulis seperti: class YamahaMio implements BikeBehavior. YA BENAR, IMPLEMENTASI



Lah Ribet Banget Pake Di Abstraksi-in Segala

Seringkali, penggunaan abstraksi ini akan dilakukan dalam sebuah class lain yang dimana class ini tidak boleh ikut campur / melihat function-function lain yang tidak dibutuhkan. Biasanya juga class ini tidak punya reference langsung ke class YamahaMio, melainkan harus berkomunikasi via interface-nya saja.

Sebagai contoh, saat kita menekan tombol starter di sepeda motor, kita akan menjalankan function start() yang dimana function start ini adalah satu-satunya fungsi yang dilihat oleh kita si pengendara. Namun dalam penerapan aslinya, tombol starter ini akan mengecek ke modul-modul lain atau kasarnya menjalankan fungsi-fungsi lain seperti mengecek keadaan baterai motor, mengecek apakah kaki standar satu sedang aktif dan lain sebagainya.

Ingat kembali bahwa, si pengendara hanya boleh melihat satu interface (dalam hal ini tombol starter di dashboard motor) saja, pengendara tidak perlu tahu rangkaian sistem lain yang bekerja saat tombol starter ditekan.


Pokoknya, pengendara hanya boleh mengakses fungsi start() saja, dia tidak perlu tahu seberapa ribet sistem aslinya.


Perhatikan dengan baik. Pada class YamahaMioInteractor, kita tidak akan bisa mengakses method-method lain selain method start(). Karena yang kita passing ke YamahaMioInteractor adalah interface-nya dalam hal ini BikeBehavior, bukan class YamahaMio-nya. Meskipun implementasi yang diterapkan sesuai dengan yang ada di dalam class YamahaMio, tapi method yang terekspos hanyalah yang ada di interface, hal ini bagus untuk programmer karena kita tahu visibilitas mengenai method-methid mana saja yang bisa dipakai. Jika sebuah class memiliki 1000 method, namun yang terkespos keluar hanya yang diperlukan saja. Jika tidak percaya, lihat Intellij suggestion ini:






Kembali ke definisi di awal artikel, interface adalah abstraksi (penggambaran yang lebih sederhana) dari sebuah implementasi. Yang namanya, penggambaran, kadang-kadang memang tidak perlu yang sangat mendetail dan spesifik.



Satu Abstraksi, Banyak Implementasi!

Nah ini yang menarik. Satu abstraksi bisa memiliki multiple implementasi. Contoh sebelumnya kita menganalogikan sepeda motor Yamaha Mio, tapi tahukah anda bahwa cara kerja elektro starter Yamaha Mio versi sekarang berbeda dengan versi Yamaha Mio keluaran pertama?

Di Yamaha Mio keluaran pertama, meskipun motor anda sedang di posisi kick stand (standar samping), starter akan tetap menyala!. Jika diperhatikan implementasi di atas berbeda dan harus diubah. Jadi jika anda membuat class baru bernama YamahaMioVersiLama : BikeBehavior, di dalam method override start nya anda perlu membuang pengecekan isKickStandNotActive.

Tapi di kasus ini, saya tidak akan mencontohkan yamaha mio karena rasanya terlalu sulit. Saya akan contohkan dengan studi kasus burung.



Buwung apa tuh, man?


Akan saya contohkan dua burung, yakni burung puyuh dan burung elang. Kedua hewan ini berbagi behavior yang sama, yakni sama-sama terbang. Namun, cara terbang mereka berdua sangatlah berbeda, burung puyuh tidak bisa terbang tinggi, sedangkan burung elang bisa dan burung elang juga dapat terbang menukik.




Perhatikanlah pada constructor class BurungInteractor, di situ terdapat dua parameter yaitu IburungPuyuh dan IburungElang, keduanya sama-sama bertipe BirdBehavior. Namun lihat saat kita coba run code tersebut:





Wow, meskipun tipe data nya sama namun outputnya bisa berbeda. Itulah yang saya maksud, satu abstraksi multiple implementasi. 

Contoh yang lebih sederhana lagi adalah siswa sekolah, semua siswa berbagi behavior yang sama bukan? Seperti misalnya: berangkatSekolah(), belajar() dan lain sebagainya, namun Si Udin dari kelas A bisa saja berangkatSekolah() naik angkot, atau Ratih dari kelas B bisa saja berangkat sekolah dengan menggunakan sepeda.

Selain itu juga Udin adalah jurusan IPA, dia tidak belajar sejarah, dan Ratih adalah siswi IPS, dia tidak belajar kimia. Jadi method belajar() berbeda implementasinya.

Method belajar() dan berangkatSekolah() adalah sebuah abstraksi (penggambaran sederhana bahwa seorang siswa pasti belajar dan pasti berangkat sekolah), lalu implementasinya lebih spesifik lagi.


Ok Deh!

Sebenarnya saya ingin menjelaskan lebih lanjut lagi soal interface ini seperti pemakain aslinya seperti apa, lalu contoh interface yang biasa kita pakai secara tidak sadar, bedanya dengan abstract class. Tapi ya mungkin akan saya update artikel ini suatu hari nanti, karena artikel ini saja ditulis saat saya sedang ngantuk-ngantuknya menunggu final piala euro Italy v Inggris.


Post a Comment

0 Comments