LECTURE NOTES
T0456 - Algoritma dan Metode
Object Oriented Programming
Week 9
LEARNING OUTCOMES
1. Peserta diharapkan mampu menguraikan konsep trivial polymorphism dan true
polymorphism
2. Peserta diharapkan mampu mendemonstrasikan hubungan antara abstract class dengan
virtual functions (polymorphism).
OUTLINE MATERI (Sub-Topic):
1. Definisi dan Penggunaan Polymorphism 2. Early and Late Binding
3. Trivial Polymorphism 4. True Polymorphism 5. Virtual Method 6. Abstract Class
ISI MATERI
Definisi dan Penggunaan Polymorphism
Berdasarkan kata pembentuknya, polymorphism dapat dipisah menjadi poly dan morph serta
ism. Poly artinya banyak, morph artinya bentuk dan ism artinya konsep. Secara kata per
kata polymorphism berarti konsep bentuk banyak.
Polymorphism memungkinkan sebuah method dengan nama sama tapi memiliki aksi atau
tugas berbeda. Sebuah objek yang memanggil method tadi, akan menjalankan tugas berbeda-beda tergantung pada aksi yang dipakai oleh method tersebut.
Polymorphism memungkinkan programmer membangun fungsi tanpa implementsi. Isi fungsi
belum ditulis.
Ada dua tipe polymorphism: - trivial polymorphism - true polymorphism
Trivial polymorphism menggunakan overloading functions. Overloading functions memiliki
parameter berbeda. Sedangkan true polymorphism menggunakan overriding function.
Overriding functions memiliki nama sama dan parameter sama tapi berada di dua class
berbeda yang terlibat dengan concept of inheritance. True polymorphism memungkinkan
Gambar 1: Overloading dan Overriding Functions
Early and Late Binding
Pada kompilasi pemrograman konvensional, compiler menterjemahkan source code ke dalam bentuk object file (.obj), kemudian linker menyatukan fungsi-fungsi yang dimiliki oleh program kepada library. Karena proses tersebut terjadi pada saat kompilasi, maka proses ini disebut early binding.
Pada early binding, penetapan definisi fungsi dilakukan pada saat kompilasi. Sebuah link yang tetap sudah tercipta pada saat kompilasi antara function header dan function content. Oleh karena itu dapat dikatakan bahwa definisi fungsi yang dieksekusi ditentukan oleh
Gambar 2: Early Binding
Late binding memungkinkan aksi yang dilakukan sebuah fungsi ditentukan pada saat
program dieksekusi sesuai dengan kebutuhan pengguna. Late binding hanya dimungkinkan dengan adanya virtual method dan overriding function.
Tidak seperti early binding, pada late binding definisi fungsi ditentukan oleh pengguna. Definisi fungsi tergantung pada aksi pengguna.
Pada Gambar 3, pengguna memilih pilihan 1 atau 2. Pilihan 1 menciptakan objek dari class D1. Pilihan 2 menciptakan objek dari class D2. Definisi function() ditentukan oleh pilihan pengguna.
Gambar 3: Late Binding
Pada saat kompilasi, compiler membuat Virtual Method Table untuk setiap class yang memiliki virtual method. Tabel ini berisi semua virtual method dalam sebuah class. Virtual
method memiliki keywort virtual. Virtual method dipilih pada saat running time.
Trivial Polymorphism (pseudo polymorphism) adalah bentuk mudah yang bisa
diimplementasikan tanpa memerlukan technique of encapsulation dan inheritance.
Implementasi trivial polymorphism dalam bahasa C++ dilakukan dengan function
overloading dan operator overloading.
True Polymorphism
True polymorphism memerlukan teknik encapsulation dan inheritance. True polymorphism
memungkinkan penggunaan fungsi generik yang mampu menangani objek baru yang diciptakan sewaktu program sedang berjalan dengan menggunakan teknik inheritance. True
polymorphism diimplemetasikan dengan menggunakan virtual method dan overriding function.
Contoh true polymorphism:
class Shape{ public:
void show(){ cout<<“Shape”; };
virtual void draw(){ cout<<“Shape”; };
}
class Triangle: public Shape{ public: void show(){ cout<<“Triangle”; }; void draw(){ cout<<“Triangle”; }; } void main{ Shape *ptr; Triangle Obj;
ptr = &Obj;
ptr->show(); //Shape ptr->draw(); //Triangle }
Virtual Method
Sebuah method disebut virtual method jika ada keyword virtual di depannya. Virtual method bekerja dengan melibatkan overridding function. Overridding functions memiliki deklarasi fungsi sama tapi berada pada dua classes yang terlibat inheritance.
Jika sebuah class memiliki virtual method, maka compiler menciptakan virtual method table (VMT) khusus untuk class tersebut.
Ada dua jenis virtual methods yaitu squasi virtual method dan pure virtual method. Squasi
virtual method memiliki function body.
Contoh:
virtual void draw() {;}
Pure virtual method adalah fungsi yang tidak memiliki function body. Function body diganti
dengan simbol =0; Contoh:
virtual void draw() =0;
Constructor tidak bisa virtual tapi destructor bisa virtual.
Contoh pure virtual method:
class Shape{ public:
virtual void draw() = 0; }
class Triangle: public Shape{ public: void draw(){ cout<<“Triangle”; }; } void main{ Shape *ptr;
Triangle Obj; Ptr = &Obj;
//Shape Obj; ERROR }
Abstract Class
Sebuah class disebut abstract class jika memiliki paling sedikit satu pure virtual method. Objek tidak bisa didekarasikan dengan menggunakan abstract class. Abstract class dapat digunakan untuk mendeklarasikan reference object dan pointer object.
Contoh:
class FIGURE { public:
virtual double area()=0; //pure virtual virtual void inputData()=0;
SIMPULAN
Polymorphism memungkinkan sebuah method dengan nama sama tapi memiliki aksi atau
tugas berbeda. Sebuah objek yang memanggil method tadi, akan menjalankan tugas berbeda-beda tergantung pada aksi yang dipakai oleh method tersebut.
Polymorphism memungkinkan programmer membangun fungsi tanpa implementsi. Isi fungsi
belum ditulis.
Ada dua tipe polymorphism yaitu trivial polymorphism dan true polymorphism. Trivial
polymorphism menggunakan overloading functions. Overloading functions memiliki
parameter berbeda. Sedangkan true polymorphism menggunakan overriding function.
Overriding functions memiliki nama sama dan parameter sama tapi berada di dua class
berbeda yang terlibat dengan concept of inheritance. True polymorphism memungkinkan
class memiliki fungsi tanpa isi.
Pada kompilasi pemrograman konvensional, compiler menterjemahkan source code ke dalam bentuk object file (.obj), kemudian linker menyatukan fungsi-fungsi yang dimiliki oleh program kepada library. Karena proses tersebut terjadi pada saat kompilasi, maka proses ini disebut early binding.
Pada early binding, penetapan definisi fungsi dilakukan pada saat kompilasi. Sebuah link yang tetap sudah tercipta pada saat kompilasi antara function header dan function content. Oleh karena itu dapat dikatakan bahwa definisi fungsi yang dieksekusi ditentukan oleh
programmer.
Late binding memungkinkan aksi yang dilakukan sebuah fungsi ditentukan pada saat
program dieksekusi sesuai dengan kebutuhan pengguna. Late binding hanya dimungkinkan dengan adanya virtual method dan overriding function.
Tidak seperti early binding, pada late binding definisi fungsi ditentukan oleh pengguna. Definisi fungsi tergantung pada aksi pengguna.
Pada saat kompilasi, compiler membuat Virtual Method Table untuk setiap class yang memiliki virtual method. Tabel ini berisi semua virtual method dalam sebuah class. Virtual
Trivial Polymorphism (pseudo polymorphism) adalah bentuk mudah yang bisa
diimplementasikan tanpa memerlukan technique of encapsulation dan inheritance.
Implementasi trivial polymorphism dalam bahasa C++ dilakukan dengan function
overloading dan operator overloading.
True polymorphism memerlukan teknik encapsulation dan inheritance. True polymorphism
memungkinkan penggunaan fungsi generik yang mampu menangani objek baru yang diciptakan sewaktu program sedang berjalan dengan menggunakan teknik inheritance. True
polymorphism diimplemetasikan dengan menggunakan virtual method dan overriding function.
Sebuah method disebut virtual method jika ada keyword virtual di depannya. Virtual method bekerja dengan melibatkan overridding function. Overridding functions memiliki deklarasi fungsi sama tapi berada pada dua classes yang terlibat inheritance.
Jika sebuah class memiliki virtual method, maka compiler menciptakan virtual method table (VMT) khusus untuk class tersebut.
Ada dua jenis virtual methods yaitu squasi virtual method dan pure virtual method. Squasi
virtual method memiliki function body.
Pure virtual method adalah fungsi yang tidak memiliki function body. Function body diganti
dengan simbol =0;
Constructor tidak bisa virtual tapi destructor bisa virtual.
Sebuah class disebut abstract class jika memiliki paling sedikit satu pure virtual method. Objek tidak bisa didekarasikan dengan menggunakan abstract class. Abstract class dapat digunakan untuk mendeklarasikan reference object dan pointer object.
DAFTAR PUSTAKA
1. Deitel & Deitel. (2010). C++ How To Program. 7th Edition. Prentice Hall Intern. New Jersey. ISBN:0-13-246540-X, Chapter 13