download

Matakuliah
Tahun
: T0456 / Algoritma dan Metode Object
Oriented Programming
: 2007
Polymorphism
Pertemuan 23-24
Learning Outcomes
Pada akhir pertemuan ini, diharapkan:
1. Mahasiswa dapat menguraikan konsep trivial polymorphism dan true
polymorphism
2. Mahasiswa dapat menunjukkan hubungan antara antara abstract class
dengan fungsi virtual (Polymorphism)
Buku Referensi:
C++ - How to program, Deitel & Deitel,
Prentice Hall, 2001.
Websites:
http://www.deitel.com
3
Bina Nusantara
Outline Materi
•
•
•
•
•
•
Pengertian dan penggunaan
Early dan Late Binding
Trivial Polymorphism
True Polymorphism
Virtual Method
Abstract Class
4
Bina Nusantara
Definisi Polymorphism
• Poly : “many”, morph : “shape”
• Poly + morph = POLYMORPHISM : “manyshapes”
• Polymorphism memungkinkan sebuah method yang
mempunyai nama yang sama, namun mempunyai aksi
(tugas) yang berbeda. (analogi dengan bunglon)
• Dengan polymorphism dimungkinkan dirancang suatu fungsi
yang implementasi detilnya belum ada. (isi fungsi belum
ditulis ).
Bina Nusantara
Polymorphism
• Trivial Polymorphism
– Disebut juga overloading function
– Parameter function beda.
• True Polymorphism
–
–
–
–
Bina Nusantara
Disebut juga overriding function
Parameter function sama.
Implementasi dalam inheritance
Memungkinkan suatu class memiliki function tanpa isi/tugas
fungsi.
Trivial Polymorphism
• Trivial Polymorphism (Polimorfisme semu) merupakan
bentuk polymorphism sederhana yang dapat
diimplementasikan tanpa harus menggunakan teknik
encapsulation dan inheritance.
• Implementasi dari Trivial Polymorhyms pada C++ adalah
function overloading dan operator overloading.
Bina Nusantara
Early Binding VS Late Binding
Early binding:
Pada proses pembuatan program konvensional, pada
proses kompilasi kompiler akan mengubah source program
ke bentuk file object (.obj), kemudian linker akan
menggabungkan (linking / binding) fungsi yang dipakai oleh
program dengan library.
Proses penggabungan deklarasi fungsi dengan isi fungsi
(function body) terjadi pada saat kompilasi disebut early
binding.
Pada early binding, tugas dari suatu fungsi
sudah dapat ditentukan pada saat kompilasi.
Bina Nusantara
Early Binding VS Late Binding
Late binding:
Late binding memungkinkan saat aksi (tugas) suatu fungsi
ditentukan pada saat program berjalan (run time), sesuai
dengan kebutuhan.
Untuk membentuk late binding dibutuhkan virtual method.
Bina Nusantara
Early vs Late Binding
• Early Binding
– Function didefinisikan saat
dilakukan kompilasi
– Telah dibuat link yang fixed
(tetap) antara header
function dan isi function
Bina Nusantara
• Late Binding
– Function dapat
didefinisikan saat eksekusi
(run-time)
– Compiler membuat Virtual
Method Table yang akan
dipilih sesuai kebutuhan
saat aplikasi dijalankan.
– Implementasi : dengan
menggunakan virtual
keyword
C++ Compiler
Hello.cpp
Compile
Hello.obj
*.h
(header file)
Link/Bind
Hello.exe
Execute
Hello Application ...
Press any key to continue
Bina Nusantara
True Polymorphism
• Merupakan polimorfisme sejati yang pada implementasinya
membutuhkan teknik encapsulation dan inheritance.
• Dengan polymorphism dimungkinkan dibuat suatu fungsi
yang generik, yang mampu menangani suatu object baru
yang dimasukkan ke dalam sistem melalui teknik
inheritance.
• Implementasi dalam bentuk virtual method (disebut juga
function overriding).
Bina Nusantara
Virtual Method
• Virtual Method mempunyai deklarasi (nama, return type,
argumen) fungsi yang sama, namun tidak berada pada
lingkup class yang sama dan diawali dengan keyword
virtual.
• Suatu class yang mempunyai virtual method, maka
compiler akan membuat suatu VMT (Virtual Method Table)
yang spesifik untuk class tersebut.
Bina Nusantara
Virtual Function
• Squasi Virtual Function
– Virtual Function dengan isi fungsi.
• Pure Virtual Function
– Virtual Function tanpa isi fungsi.
– Menyebabkan suatu class menjadi abstract class
• Abstract class  class yang tidak dapat dijadikan object, karena
mangandung pure virtual function yang memiliki function tanpa
badan/isi fungsi.
• Constructor tidak dapat dijadikan virtual
• Destructor dapat dijadikan virtual
Bina Nusantara
Pure Virtual Function Example
class Shape{
public:
virtual void draw() = 0;
}
class Triangle: public Shape{
public:
void draw(){
cout<<“Triangle”;
};
}
Bina Nusantara
Void main{
Shape *ptr;
Triangle Obj2;
Shape Obj1; //ERROR
}
Polymorphism Example
class Bird{
public:
void peep(){
...
};
void peep(int song){
...
};
void fly(){
...
};
}
class Eagle: public Bird{
public:
void fly(){
...
};
}
Bina Nusantara
Overloaded
Overridden
True Polymorphism Example
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”;
};
}
Bina Nusantara
Void main{
Shape *ptr;
Triangle Obj;
ptr = &Obj;
ptr->show(); //Shape
ptr->draw(); //Triangle
}
Contoh Program Polymorphism:
//Program : Polymorphism implementation
#include <conio.h>
// shape is abstract class
class CShape {
protected :
virtual void draw() = 0; // pure virtual
public :
void drawxy( int x, int y ) {
gotoxy( x,y );
draw();
}
};
class Ccircle : public CShape {
protected :
void draw() { cout << “ Circle :: draw() ” ; }
};
Bina Nusantara
class Csquare : public CShape {
protected :
void draw() { cout << “ Square :: draw() ” ; }
};
class Ctriangle : public CShape {
protected :
void draw() { cout << “ Triangle :: draw() ” ; }
};
class Cline : public CShape {
protected :
void draw() { cout << “ Line :: draw() ” ; }
};
Bina Nusantara
void main() {
// CShape s;
// error!, because CShape is abstract class
Cshape * list[4] = { new CCircle, new CSquare,
new CTriangle, new CLine };
// call the same function for draw all kind of object
for ( int i = 0; I < 4; i++ )
list [i] -> drawxy( 0, i );
}
Bina Nusantara
Diskusi dan Tanya Jawab
Latihan soal
21
Bina Nusantara