Senin, 27 Desember 2010

ex listing program c++ dengan oop


#include<conio.h>
#include<iostream.h>
class macbook
{
public:
 char warna[20];
 int ukuran;
 int jml;
 int harga;
};
macbook apple;
main()
{
clrscr();
 cout<<"~~DATA APPLE MACBOOK~~"<<endl<<endl;
 cout<<"Warna   Notebook              : ";cin>>apple.warna;
 cout<<"Ukuran Notebook               : ";cin>>apple.ukuran;
 cout<<"Jumlah                                 : ";cin>>apple.jml;
 cout<<"Harga                                  : ";cin>>apple.harga;
 cout<<endl;
 cout<<"~~ DATA APPLE MACBOOK ~~"<<endl<<endl;
 cout<<"Warna   Notebook              :  "<<apple.warna<<endl;
 cout<<"Ukuran Notebook               :  "<<apple.ukuran<<endl;
 cout<<"Jumlah                                 :  "<<apple.jml<<endl;
 cout<<"Harga                                  : Rp. "<<apple.harga<<endl;
getch();
}

Memahami Konsep OOP dengan C++

1.1 Pendahuluan

Tulisan ini merupakan pengenalan kepada pemrograman berorientasi objek (Object-oriented
Programming, selanjutnya disebut OOP) dengan menggunakan ANSI C++. Disarankan agar Anda
menguasai dasar-dasar pemrograman struktural terlebih dahulu dengan menggunakan salah satu
bahasa pemrograman, baik C, Pascal, Basic atau yang lainnya. Sedikit sejarah tentang C++, C++
diciptakan oleh Bjarne Stroustrup di laboratorium Bell pada awal tahun 80-an, sebagai
pengembangan dari bahasa C dan Simula. Saat ini, C++ merupakan salah satu bahasa yang paling
populer untuk pengembangan software berbasis OOP. Tulisan ini memperkenalkan paradigma
pemrograman berorientasi objek dengan menggunakan C++.



1.2 Bagaimana Konsep OOP?


Konsep utama pemrograman berorientasi objek yaitu melakukan permodelan objek dari kehidupan
nyata ke dalam tipe data abstrak. Jelasnya, pemrograman berorientasi objek merupakan konsep
pemrograman untuk memodelkan objek yang kita gunakan dalam kehidupan sehari-hari, dan konsep
seperti ini membawa perubahan yang mendasar dalam konsep pemrograman terstruktur. Perubahan
dramatis dalam konsep dasar disebut paradigma, maka jangan heran bila banyak orang yang
menyebut “paradigma OOP” karena memang OOP membawa konsep yang sama sekali berbeda

Text Box: Lisensi Dokumen:
Copyright c 2003 IlmuKomputer.Com
Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari IlmuKomputer.Com.

dengan bahasa pemrograman generasi sebelumnya (bahasa pemrograman terstruktur). Setiap objek
dalam kehidupan nyata dapat kita pandang sebagai kelas, misalnya kelas Hewan, kelas Manusia,
kelas Mobil. Sedangkan objek dari kelas tersebut misalnya sapi dan ayam untuk kelas Hewan, Budi
dan Tono untuk kelas Manusia serta Toyota dan VW untuk kelas Mobil. Dengan OOP, kita dapat
mengimplementasikan objekt data yang tidak hanya memiliki ciri khas (attribut), melainkan juga
memiliki metode untuk memanipulasi attribut tersebut. Singkatnya, OOP memiliki keunggulan dari
konsep pemrograman terstruktur, selain itu juga memiliki kemampuan untuk mengimplementasikan
objek dalam kehidupan nyata.



1.3 Struktur Kelas

Sebagai langkah pertama dalam OOP akan kita bahas pendefinisian kelas di C++. Dalam bagian 1.2
penulis telah mencontohkan beberapa kelas yang lazim kita temui dalam kehidupan sehari-hari. Mari
kita amati contoh lain dari kehidupan kita, dengan mendeklarasikan sebuah kelas bernama
BilanganRasional :

