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
Posting Komentar