Polymorphism
Pendahuluan
• Dalam pengembangan berorientasi objek yang dimaksud polymorphism atau biasa disebut polimorfisme adalah kemampuan dapat memperoleh berapa bentuk.
• Polimorfisme merupakan fitur penting pada Bahasa pemrograman berorientasi objek
• Fitur ini adalah pembeda antara pemrograman berorientasi objek dengan bahasa pemrograman tradisional yg hanya sampai menerapkan tipe data abstrak.
Polimorfisme (Polymorphism)
• Polimorfisme adalah konsep dalam pemrograman berorientasi objek dimana objek dapat memiliki beberapa bentuk.
• Dua objek dikatakan sebagai polymorphic bila objek itu mempunyai antarmuka identic namun memiliki perilaku yang berbeda.
• Polimorfisme memungkinkan kita mengenali dan mengeksploitasi keserupaan-keserupaan diantara kelas-kelas yang berbeda
Perhatikan herarki kelas diagram berikut
Poligon -----> rectangle
------> square
-------->triagle
Dalam Bahasa Java
public static void main(String[] args)
{
Poligon p = new Poligon();
Square s = new Square();
Rectangle r = new Rectangle();
Triangle t = new Triangle();
p=s;
p=r;
p=t;
}
Keterangan: Instruksi ini menugaskan variabel yang dideklarasikan bertipe Polygon memuat objek Rectangle, kemudian Square, dan Triangle. “p=s” disebut polymorphic assignment, dan “p” adalah polymorphic object.
• Penugasan dimana tipe dari sumber (sisi kanan) berbeda dengan target (sisi kiri) berarti disebut penugasan polymorphic (polymorphic assignment).
• Objek p yang dapat muncul dari penugasan polymorphic disebut objek polymorphic (polymorphic object)
Mekanisme Polymorphism
• Polimorfisme merupakan fitur yang terjadi karena interaksi konsep pewarisan dan dynamic binding.
• Semua objek yang muncul adalah acuan (reference) ke objek, bukan objek itu sendiri. Sehingga penugasan seperti p=r, p=s artinya mengacukan ulang alamat r ke p, alamat s ke p.
Mekanisme Pengacuan
P -----sebelum penugasa---( Polygon
P -----sesudah penugasan---( Rectangle
Keterangan: Sekali diciptakan objek tidak akan berubah tipenya, hanya acuan ke objek itu yang di arahkan ke objek-objek dengan tipe berbeda.
Batasan terhadap Poymorphism
• Pewarisan menuntut apakah suatu pencantolan polymorphism ke suatu acuan diijinkan.
• Dari contoh sebelumnya pengacuan seperti p=r, p=s diijinkan karena semuanya memiliki tipe sumber yang merupakan turunan dari kelas target, artinya tipe sumber memenuhi conform thd kelas target.
• Tapi tidak untuk r=s karena s tidak memenuhi (conform) terhadap r.
Overriding dan Overloading
• Overriding, Terjadi apabila deklarasi method pada subkelas (subclass) sama (termasuk parameter) dengan method pada superkelas (superclass).
• Overloading, Yakni penggunaan satu nama untuk beberapa method yang berbeda (berbeda parameter).
Overriding
• Sebuah method dikatakan meng-override method di kelas induknya jika di dalam subclass didefinisikan method yang memiliki nama, tipe kembalian dan daftar argumen yang persis sama.
• Subclass dapat mengesampingkan method yang didefinisikan dalam superclass dengan menyediakan implementasi baru dari method
Tersebut
Contoh Overriding
• Secara definitif kelas Manager mempunyai method yang bernama getDetails(), karena kelas Manager mewarisinya dari kelas Employee, tetapi kelas Manager mengubah implementasi dari method tersebut,
• dalam hal ini kelas Manager dapat dikatakan meng-Overriding method getDetails() dari kelas Employee.
Aturan Overriding
• Beberapa yang harus dipenuhi dalam overriding method sbb :
– Daftar argumen pada method harus sama dengan method yang di override
– Tipe kembalian method harus sama dengan method yang di override
– Access control method tidak boleh lebih ketat (retrictive) daripada method yang mengoverride
– Method yang meng-override tidak dapat melempar exception diluar exception yang dideklarasikan pada method yang di override.
Overloading
• Objek memungkinkan memiliki method yang sama namun dengan kegunaan dan fungsi yang berbeda.
• Perbedaan disini termasuk passing argumentnya dan nilai pengembalianya.
• Overloading artinya penggunaan satu nama untuk beberapa method yang berbeda (berbeda parameter).
• Overloading tidak hanya dapat dikenakan pada method, ketika kita membuat definisi kelas dengan lebih dari satu konstruktor sebenarnya
kita telah menggunakan prinsip overloading
Contoh Overloading:
• Dengan overloading maka suatu objek dapat memiliki satu method dengan fungsionalitas yang berbeda.