class BilanganRasional

{

public :

 void assign (int,int);

 void cetak();

private :

 int pembilang, penyebut;

};



Perhatikan contoh di atas. Untuk mendefinisikan sebuah kelas, dipakai kata kunci class, diikuti
dengan pendeklarasian nama kelas tersebut. Fungsi assign() dan cetak() disebut member function
(member fungsi). Sedangkan variabel pembilang dan penyebut disebut member data (member data
atau member variabel). Disebut member karena kesemuanya merupakan anggota dari kelas
BilanganRasional.

Perhatikan kata kunci Public dan Private. Member functions pada contoh di atas dideklarasikan
sebagai fungsi global, sedangkan member data dideklarasikan sebagai lokal. Perbedaannya, member
global dapat diakses dari luar kelas, sedangkan member lokal hanya dapat diakses dari kelas itu
sendiri.

Sekarang, dimana kita telah menciptakan kelas Bilangan Rasional, kita dapat mendeklarasikan
sebuah objek dari kelas BilanganRasional sebagai berikut :

BilanganRasional objekBilangan;

Perhatikan bahwa disini objekBilangan merupakan nama dari objek tersebut, dan BilanganRasional
merupakan nama kelas yang ingin kita buat objeknya. Proses pembuatan sebuah objek biasa disebut
penginstansian (bukan penginstalasian), dan sebuah objek disebut instans (instance) dari sebuah
kelas.

Untuk lebih jelasnya, perhatikan listing selengkapnya :



class BilanganRasional

{

public :


 void assign (int,int);

 void cetak();

private :

 int pembilang, penyebut;

};



void main()

{

 //mendeklarasikan objekBilangan seperti telah dibahas di atas

 BilanganRasional objekBilangan;



// member fungsi assign() dipanggil.

 objekBilangan.assign (22,7);



 // member fungsi cetak() dipanggil.

 ObjekBilangan.cetak();

}

void BilanganRasional::assign(int pemb, int peny)

{

 pembilang = pemb;

 penyebut = peny;

}



void BilanganRasional::cetak()

{

 cout<<pembilang<<' / '<<penyebut;

}



Perhatikan blok main(). Sekarang Anda sudah mempunyai sebuah objek bernama objekBilangan dari
kelas BilanganRasional. Seperti Anda lihat, pendeklarasian sebuah objek sama seperti
mendeklarasikan sebuah variabel. Atau dengan kata lain objekBilangan adalah sebuah objek dengan
tipe BilanganRasional. Sekarang, bagaimana memanggil fungsi dari sebuah objek? Hal ini dapat
dicapai dengan menghubungkan nama objek dan fungsi yang ingin dipanggil dengan operator tanda
titik (.). Sehingga untuk memanggil fungsi assign(), dapat dilakukan dengan cara sebagai berikut :

objekBilangan.assign(22,7);

Nilai 22 dan 7 merupakan parameter yang diterima oleh fungsi assign(). Di dalam fungsi tersebut,
nilai 22 diinisialisasikan ke dalam member data pembilang, dan nilai 7 diinisialisasikan ke dalam
member data penyebut. Sehingga bila fungsi cetak() dipanggil, maka akan diperoleh hasil sebagai
berikut :

22 / 7


Sebagai tambahan perhatikan ilustrasi di bawah ini :






Gambar di atas merupakan ilustrasi dari objek objekBilangan dengan 2 member data, yakni
pembilang dan penyebut.

Perhatikan juga bahwa semua pendeklarasian fungsi, baik fungsi assign() maupun fungsi cetak()
didahului dengan penanda BilanganRasional:: . Hal ini untuk menunjukkan kepada compiler agar
compiler tidak “bingung”, untuk kelas mana fungsi tersebut dideklarasikan, karena di C++ biasanya
sebuah fungsi diletakkan di file yang terpisah.



1.4 Konstruktor

