#4 Belajar Konsep OOP (Object Oriented Programming): Abstraction dan Bagaimana Cara Menerapkannya di Bahasa Pemrograman Kotlin

Galang Aji Susanto
4 min readJul 26, 2020

--

Photo by Ahmad Syarifudin on Unsplash

Hallo, Selamat datang kembali di artikel yang membahas tentang konsep Object Oriented Programming (OOP). Ini mungkin akan menjadi artikel terakhir saya yang membahas mengenai konsep OOP. Sebelumnya saya telah membahas beberapa konsep pilar yang ada pada OOP seperti, polymorphism, inheritance, dan encapsulation. Pada kali ini saya akan membahas konsep yang tidak kalah pentingnya yaitu Abstraction. Dimana masing-masing konsep itu saling melangkapi satu sama lain untuk menyelasikan masalah yang ada. Oleh karena itu kita harus mempelajari seluruh konsep pilar dari OOP secara menyeluruh.

Sebelum melangkah ke materi lebih dalam alangkah lebih baiknya kita berkenalan terlebih dahulu dengan abstraction. Kata orang tak kenal maka tak sayang ;) Sebenarnya apa itu abstraction?

Abstraction merupakan konsep dimana kita menyembunyikan sebuah proses yang kompleks/rumit, pengguna disini hanya tahu tentang funsionalitasnya saja tetapi tidak mengetahui secara pasti bagaimana proses yang terjadi di belakangnya.

Banyak kasus dalam kehidupan sehari hari yang menerapkan konsep abstraction. Sebagai contohnya adalah ketika kita mengemudi kendaraan bermotor. Kita hanya tahu fungsi kita menginjak rem adalah mengurangi kecepatan dan fungsi menginjak pedal gas adalah menambah kecepatan. Kita tidak mengetahui secara pasti apa sebenarnya proses yang terjadi ketika kita menginjak pedal rem dan gas. Contoh lainya saat kta mengunakan mesin pembuat kopi, menggunaan handphone, menggunaan laptop dan masih banyak lagi. Saya rasa ada banyak contoh yang bisa saya berikan dalam kehidupan sehari yang menerapkan konsep abstraction ini, anda bisa mencarinya dimulai dari sekeliling anda sendiri.

Selanjutnya akan timbul pertanyaan tentang seperti apa pengunaan abstraction pada OOP ?

Pada OOP objek menyediakan abstraksi untuk menyembunyikan detail implemantasi internalnya. Kita hanya perlu mengetahui apa method dari objek yang tersedia untuk dipanggil, apa saja input parameter yang dibutuhkan. Kita tidak perlu mengetahui bagaimana method tersebut diimplemntasikan dan langkah apa yang dilakukan agar menghasilkan keluaran sesuai yang diharapkan.

Pada kotlin sendiri kita bisa menerima konsep abstraksi dengan 2 cara yaitu abstract class dan interface. Pada kali ini saya tidak akan membahas 2 cara tersebut lebih dalam, tetapi minimal anda bisa menegetahui kapan kita menggunkan abstract class, kapan kita menggunakan interface dan apa saja perbedaan diantara mereka.

Abstract Class

Abstract class digunakan apabila kita tidak mengetahui implementasi method suatu objek secara menyuluh. Pada abstract class kita bisa menginisialisai sebuah variabel dan implement method. Perbedaan yang paling mendasar antara abstract class dan class biasa adalah kita tidak bisa membuat instace dari sebuah anstract class. Abstract class hanya bisa digunakan sebagai parent class. Di dalamnya juga bisa memuat abstract variabel dan abstract method yang wajib dioverride oleh kelas turunannya. Apabila anda telah belajar polymorphism pasti telah familiar dengan konsep override ini. Anda bisa membaca artikel saya tentang polymorphim disini.

contoh program:

Sebagai contoh saya membuat abstact class yaitu animals dimana semua animals itu bernafas. Sedangkan setiap animals mempunyai cara makan dan kemampuan berenang sendiri-sendiri. Oleh karena itu kita menggunakan abstract variabel dan methods agar diimplemntasikan dikelas turunnya.

Selanjutnya saya menembuat class turunan dari Binatang berupa Ikan dan Ayam. Pada kelas tersebut kita diwajibkan untuk meng-override masing-masing abstract variabel dan abstract method.

