Sabtu, 09 Januari 2010

Polymorphism

Polymorphism berarti “mempunyai banyak bentuk” juga merupakan salah satu sifat class yang memungkinkan sebuah method mempunyai nama yang sama, namun memiliki aksi yang berbeda.
Polymorphism adalah pemikiran bahwa objek dinamis suatu class dasar dapat berperilaku seperti class turunan. Jika objek menunjuk class dasar maka ia perilaku seperti class dasar, dan jika ia menunjuk class turunan ia akan berperilaku seperti class turunan.
Dalam hal ini obkjek memiliki beberapa bentuk, tergantung ia menunjuk kemana. Dalam hal ini suatu objek atau class dan perubahan perilakunya adalah dari kelas dasar ke kelas turunan, tidak bisa objek kelas turunan menunjuk ke kelas dasar. Polimorfisme dimungkinkan karena adanya mekanisme ikatan dinamis, ikatan ini adalah ikatan yang terjadi ketika program dijalankan (run-time), ikatan yang terjadi pada saat compiling disebut ikatan dinamis. Ikatan dinamis hanya akan terjadi antara suatu objek dinamis dengan metode yang dinamis juga, dalam hal ini metode virtual (maya)


Pada dasarnya ada 2 tipe polymorphism, yaitu:
1. Static atau trivial
merupakan, function overloading (penggunaan kembali nama fungi yang sama tapi dgn argumen yang berbeda) yang terbagi dalam 3 signature yaitu:
- Jenis Array
- Letak Array
- Type Array

Contoh function overloading :
void tambah (int a, int b);
void tambah(float d, float c);
2. Dynamic atau true
Merupakan function overriding (sebuah fungsi dalam class turunan yang memiliki nama, return type argumen function yang sama dengan fungsi dalam class induk). Menggunakan virtual method.

Pure Virtual Method (tanpa function body)
contoh : virtual void jalan() = 0;

Squasi Virtual Method (ada function body)
contoh : virtual void info() {;}


Contoh codingan polymorphism

#include <>

/* class DENGAN virtual( POLYMORPHISME)==========*/
class tbujursangkar_vir

{
protected :
double panjang; //panjang sisi bujur sangkar


public:
tbujursangkar_vir(double pj) {panjang = pj;}
double panjangf() {return panjang;}
virtual double lebarf() {return panjang;}
double luasf() {return panjangf()*lebarf();}
double keliling() {return 4*panjang;}
};

class tpersegipanjang_vir:public tbujursangkar_vir
{
protected:
double lebar; //lebar persegi panjang
public:
tpersegipanjang_vir(double pj, double lb):
tbujursangkar_vir(pj) {lebar = lb;}
virtual double lebarf() {return lebar;}
double keliling() {return 2*panjang+2*lebar;}
};

//=========================================main===============================//
void main()
{
double a,b;

cout< cout<

tbujursangkar_vir *bujur = new tbujursangkar_vir(a);
tpersegipanjang_vir *persegi = new tpersegipanjang_vir(a,b);

cout<<"===========hasil pada class tbujursangkar================"< cout<<"panjang = "< cout<<"lebar = "< cout<<"luas = "< cout<<"keliling = "<<

cout<<"===========hasil pada class tpersegipanjang================"< cout<<"panjang = "< cout<<"lebar = "< cout<<"luas = "< cout<<"keliling = "<

delete bujur;
delete persegi;
system("pause");
}