Pemrograman berorientasi objek
Pemrograman berorientasi objek (Inggris: object-oriented programming disingkat OOP) merupakan paradigma pemrograman berdasarkan konsep “objek”, yang dapat berisi data, dalam bentuk field atau dikenal juga sebagai atribut; serta kode, dalam bentuk fungsi/prosedur atau dikenal juga sebagai method. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek.
Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya, Model data berorientasi objek dikatakan dapat memberi fleksibilitas yang lebih, kemudahan mengubah program, dan digunakan luas dalam teknik peranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah dikembangkan dan dirawat.
Istilah Pemrograman berorientasi objek
- Kelas
kumpulan atas definisi data dan fungsi-fungsi 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. 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. - Objek
membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek. - Abstraksi
Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari “pelaku” abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan. - Enkapsulasi
Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi izin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut. - Polimorfisme
melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan “gerak cepat”, dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama. - Dengan menggunakan OOP maka dalam melakukan pemecahan suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita memiliki sebuah departemen yang memiliki manager, sekretaris, petugas administrasi data dan lainnya. Misal manager tersebut ingin memperoleh data dari bag administrasi maka manager tersebut tidak harus mengambilnya langsung tetapi dapat menyuruh petugas bag administrasi untuk mengambilnya. Pada kasus tersebut seorang manager tidak harus mengetahui bagaimana cara mengambil data tersebut tetapi manager bisa mendapatkan data tersebut melalui objek petugas adminiistrasi. Jadi untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.
Prinsip Teknologi Berorientasi Objek
Prinsip OOP ada 3, yaitu encapsulation, inheritance, serta polymorphisme. Encapsulation adalah mekanisme pemrograman yang membungkus kode dan data yang dimanipulasi dan menjaganya supaya terhindar dari interferensi dan penggunaan yang tidak perlu. Salah satu caranya dengan membentuk objek. Sedangkan manfaat encapsulation adalah :
- Menyembunyikan implementasi detil sebuah class, dan menyediakan public method
- Memaksa pengguna untuk menggunakan method untuk mengakses data
- Membuat kode lebih terpelihara
Inheritance memungkinkan programer meletakkan member yang sama dalam satu class dan class-class lain dapat mewarisi member tersebut. Class yang mengandung member yang sama dari beberapa class lain dinamakan superclass atau parent class. Class yang mewarisi dinamakan subclass atau child class. Inheritance menghasilkan class hierarchy.
Polymorphisme artinya mempunyai banyak bentuk. Dua objek atau lebih dikatakan sebagai polymorphic, bila objek-objek itu mempunyai antar muka yang identik namun mempunyai perilaku-perilaku yang berbeda
Konsep Dasar Teknologi Berorientasi Objek
Konsep Teknologi Berorientasi Objek merupakan sebuah pengembangan sistem yang berbeda dengan yang lain karena cara memandang perangkat lunak sebagai fungsi dan data yang terjangkit.
Review Abstrak Data Type
Yang dimaksud dengan abstact data type adalah membuat tipe data baru dengan menggunakan struct.
#include <constrea.h>
#include <string.h>constream ctk;
struct mahasiswa {
char nim[11];
char nama [21];
};
void main (){
ctk.clrscr();
struct mahasiswa a;
do{
ctk<< “masukkan NIM [10 digit] : “ ; cin >> a.nim;}while(strlen(a.nim) !=10;
do{
ctk<< “masukkan NAMA [max 20 digit] : “ ; cin >> a.nama;}while(strlen(a.nama) ==0 || strlen (a.nama)>20);
ctk <<endl << endl ;
ctk << “NIM : “<< a.nim << “ Nama ; “ << a.nama;
getch();
}
Fungsi diatas menggunakan passing parameter by value. Hal ini tidak bagus performancenya karena data sebesar satu struct harus copyan ke variable lainnya
Variable Reference
Pada program dibawah ini kita mendeklarasikan variable bernama a,kemudian kita membuat variable reference b sebagai alias/nam lain dari a
sekarang kita dapat mengakses/mengubah nilainya melalui a ataupun b.
#include <constrea.h>
void main (){
int a;
int b = a; //variable reference, harus langsung diinisialisasi count << b;
}
Pada program diatas kita mendeklarasikan variable bernama a,kemudian kita membuat variable reference b sebagai alias / nama lain dari a. Sekarang kita dapat mengakses / mengubah nilainya melalui a ataupun b.
Untuk passing struct ke dalam fungsi dengan menggunakan variable reference akan lebih cepat karena tidak perlu mengcopy isi variable ke variable lainnya
#include <constrea.h>
#include <string.h>
constream ctk;
struct mahasiswa {
char nim[11];
char nama[21];
};
void cetak (struct mahasiswa dan val ){
ctk<< “NIM : “ << val.nim<< “ nama : “ << val.nama;
}
void main () {
ctk.clrscr ();
struct mahasiswa a;
do{
ctk << “masukkan NIM [10 digit] : “; cin >> a.nim;
}while(strlen(a.nim)!=10);
do{
ctk<< “Masukkan Nama [max 20 digit] : “; cin >> a.nama;
}while (strlen(a.nama) ==0| | strlen (a.nama)>20;
cetak (a) ;
getch () ;
}
Konsep Encapsulation
yang membedakan antara c dan c++ adalah c++ sudah dapat memenuhi criteria pemrograman berorientasi objek.
Ciri ciri dari pemrograman berorientasi objek adalah :
- Encapsulation
penggabungan data dan method ke dalam suatu class - Inheritance
pewarisan sifat dari class induk kepada class anaknya - Polymorphism
objek dari sebuah class dapat memiliki implementasi yang berbeda beda
Deklarasi class dan implementasi class
#include <constrea.h>
#include <string.h>
class person{
Private :
char nama[21];
int umur;
public :
void setnama(char *s){
strcpy (nama,s);
}
void setumur(int n){
umur = n;
}
char * getnama () {return nama; }
int getumur () {return umur;}
};
class adalah design template atau blue print. Dari suatu class dapat dibuat banyak objek/instance.
Analoginya adalah seperti ini, bayangkan jika anda seorang arsitek, sebelum membangun rumah tentunya akan merancang dulu di kertas, jumlah dan letak pintu, jendela dan semuanya itulah class . Kemudian dari gambar rumah tersebut kita dapat membangun banyak rumah sesuai rancangan yang sudah dibuat. Masing masing rumah jadi tersebut adalah yang disebut objek instance. Class person yang sudah dibuat akan kita buat objeknya.
Constream ctk;
void main () {
ctk.clrscr() ;
//membuat objek dari class person
person a;
person b;
a.setnama(“ali”);
a.setumur(21);
b.setnama(“adi”);
b.setumur(20);
//cetak nama dan umur masing masing
ctk << a.getnama() << “” << a.getumur() << end1;
ctk << a.getnama() << “” << a.getumur() << end1;
getch () ;
}
dari itu kita dapat simpulakan :
- sebuah class terdiri dari data dan method
- sebuah class memiliki tipe akses, private yang hanya dapat diakses di class itu sendiri dan keturunannya
- jika ingin mengubah data yang bersifat private,ubahlah melalui methode yang public, sebagai contoh jika kita ingin mengubah umur maka kita harus gunakan setumur
- dari satu class dapat dibuat banya objek
mengapa data di privat ?
Karena agar tidak dapat diakses dari luar class gunanya kita mebuat private adalah information hiding, pengguna dari class tidak bisa langsung mengakses data dalam suatu objek,untuk menjaga agar data selalu valid, bayangkan jika variable umur kita buat public, bisa saja nilai umur di set dengan nilai negative(umur tidak ada yang negative dengan melalui fungsi setumur kita bisa memberikan alternatif penanganan jika hal itu terjadi seperti contoh diatas.
Selain itu beberapa fungsi pun dapat dibuat private dimana kita ingin fungsi fungsi tersebut tidak bisa diakses oleh pengguna class,sehingga class dapat dipandang lebih sederhana, karena hanya fungsi fungsi public saja yang ditampilkan dan tentunya class menjadi lebih mudah digunakan.
Constuctor dan destructor
constructor otomatis dipanggil pada saat objek/instance dibuat dari suatu class. Destructor otomatis dipanggil pada saat objek dihancurkan/dibuang dari memory.
Class person {
private :
char c;
public :
person () ; //constructor
~person () ; //detructor
}
person : : person () {
cout << constructor dijalankan” << endl;
}
person : : ~person(){
count << “destructor dijlankan” << endl ;
}
void main (){
person a;
person b;
}
Member initializer
untuk menginisialisasi data member dapat menggunakan member initializer
class titik {
private :
int x,y;
public :
titik (int a, int b) x(a), y(b) {
}
void main () {
titik p(8,7) ;
}
- overloading function
- constructor overloading
constructor dalam suatu class juga dapat di overloading.sebagaimana diketahui secara default sebuah class memiliki 2 buah constructor yaitu constructor default dan constructor copy dan 1 buah destructor.
Selain itu kita bisa menambahkan constructor lagi dengan membedakan parameternya. Destructor tidak bisa di over loading,bentuk pemanggilan constructor adalah dilakukan otomatis pada saat pembuatan objek.
Destructor dipanggil pada saat objek dihancurkan (di unload dari memory) untuk pemanggilan constructor menggunakan konsep stack jadi misalkan urutan pembuatan objeknya adalah a,b,c maka destructor yang dijalankan adalah c,b,a
constructor copy
constructor copy secara default sudah dimiliki oleh suatu class.namun developer dapat mendefinisikan sendiri constructor copy.constructor copy dijalankan pada beberapa kondisi yaitu :
- initialization
- passing parameter by value
- function return
kapan copy constructor harus didefinisikan ?
Sebuah class harus kita buat copy constructornya pada saat didalam class terdapat variable pointer daan mempunyai alokasi yang dinamis
Default value
pada saat membuat constructor dengan parameter (constructor overloading), nilai nilai dari parameter tersebut dapat diberi nilai default.
static class members
static class member adalah dimana data/function tersebut merupakan milik class bukan objeknya,jadi nilainya hanya satu yang bisa digunakan untuk semua objek dari class tersebut.
Bahasa pemrograman OOP
Bahasa pemrograman yang mendukung OOP antara lain:
- Visual Foxpro
- Java
- C++
- Pascal (bahasa pemrograman)
- SIMULA
- Smalltalk
- Ruby
- Python
- PHP
- C#
- Delphi
- Eiffel
- Perl
- Adobe Flash AS 3.0