Pemrograman Berorientasi Objek Bab 2 – PBO
Pemrograman Berorientasi Objek Adalah paradigma pemrograman yang diorientasikan pada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya.
PBO vs PT PT, prosedur dan data merupakan dua hal yang terpisahkan satu sama lain. Contoh, untuk mengelola data waktu yang terdiri dari jam, menit, dan detik, dalam C dapat digroupkan dengan menggunakan struct sebagai berikut: Namun meskipun demikian, untuk mengolah ketiga data tersebut, dibutuhkan prosedur yang disusun pada bagian yang terpisah.
PBO vs PT PBO, prosedur dan data dapat dibungkus menjadi sebuah objek sehingga prosedur dan data tidak terpisah lagi melainkan menjadi satu kesatuan. Ini merupakan salah satu konsep OOP yang disebut dengan “encapsulation”. OOP didasarkan pada pemodelan objek – objek dunia nyata menjadi objek – objek dalam pemrograman
Konsep Dasar OOP Objek Kelas Abstract Data Type / Tipe Data Abstrak Instantiation / Instansiasi Inheritance / Inheritas / Pewarisan Encapsulation / Enkapsulasi Abstraction / Abstraksi Polymorphism / Polimorfisme
Objek Segala sesuatu yang ada. Objek terdiri dari attribute / state dan behaviour / event. Attribute adalah segala ciri atau sifat yang melekat pada objek. Behaviour adalah perilaku / perbuatan / aksi / kejadian yang dapat dilakukan / diterima oleh objek. Contoh: anjing, kucing, manusia, meja, dsb. Attr & behav dari contoh tsb adalah???
Kelas Cetakan / template / blue print dari objek. Kelas mendefinisikan attribute (diwujudkan dalam bentuk field / variable global [variable yang melekat pada kelas, bukan pada sebuah method / fungsi / prosedur]) dan behaviour (diwujudkan dalam bentuk method / prosedur / fungsi) dari objek dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh 'class of dog' adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi object.
Kelas Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.
Abstract Data Type Adalah tipe data tertentu yang didefinisikan oleh pemrogram untuk kemudahan pemrograman serta untuk mengakomodasi tipe-tipe data yang tidak secara spesifik diakomodasi oleh bahasa pemrograman yang digunakan. Dalam OOP kita dapat mendefinisikan tipe data baru. Dapat berisi attribute saja, behaviour saja maupun keduanya. ADT diwujudkan dalam kelas – kelas buatan programmer sesuai dengan kebutuhan / keinginan programmer. Singgung tipe data primitive!
Instantiation Adalah proses penciptaan objek berdasarkan kelas yang ada. Sama dengan pembuatan variable berdasar kelas tertentu. Biasanya ditandai dengan penggunaan kata kunci “new”. Contoh: A a = new A();
Inheritance / Inheritas / Pewarisan Pewarisan attribute dan behaviour sebuah kelas kepada kelas yang lain. Contoh real: seorang anak memiliki anggota tubuh (mata, rambut) yang sama / mirip (bentuk, warna, etc) dengan orang tuanya, pewarisan DNA, etc.
Encapsulation / Enkapsulasi Pembungkusan attribute atau behaviour sehingga tidak dapat diganti secara sembarangan dengan cara yang tidak seharusnya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
Encapsulation / Enkapsulasi Manfaat dari proses enkapsulasi adalah : Modularitas: Kode sumber dari sebuah objek dapat dikelola secara independen dari kode sumber objek yang lain. Information Hiding: Karena kita dapat menentukan hak akses(public, private, protected, default) sebuah variabel/method dari objek, dengan demikian kita bisa menyembunyikan informasi yang tidak perlu diketahui objek lain.
Abstraction / Abstraksi Berbagai objek yang sejenis dapat memiliki behaviour yang sama namun berbeda implementasinya. Sebagai contoh, objek anjing sama – sama memiliki behaviour menggonggong namun suara gonggongan anjing berbeda – beda. Inilah yang mendasari abstraksi pada OOP. Pada OOP sebuah kelas dapat mendefinisikan behaviour yang sama secara abstract yang kemudian dapat diimplementasikan secara berbeda pada saat digunakan.
Polymorphism / Polimorfisme Kata polimorfisme berarti satu objek dengan banyak bentuk yang berbeda Adalah konsep sederhana dalam pemrograman berorientasi objek yang berarti kemampuan dari suatu variabel referensi objek untuk memiliki aksi berbeda bila method yang sama dipanggil, dimana aksi method tergantung dari tipe objeknya. Menciptakan berbagai macam bentuk yang berbeda dari sebuah kelas yang sama. Proses ini dilakukan melalui proses pewarisan.
Kelas dan Objek Class Creation: Object Creation / Instantiation: class <name> { } Object Creation / Instantiation: <Class Name> <object name> = new <Class Constructor>;
Constructor / Konstruktor Adalah sebuah method yang otomatis akan dipanggil setiap kali melakukan instansiasi terhadap suatu kelas dan digunakan untuk melakukan inisialisasi nilai dari data – data yang terdapat di dalam kelas yang bersangkutan. Namanya == nama kelas. Tidak ada return type sama sekali. Jika tidak dideklarasikan == use default
Sample in Java class Mahasiswa { String nama; String nim; // default constructor Mahasiswa() {} // created constructor Mahasiswa(String nama, String nim) { this.nama = nama; this.nim = nim; } void cetakNama() { System.out.println("Nama = " + nama); } void cetakNim() { System.out.println("NIM = " + nim); } public static void main(String[] args) { Mahasiswa m1 = new Mahasiswa(); m1.nama = "John Smith"; m1.nim = "672000999"; m1.cetakNama(); m1.cetakNim(); Mahasiswa m2 = new Mahasiswa("Jane Doe", "672000001"); m2.cetakNama(); m2.cetakNim(); } } Nama = John Smith NIM = 672000999 Nama = Jane Doe NIM = 672000001
Overloading Adalah mendefinisikan method yang memiliki nama yang sama, tetapi dengan signature (data type parameter & parameter number) yang berbeda dalam definisi class yang sama. Constructor == method bisa dioverload (see previous sample)
Sample In Java void cetakNama() { System.out.println("Nama = " + nama); } void cetakNama(String nama) { System.out.println("Nama = " + nama); } void cetakNama(int nama) { System.out.println("Nama = " + nama); } // not overloading void cetakNama(String namaSaya) { System.out.println("Nama = " + namaSaya); }