JAVA BASIC : Konsep-konsep Dasar Object Oreinted Programming
Pemrogramman berorientasi objek berbeda dengan pemrogramman prosedural. Bila pada pemrogramman prosedural urutan fungsi (prosedur) berperan sebagai kunci utama, pada pemrogramman berorientasi objek ia hanya sebagai fungsi pelengkap (apa seh maksudnya…:P). Pemrogramman prosedural menekankan pada step-step untuk menyelesaikan suatu masalah (menitik beratkan pada proses) sedangkan pemrogramman berorientasi objek menekankan pada ‘apa/siapa MEMILIKI APA dan BISA APA’ (menitikberatkan pada pelaku dan perubahan-perubahan yang terjadi pada pelaku tersebut).
Object Oriented Programming (selanjutnya disebut OOP) memilik konsep-konsep sebagai berikut : objek, kelas, enkapsulasi, pewarisan, polimorfisme, interface dan abstrak. Dari ketujuh konsep tersebut, objek dan kelas merupakan konsep utama/sentral sedangkan konsep yang lainnya adalah penjelasan kedua konsep ini.
Objek
Objek adalah representasi nyata dari segala sesuatu di sekitar kita. Sesuatu yang selalu digolongkan sebagai ‘benda’. Benda terbagi menjadi dua, pertama adalah benda yang merujuk pada benda-benda konkret semisal rumah, tanah, pohon, kendaraan dan lain-lain (dapat diraba dan disentuh….hihi kayak apa aja :p) dan benda-benda yang merujuk pada sesuatu yang abstrak (misalnya lamunan, pikiran, ide dll juga dikategorikan sebagai ‘benda’).
‘Apa/siapa MEMILIKI APA dan BISA APA’ adalah gambaran utuh dari suatu objek. Dari kalimat tersebut kita bisa mendefinisikan bahwa objek yang utuh harus memiliki sekumpulan atribut dan perilaku yang melekat kepadanya. Objek ayam misalnya memiliki atribut-atribut bulu, jenis kelamin, umur, berat badan, dan nama ayam (sebenarnya masih bisa lebih banyak lagi tergantung cara kita memandang ayam). Sedangkan perilaku objek ayam misalnya makan, berkokok, berhubungan seks, bertelur, bertarung dll.
Dalam dunia programming atribut-atribut suatu objek disebut variabel sedangkan prilaku dari suatu objek disebut method. Atribut-atribut (atau variabel-variabel) dari suatu objek digambarkan dengan kata benda, kata sifat atau keterangan. Sedangkan perilaku (method) objek digambarkan dengan kata kerja.
Perilaku ayam sangat berpengaruh pada atribut-atribut yang dimiliki oleh ayam. Perilaku makan ayam misalnya sangat berpengaruh pada berat badannya. Perilaku ayam bertarung misalnya sangat berpengaruh pada keadaan dan jumlah bulu ayam (saat bertarung banyak bulu yg lepas, dan bulu-bulunya mengembang).
Keadaan atribut-artribut objek pada kondisi/perilaku tertentu dalam konsep object oriented programming disebut sebagai State objek. Selain memiliki state, objek juga bisa berkomunikasi dan berinteraksi dengan sesamanya atau dengan objek-objek yang berbeda. Perilaku ayam bertarung dan berhubungan seks membutuhkan interaksi dengan sesama objek ayam, sedangkan perilaku makan bisa saja berinteraksi dengan objek manusia. Interaksi-interaksi antara objek-objek ini harus melalui mekanisme pengiriman pesan yang disepakati (dimengerti) oleh object-object yang berinteraksi.
Object mahasiswa misalnya dipandang dari sudut akademis memiliki atribut-atribut nama, nomor pokok mahasiswa, status pembayaran semester dan alamat. Sedangkan perilaku yang melekat pada mahasiswa adalah mengikuti perkuliahan dan mengikuti ujian. Ketika sedang belajar (mengikuti perkuliahan) mahasiswa selain berinteraksi dengan sesamanya juga bisa berinteraksi dengan objek dosen. Interaksi objek mahasiswa dengan objek dosen bisa terjadi bila kedua belah pihak menyepakati pesan jadwal mata kuliah (nama mata kuliah, waktu perkuliahan dan tempat perkuliahan).
Kelas
Kelas merupakan blue print dari kumpulan objek-objek yang sejenis. Kelas mendefinisikan semua atribut dan perilaku-perilaku dari objek tersebut.
Perbedaan antara objek dan kelas adalah objek itu nyata (telah menjadi real) sedangkan kelas hanya model saja. Ketika kita berbicara tentang sepeda gunung misalnya, ia masih menjadi sebuah model (konsep) yang masih abstrak. Tetapi ketika Sepeda gunung bermerek FEDERAL ada di depan kita (bisa kita sentuh dan bahkan bisa kita pakai) itulah yang disebut objek dari sepeda gunung.
Mahasiswa yang bernama Andi, mahasiswa yang bernama Budi, mahasiswa yang bernama Tati adalah objek-objek dari suatu komunitas mahasiswa. Di pandang sebagai mahasiswa mereka memiliki atribut-atribut yang sama (nama, npm, alamat, tingkat, status pembayaran dll) dan juga memiliki perilaku yang sama yaitu mengikut perkuliahan, mengerjakan tugas-tugas, mengikuti ujian, daftar ulang dls. Untuk objek mahasiswa yang banyak itu kita hanya membutuhkan satu kelas Mahasiswa yang mendefinisikan semua karakteristik (atritbut-atribut) dan perilaku-perilaku dari seorang mahasiswa.
Mahasiswa yang bernama Andi disebut instance dari kelas Mahasiswa, mahasiswa yang bernama Budi juga disebut instance dari kelas Mahasiswa, begitupun mahasiswa yang bernama Tati disebut instance dari kelas Mahasiswa, dan bukan mereka saja tetapi setiap objek mahasiswa adalah instance dari kelas Mahasiswa. Proses pembentukan objek dari sebuah kelas menjadi objek disebut instantiasi.
Karena kelas hanya merupakan sebuah model, tidak ada ruang memori yang digunakan untuk menyimpan data-data yang ada yang ada pada sebuah kelas. Memori hanya akan dipakai ketika kita melakukan instantiasi (membuat objek) dari sebuah kelas.
Enkapsulasi
Enkapsulasi berkaitan dengan mekanisme komunikasi (interaksi) antara objek-objek. Objek A ketika akan berinteraksi dengan objek B hanya perlu tahu objek B bisa apa dan apa aja yang diperlukan untuk melakukakannya tanpa perlu mengetahui detil bagaimana si B melakukannya. Sebagai contoh objek orang berinteraksi dengan objek motor, si objek orang tau bahwa motor bisa dinyalakan dan yang diperlukan untuk menyalakannya adalah memutor kunci ke "ON" dan menekan tombol "Starter" dan motorpun menyala. Sebenarnya dalam menghidupkan motor tersebut terdapat serangkaian proses yang terjadi di dalam objek motor (yang cukup kompleks). Enkapsulasi membungkus detil implementasi (start pada objek motor) ini sehingga menjadi sangat sederhana di mata objek orang (hanya perlu memutar kunci motor ke posisi "ON" dan menekan tombol start).
Enkapsulasi juga berkaitan dengan pembatasan hak akses. Pada kenyataannya ada suatu atribut-atribut dan perilaku-perilaku tertentu dari suatu objek yang hanya bisa diakses oleh sesama objek (yang sejenis) atau bahkan hanya dirinya sendiri. Atribut-atribut dan perilaku-perilaku objek ini tidak bisa dilihat oleh objek lain. Misalkan pada contoh di atas, ketika objek orang menyalakan objek sepeda motor, sebenarnya ada perilaku internal objek motor (katakanlah putar turbin mesin - di sini ada atribut ‘turbin’ dan perilaku ‘putar’) yang tidak bisa dilihat oleh objek orang. Jadi suatu objek memiliki bagian internal yang hanya bisa diakses oleh dirinya sendiri dan bagian eksternal yang digunakan untuk berkomunikasi dengan objek lain. Penyembuyian atribut dan perilaku internal ini sering juga disebut penyembunyian informasi (information hiding).
Berdasarkan penjelasan di atas, tujuan enkapsulasi sebenarnya adalah untuk dua hal berikut :
- Penyembuyian atribut dan perilaku internal (information hiding).
- Menyembuyikan detil implementasi suatu perilaku yang digunakan untuk berkomunikasi dengan objek lain (berkaitan dengan modularitas suatu objek).
Modularitas menyatakan kemandirian suatu objek. Perubahan pada atribut dan perilaku internal suatu objek tidak akan menjadikan problem pada objek-objek lain yang menggunakannya (berinteraksi dengannya).
Pewarisan
Ketika kita akan membuat suatu kelas dari objek-objek kita secara langsung atau tidak langsung membuat pengamatan dan pengelompokan. Pengamatan digunakan untuk mengetahui atribut-atribut dan perilaku suatu objek. Kelas didefinisikan sebagai pengelompokan dari objek-objek yang memiliki atribut dan perilaku yang secara umum sama. Dalam membuat pengelompokan ini sebenarnya ada hirarki. Hirarki paling atas adalah hirarki yang paling umum. Sedangkan hirarki yang paling bawah adalah hirarki yang paling khusus.
Sebagai contoh, ketika kita mengamati sekumpulan objek orang. Kita bisa membuat suatu kelas yang bernama ‘orang’ dengan atribut-atribut yang dimilik adalah nama, tanggal lahir, dan jenis kelamin dengan perilaku-perilaku makan, minum dan mencari teman. Maka semua objek orang bisa termasuk dalam kelas ‘orang’. Dari semua objek orang ini ternyata ada pada orang-orang tertentu yang memiliki atribut-atribut dan perilaku-perilaku yang tidak didefinisikan pada kelas orang. Misalnya ada orang yang hampir setiap hari pergi ke universitas untuk belajar. Selain memiliki semua atribut objek orang, objek orang yang ini juga memiliki atribut nomor pokok dan perilaku pergi ke universtias (untuk belajar dan mengikuti ujian). Akhirnya kita membuat spesialisasi dari objek orang untuk semua orang yang memiliki karakteristik seperti ini (memiliki nomor pokok dan perilaku pergi ke universitas untuk belajar dan mengikuti ujian). Spesialisasi ini menghasilkan kelas baru yang bernama ‘mahasiswa’ yang MEWARISI seluruh atribut-atribut dan perilaku-perilaku kelas ‘orang’ dan ia juga memiliki atribut-atribut dan perilaku-perilaku yang tidak terdapat pada kelas ‘orang’ (dalam hal ini npm, dan mengikuti kegiatan perkuliahan). Konsep kelas ‘mahasiswa’ yang mewarisi seluruh atribut dan perilaku kelas orang inilah yang disebut dengan konsep PEWARISAN (inheritance).
Dari kelas ‘orang’ menuju kelas ‘mahasiswa’ disebut spesialisasi, sedangkan dari kelas ‘mahasiswa’ menuju kelas ‘orang’ disebut generalisasi.
Polimorfisme
Polimorfisme secara leksikal bahasa berarti ‘banyak bentuk’. Dalam konsep OOP, polimorfisme adalah pendefinisian suatu perilaku-perilaku objek yang memiliki nama yang sama tetapi mengolah masukan yang berbeda. Masukan yang berbeda menyebabkan detil implementasi perilakunya juga berbeda.
Sebagai contoh, objek orang memiliki perilaku ‘makan’. Masukan atau input perilaku ‘makan’ untuk setiap orang berbeda-beda tergantung kebiasaan (dan tentunya juga wilayah). Orang indonesia biasa makan nasi, sedangkan orang eropa biasa makan roti. Polimorfisme mengijinkan pendefinisian perilaku ‘makan’ ini secara berulang (dengan nama yang sama) asalkan input yang diberikan tipenya berbeda-beda.
Interface
Interface dalam bahasa Indonesia diterjemahkan sebagai antarmuka. Interface hanya mendefinisikan method suatu kelas - perilaku suatu objek (tanpa detil implemntasinya). Jika kelas merupkan blue-print dari sebuah objek, interface adalah blue-print dari sebuah kelas.
Karena hanya mendefiniskan perilaku tanpa detil implementasi, implementasi dari suatu perilaku objek yang satu dengan objek yang lain bisa berbeda-beda (ini juga bisa dikaitan dengan polimorfisme).
Objek sepeda motor misalnya memiliki perilaku ‘oper/tambah gigi’. Implementasi tambah gigi antara motor bebek dan motor laki-laki (contoh Scorpionya Yamaha) berbeda. Kalau motor bebek selalu ke depan, sementara motor laki-laki ada yang ke belakang. Berbeda lagi dengan Yamaha Mio, ia malah otomatis implementasi tambah giginya. Walaupun implementasi dari oper gigi berbeda-beda tetapi tetep perilakunya sama (yaitu oper/pindah gigi) - ini yang di definisikan dalam interface.
Kita tidak bisa langsung membuat objek dari sebuah interface. Agar kita bisa membuat sebuah objek dari interface kita harus memanggil kelas yang mengimplentasikannya.
Abstrak Kelas
Waduh untuk kasus yang ini agak bingung juga menjelaskannya. Ok deh, sebenarnya fungsi abstrak kelas ini agak-agak mirip dengan interface. Ia digunakan untuk merancang sebuah kelas (menggambarkan isi kelas secara keseluruhan - tahukan ‘abstrak sebuak buku’?). Kita juga tidak bisa membuat objek secara langsung baik dari interface maupun dari abstrak kelas.
Bedanya kalau interface hanya berisi definisi method-method (tanpa implementasinya) sedangkan pada abstrak kelas method-method tersebut bisa saja sudah ada yang diimplementasikan, atai bisa juga hampir semua semua method itu sudah diimplementasikan. Syarat abstrak kelas dalam OOP adalah kelas tersebut minimal mempunyai satu method yang bertipe abstrak (belum diimplementasikan).
Kalau pada interface kita hanya mendefiniskan method-method, pada abstrak kelas selain method kita juga bisa mendefinisikan semua atribut-atribut dari kelas tersebut.
Kita bisa membuat objek dari sebuah interface dengan cara memanggil kelas yang mengimplementasikannya, Sedangkan objek dari sebuah abstrak kelas bisa kita buat dengan cara memanggil kelas yang mewarisinya.
Interface berkaitan dengan polimorfisme sedangkan abstrak kelas berkaitan dengan inheritance (pewarisan).
– Alhamdulillah bagian ini akhirnya selesai juga –