Pengenalan OOP
Object oriented programming (OOP) adalah paradigma pemrograman yang dominan saat ini, dan telah menggantikan teknik structured atau procedural programming yang telah dikembangkan sejak awal tahun 70-an. Bahasa pemrograman Java adalah bahasa pemrograman yang secara total menerapkan paradigma pemrograman berorientasi obyek.
|
|
Untuk memahami OOP lebih lanjut,
penulis akan menganalogikan dengan hal berikut ini. Bagaimana perusahaan
manufaktur seperti Toshiba dan Sony VIAO mampu membuat begitu banyak
model notebook dan merespon kebutuhan pasar dengan cepat? Jawabannya
karena perusahaan tersebut membeli komponen-komponen dari vendor-vendor
yang reputasinya baik, lalu merakitnya. Mereka tidak menginvestasikan
waktu untuk merancang dan membangun power supply, disk drive, motherboards, dan komponen-komponen lain.
Gambar: UML Class Diagram of Store Software |
Obyek dapat dibuat sendiri atau dibeli dengan pertimbangan efisiensi tenaga dan waktu. Salah satu contohnya, Software CRM (Customer Relationship Management) mungkin perlu membeli komponen untuk mengirim SMS dalam menunjang salah satu fungsinya seperti marketing campaign daripada mereka mengembangkan sendiri untuk alasan efisiensi waktu.
Selama obyek tersebut memenuhi spesifikasi (conformance/standarisasi),
maka kita dapat menggunakannya tanpa mempedulikan atau mengetahui
detil proses di dalam obyek tersebut. Kita cukup mengetahui
karakteristik (atribut), fungsi kerja (method) serta bagaimana cara
memakainya saja. Diibaratkan anda membeli sparepart ban motor, anda
tidak perlu tahu dari karet apa ini dan bagaimana memproduksi ban dari
karet, tetapi lebih memfokuskan spesifikasi apa yang harus anda pilih
(diameter ban untuk motor 17, 18 dan ketebalan ban 2.25, 2.5) serta cara
memasangnya. Pada kasus membeli komponen SMS untuk keperluan aplikasi
CRM , anda tidak perlu mengetahui detail proses pemrograman serial port,
anda cukup mengetahui method sendSMS, receiveSMS dan parameter
(tujuan, pesan) untuk mengirim dan menerima .
OOP berfokus pada data
Perancang bahasa pemrograman Pascal, Niklaus Wirth memberi judul bukunya yang terkenal, Algoritma + Data Structures = Program
(Prentice Hall, 1975). Pada buku tersebut dijelaskan bahwa programmer
merancang prosedur untuk memecahkan suatu masalah (algortima). Setelah
prosedur ditetapkan, langkah berikutnya menentukan struktur penyimpanan
data agar manipulasi terhadap data menjadi lebih mudah.
OOP membalikan urutan tersebut dengan memfokuskan pada obyek atau struktur data terlebih dahulu lalu memutuskan langkah-langkah dalam memanipulasi data atau obyek tersebut.
Istilah-istilah pada OOP
Anda perlu mengetahui istilah-istilah OOP sebelum melangkah lebih jauh. Salah satu istilah yang penting adalah Class. Class adalah template atau blueprint dari
obyek dan disinilah sebuah object dirancang sebelum diciptakan. Anda
bisa berpikir Class seperti sebuah cetakan tempat kue dibuat sedangkan
Obyek adalah kue-nya. Ketika anda membuat obyek dari class, anda dapat
mengatakan instance dari Class atau disebut Object saja.
Contoh nyata dalam pemrograman,
misalkan tercipta sebuah class bernama employee. Instance dari class
employee adalah obyek-obyek yang bernama Alex, Catherine, David dsb.
Untuk membuat object baru, Java menggunakan keyword new.
Employee alex = new Employee();
Bagi anda programmer pada masa tahun 80-an atau awal 90-an, anda akan bertambah bingung karena dalam OOP juga ada istilah tambahan lagi yaitu object reference yang berbeda dengan variabel. Untuk membedakannya sekali lagi penulis lebih suka meng-analogikan dengan dunia nyata supaya anda tidak bingung. Beginilah analoginya.
- Class adalah blueprint dari suatu object yang di dalam komputer berbentuk kode program class. Diibaratkan dunia nyata adalah spesies ciptaan Tuhan seperti manusia, gajah, dsb.
- Object adalah instance dari class tertentu yang menempati ruang di memory komputer. Ibarat dunia adalah makhluk yg diciptakan Tuhan dari spesies tertentu (manusia, gajah), yang bisa dilihat dan disentuh.
- Object Reference adalah nama panggilan untuk menunjuk object yang sudah diciptakan dan berada di memory komputer. Ibarat seorang manusia yang diciptakan mempunyai identitas nama seperti Alex, Catherine agar object lain atau komputer bisa berkomunikasi dengannya. Hewan pun kadang diberi nama. Jadi object reference mirip dengan variabel pointer pada bahasa C++. Perbedaan object reference dan variable akan ditunjukan dalam kode program di akhir bagian ini.
Beberapa ciri dari OOP yang akan dijelaskan lebih detail adalah abstraction (abstraksi), encapsulation (pembungkusan), inheritance (pewarisan) serta polimorphism (banyak bentuk atau berperilaku majemuk).
Gambar: Syarat OOP |
Istilah OOP - Abstraction
Abstraction adalah penyembunyian
kerumitan dari suatu proses yang sudah dijelaskan diatas. Mungkin saya
jelaskan lagi. Analogi pada sebuah mobil terdapat komponen gear.
Kita tidak perlu berpikir detil proses perpindahan kecepatan yang
dijelaskan secara ilmiah oleh pakar teknik mesin, namun kita cukup
memahami gigi dan cara penggantian gigi dengan menggunakan kopling.
Dalam pemrograman, sudah dijelaskan tentang komponen SMS.
Istilah OOP - Encapsulation (Pembungkusan)
Encapsulation biasa disebut
data hiding adalah menyembunyikan pemrosesan data dari pemakai yang
mengakses obyek. Untuk lebih jelasnya, anda harus memahami object lebih
detil. Object dibagi menjadi 2 bagian,
- Atribut/property/field adalah data-data yang ada pada obyek.
- Method/fungsi adalah sesuatu yang bisa dilakukan object tersebut untuk mengubah status atributnya.
Sekali lagi, saya harus
menganalogikan, karena OOP susah dipahami kalo tidak pakai analogi.
Ibarat object dari class manusia mempunyai banyak atribut, salah satunya
mata, hati, tangan, kaki dan sebagainya (kata benda). Sedangkan
method/fungsinya adalah melihat, merasakan, menulis, berjalan (kata
benda).
Agar encapsulation berjalan
sesuai dengan konsepnya, jangan pernah mengakses atribut secara langsung
dari class lain, atribut seharusnya diakses melalui method dari
class-nya sendiri. Atribut juga harus memiliki access modfier private
(lebih jauh dijelaskan dalam topik design class). Encapsulation object
akan memudahkan pelacakan kesalahan. Coba anda bayangkan jika instance
atribut diberikan akses public maka kelas diluar dirinya mampu mengganti
nilai field sehingga susah bagi programmer untuk mencari kelas mana
yang bertanggung jawab, jika melakukan kesalahan peubahan. Konsep
encapsulation meminimasi pencarian kesalahan koding juga membantu dalam
hal modularitas agar suatu class dapat diintegrasikan dengan class lain.
Contoh yang benar:
Employee alex = new Employee("Alex Badru");
System.out.prinltn("Gaji alex = " + alex.getSalary());
Contoh yang salah: // this is not error but breaking a rules of encapsulation in OOP.
Employee keket = new Employee("Catherine Wikileak");
keket.salary = keket.gajipokok + keket.bonus + keket.thr
System.out.prinltn("Gaji Catherine = " + keket.salary);
Pada contoh di atas atribut seharusnya tidak boleh diexpose sehingga diketahui oleh class lain tetapi harus dipanggil melalui method lain seperti getSalary() untuk membungkus dan menyembunyikan internal proses perhitungan gaji. Inilah syarat OOP yang harus dipenuhi.
Istilah OOP - Inheritance (Pewarisan)
Inheritance adalah kemampuan untuk
membuat class baru yang berasal dari kelas induk. Dengan melakukan
pewarisan, kita dapat menggunakan field dan method yang telah dibuat
kelas induk serta menambahkan field dan method baru untuk beradaptasi
sesuai kebutuhan baru dan lebih spesifik. Dalam Java, class induk
dinamakan super class sedangkan class turunan yang mewarisi sifat class induk disebut sub class.
Contoh lebih konkritnya adalah terdapat super class person dan melalui proses pewarisan dapat menghasilkan 2 sub class yaitu employee dan student. Obyek employee mempunyai field tambahan berupa NIP serta method bekerja sedangkan obyek student mempunyai field tambahan berupa NIS serta method belajar. Fasilitas ini disediakan OOP untuk menghemat penulisan kode ulang dengan memanfaatkan komponen lama (reuse component) dalam menciptakan komponen baru dengan fitur tambahan lebih spesifik. Selebihnya akan dibahas tersendiri dengan materi Inheritance.
Istilah OOP - Polymorphism (Banyak Bentuk)
Polymorphism adalah banyak
bentuk. Kita dapat merancang sebuah class baru dari class induk agar
class-class baru mempunyai perilaku yang berbeda dengan class lainnya,
tetapi memiliki esensi yang sama.
Sebagai contoh terdapat super class bernama Message, dan terdapat 3 sub class turunan (inheritance) dari class Message yaitu class MailMessage, VoiceMessage serta FaxMessage. Ketika programmer memanggil method SendMessage pada 3 kelas tersebut, ketiga obyek tersebut memang benar akan mengirim pesan tetapi dilakukan dengan cara yang berbeda dan spesifik. Dalam Java penerapan polymorphism dapat dilakukan dengan 3 cara yaitu:
- Meng-override method dari super class
- Mengimplementasikan abstract class
- Mengimplementasikan interface.
Selebihnya akan dibahas tersendiri dengan materi Polymorphism.