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.
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 :
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 Teknologi Berorientasi Objek merupakan sebuah pengembangan sistem yang berbeda dengan yang lain karena cara memandang perangkat lunak sebagai fungsi dan data yang terjangkit. 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 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 () ; } yang membedakan antara c dan c++ adalah c++ sudah dapat memenuhi criteria pemrograman berorientasi objek. Ciri ciri dari pemrograman berorientasi objek adalah :
#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 :
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. 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; } 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) ; }
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 secara default sudah dimiliki oleh suatu class.namun developer dapat mendefinisikan sendiri constructor copy.constructor copy dijalankan pada beberapa kondisi yaitu :
kapan copy constructor harus didefinisikan ? Sebuah class harus kita buat copy constructornya pada saat didalam class terdapat variable pointer daan mempunyai alokasi yang dinamis pada saat membuat constructor dengan parameter (constructor overloading), nilai nilai dari parameter tersebut dapat diberi nilai default. 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 yang mendukung OOP antara lain:
|