Sebelumnya kita telah menggunakan member fungsi assign() untuk memasukkan nilai ke dalam
member variabel pembilang dan penyebut. Sebuah konstruktor melakukan tugas yang sama dengan
fungsi assign(), sehingga Anda tidak perlu repot-repot memanggil fungsi assign() untuk setiap objek
yang Anda deklarasikan. Sebuah konstruktor harus mempunyai nama yang sama dengan kelas
dimana konstruktor tersebut berada, dan dideklarasikan tanpa return value (nilai balik), juga tanpa
kata kunci void. Mari kita kembangkan kelas BilanganRasional yang telah kita bahas sebagai
berikut :



class BilanganRasional

{

public :

 //KONSTRUKTOR BilanganRasional

 BilanganRasional(int pemb, int peny)

 {

 pembilang = pemb;

 penyebut = peny;

 }

private :

 int pembilang, penyebut;

};



pembilang

penyebut

objekBilangan


Bandingkan struktur konstruktor dengan fungsi assign() yang telah kita bahas sebelumnya.
Konstruktor BilanganRasional melakukan tugas yang sama dengan member fungsi assign().
Bedanya hanya terletak pada pemanggilan fungsi dan konstruktor tersebut. Jika fungsi assign() harus
kita panggil dengan didahului oleh pendeklarasian sebuah objek, kemudian fungsi dari objek
tersebut dipanggil dengan operator titik disertai nilai yang ingin kita input, misal



BilanganRasional x;

x.assign(22,7);



maka konstruktor cukup dipanggil sebagai berikut :



BilanganRasional x(22,7);



Kedua varian tersebut melakukan hal yang sama, yakni menginitialisasikan nilai 22 ke member
variabel pembilang, dan nilai 7 ke variabel penyebut.



1.5 Konstruktor Dengan Initialization Lists

Penulisan konstruktor dengan daftar initialisasi (initialization lists) merupakan fasilitas yang
disediakan oleh C++ untuk menyederhanakan struktur konstruktor. Ini berarti, contoh konstruktor di
atas dapat pula ditulis sebagai berikut :



class BilanganRasional

{

public :

BilanganRasional(int pemb, int peny) : pembilang(pemb),
penyebut(peny) { }



private :

 int pembilang, penyebut;

};



Contoh di atas menghasilkan fungsi yang sama dengan konstruktor yang kita bahas sebelumnya.



1.6 CopyConstructor



Sampai sejauh ini kita telah mempelajari bagaimana struktur sebuah konstruktor serta bagaimana
membuat objek dari konstruktor yang telah didefinisikan. Akan tetapi, coba bayangkan apabila Anda
telah mempunyai sebuah objek x, dan kemudian Anda menginginkan membuat sebuah objek y yang
memiliki nilai member data dan member fungsi yang sama. Tentu saja Anda dapat mendeklarasikan
objek baru dengan memanggil konstruktor yang sama sebanyak 2 kali :




BilanganRasional x(22,7);

BilanganRasional y(22,7);



Perintah di atas mendeklarasikan 2 objek, yakni x dan y yang masing-masing memiliki nilai 22 pada
member variabel pembilang dan 7 pada member variabel penyebut. Akan tetapi, Anda dapat juga
mempersingkat kode diatas dengan perintah berikut :



BilanganRasional x(22,7);

BilanganRasional y(x);



Berikut listing contoh untuk Copy Constructor :



class BilanganRasional

{

public :

BilanganRasional(int pemb, int peny) : pembilang(pemb),
penyebut(peny) { }



//CopyConstructor terdapat disini

BilanganRasional(const BilanganRasional& br) :
pembilang(br.pembilang), penyebut(br.penyebut) { }



private :

 int pembilang, penyebut;

};



void main()

{

 BilanganRasional x(22,7);

 BilanganRasional y(x);

}





Deklarasi CopyConstructor otomatis dipanggil ketika Anda mengkopi objek x ke objek y. Perhatikan
bahwa x menjadi parameter ketika kita mendeklarasikan objek y.



1.6 Destruktor

