CLICK HERE FOR BLOGGER TEMPLATES AND MYSPACE LAYOUTS »

Selasa, 21 Oktober 2008

Listing Program Pencarian Dengan Array

#include

#define TdkKetemu -1

int cari(const int arr[], int target, int n)

{

int i, ketemu = 0, hasil; i=0;

while (!ketemu && i <>

if (arr[i] == target) ketemu = 1;

else ++i;

}

if (ketemu) hasil = i;

else hasil = TdkKetemu;

return (hasil);

}

void main() {

int nrp[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, nrpcari, ulangi, hasil;

ulangi=1;

while (ulangi==1) {

ulangi=0;

printf("\nMasukkan NRP yang mau dicari : ");

scanf("%d", &nrpcari);

hasil=cari(nrp, nrpcari, 10);

if (hasil==-1)

printf("Tidak ketemu !");

else

printf("Ditemukan pada elemen array ke-%d", hasil);

printf("\n\nUlangi pencarian ? (Ketik 1 bila ya !) ");

scanf("%d", &ulangi);

}

}

PENGURUTAN DATA

Pengurutan data adalah algoritma yang meletakkan elemen pada sebuah list atau tabel dengan urutan tertentu. Algoritma pengurutan data saat ini telah demikian banyaknya, mulai dari yang sederhana sampai yang kompleks. Untuk saat ini, algoritma heap sort dan quicksort merupakan dua buah algoritma yang dianggap terbaik.

Penggunaan algoritma heap sort dan quick sort dalam pengurutan data berbeda. Perbedaan ini dipengaruhi oleh keunggulan dan kelemahan masing-masing algoritma pengurutan.

Algoritma Heap Sort dan Quick Sort

1. Heap Sort
Heapsort merupakan salah satu bentuk dari selection sort yang memiliki kompleksitas algorima O(n log(n)) yang menggunakan struktur data heap.

Algoritma ini bekerja dengan menentukan elemen terbesar (atau terkecil) dari sebuah daftar elemen, dan diletakkan pada akhir (atau awal) dari daftar tersebut. Heap sort menyelesaikan sebuah pengurutan menggunakan struktur data yang disebut heap.

Heap merupakan sebuah pohon biner hampir lengkap dimana isi dari simpul ayah selalu lebih besar dari isi simpul anak-anaknya sehingga simpul akar selalu merupakan elemen terbesar.

2. Quick Sort
Quick sort adalah algoritma yang menggunakan metode divide and qonquer yaitu dengan mempartisi tabel dengan acuan elemen tabel yang dijadikan sebagai pivot. Tabel dipartisi menjadi tabel dengan elemen pivot, <> pivot, hingga elemen tersebut terurut. pengurutan hanya dengan 1 kali pass saja. Namun sampai saat ini, belum ada algoritma yang mampu untuk mencapai keadaan ini.

Kompleksitas waktu dari kedua algoritma ini, secara rata-rata adalah sama, yaitu O(n log n). Saat ini, kompleksitas waktu O(n log n) merupakan kompleksitas algoritma sorting yang paling mendekati algoritma pengurutan ideal yaitu O(n). Hal inilah yang menyebabkan kedua buah algoritma ini dipandang sebagai yang terbaik saat ini.

Walaupun memiliki kompleksitas algoritma yang sama yaitu O(n log n), dalam praktiknya, algoritma quicksort memiliki kecepatan pemrosesan yang lebih baik dari heap sort. Penyebabnya adalah algoritma heapsort membutuhkan tahapan-tahapan yang lebih banyak daripada quicksort.

Namun untuk quicksort, pada kasus terburuknya memiliki kompleksitas O(n2). Sedangkan, pada heap sort, kompleksitas untuk kasus terburuknya sama dengan kasus rata-rata, yaitu O(n log n). Jadi pada kasus terburuk, algoritma heap sort lebih baik daripada algoritma quicksort.

Klasifikasi AlgoritmaPengurutan (sorting)

* Exchange Sort : Melakukan pembandingan antar data, dan melakukan pertukaran apabila urutan yang didapat belum sesuai. Contohnya : Bubble sort, Cocktail sort, Comb sort, Gnomesort, Quicksort.

* Selection Sort : Mencari elemen yang tepat untuk diletakkan diposisi yang telah diketahui, dan meletakkannyadi posisi tersebut setelah data tersebutditemukan. Contohnya :Selection sort, Heapsort, Smoothsort, Strand sort

* Insertion Sort : Mencari tempat yang tepat untuk suatu elemen data yang telah diketahui ke dalam sub kumpulan data yang telah terurut, kemudian melakukan penyisipan (insertion) data di tempat yang tepat tersebut. Contohnya adalah : Insertion sor, Shell sort, Tree sort, Library sort, Patience sorting.

* Merge Sort : Data dibagi menjadi subkumpulan-subkumpulan yang kemudian subkumpulan tersebut diurutkan secara terpisah, dan kemudian digabungkan kembali dengan metode merging. Algoritma ini melakukan metode pengurutan merge sort juga untuk mengurutkan sub kumpulan data tersebut, atau dengan kata lain, pengurutan dilakukan secara rekursif. Contohnya adalah : Merge sort.

* Non-Comparison Sort : Proses pengurutan data yang dilakukan algoritma ini tidak terdapat pembandingan antar data, data diurutkan sesuai dengan pigeon hole principle. Contohnya adalah : Radix sort, Bucket sort, Counting sort, Pigeonhole sort, Tally sort.

Ide Dasar
Ide dasar dari metode Radix sort ini adalah mengkategorikan data-data menjadi sub kumpulan sub kumpulan data sesuai dengan nilai radix-nya, mengkonkatenasinya, kemudian mengkategorikannya kembali berdasar nilai radix lainnya.

Algoritma Bubble Sort

1. Setiap pasangan data: x[j] dengan x[j-1], untuk semua i=1,...,n-1 harus memenuhi keterurutan, yaitu x[j] > x[j-1].
2. Apabila tidak memenuhi maka posisi kedua data harus ditukar.
3. Untuk pemrograman konvensional maka pemeriksaan-pemeriksaan pasangan tersebutharus dilakukan satu demi satu, misalnya oleh bubble-sort dilakukan dari kanan ke kiri serta di dalam sejumlah iterasi.
4. Keuntungan lain dari algoritma ini adalah dapat dijalankan dengan cukup cepat dan efisien untuk mengurutkan list yang urutannya sudah hampir benar.
5. Selain kasus terbaik tersebut, komleksitas untuk algoritma ini adalah O(n²), karenanya algoritma ini termasuk sangat tidak efisien untuk dilakukan, apalagi jika pengurutan dilakukan terhadap elemen yang banyak jumlahnya. Biasanya bubble sort digunakan untuk mengenalkan konsep dari sorting algoritma pada pendidikan komputer karena idenya yang cukup sederhana.

* Metode Selection Short
Metode selection sort merupakan perbaikan dari metode bubble sort dengan mengurangi jumlah perbandingan. Selection sort merupakan metode pengurutan yang mencari nilai data terbesar atau terkecil dan kemudian menempatkannya pada posisi yang sebenarnya, dimulai dari data diposisi 0 hingga data diposisi N-1.
* Metode Insertion Short
Metode insertion sort adalah metode pengurutan yang biasa dipakai oleh pemain kartu dalam mengurutkan kartunya, yaitu menyisipkan kartu dengan nilai yang lebih kecil ke posisi sebelum kartu pembandingnya. Selection Sort merupakan kombinasi antara sorting dan searching. Untuk setiap proses, akan dicari elemen-elemen yang belum diurutkan yang memiliki nilai terkecil atau terbesar
kan dipertukarkan ke posisi yang tepat di dalam array. Misalnya untuk putaran pertama, akan dicari data dengan nilai terkecil dan data ini akan ditempatkan di indeks terkecil (data[0]), pada putaran kedua akan dicari data kedua terkecil, dan akan ditempatkan di indeks kedua (data[1]). Selama proses, pembandingan dan pengubahan hanya dilakukan pada indeks pembanding saja, pertukaran data secara fisik terjadi pada akhir proses.Tehnik pengurutan dgn cara pemilihan elemen atau proses kerja dgnmemilih elemen data terkecil utk kemudian dibandingkan & ditukarkan dgn elemen pd data awal, dst s/d seluruh elemen shg akan menghasilkan pola data yg telah disort.

Kelebihan dan kekurangan Selection Sort:

1. Kompleksitas selection sort relatif lebih kecil
2. Mudah menggabungkannya kembali, tetapi sulit membagi masalah
3. Membutuhkan method tambahan.

* Metode Insertion Sort
Prinsip dasar Insertion adalah secara berulangulang menyisipkan / memasukan setiap elemen. ke dlm posisinya / tempatnya yg benar. Mirip dengan cara orang mengurutkan kartu, selembar demi selembar kartu diambil dan disisipkan (insert) ke tempat yang seharusnya. Pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan ditempatkan (diinsert) diposisi yang seharusnya. Pada penyi sipan elemen, maka elemen-elemen lain akan bergeser ke belakang.

* Quick Short : Quick sort banyak digunakan utk proses sorting, karena merupakan proses sorting yang umum digunakan, mudah untuk diimplementasikan, prosesnya sangat cepat.

Aturan Quick Sort:

1. Select, pertama kita pilih elemen yang ditengah sebagai pivot, misalkan X.
2. Partition, kemudian semua elemen tersebut disusun dengan menempatkanX mpada posisi j sedemikian rupa sehingga elemen disebelah kiri1 lebih <> X.
3. Rekursif, kemudian proses diulang untuk bagian kiri dan kanan elemenX dengan cara yg sama dengan langkah 1 sampai kondisi terurut

* Metode Heap Short adalah binary tree dengan menggunakan tree , dimana mempunyai aturan-aturan sebagai berikut :

1. Untuk mengisikan heap dimulai dari level 1 sampai ke level dibawahnya, bila dalam level yang sama semua kunci heap belum terisi maka tidak boleh mengisi dibawahnya.
2. Heap dlm kondisi terurut apabila left child <> parent.
3. Penambahan kunci diletakkan pada posisi terakhir dari level dan disebelah kanan child yg terakhir, kemudian diurutkan dengan cara upheap.
4. Bila menghapus heap dgn mengambil kunci pada parent di level 1 kemudian digantikan posisi kunci terakhir, selanjutnya disort kembali metode downheap.

Rabu, 15 Oktober 2008

ARTIKEL OOP

OBJECT-ORIENTED PROGRAMMING (OOP)

Pemrograman berorientasi objek (OOP) merupakan metode yang paling populer dalam dunia rekayasa perangkat lunak saat ini. OOP membuat proses pengembangan perangkat lunak dapat dilakukan secara modular yang berarti sistem dapat dikembangkan tahap demi tahap tanpa mengubah (banyak) fondasi perangkat lunak yang sudah ada.

Object-Oriented Programming adalah sebuah pendekatan untuk pengembangan / development suatu software dimana dalam struktur software tersebut didasarkan kepada interaksi object dalam penyelesaian suatu proses/tugas. Interaksi tersebut mengambil form dari pesan-pesan dan mengirimkannya kembali antar object tersebut. Object akan merespon pesan tersebut menjadi sebuah tindakan /action atau metode. Jika kita mencoba melihat bagaimana tugas disekitar kita diselesaikan, kita akan mengetahui bahwa kita berinteraksi dalam sebuah object-oriented world. Jika akan bepergian kita pasti berinteraksi dengan object mobil. Sebagai sebuah object, mobil berisi object-object lain yang berinteraksi untuk melakukan tugasnya membawa kita.

Pemrograman Berbasis Obyek :

1. Fungsi dan data menjadi satu kesatuan yang disebut obyek
2. Obyek-obyek dalam OOP bersifat aktif
3.Cara pandang : program bukan urut-urutan instruksi tapi diselesaikan oleh obyek-obyek yang bekerjasama untuk menyelesaikan masalah

Karakteristik OOP

Suatu program disebut dengan pemrograman berbasis obyek (OOP) karena terdapat :

1.Encapsulation (pembungkusan)
2.Inheritance (pewarisan)
3.Polymorphism (polimorfisme – perbedaan bentuk)

Inheritance

Banyak objects diklasifikasikan menurut hirarki. Contoh, kamu dapat mengklasifikasikan sebuah mobil yang mempunyai karakteristik umumnya mobil, seperti mempunyai ban, mesin, serta body. Keturunan berikutnya diklasifikasikan dengan atribut umum seperti ukuran, jumlah roda, isi silinder dll atau mengklasifikasikan mereka atas dasar daya angkutnya. Contoh, ada kendaraan komersial atau kendaraan pribadi, ada truk atau mobil penumpang. Kamu menggunakan inheritance dalam OOP untuk mengklasifikasikan objects dalam program sesuai karakteristik umum dan fungsinya.

1.Sebuah class bisa mewariskan atribut dan method-nya ke class yang lain
2.Class yang mewarisi disebut superclass
3.Class yang diberi warisan disebut subclass
4.Sebuah subclass bisa mewariskan atau berlaku sebagai superclass bagi class yang lain => disebut multilevel inheritance.

Contoh Pewarisan

1.Class Nenek adalah superclass dari class Ibu
2.Class Ibu adalah superclass dari class Anak
3.Sebuah subclass memiliki beberapa kesamaan dengan superclass-nya, dalam hal atribut/variabel dan method yang dimilikinya
4.Contoh pewarisan yang lain : class kendaraan merupakan superclass bagi class mobil, truk dan bis

Keuntungan Penggunaan Pewarisan

1.Subclass memiliki atribut dan method yang spesifik yang membedakannya dengan superclass, meskipun keduanya mirip (dalam hal kesamaan atribut dan method)
2.Dengan demikian pada pembuatan subclass, programmer bisa menggunakan ulang source code dari superclass yang ada => ini yang disebut dengan istilah reuse.
3.Class-class yang didefinisikan dengan atribut dan method yang bersifat umum yang berlaku baik pada superclass maupun subclass disebut dengan abstract class


Polymorphism

Polymorphisms adalah kemampuan 2 buah object yang berbeda untuk merespon pesan permintaan yang sama dalam suatu cara yang unik. Contoh, saya melatih anjing saya dengan perintah untuk menggonggong dan juga saya melatih burung untuk merespon perintah saya untuk berkicau. Saya lakukan latihan untuk merespon kepada mereka dengan perintah lisan. Melalui polymorphism saya tahu bahwa anjing dan burung akan merespon dengan gonggongan atau kicauan.

Encapsulation

Ciri penting lainnya dari OOP adalah encapsulation. Encapsulation adalah sebuah proses dimana tidak ada akses langsung ke data yang diberikan, bahkan hidden. Jika kamu ingin mendapat data, kamu harus berinteraksi dengan object yang bertanggung jawab atas dara tersebut. Dalam contoh inventory, jika kita ingin melihat atau mengupdate informasi atas produk, kita seharusnya bekerja melalui object produk. Untuk membaca data, kita mengirimkan pesan ke object produk, kemudian object produk akan membaca pesan dan mengirim pesan balik ke kamu.

1.Variabel dan method dalam suatu obyek dibungkus agar terlindungi
2.Untuk mengakses, variabel dan method yang sudah dibungkus tadi perlu interface
3.Setelah variabel dan method dibungkus, hak akses terhadapnya bisa ditentukan.
4.Konsep pembungkusan ini pada dasarnya merupakan perluasan dari tipe data struktur

Dua hal dalam enkapsulasi :

1.Information hiding
2.Menyediakan perantara (method) untuk mengakses data

*

Contoh :

public class Siswa {

private int nrp;

public void setNRP(int n) {

nrp=n;

}

}

PEMROGRAMAN PROSEDURAL

Algoritma berisi urutan langkah-langkah penyelesaian masalah. Ini berarti Algoritma adalah proses yang procedural.

Definisi Prosedural menurut Kamus Besar Bahasa Indonesia :
1. Tahap-tahap kegiatan untuk menyelesaikan suatu aktivitas.
2. Metode langkah demi langkah secara eksak dalam memecahkan suatu masalah.

Pada pemrograman procedural, program dibedakan antara bagian data dengan bagian instruksi. Bagian instruksi terdiri atas runtutan (sequence) instruksi yang dilaksanakan satu per satu secara berurutan oleh pemroses. Alur pelaksanaan instruksi dapat berubah karena adanya pencabangan kondisional. Data yang disimpan di dalam memori dimanipulasi oleh instrusi secara beruntun atau procedural. Paradigma pemrograman seperti ini dinamakan pemrograman procedural.
Bahasa-bahasa tingkat tinggi seperti Cobol, Basic, Pascal, Fortran dan C mendukung kegiatan pemrograman procedural, karena itu mereka dinamakan juga bahasa procedural. Selain paradigma pemrograman procedural, ada lagi paradigma yang lain yaitu pemrograman berorientasi objek (Object Oriented Programming). Paradigma pemrograman ini merupakan trend baru dan sangat populer akhir-akhir ini.
Paradigma pemrograman yang lain adalah pemrograman fungsional, pemrogramn deklaratif dan pemrograman konkuren. Pada kesempatan ini penulis hanya menyajikan paradigma pemrograman procedural saja.

Pemrograman Prosedural :
a. Diselesaikan dalam bentuk prosedur atau fungsi
b. Program merupakan urut-urutan instruksi
c. Program dipecah-pecah ke dalam sub program yang lebih sederhana
d. Fokus utama pada prosedur dan fungsi
e. Fungsi dan prosedur digunakan untuk memanipulasi data
f. Sedangkan data sendiri bersifat pasif

Hal-hal yang menjadi dasar dalam pemrograman prosedural, meliputi definisi algoritma dan konstruktor pemrograman prosedural, serta konsep Input, Proses, dan Output yang sangat lazim dalam dunia pemrograman prosedural.

1. Algoritma
Algoritma adalah serangkaian langkah-langkah yang tepat, terperinci, dan terbatas untuk menyelesaikan suatu masalah. Langkah yang tepat artinya serangkaian langkah tersebut selalu benar untuk menyelesaikan masalah yang diberikan. Langkah yang tidak memberikan hasil yang benar untuk domain masalah yang diberikan bukanlah sebuah algoritma.
Langkah yang terperinci artinya setiap langkah diberikan secara detail dan dapat dieksekusi oleh komputer, instruksi seperti “angkat sedikit ke kiri” merupakan contoh instruksi yang tidak tepat, karena “sedikit” tidak menyatakan sesuatu dengan tepat.

2. Konstruktor (elemen) Pemrograman Prosedural
Elemen bahasa pemrograman procedural adalah:
a. Program utama
b. Tipe
c. Konstanta
d. Variabel
e. Ekspresi, operator, dan operand
f. Struktur Data
g. Instruksi dasar
h. Program Moduler
i. File eksternal
j. Rekurens

3. Input, Proses, dan Output
Bagian input, proses, dan output dikerjakan secara sekuensial, dan dalam setiap bagian mungkin akan ada input, proses, dan output.

Struktur Bahasa Program Procedural
Secara umum, bahasa pemrograman yang berbasiskan prosedur terdiri dari blok/sub program. Yang memiliki dua bagian utama yaitu:
1. Bagian deklarasi
2. Bagian Statement

1.Bagian Deklarasi
Bagian deklarasi merupakan bagian program untuk mendefinisikan tipe data suatu variable, konstanta, serta fungsi dan prosedur yang akan digunakan pada program. Selain itu, bagian deklarasi dapat juga digunakan untuk memberi nilai awal suatu variable. Dengan kata lain, deklarasi digunakan untuk memperkenalkan suatu nama kepada Compiler program.

2. Bagian Statement
Bagian statement merupakan bagian program yang berisi perintah yang akan dieksekusi/dijalankan. Pada bahasa Pascal, bagian statement selalu diawali dengan reserved word begin dan end. Apabila blok statement adalah blok utama program, maka reserved word end harus diakhiri dengan tanda titik(.), sebaliknya jika blok statement bukan blok utama program maka reserved word end diakhiri dengan tanda titik koma (;). Sebaliknya pada bahasa C, dimulai dari deklarasi variable hingga akhir statement diawali dan diakhiri dengan tanda kurung kurawal { dan }. Berikut adalah contoh potongan kode untuk implementasi menghitung luas lingkaran dengan Bahasa Pascal (kiri) dan Bahasa C (kanan).

Bahasa Pascal:
procedure Cetak (kal: String);
function Tambah (a,b:Integer): Integer;
Bahasa C:
void Cetak (char *String);
int Tambah (int a, int b);
uses crt;
const phi = 3.14;
var diameter, radius,
Luas : real;
begin
readln(diameter);
radius := diameter / 2;
Luas := phi * radius * radius;
writeln(Luas);
end.
#include
void main()
{ const phi = 3.14;
float diameter, radius, Luas;
scanf(“%f”, &diameter);
radius = diameter / 2.0;
Luas = phi * radius * radius;
printf(“%f”,Luas);
}

Selasa, 07 Oktober 2008

Pemrograman Berorientasi Obyek

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. 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.

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.

* 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 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.