Anda di halaman 1dari 24

Pemrograman

Berorientasi
Objek
Pertemuan 12

Yustina Sri Suharini


email: yustina.ss@gmail.com
Ikhtisar
• Definisi Polymorphism
• Early Binding Vs Late Binding
• Trivial Polymorphism
• True Polymorphism
• Virtual Method
• Abstract Class

Yustina SS Pemrograman Berorientasi Objek 12 2


Definisi Polymorphism
• Polymorphism Æ kemampuan dari objek–
objek yang berbeda dalam sebuah class
hirarki untuk melakukan fungsi (behavior)
unik terhadap suatu respon message
• Poly (=Many) + morph (=Shape) =
POLYMORPHISM: banyak bentuk atau
many shapes.
shapes
Polymorphism Æ “Single Interface,
Multiple Method”

Yustina SS Pemrograman Berorientasi Objek 12 3


Definisi Polymorphism (2)

• Polymorphism adalah kemampuan sebuah class


untuk menyembunyikan implementasi yg berbeda
dalam interface yg sama
• Polymorphism memungkinkan sebuah method yang
mempunyai nama yang sama, namun aksi (tugas)
yang berbeda.
• Polymorphism memungkinkan suatu fungsi dengan
implementasi detil yang belum ada (isi fungsi belum
ditulis).
• Fungsi tersebut akan dibuat virtual dan class yg
berisi fungsi virtual akan menjadi abstract class /
abstract data type.

Yustina SS Pemrograman Berorientasi Objek 12 4


Definisi Polymorphism (3)

• Polymorphism sangat berhubungan dg


konsep pewarisan (inheritance)
• 2 cara implementasi polymorphism :
– Overloading function: penggunaan kembali
nama fungsi yang sama tapi dengan argumen
yang berbeda
– Overriding function: sebuah fungsi dalam class
turunan yang memiliki nama, return type dan
argumen function yang sama dengan fungsi
dalam class induk

Yustina SS Pemrograman Berorientasi Objek 12 5


Contoh class binatang

• Implementasi terbang() pada


burung tidak sama dg terbang()
pada pegasus
class burung class mamalia
• Implementasi berlari() pada
kuda tidak sama dg berlari() berkicau()
pada pegasus terbang()

• Alternatif solusi : class kuda

– dg me-rename method berlari() meringkik()


menjadi bergerak() pada class berlari()
kuda, dan meng-override method
bergerak() pada objek pegasus
untuk melakukan method berjalan
class pegasus
gaya burung.
– begitu juga meng-override method
bergerak() pada class kuda agar terbang()
berlari()
bisa berjalan gaya kuda.

Yustina SS Pemrograman Berorientasi Objek 12 6


Early atau Late Binding ?

Pada proses kompilasi, compiler akan mengubah


source code menjadi file objek (.obj), kemudian linker
akan menggabungkan (linking / binding) fungsi yang
dipakai oleh program dengan library.
Binding adalah penggabungan deklarasi fungsi
dengan definisi/body fungsi. Jika penggabungan
dilakukan pada saat kompilasi, maka disebut early
binding. Jika penggabungan terjadi pada saat run
time/eksekusi maka disebut late binding.

Yustina SS Pemrograman Berorientasi Objek 12 7


Late Binding
.cpp
Polymorphism pada C++
diproses pada saat eksekusi
(runtime), disebut late binding
.Obj /dinamic binding

+ .exe

.h BINDING /
LINKING

Yustina SS Pemrograman Berorientasi Objek 12 8


Early Vs Late Binding
Proses penggabungan deklarasi fungsi
dengan isi fungsi (function body) terjadi
pada saat kompilasi. Dengan kata lain,
tugas dari suatu fungsi sudah dapat
ditentukan pada proses kompilasi.

Memungkinkan aksi (tugas) suatu fungsi


ditentukan pada saat program berjalan
(run time), sesuai dengan kebutuhan.
Untuk membentuk late binding
dibutuhkan virtual method.

Yustina SS Pemrograman Berorientasi Objek 12 9


Early Vs Late Binding (2)

• C Style
• Function didefinisikan sebelum compiling
• Link body function + function header / prototype

Yustina SS Pemrograman Berorientasi Objek 12 10


Early Vs Late Binding (3)

• C++ Style
• Definisi function dpt dilakukan saat runtime
• Compiler membuat VMT utk class yg
mengandung polymorphism
• Jika derived class memiliki fungsi yg sama
(Overriding) dg base class, VmT akan
menunjuk ke base-class function

Yustina SS Pemrograman Berorientasi Objek 12 11


Trivial Polymorphism

• Trivial Polymorphism (Polimorfisme semu)


merupakan bentuk polymorphism sederhana
yang dapat diimplementasikan tanpa harus
menggunakan teknik encapsulation dan
inheritance.
• Implementasi dari Trivial Polymorhism pada
C++ adalah function overloading dan
operator overloading