Jika kita mendeklarasikan konstruktor untuk membuat sebuah objek, maka kita juga harus
mendeklarasikan sebuah destruktor untuk menghapus sebuah objek. Setiap kelas mempunyai tepat


satu destruktor. Jika Anda tidak mendeklarasikan sebuah destruktor dalam sebuah kelas, maka
destruktor otomatis akan diciptakan sendiri oleh compiler C++. Destruktor dapat kita definisikan
sendiri dengan simbol ~. Disarankan untuk mendefinisikan sendiri destruktor walaupun secara
otomatis compiler C++ akan mendeklarasikan sebuah destruktor pada saat program Anda dicompile,
tetapi dengan mendefinisikan sendiri sebuah destruktor maka Anda mempunyai kontrol penuh
terhadap apa yang dilakukan destruktor dari kelas Anda. Perhatikan listing di bawah :



class BilanganRasional

{

public :

 BilanganRasional() {cout <<"Konstruktor dipanggil\n";}



 //Destruktor dari kelas BilanganRasional

 ~BilanganRasional() {cout <<"Destruktor dipanggil\n";}



private :

 int pembilang, penyebut;



};



void main()

{

 BilanganRasional x;

 cout<<"Disini main program\n" ;

}



Listing di atas akan menghasilkan output sebagai berikut :



Konstruktor dipanggil

Disini main program

Destruktor dipanggil



Dari contoh di atas dilihat bahwa konstruktor dipanggil ketika objek x dibuat. Sedangkan destruktor
secara otomatis dipanggil oleh compiler ketika objek x meninggalkan blok main(). Hal ini sesuai
dengan kaidah kelokalan objek di C++.



1.7 Ringkasan

Pada bab ini Anda telah mengetahui konsep OOP, mengapa OOP disebut paradigma serta apa
bedanya konsep pemrograman berorientasi objek dengan konsep pemrograman terstruktur. Anda
juga telah belajar mendefinisikan sebuah kelas, mendefinisikan member fungsi dan member data


serta struktur konstruktor dan destruktor dari sebuah kelas. C++ juga menyediakan fasilitas jika
Anda ingin membuat duplikat sebuah objek, yaitu menggunakan fasilitas CopyConstructor. Selain
itu Anda juga telah belajar mendeklarasikan sebuah konstruktor dengan Initialization Lists, sehingga
pendeklarasian konstruktor Anda menjadi lebih efisien.

Sejarah, Karakteristik, Bentuk dan Ragam Bahasa OOP nii >>

