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.
To be continue ...
(Keterangan: gambar diambil dari berbagai sumber di internet, sedangkan isi adalah copyright: DTugasAlgoritma@gmail.com)
Thanx berat !! Jadi lebih mengerti tentang konsep OOP !
BalasHapus