Konsep Polymorphism dalam C++

Masih ingat 3 konsep utama dalam OOP?  Ya itu adalah:

  • Encapsulation
  • Inheritance
  • Polymorphism

Sebelumnya kita sudah bahas 2 konsep utamanya, yaitu Encapsulation dan Inheritance, dan kali ini saya akan bahas mengenai Polymorphism.

Dari asal katanya, Polymorphism diambil dari bahasa Yunani, Poly artinya banyak dan Morph artinya bentuk. Polymorphism dalam OOP dapat diartikan Object yang memiliki operasi yang sama tapi perilaku yang berbeda beda.
Misalnya: Burung dan Pinguin yang sama sama memiliki atribut sayap untuk operasi bergerak atau berpindah tempat.
Cara atau perilaku burung untuk berpindah tempat dengan pinguin itu berbeda. Burung dapat berpindah tempat dengan terbang menggunakan sayapnya, sedangkan pinguin berpindah tempat dengan berenang menggunakan sayapnya.

Contoh lain misalnya dalam menghitung luas sebuah bidang. Misalkan kita punya 2 bidang yakni segitiga dan segiempat. Keduanya memiliki operasi hitung luas, tapi cara menghitung luas segitiga tentu beda dengan hitung luas segiempat.

Perhatikan program C++ Polymorphism berikut ini.

#include <iostream>
using namespace std;
class Bidang 
{	protected: int lebar, tinggi;
	public:
	Bidang( int a=0, int b=0)
	{ lebar = a;
	  tinggi = b;
	}
	int luas()
	{  cout << "Luas Bidang : 0 " << endl;
	}
};
class Segitiga: public Bidang
{	public:
	Segitiga( int a=0, int b=0):Bidang(a, b) { }
	int luas ()
	{ cout << "Luas Segitiga : " 
	       << (lebar * tinggi) << endl;
	}
};
class Segiempat: public Bidang
{	public:
	Segiempat( int a=0, int b=0):Bidang(a, b) { }
	int luas ()
	{   cout << "Luas Segiempat : " 
		 << (lebar * tinggi / 2) << endl;
	}
};
int main( )
{	Bidang *bidang;
	Segitiga segitiga(10,7);
	Segiempat segiempat(10,5);
	bidang = &segitiga;
	bidang->luas();
	bidang = &segiempat;
	bidang->luas();
	return 0;
}

Output:

Luas Bidang : 0
Luas Bidang : 0

Output yang dihasilkan seperti di atas karena pada saat compile time, Compiler melakukan Static Linking atau Early Binding pada method Luas() di kelas Bidang.
Operasi hitung Luas yang kita inginkan adalah Luas Segitiga dan Luas Segiempat. Untuk itu kita tambahkan keyword virtual pada method Luas() di kelas Bidang, menjadi:

virtual int luas()
{ cout << "Luas Bidang : 0 " << endl; }

Dengan demikian maka output yang dihasilkan menjadi:

Luas Segitiga : 70
Luas Segiempat : 25

Selamat mencoba.

Send your comment