Pembahasan dan Contoh Program Polymorphism


Polymorphism merupakan suatu aksi yang memungkinkan pemogram menyampaikan suatu pesan tertentu keluar dari hierarki obyeknya, dimana suatu obyek tersebut yang berbeda memberikan tanggapan ataupun respon terhadap pesan yang sama sesuai dengan sifat masing-masing obyek. Itu berarti, Polymorphism “mempunyai banyak bentuk” yang 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 objek 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)
Polymorphism berasal dari bahasa Yunani yang berarti banyak bentuk. Dalam PBO, konsep ini memungkinkan digunakannya suatu interface yang sama untuk memerintah objek agar melakukan aksi atau tindakan yang mungkin secara prinsip sama namun secara proses berbeda.
Keuntungan Pemograman dengan menggunakan Polymorphism adalah :
-          Kita dapat menggunakan kelas-kelas yang kita buat (sebagai super kelas) dan membuat kelas kelas baru berdasar superkelas tersebut dengan karakteristik yang lebih khusus dari behaviour umum yang dimiliki superkelas.
-          Kita dapat membuat super kelas yang hanya mendefinisikan behaviuor namun tidak memberikan implementasidari metode-metode yang ada.Hal ini berguna jika kita ingin membuat semacam template kelas,kelas semacam ini disebut kelas abstrak karena behaviournya masih abstrak dan belum diimplementasikan.subkelas-subkelas dari kelas semacam ini yang disebut kelas konkret,mengimplementasikan behaviuor abstrak tersebut sesuai dengan kebutuhan masing-masing.
-          Menghindari duplikasi object,kita dapat menciptakan class baru dari class yang sudah ada,sehingga tidak perlu menuliskan code dari nol ataupun mengulangnya, namun tetap bisa menambahkan attribute dan atau method unik dari class itu sendiri. Dalam konsep yang lebih umum sering kali polymorphism disebut dalam istilah satu interface banyak aksi.

Polymorphism itu sendiri terbagi dua yaitu: Overloading dan Overiding
-          Overloading : adalah pemakaian beberapa methods ataupun properties dengan nama yang sama, tetapi memiliki daftar parameter/argument yang berbeda. Perbedaan yang dimaksud adalah beda jumlah parameter, beda tipe data, atau beda keduanya (jumlah parameter dan tipe data). Methods ataupun properties yang hanya beda return value (nilai balik) tidak bisa dikatakan sebagai overloading. Keyword yang dipakai adalah Overloads. Jika dalam satu class, keyword ini bersifat optional artinya kita tidak harus menambahkan keyword Overloads ketika mendefinisikan beberapa methods ataupun properties yang menerapkan konsep overloading. Apabila kita tetap ingin memakainya, maka keyword Overloads harus digunakan di semua methods ataupun properties tadi. Apabila beda class, keyword Overloads ini harus digunakan.
-          Overriding : kemampuan class turunan untuk memodifikasi methods atau properties dari class induk. Dengan overriding kita bisa membuat implementasi baru pada methods atau properties di class turunan yang berbeda dengan methods atau properties yang ada pada class induk.
Perbedaan utama antara Overloading dengan Overriding adalah pada pemakaian parameter. Pada overloading kita bisa mengubah parameter, sedangkan pada overriding kita tidak boleh mengubah parameter.
Ada beberapa keyword yang bisa dipakai di overriding, antara lain:
-          Keyword Overridable
Keyword ini digunakan pada methods atau properties di class induk yang menandakan bahwa methods atau properties tadi bisa di-override pada class turunan.
-          Keyword Overrides
Keyword ini digunakan pada class turunan yang menandakan bahwa methods atau properties tadi meng-override methods atau properties yang ada di class induk.
-          Keyword Not Overridable
Keyword ini digunakan pada methods atau properties di suatu class yang menandakan bahwa methods atau properties tadi tidak bisa di-override pada class turunan.
-          Keyword Must Override
Keyword ini digunakan untuk mendeklarasikan abstract methods atau abstract properties. Hanya ada deklarasi header di sini, tanpa ada pendefinisian implementasi. Class yang mempunyai abstract methods atau abstract properties harus didefinisikan juga sebagai abstract class dengan keyword MustInherit.

  
Contoh Program Polymorphism

#include <iostream.h>
#include <conio.h>
class balok {
double p,l,t;
public : double Luaspermukaan() {
return(2*p*l)+(2*p*t)+(2*l*t);
}

public : double volume() {
return(p*l*t);
}
public : double volume(double t) {
return(p*l*t);
}
public : double volume(double t, double l) {
return(p*l*t);
}
public : double volume(double t, double l, double p) {
return(p*l*t);
}
void setpanjang(double pan){
p = pan;
}
void setlebar(double leb){
l = leb;
}
void settinggi(double tin){
t = tin;
}
};
void main(){
int pa,le,ti,pp,ll,tt;
balok tes;
cout<<“Balok”<<endl;
cout<<“Input Panjang : “; cin>>pa;
cout<<“Input Lebar : “; cin>>le;
cout<<“Input Tinggi : “; cin>>ti;
tes.setpanjang(pa);
tes.setlebar(le);
tes.settinggi(ti);

cout<<“Luas Permukaan Balok = “<<tes.Luaspermukaan()<<endl;
cout<<“Volume Balok = “<<tes.volume()<<endl;
cout<<“Tinggi baru = “; cin>>tt;
cout<<“Volume Balok 1 parameter = “<<tes.volume(tt)<<endl;
cout<<“Lebar baru = “; cin>>ll;
cout<<“Volume Balok 2 parameter = “<<tes.volume(tt, ll)<<endl;
cout<<“Panjang baru = “; cin>>pp;
cout<<“Volume Balok 3 parameter = “<<tes.volume(tt, ll, pp)<<endl;

getch();
}

Contoh Program Overriding (sederhana) :)

#include <constrea.h>
#include <string.h>

class person {
public : virtual void speak();
};
class man : public person{
public : void speak();
};

void person :: speak(){
cout << “Person Speak “<<endl;
}
void man :: speak(){
cout << “Man Speak “<<endl;
}

void main(){
person p;
man m;
p.speak();
m.speak();

person *ptr = new man;
ptr->speak();
getch();
}

Komentar

Postingan populer dari blog ini

Definisi, Jenis dan Layanan OTT (Over The Top)

NETWORK LAYER