1Modul Bahasa C++,
[email protected]
13 POLIMORFISME
Polimorfi Polimorfisme sme (polymorp (polymorphism hism)) erat erat kaitannya kaitannya dengan dengan Pewaris Pewarisan. an. Polimorfi Polimorfisme sme adalah pemikiran bahwa objek dinamis suatu kelas dasar dapat berperilaku seperti kelas turunan. Ketika objek tersebut menunjuk kelas dasar, objek tersebut berperilaku seperti kelas kelas dasar dasar,, tetapi tetapi ketika ketika objek objek terseb tersebut ut menun menunju juk k kelas kelas turuna turunan, n, objek objek terseb tersebut ut berperilaku seperti kelas turunan. Dalam hal ini objek dapat memiliki beberapa bentuk, tergantung pada saat itu kelas mana yang ditunjuk. Yang perlu menjadi catatan, bahwa perubahan perilaku ini dari kelas dasar kepada kelas turunan, tidak dapat objek kelas turunan menunjuk kelas dasar. Polimorfisme dimungkinkan karena adanya mekanisme ikatan dinamis (dynamic binding). Ikatan dinamis adalah ikatan yang terjadi pada saat program dijalankan (runtime). Ikatan yang terjadi pada saat kompile disebut ikatan statis. Ikatan dinamis hanya dapat terjadi antara suatu objek dinamis dengan metode yang dinamis juga, dalam hal ini metode virtualnya (maya).
A.
Poli Polimo morf rfis isme me Pada Pada Pewa Pewari risa san n Tung Tungga gall Suatu metode dapat dideklarasikan secara virtual dengan cara menambah kata
virtual pada deklarasi fungsi. Jika suatu metode dideklarasikan secara virtual dalam kelas dasar, maka keadaan virtual tetap akan berlaku untuk fungsi yang sama di seluruh kelas turunan meskipun kata virtual tidak disebutkan. Untuk menjelaskan tentang ikatan dinamis dalam hubungannya dengan polimorfisme, polimorfisme, perhatikan rancangan kelas berikut ini :
PUSAT PENGEMBANGAN BAHAN AJAR – UMB
Harni Kusniyati ST. C++
2Modul Bahasa C++,
[email protected]
class A ra sa D sa le K
{ public: tipe fungsi_statis(); tipe virtual fungsi_virtual();
Ikatan Statis
}; class B : public A { public: n a nu r uT sa le K
tipe fungsi_statis(); tipe fungsi_virtual(); };
Ikatan Dinamis
class C : public B { public: tipe fungsi_statis(); tipe fungsi_virtual(); };
Hirarki kelas yang digambarkan oleh rancangan kelas diatas berupa Pewarisan Tunggal. Jika diciptakan objek dinamis kelas A, maka objek ini dapat diubah bentuknya menjadi (menunjuk) objek kelas B dan objek kelas C. Jika diciptakan objek dinamis kelas B, maka objek ini dapat diubah bentuknya menjadi objek kelas C tetapi tidak dapat diubah menjadi objek kelas A. Sehingga perubahan bentuk hanya berlaku dari kelas dasar menjadi kelas turunan. Pada masing-masing kelas terdapat metode f ungsi_statis() dan fungsi_virtual(). Meskipun secara eksplisit fungsi virtual() hanya dideklarasikan secara virtual pada kelas A, secara otomatis fungsi_virtual() pada kelas B dan kelas C juga berupa fungsi virtual. Jika diciptakan objek dinamis kelas A, maka objek ini dapat diubah bentuknya menjadi objek kelas B dan kelas C, sehingga ikatan dinamis hanya dapat terjadi antara objek tersebut dengan fungsi_virtual() dari kelas A, fungsi_virtual() dari kelas B dan fungsi_virtual() dari kelas C. Ikatan dinamis tidak mungkin terjadi dengan fungsi_statis dari kelas B maupun kelas C. Jika yang diciptakan objek dinamis kelas B, maka objek ini hanya dapat mengadakan ikatan dinamis dengan fungsi_virtual() dari kelas C saja. Hal ini sesuai PUSAT PENGEMBANGAN BAHAN AJAR – UMB
Harni Kusniyati ST. C++
3Modul Bahasa C++,
[email protected] aturan bahwa perubahan bentuk objek hanya dapat dari objek dinamis kelas dasar menjadi objek dinamis kelas turunan.
B.
Polimorfisme Pada Pewarisan Jamak Polimorfisme juga dapat diterapkan pada pewarisan jamak, tidak ada bedanya
dengan pada Pewarisan Tunggal, hanya saja kata virtual harus disebutkan pada semua metode pada kelas dasar yang dirancang dapat mengadakan ikatan dinamis. Misalnya Polimorfisme diterapkan pada kelas pegasus, yang mana pegasus dianggap sebagai kelas turunan dari kelas kuda dan burung. Jika diterapkan Polimorfisme, maka harus diambil pengertian bahwa berlarinya kuda berbeda dengan berlarinya pegasus. Demikian juga terbangnya burung berbeda dengan terbangnya Pegasus. Dalam implementasi program, definisi fungsinya berbeda. Implementasi program untuk kelas Pegasus dengan penerapan pewarisan jamak dan polimorfisme dapat dituliskan sebagai berikut. :
#include
class kuda { public: void virtual berlari() {cout<<"berlari cepatnya kuda"<
main () { kuda *pkd; pkd=new kuda;
PUSAT PENGEMBANGAN BAHAN AJAR – UMB
Harni Kusniyati ST. C++
4Modul Bahasa C++, [email protected] cout<<"Sifat-sifat kuda : "<berlari(); delete pkd; pkd = new pegasus; cout<berlari(); burung *pbr; pbr=new burung; cout<terbang(); delete pbr; pbr=new pegasus; cout<terbang(); }
Hasil Eksekusi:
Program diatas menunjukan bahwa objek dinamis pkd dari kelas dasar kuda dapat berbentuk kelas Pegasus. Demikian juga objek dinamis pbr dari kelas dasar burung dapat berbentuk kelas Pegasus. Tetapi objek dinamis pkd tidak dapat berbentuk kelas burung, begitu juga sebaliknya, objek dinamis pbr dari kelas burung tidak dapat berubah bentuk menjadi kelas kuda. Sehingga peryataan di bawah ini akan menyebabkan kesalahan : pkd = new burung;
// salah
pbr = new kuda;
// salah
PUSAT PENGEMBANGAN BAHAN AJAR – UMB
Harni Kusniyati ST. C++
5Modul Bahasa C++, [email protected] Dapat dilihat, ketika objek pkd berbentuk kuda, maka metode berlari() yang dijalankan adalah metode dari kelas kuda. Ketika objek pkd diubah menjadi berbentuk kelas pegasus, metode berlari() yang dijalankan adalah metode dari kelas pegasus.
Demikian juga untuk obek dinamis pbr, ketika berbentuk kelas burung, metode terbang() yang dijalankan adalah metode dari kelas burung. Ketika objek pbr diubah bentuk menjadi kelas pegasus. Metode terbang() yang dijalankan adalah metode dari kelas pegasus.
C.
Polimorfisme Pada Pewarisan Jamak Virtual Polimorfisme pada pewarisan jamak virtual juga tidak banyak berbeda. Berikut ini
contoh polimorfisme pada kelas hewan sampai Pegasus. Untuk menyederhanakan program, hanya diperhatikan metode bergerak() pada kelas hewan. Metode bergerak () pada kelas hewan berbeda dengan metode bergerak pada kelas kuda, burung atau pegasus. Kelas kuda memberi pengertian bergerak secara umum yaitu berpindah tempat. Kelas kuda memberi pengertian bergerak dengan cara berlari, kelas burung memberi pengertian bergerak dengan cara terbang atau berlari. Perhatikan implementasi program berikut, serta perhatikan definisi metode pada masing-masing kelas. Kata virtual hanya dipakai pada metode bergerak pada kelas hewan sebagai tanda bahwa metode tersebut bersifat dinamis.
#include class hewan { public: void virtual bergerak() {cout<<"bergeraknya hewan secara umum"<
PUSAT PENGEMBANGAN BAHAN AJAR – UMB
Harni Kusniyati ST. C++
6Modul Bahasa C++, [email protected] {cout<<"bergeraknya burung dengan terbang"<bergerak(); phw=new kuda; cout<bergerak(); phw=new burung; cout<bergerak(); phw=new pegasus; cout<bergerak(); }
Hasil Eksekusi:
PUSAT PENGEMBANGAN BAHAN AJAR – UMB
Harni Kusniyati ST. C++
7Modul Bahasa C++, [email protected] Pada program tersebut dideklarasikan phw berupa objek dinamis kelas hewan. Ketika objek phw berbentuk (menunjuk) kelas hewan, metode bergerak() yang dijalankan adalah metode kelas dari hewan. ketika objek phw berbentuk kelas kuda, metode bergerak() yang dijalankan adalah metode dari kelas kuda. Ketika objek phw berbentuk kelas burung, metode bergerak() yang dijalankan adalah metode dari kelas burung. Ketika objek phw berbentuk kelas pegasus, metode bergerak() yang dijalankan adalah metode dari kelas pegasus. Contoh lain: CONTOH PROGRAM #include #include #include
class mahluk { public : void informasi() { cout<<"Informasi()pada mahluk..."<
PUSAT PENGEMBANGAN BAHAN AJAR – UMB
Harni Kusniyati ST. C++
8Modul Bahasa C++, [email protected] { public : void informasi() { cout<<"informasi() pada Sapi..."<
void main() { clrscr(); mamalia mamalia; sapi sapi_sumba; mahluk*binatang;
cout< informasi(); binatang ->keterangan();
cout<<"--------------"<
binatang= &sapi_sumba; binatang-> informasi(); binatang ->keterangan();
getch(); }
HASIL EKSEKUSI
PUSAT PENGEMBANGAN BAHAN AJAR – UMB
Harni Kusniyati ST. C++
9Modul Bahasa C++, [email protected]
PUSAT PENGEMBANGAN BAHAN AJAR – UMB
Harni Kusniyati ST. C++