POLYMORPHISM
Polymorphism
adalah kemampuan object-object yang berbeda dalam sebuah class hiraiki untuk
melakukan fungsi(behavior) unik terhadap suatu respon massage. Selain itu
polymorphism adalah juga kemampuan class menyembunyikan implementasi yang berbeda
dalam interface yang sama, polymorphisem juga memungkinkan method memiliki nama
yang sama dengan tugas tugas yang berbeda. Tidak hanya itu, polymorphism juga
memungkinkan suatu fungsi yang implementasi detailnya belum ada.
Polymorphism
juga tergantung pada inheritance, karna dalam pembuatan polymorphism
digunakanlah abstract class, yang bisa dibuat menjadi abstract class hanyalah
base class dan tidak bisa dibuat instace dari base class tersebut.
Cara
membuat abstract class aalah dengan membuat virtual function, yang bermanfaat
agat virtual method table(VMT) yang menentukan type runtime object bukan
programmer dengan statements switchnya, karna pada program besar statement
switch akan sulit dimaintain.dengan menggunakan VMT akan menentukan tipe runtime
dari object agar ketik membuat object, object akan secara dinamis dapat
dipetakan secara strukturnya.
Polymorphism
dibagi menjadi dua, yaitu:
1.
Trivial polymorphism
Yaitu
dengan menggunakan early binding yang menggunakan bahasa c style, dan function
didefinisikan sebelum compiling, dan juga menggunakan link body function dan
function header / prototype.
Pengimplementasiannya
menggunakan function overloading, yaitu penggunaan kembali nama fungsi yang
sama tapi dengan 3 ciri yang membedakannya, yaitu :
- Jumlah argument
- Letak argument
- Tipe argument
2.
True polymorphism
Yaitu
dengan menggunakan dynamic binding, yang merupakan implementasi dengan
menggunakan C++ style, function definition juga dilakukan pada sat runtime,
compiler yang membuat VMT untuk class yang mengandung polymorphism, jika
derived class memiliki fungsi yang sama (overriding) dengan base class, VMT
akan menunjuk ke base class function.
Pembuatannya
dilakukan dengan menggunakan function overriding, yaitu fungsi yang namanya
sama tapi tidak berada pada kelas yang sama. Hal ini diimplementasikan dengan
virtual method yang dibagi menjadi 2, yaitu:
1. Pure virtual method, hanya
mendeklarasikan function prototypes saja(tidak memiliki body function), class
yang memiliki pure virtual method disebut abstrak class.
Instance
/ object tidak dapat dibuat dari suatu abstract class, karna masih ada function
yang tidak memiliki function body.
Cirri
dari pure virtual method adalah pada deklarasi ditulis fungsi() = 0.
Contoh:
class
myclass
{
Virtual
void tes() = 0;
};
2. Squasi virtual method, memiliki
fungsi yang minimal harus dikerjakan oleh suatu method atau ada body function.
Contoh
:
class
myclass
{
virtual
void tes()
{
Return
0;
}
};
Virtual
destructor dan virtual constructor:
Constructor
tidak dapat dibuat virtual
Sedangkan
destructor dapat dibuat virtual, dengan cara:
Base class
pointer menunjuk ke object turunan, jka didestroy dengan menggunakan delete,
behavior tidak terspesifikasi.
Perbaikan
sederhana, declare base class destructor virtual dengan demikian ketika delete
digunakan, destructor tentu dijalankan
Ketika
object class turunan di execute pertama kali, destructor class induk diexecute
kemudian.
INHERITANCE
Pengertian Inheritance
• Inheritance merupakan salah satu dari tiga konsep dasar OOP.
• Konsep inheritance ini mengadopsi dunia riil dimana suatu entitas/obyek / y dapat mempunyai entitas/obyek turunan.
• Dengan konsep inheritance, sebuah class dapat mempunyai class turunan.
• Suatu class yang mempunyai class turunan dinamakan parent class atau base class.
• Sedangkan class turunan itu sendiri seringkali disebut subclass atau child class.
• Inheritance merupakan salah satu dari tiga konsep dasar OOP.
• Konsep inheritance ini mengadopsi dunia riil dimana suatu entitas/obyek / y dapat mempunyai entitas/obyek turunan.
• Dengan konsep inheritance, sebuah class dapat mempunyai class turunan.
• Suatu class yang mempunyai class turunan dinamakan parent class atau base class.
• Sedangkan class turunan itu sendiri seringkali disebut subclass atau child class.
Deklarasi Inheritance
• Dengan menambahkan kata kunci extends setelah deklarasi nama class, kemudian diikuti dengan nama parent class‐nya.
• Kata kunci extends tersebut memberitahu kompiler Java bahwa kita ingin melakukan perluasan class.
• Contoh :
• Dengan menambahkan kata kunci extends setelah deklarasi nama class, kemudian diikuti dengan nama parent class‐nya.
• Kata kunci extends tersebut memberitahu kompiler Java bahwa kita ingin melakukan perluasan class.
• Contoh :
public class B extends A { }
• Semua class di dalam Java adalah merupakan subclass dari class super induk yang bernama Object.
• Misalnya saja terdapat sebuah class sederhana :
public class A {
…
}
• Pada saat dikompilasi, Kompiler Java akan membacanya sebagai subclass dari class Object.
public class A extends Object {
…
}
• Semua class di dalam Java adalah merupakan subclass dari class super induk yang bernama Object.
• Misalnya saja terdapat sebuah class sederhana :
public class A {
…
}
• Pada saat dikompilasi, Kompiler Java akan membacanya sebagai subclass dari class Object.
public class A extends Object {
…
}
Kapan kita menerapkan inheritance?
• Kita baru perlu menerapkan inheritance pada saat kita jumpai ada suatu class yang dapat diperluas dari class lain
• Kita baru perlu menerapkan inheritance pada saat kita jumpai ada suatu class yang dapat diperluas dari class lain
Contoh programnya..
PersegiPanjang.java
class PersegiPanjang
{
double panjang;
double lebar;
{
double panjang;
double lebar;
PersegiPanjang(double panjang, double lebar) {
this.panjang = panjang;
this.lebar = lebar;
}
PersegiPanjang()
{
throw new UnsupportedOperationException(“Not yet implemented”);
}
double hitungLuas() {
return (panjang * lebar);
}
double getPanjang() {
return panjang;
}
double getLebar() {
return lebar;
}
}
this.panjang = panjang;
this.lebar = lebar;
}
PersegiPanjang()
{
throw new UnsupportedOperationException(“Not yet implemented”);
}
double hitungLuas() {
return (panjang * lebar);
}
double getPanjang() {
return panjang;
}
double getLebar() {
return lebar;
}
}