Yustina SS Pemrograman Berorientasi Objek 12 12


True Polymorphism
• Merupakan polimorfisme sejati yang pada
implementasinya membutuhkan
butuh teknik
encapsulation dan inheritance.
inheritance
• Dengan polymorphism dimungkinkan dibuat
suatu fungsi yang generik, yang mampu
menangani suatu objek baru yang
dimasukkan ke dalam sistem melalui teknik
inheritance.
inheritance
• Implementasi dalam bentuk virtual method
(disebut juga function overriding).
overriding
Yustina SS Pemrograman Berorientasi Objek 12 13
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.
virtual
• Jika suatu class mempunyai virtual method,
maka compiler akan membuat suatu VMT
(Virtual Method Table) yang spesifik untuk
class tersebut.

Yustina SS Pemrograman Berorientasi Objek 12 14


Trivial & True Polymorphism
Trivial Polymorphism
¾ Function Overloading Æ nama fungsi sama tapi
tugasnya berbeda
¾ Dibedakan oleh 3 function signature
True Polymorphism
¾ Functon Overriding Æ fungsi yg namanya sama
tapi tidak berada dalam kelas yg sama
¾ Diimplementasikan dg Virtual Method
o Pure Virtual Method
o Squasi Virtual Method

Yustina SS Pemrograman Berorientasi Objek 12 15


Jenis Virtual Method

2 Jenis Virtual Method :


– Pure Virtual Method
– Squasi Virtual Method

Yustina SS Pemrograman Berorientasi Objek 12 16


Pure Virtual Method

• Virtual Method hanya mendeklarasikan


function prototypes, dan tidak mempunyai
function body (tugas/isi dari fungsi belum
didefinisikan).
• Suatu class yang mempunyai pure virtual
method disebut abstract class.
class
• Instance (objek) tidak dapat dibuat dari
suatu abstract class, karena masih ada
fungsi yang tidak mempunyai function body.
body

Yustina SS Pemrograman Berorientasi Objek 12 17


Abstract class
• Absract class biasanya adalah base class,
class
dan tidak bisa dibuat instance.
• Manfaat dari virtual functions adalah agar
virtual method table (VMT) yg menentukan
tipe runtime objek, bukan programmer dg
statement switch-nya, karena pada
program yg besar, statement switch akan
sulit di-maintain.
• VMT bekerja pada saat runtime dg demikian
polymorphism berhubungan dg proses
kompilasi
Yustina SS Pemrograman Berorientasi Objek 12 18
Abstract class (2)

• Ciri pure virtual method adalah pada


deklarasi ditulis fungsi() = 0

class abstract {
virtual int compare(*item1, *item2) =0;
=0
}

Yustina SS Pemrograman Berorientasi Objek 12 19


Abstract class (3)
Perhatikan urutan base class dan
derived class pada kasus berikut ini

OrgEntity Company Division Department

OrgEntity merupakan abstract class


yg tujuan utamanya sebagai base class

Yustina SS Pemrograman Berorientasi Objek 12 20


Abstract class (4)

• OrgEntity memiliki function


number_employees yg me-return jumlah
employee pada tiap unit organisasi
• Terdapat class pada hirarki yang memiliki
virtual function office_party yg me-
return jumlah employee yang dianggarkan
untuk acara tahunan

Yustina SS Pemrograman Berorientasi Objek 12 21


Squasi Virtual Method

Berbeda dengan Pure Virtual Method,


Squasi Virtual Method adalah suatu
virtual method yang menyediakan
fungsi minimal yang harus dikerjakan
oleh suatu method

Yustina SS Pemrograman Berorientasi Objek 12 22


Pure & Squasi
• Pure Virtual Method hanya Virtual Method
mendeklarasikan function prototipes
saja (no body function) Æ task of
function’s not defined yet.
• Suatu class yang memiliki pure virtual • Squasi Virtual Method
method Æ abstract class. memiliki fungsi minimal
• Instance (object) tidak dapat dibuat
dari suatu abstract class, karena yang harus dikerjakan
masih ada fungsi yang tidak memiliki
function body. oleh suatu method /ada
• Ciri dari pure virtual method adalah body function.
pada deklarasi ditulis fungsi() = 0.
class MyClass
class MyClass {
{
virtual void foo() { ; }
virtual void foo() = 0;
}; };

Yustina SS Pemrograman Berorientasi Objek 12 23


Virtual Destructor

• Base class pointer ke objek turunan


– Jika di-destroy dengan delete, behavior tidak terspesifikasi
• Perbaikan sederhana
– Declare base-class destructor virtual dengan demikian
ketika delete digunakan, destructor tertentu yang
dijalankan
• Ketika object class turunan di-destroy
– Destructor class turnan di-execute pertama kali, destructor
class induk di-execute kemudian
• Constructors tidak dapat dibuat virtual

Yustina SS Pemrograman Berorientasi Objek 12 24

Anda mungkin juga menyukai