Pada fungsi utama kita membuat masing-masing instance dari kelas Ayam dan Ikan. Kemuadian kita memanggil methods dan variabel yang tersedia di masing kelas tersebut. Lalu dimanakah letak abstractionnya?

Bisa dilihat ketika kita ingin tahu apakah ayam bernafas dan bagaimana cara ayam bernafas kita cukup memangil methods yang tersedia pada kelas tersebut.

ayam.bernafas()
ayam.caraBernafas()

Pada fungsi utama kita sama sekali tidak tahu bagaimana cara ayam sebenarnya bernafas dan ketika ada perubahan pada cara bernafasnya kita cukup merubahnya di method implementasinya bukan pada fungsi utamanya. hal ini merupakan salah satu keuntungan dari konsep abstraksi.

Hasil keluaran program adalah sebagai berikut,

Ayam:
Setiap binatang bisa bernafas!
Ayam bernafas dengan mengunakan paru-paru
ayam bisa berenang:false
Ikan:
Setiap binatang bisa bernafas!
Ikan bernafas dengan mengunakan ingsang
ikan bisa berenang:true

Interface

Interface digunakan apabila kita sama sekali tidak mengetahui implementasinya seperti apa. Pada Interface kita hanya dibolehkan menuliskan abstract variabel dan abstract method. kita diwajibkan mengimplentasikan semua variabel dan method yang telah didefinisikan pada interface.

Contoh Program:

Pada contoh diatas saya membuat sebuah interface bernama Handphone. dimana didalamnya saya mendefinisikan abstract variabel bernama kodeProduk dan abstract method bernama caraMenelfon(). secara default semua variable dan method yang ada di dalam interface berupa abstract sehingga kita diwajibkan mengimplentasikannya di kelas turunanya.

Kita membuat kelas turunanya berupa Iphone dan Android yang masing diwajibkan mengimplentasikan variabel kodeProduk dan method caraMenelfon().

Pada fungsi utama kita membuat instance dari kelas Android dan Iphone. Kemudian memanggil method caraMenelfon(). Disinilah abstraksi dilakukan, kita cukup memnaggil method yang tersedia tanpa mengetahui apa bagaimana langkah cara menelfon pada masing-masing handphone.

Secara umum perbedaan antara abstract class dan interface adalah:

  1. Pada abstact class kita dapat mengisialisasi variabel sedangkan pada interface kita tidak bisa menginisialisai variabel.
  2. Pada abstact class kita bisa menuliskan non abstact method sedangkan pada interface hanya terdapat abstract method.
  3. Sebuah class hanya bisa mempunyai single parrent abstract class (single inheritance) sedangkan pada interface sebuah class bisa mengimplementasi banyak interface (multiple inheritance). Akan tetapi kita bisa mengunakan Abstract Class dan Interface Secara bersamaan.

Kesimpulan:

Abstraction digunakan untuk menyembunyikan kompleksitas suatu proses. Dengan abstraction kita bisa memecah kompleksitas sebuah program menjadi unit-unit kecil sehingga akan mudah untuk dimaintenance. Abstraction juga akan membuat program yang kita buat lebih mudah dikembangkan apabila terdapat fitur-fitur baru. Pada kotlin sendiri mendukung konsep abstrction dengan mengunakan abstract class dan interface.

Akhirnya kita telah berada dipenghujung sekuel tentang konsep OOP. Apabila ada materi yang salah dan perlu diperbaiki lagi atau perlu ditambahkan lagi anda bisa menghubungi saya lewat email galangajisusanto@gmail.com. Saya sangat membuka untuk bisa berdiskusi lebih lanjut. Kerena saya belajar semua ini besumber dari internet alangkah lebih baik apabila saya belajar langsung dari orang yang lebih paham. Semoga artikel yang saya tuliskan bisa bermanfaat dikemudian hari ;)

Pada artikel berikutnya saya ingin membahas mengenai design pattern. Saya rasa topik ini menjadi sangat penting untuk menjadi seorang yang expert di software engineering. So, see you in the next article ;)

Referensi:

  1. Website guru99.com
  2. Website javahelps.com
  3. Website Stackify.com
  4. Website tutorialkart.com
  5. Youtube channel alex lee

--

--

Galang Aji Susanto
Galang Aji Susanto

Written by Galang Aji Susanto

iOS Developer | Apple Developer Academy Graduate | Mobile Tech Enthusiast | Full Time Learner & Part Time Coder

No responses yet