#3 Belajar Konsep OOP (Object Oriented Programming) : Encapsulation dan Bagaimana Kotlin Menerapkan Konsep Encapsulation
Hello welcome back ! Saya sangat senang hari ini bisa menuliskan kelanjutan dari sekuel pembahasan tentang konsep OOP. Seperti janji saya pada artikel sebelumnya tentang inheritance, pada artikel ini saya akan menuliskan salah satu konsep yang merupakan pilar dari OOP yaitu Encapsulation. Apabila anda mengikuti seri sekuel ini dari awal selamat berarti anda telah mengikuti jalan ninja yang benar ;D
Lanjut… Sebenarnya apa sih yang di maksud encapsulation. Sering kali kita telah merapkan encapsulation tapi kita tidak mengetahui bahwa itu adalah salah satu manfaat dari encapsulation.
Encapsulation adalah suatu teknik dimana kita bisa mewraping (membungkus) data dan methods yang ada pada suatu kelas kedalam satu unit.
Secara sederhana bayangkan bahwa encapsulation sebagai kapsul obat yang didalamnya terdapat data dan methods. Dimana kapsul tersebut bisa dianggap sebagai suatu class. Karena data dan methods tersebut berada di dalam kapsul maka kita tidak bisa mengakses / mengubah data yang didalam kapsul secara langsung. Konsep ini yang biasanya disebut dengan data hidding dalam OOP.
Beberapa manfaat dari Encapsulation adalah
- Data hiding: Mekanisme penyembunyian data dari objek lain diluar class tersebut. Jadi disini kita tidak bisa mengakses data yang ada secara langsung. Kita perlu membuat suatu methods yang digunakan untuk mengakses dan mengubah suatu fields yang dinamakan methods setter dan getter.
- Data security: Kita bisa improves security dengan cara menyembunyikan data yang penting dalam suatu code. Hal ini bisa dilakukan dengan cara menambahkan access modifier private pada suatu data. kita akan membahasnya setelah ini.
- Data validation: Dengan mengunakan setter dan getter kita bisa menambahkan validasi suatu data sebelum kita mengganti dan mengaksesnya. Setter dan getter juga bisa menambah fleksibilitas dengan cara menentukan suatu data hanya bisa diakses / hanya bisa diganti (read-only dan write-only).
- Reusability: Encapsulation juga menambah re-usability and mudah untuk dirubah sesuai dengan kebutuhan.
- Testing code is easy: Encapsulated code itu mudah dilakukan testing untuk unit testing.
Access Modifier
Saya telah menyingung sedikit tentang access modifier. Dengan access modifier kita bisa menyembunyikan suatu data dengan menambahkan access modifier private. Access modifier tidak hanya bisa digunakan pada data saja, tetapi juga bisa digunakan pada methods dan class. Sebenarnya apa sih yang dimaksud dengan access modifier?
Access modifier adalah suatu cara mengatur scope (cakupan) suatu data (fields), methods dan class.
Ada perbedaan setiap bahasa pemrograman dalam mendukung access modifier ini . Kotlin sendiri mendukung 4 access modifier diantaranya adalah private, protected, internal dan public. Default access modifier pada kotlin adalah public.
Sebenarnya dalam kotlin, access modifier bisa digunakan dalam deklarasi member suatu package, class dan interface, dan modules. Pada kali ini saya akan menjelaskan pengunaanya pada class dan interface.
Private : Access modifier ini digunakan apabila kita ingin membuat suatu member hanya bisa diakses di class itu sendiri.
Protected : Jika kita menggunakan access modifier ini maka suatu member hanya bisa diakses di class itu sendiri dan kelas turunannya (subclass). Secara cakupannya bisa disebut private +visibile in subclass.
Internal : Apabila kita menggunakan Access modifier ini maka member bisa diakses dalam satu modul yang sama saja.
Public : Access modifier ini digunakan apabila kita ingin menampilkan suatu member agar bisa diakses dimanapun.
Real Case
Saya sambil satu contoh nyata dari kehidupan kita sehari yaitu akun bank. Karena contoh ini menerapakan beberapakeuntungan yang bisa dilakukan oleh ecapsulation. Dalam akun bank kita mempunyai fields yang namanya jumlah saldo. jumlah saldo ini sangat penting yaaa didalam program kita tidak dibolehkan untuk mengaksesnya secara langsung karena bisa membahayakan keamanan dan kevalid-an suatu data. oleh karena itu kita perlu menambahkan acess modifier private difields tersebut.
Selanjutnya kita sebagai nasabah mempunyai beberapa kebiasaan yang bisa dilakukan yaitu deposit uang, menarik uang, dan mengecek uang. didalam methods deposit dan merik uang kita tidak bisa semena-mena menganti jumlah saldo kita. program memerlukan validasi agar jumlah saldo, jumlah uang yang di simpan dan jumlah uang yang ditarik tetap valid. bayangkan jika jumlah saldo yang kita cek negatif misalnya ini jelas akan menjadikan kehebohan masyarakat hehe;)
Oke selanjutanya kita mencoba untuk mengimplemntasikanya ke dalam suatu fungsi utama.
hasil output:
Pengecekan jumlah saldo
Jumlah saldo anda adalah = 0Deposit saldo
Saldo telah ditambahkan !
Jumlah saldo anda adalah = 1000000
Jumlah uang yang anda masukan salah !Tarik saldo
Saldo telah dikurangi !
Jumlah saldo anda adalah = 500000
Saldo anda tidak mencukupi untuk melakukan penarikan !
Perhatikan bahwa kita tidak bisa sembarangan memasukan jumlah uang yang akan di deposit dan yang ditarik karena ada proses validasi sebelumnya. kita juga tidak bisa mengakses jumlah saldo secara langsung misalnya seperti contoh berikut
akunKu.jumlahSaldo=100000000
Field jumlahSaldo tidak akan dikenali karena kita sudah mengeset modifier private sehingga hanya class itu sendiri yang bisa membaca field tersebut. Caranya adalah kita harus membuat method setter dan getter untunk melakukan pengaksesan. Dalam Bahasa pemrograman kotlin kita tidak perlu membuat setter dan getter secara manual kita cukup menggunkan data class. Otomatis method setter dan getter akan dibuatkan oleh kotlin. Enakk bukan ? ;)
Semoga bermanfaat ya tulisan yang saya buat, selanjutnya saya akan membahas konsep yang tidak kalah pentingnya dalam OOP yaitu abstraction. Saya belum mempelajari mengenai konsep ini tetapi sepertinya sangat menarik sih karena abstraction juga bisa berfungsi sebagai data hidding kalau tidak salah heheh. Oke untuk lebih jelasnya tunggu tulisan saya berikutnya.
Happy learning !!!
Referensi:
- Website stackify.com
- Website guru99.com
- Dokumentasi Kotlin
- Website geeksforgeeks.org