Pemrograman berorientasi obyek dikembangkan sebagai metodologi pemrograman yang dominan selama pertengahan 1990-an, sebagian besar disebabkan oleh pengaruh C++. Dominasinya itu makin diperkuat oleh meningkatnya popularitas dari antarmuka pengguna grafis, yang pemrograman berorientasi obyek tampaknya cocok. Contoh dari GUI dinamis terkait erat dengan perpustakaan dan bahasa OOP dapat ditemukan di Kakao kerangka kerja di Mac OS X, yang ditulis di Objective-C, sebuah object-oriented, dinamis ekstensi pesan ke C didasarkan pada Smalltalk. OOP toolkit juga meningkatkan popularitas pemrograman kendali-event (walaupun konsep ini tidak terbatas pada OOP). Sebagian merasa bahwa asosiasi dengan GUI (nyata atau tidak) adalah apa yang didorong ke dalam pemrograman OOP arus utama.
Fitur berorientasi objek telah ditambahkan ke banyak bahasa yang ada selama waktu itu, termasuk Ada, BASIC, Fortran, Pascal, dan lain-lain. Menambahkan fitur ini untuk bahasa yang awalnya tidak dirancang untuk mereka sering menimbulkan berbagai permasalahan dengan kompatibilitas dan Kemampu-rawatan kode. Baru-baru ini, sejumlah bahasa telah muncul yang berorientasi obyek terutama belum kompatibel dengan metodologi prosedural, seperti Python dan Ruby. Mungkin yang paling penting secara komersial baru bahasa berorientasi obyek adalah Visual Basic.NET (VB.NET) dan C#, baik yang dirancang untuk Microsoft.NET platform, dan Java, yang dikembangkan oleh Sun Microsystems. VB.NET dan C# baik dukungan lintas bahasa warisan, memungkinkan kelas didefinisikan dalam satu bahasa ke bahasa kelas subclass didefinisikan dalam bahasa lain.
Sama seperti pemrograman prosedural mengarah pada perbaikan teknik seperti pemrograman terstruktur, modern berorientasi objek metode desain perangkat lunak mencakup perbaikan seperti penggunaan pola desain, design by kontrak, dan pemodelan bahasa (seperti UML). OOPS istilah yang mengacu pada sebuah Object Oriented Programming System, adalah umum terjadi di awal pengembangan pemrograman berorientasi obyek.
Usaha untuk menyaring OOP untuk minimal kumpulan fitur dianggap sia-sia oleh peneliti bahasa pemrograman Cuire Benjamin Pierce. Namun demikian, ia mengidentifikasi sebagai berikut fitur dasar yang ditemukan di kebanyakan bahasa-bahasa berorientasi obyek dan bahwa, dalam konser, mendukung gaya pemrograman OOP:
• Dynamic dispatch – ketika sebuah metode dipanggil pada objek, obyek itu sendiri menentukan kode apa yang dijalankan dengan melihat metode pada saat run waktu dalam sebuah tabel yang berhubungan dengan objek. Fitur ini membedakan objek dari suatu tipe data abstrak (atau modul), yang memiliki tetap (statis) pelaksanaan operasi untuk semua kasus
• Enkapsulasi (atau multi-metode, dalam hal ini negara disimpan terpisah)
• Subtipe polimorfisme
• objek warisan (atau delegasi)
• Buka rekursi – variabel khusus (sintaksis ini mungkin merupakan kata kunci), biasanya disebut this atau self yang memungkinkan tubuh metode untuk invoke metode lain tubuh objek yang sama. Variabel ini akhir-terikat; ini memungkinkan sebuah metode yang didefinisikan dalam satu kelas untuk memanggil metode lain yang ditentukan kemudian, dalam beberapa subclass daripadanya.
Demikian pula, dalam buku 2003, Konsep-konsep dalam bahasa pemrograman, John C. Mitchell mengidentifikasi empat fitur utama: dinamis pengiriman, abstraksi, subtipe polimorfisme, dan pewarisan. Michael Lee Scott dalam Programming Language Pragmatics hanya mempertimbangkan enkapsulasi, pewarisan dan dinamis pengiriman.
Bahasa OOP Simula (1967) secara umum diterima sebagai bahasa pertama untuk memiliki fitur-fitur utama dari sebuah bahasa berorientasi objek. Hal ini diciptakan untuk membuat program simulasi, di mana apa yang kemudian disebut objek adalah representasi informasi yang paling penting. Smalltalk (1972-1980) adalah dapat dikatakan sebagai contoh kanonik, dan satu dengan yang banyak teori pemrograman berorientasi objek adalah dikembangkan.
  • Bahasa disebut “murni” OO bahasa, karena segala sesuatu di dalamnya diperlakukan secara konsisten sebagai sebuah objek, dari primitif seperti karakter dan tanda baca, sepanjang jalan sampai ke seluruh kelas, prototip, blok, modul, dll. Mereka dirancang secara khusus untuk memfasilitasi, bahkan menegakkan, metode OO. Contoh: Smalltalk, Eiffel, Ruby, JADE
  • Bahasa dirancang terutama untuk pemrograman OO, tapi dengan beberapa elemen prosedural. Contoh: C + +, Java, Python.
  • Bahasa yang secara historis bahasa prosedural, tetapi telah diperluas dengan beberapa fitur OO. Contoh: Fortran 2003, Perl, COBOL 2002.
  • Bahasa dengan sebagian besar fitur objek (kelas, metode, warisan, usabilitas), tapi dalam bentuk aslinya jelas. Contoh: Oberon (Oberon-1 atau Oberon-2).
  • Bahasa dengan tipe data abstrak dukungan, tetapi tidak semua fitur object-orientasi, kadang-kadang disebut objek berbasis bahasa. Contoh: Modula-2 (dengan sangat baik dan informasi enkapsulasi menyembunyikan), liat, CLU.
OOP di scripting dalam beberapa tahun terakhir, pemrograman berorientasi objek telah menjadi sangat populer dalam bahasa pemrograman scripting. Python, Ruby dan groovy adalah bahasa scripting yang dibangun di atas prinsip-prinsip OOP, sementara Perl dan PHP telah menambahkan fitur berorientasi objek sejak Perl 5 dan PHP 4, dan ColdFusion sejak versi 6.
Ringkasan
Object Oriented Programming (OOP) dapat diartikan beberapa macam antara lain :
- Suatu teknik atau cara untuk membuat program (perangkat lunak) objek.
- Pemrograman yang dibangun dengan cara membungkus (enkapsulasi) komponennya menjadi kelompok data dan fungsi yang dapat mewarisi atribut dan sifat dari komponen lainnya, dan komponen-komponen tersebut dapat berinteraksi satu sama lainnya.
- Pemrograman yang didasarkan pada objek-objek, yaitu suatu unit terkecil dari program yang mengandung data dan fungsi yang bekerja atas objek tersebut.
Perangkat lunak objek merupakan perangkat lunak yang dibangun dari kelas-kelas dan objek-objek yang saling berinteraksi satu sama lainnya. Kelas adalah deskripsi statis dari sesuatu objek-objek yang memiliki karakteristik yang sama. Objek adalah sesuatu yang diinstansiasi dari kelas.

Mengapa OOP dibutuhkan ?
- Sudut pandang pembuatan program selaras dengan realitas dunia nyata.
- Kemudahan pengembangan.
- Kecepatan pengembangan.
- Peningkatan produktivitas.

Karakteristik OOP antara lain :
- Abstraksi
- Enkapsulasi
- Pewarisan (Inheritance)
- Polymorphism
- Komunikasi antar Objek
- Reusability

Berberapa bentuk OOP antara lain :
- OOP dengan ADT (Abstract Data Type)
- OOP dengan Inheritance dan Polymorphism
- OOP Client-Supplier
- OOP dengan Genericity
- OOP Concurrent

Macam-macam bahasa OOP antara lain :
- Bahasa OOP Murni adalah bahasa yang mengharuskan program betul-betul ditulis dari objek-objek saja. Dengan kata lain segala sesuatu di dalamnya diperlakukan secara konsisten sebagai sebuah objek, dari primitif seperti karakter dan tanda baca, sepanjang jalan sampai ke seluruh kelas, prototipe, blok, modul, dll Mereka dirancang secara khusus untuk memfasilitasi, bahkan menegakkan, metode Objek.
Contoh: Eiffel, SmallTalk, Ruby, JADE.
- Bahasa OOP Hybrid (Campuran) adalah bahasa dirancang terutama untuk pemrograman objek, tapi dengan beberapa elemen prosedural. atau bahasa yang masih memungkinkan penulisan program mencampuradukkan objek dengan fungsi dan type lainnya di luar objek.
Contoh: C++, Java, Delphi, Python.
- Bahasa OOP Hybrid untuk Web Programming : Perl, PHP

Konsep dasar dari Pemrograman Berorientasi Objek

Pemrograman orientasi-objek menekankan konsep berikut:
  • 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.
  • 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 ijin 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.
  • Inheritas- Mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada - objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpa haru mengimplementasi ulang perilaku tersebut (bahasa berbasis-objek tidak selalu memiliki inheritas.)
  • 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.

Apa Sih Pemrograman Berorientasi Objek ??????

Pemrograman berorientasi objek (Inggris: object-oriented programming disingkat OOP) merupakan paradigma pemrograman yang berorientasikan kepada objek. 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 piranti 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.