3. Polymorphism

Polimorphism

3

Polymorphism merupakan kemampuan suatu method untuk bekerja dengan lebih dari satu tipe argumen. Pada bahasa lain (khususnya C++), konsep ini sering disebut dengan method overloading. Pada dasarnya, Python tidak menangani hal ini secara khusus. Hal ini disebabkan karena Python merupakan suatu bahasa pemrograman yang bersifat dynamic typing yaitu tidak memerlukan deklarasi tipe.

Polymorphism adalah suatu object dapat memiliki berbagai bentuk, sebagai object dari class sendiri atau object dari superclassnya

  • Overloading : Penggunaan satu nama untuk beberapa method yang berbeda (beda parameter)
  • Overriding : terjadi ketika deklarasi method subclass dengan nama dan parameter yang sama dengan method dari superclassnya.


Polymorphism
berasal dari bahasa Yunani yang berarti banyak bentuk. Dalam PBO, konsep ini memungkinkan digunakannya suatu interface yang sama untuk memerintah objek agar melakukan aksi atau tindakan yang mungkin secara prinsip sama namun secara proses berbeda.

Keuntungan Pemograman dengan menggunakan Polymorphism adalah :

• Kita dapat menggunakan kelas-kelas yang kita buat (sebagai super kelas) dan membuat kelas kelas baru berdasar superkelas tersebut dengan karakteristik yang lebih khusus dari behaviour umum yang dimiliki superkelas.

• kita dapat membuat super kelas yang hanya mendefinisikan behaviuor namun tidak memberikan implementasidari metode-metode yang ada.Hal ini berguna jika kita ingin membuat semacam template kelas,kelas semacam ini disebut kelas abstrak karena behaviournya masih abstrak dan belum diimplementasikan.subkelas-subkelas dari kelas semacam ini yang disebut kelas konkret,mengimplementasikan behaviuor abstrak tersebut sesuai dengan kebutuhan masing-masing.

• Menghindari duplikasi object,kita dapat menciptakan class baru dari class yang sudah ada,sehingga tidak perlu menuliskan code dari nol ataupun mengulangnya, namun tetap bisa menambahkan attribute dan atau method unik dari class itu sendiri. Dalam konsep yang lebih umum sering kali polymorphism disebut dalam istilah satu interface banyak aksi.

Polymorphism dapat berarti banyak bentuk, maksudnya yaitu kita dapat menimpa (override), suatu method, yang berasal dari parent class (super class) dimana object tersebut diturunkan, sehingga memiliki kelakuan yang berbeda.
Pada dasarnya ada 2 tipe polymorphism, yaitu:

1. Static atau trivial merupakan, function overloading (penggunaan kembali nama fungi yang sama tapi dgn argumen yang berbeda) yang terbagi dalam 3 signature yaitu:

– Jenis Array
– Letak Array
– Type Array

Contoh function overloading :
void tambah (int a, int b);
void tambah(float d, float c);

2. Dynamic atau true Merupakan function overriding (sebuah fungsi dalam class turunan yang memiliki nama, return type argumen function yang sama dengan fungsi dalam class induk). Menggunakan virtual method.

Pure Virtual Method (tanpa function body)
contoh : virtual void jalan() = 0;

Squasi Virtual Method (ada function body)
contoh : virtual void info() {;}

Contoh Program Polymorphism :

 class mencetakdata {

// membuat method dengan nama sama tapi berbeda tipe data
 public void cobacetak(String Mencetak) {
 System.out.println(Mencetak);
 }
 public void cobacetak(int Mencetak) {
 System.out.println(Mencetak);
 }
 public void cobacetak(double Mencetak) {
 System.out.println(Mencetak);
 }
 public void cobacetak(char Mencetak) {
 System.out.println(Mencetak);
 }
 }
public class cobapolymor {

public static void main(String[] args) {
 mencetakdata data = new mencetakdata();

System.out.print("Cetak Data Tipe String : ");
 data.cobacetak("DKI Jakarta");

System.out.print("Cetak Data Tipe Integer : ");
 data.cobacetak(1992);

System.out.print("Cetak Data Tipe Double : ");
 data.cobacetak(16.5 / 2);

System.out.print("Cetak Data Tipe Char : ");
 data.cobacetak('N');
 }
 }

Dari hasil yang kita peroleh di atas, dapat kita simpulkan sebagai berikut:

1)    Perihal polymorphisme:
        a)    Variable a dan c adalah tipe Alfabet dan juga Huruf. NAMUN, compiler mengetahui a dan c sebagai tipe Alfabet. Oleh karena itu ketika static (class) method dari masing-masing object a dan c dipanggil, yang dieksekusi adalah static method milik Alfabet, bukan Huruf. Hal ini dikarenakan pada saat compiling, pemanggilan method cetak2() dari a dan b dirubah menjadi Alfabet.cetak2() pada kedua kasusnya. Hal ini tentunya bertentangan dengan hasil running pada saat kita letakkan break point di atas yang menyatakan bahwa variable a dan c adalah tipe Huruf.
        b)    Variable a dan c memiliki tipe baik Alfabet maupun Huruf. Namun perlu diperhatikan bahwa setiap Huruf adalah Alfabet, namun setiap Alfabet belum tentu Huruf. Sehingga, kita tidak bisa menuliskan seperti di bawah ini karena compiler mengetahuinya bahwa c adalah tipe Alfabet sedangkan d adalah Huruf, tanpa mengetahui tipe setelah runtime.
        c)    Alfabet a = new Huruf() akan selalu memanggil constructor Huruf(). Ini adalah ketentuan baku syntax new yang menyatakan bahwa new membutuhkan postfix argument berupa constructor. Sehingga, walaupun ada tipe Alfabet pada pernyataan ini, namun yang dijalankan adalah constructor yang menjadi argument dari new, dalam hal ini constructor milik class Huruf.
2)    Perihal overriding dan hiding methods:
        Seperti pada tulisan sebelumnya dinyatakan bahwa pada overriden methods, yang dipanggil selalu adalah milik subclass. Hal ini sesuai dengan syntax yang kita gunakan juga, yakni misalnya c.cetak(). Pada hidden methods, yang dipanggil tergantung siapa yang memanggil. Sebagai static method, pemanggilannya harus disertakan class yang dimaksud, yakni Alfabet.cetak2() atau Huruf.cetak2(). Oleh karenanya hasil yang diberikan adalah sesuai dengan definisi method dari class yang dipanggil.
Contoh Program Dengan Menggunakan C#
</div>
<div>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OOP2_Widy_Polymorphism
{
class Program
{

public static void Main(string[] args)

{

Barang brg = new Barang();

brg.DataBarang("Acer 4741G","310051");

brg.DataBarang("Acer 4741G","310051",4750000,20);

brg = new Ganti();

brg.DataBarang("Acer 4741G","310051",4750000,20);

Console.WriteLine();

Console.Write("Press any key to continue . . . ");

Console.ReadKey(true);

}

}

class Barang

{

public void DataBarang(string nm,string kode)

{

Console.WriteLine("\n\n");

Console.WriteLine("Nama Barang = {0}",nm);

Console.WriteLine("Kode Barang = {0}",kode);

}

public virtual void DataBarang(string nm,string kode,int hrg,int stok) // ---> overload method

{

Console.WriteLine("\n\n");

Console.WriteLine("Nama Barang = {0}",nm);

Console.WriteLine("Kode Barang = {0}",kode);

Console.WriteLine("Harga = {0}",hrg);

Console.WriteLine("Stok = {0}",stok);

}

}

class Ganti : Barang

{

public override void DataBarang(string nm, string kode, int hrg, int stok) // ---> override

{

Console.WriteLine("\n\n");

Console.WriteLine("Nama Barang = {0}",nm);

Console.WriteLine("Kode Barang = {0}",kode);

Console.WriteLine("Biaya = {0}",hrg*stok);

}

}

}</div>
<div>
Hasilnya Seperti Ini
Capture1
Kemudian yang Kedua Adalah contoh program dengan Menggunakan Bahasa Pemograman C++
</div>
<div>#include <cstdlib>

#include <iostream>

using namespace std;

class Barang

{

public : void DataBarang(string nm,string kode)

{

cout<<"\n\n"<<endl;

cout<<"Nama Barang = "<<nm<<endl;

cout<<"Kode Barang = "<<kode<<endl;

}

public: virtual void DataBarang(string nm,string kode,int hrg,int stok) // ---> overload method

{

cout<<"\n\n"<<endl;

cout<<"Nama Barang = "<<nm<<endl;

cout<<"Kode Barang = "<<kode<<endl;

cout<<"Harga = "<<hrg<<endl;

cout<<"Stok = "<<stok<<endl;

}

};

class Ganti : public Barang

{

public : void DataBarang(string nm, string kode, int hrg, int stok) // ---> override

{

cout<<"\n\n"<<endl;

cout<<"Nama Barang = "<<nm<<endl;

cout<<"Kode Barang = "<<kode<<endl;

cout<<"Biaya = "<<hrg*stok<<endl;

}

};

int main(int argc, char *argv[])

{

Barang brg;

Barang *o;

Ganti gnt;

brg.DataBarang("Acer 4741G","310051");

brg.DataBarang("Acer 4741G","310051",4750000,20);

o = &gnt;

o->DataBarang("Acer 4741G","310051",4750000,20);

cout<<endl;

system("PAUSE");

return EXIT_SUCCESS;

}
Hasilnya Debugnya seperti Ini
Capture2
terakhir yang Akan Kita Buat Adalah dengan Bahasa Pemograman Java
</div>
<div>/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package oop2_widy1_polymorphism;


import java.util.*;

public class Main

{

public static void main(String[] args)

{

Barang brg = new Barang();

brg.DataBarang("Acer 4741G","310051");

brg.DataBarang("Acer 4741G","310051",4750000,20);

brg = new Ganti();

brg.DataBarang("Acer 4741G","310051",4750000,20);

}

}

class Barang

{

public void DataBarang(String nm,String kode)

{

System.out.println("\n\n");

System.out.println("Nama Barang = "+nm);

System.out.println("Kode Barang = "+kode);

}

public void DataBarang(String nm,String kode,int hrg,int stok) // ---> overload method

{

System.out.println("\n\n");

System.out.println("Nama Barang = "+nm);

System.out.println("Kode Barang = "+kode);

System.out.println("Harga = "+hrg);

System.out.println("Stok = "+stok);

}

}

class Ganti extends Barang

{

@Override

public void DataBarang(String nm, String kode, int hrg, int stok) // ---> override

{

System.out.println("\n\n");

System.out.println("Nama Barang = "+nm);

System.out.println("Kode Barang = "+kode);

System.out.println("Biaya = "+hrg*stok);

}

}</div>
<div>
Hasilnya adalah
Capture3

32 responses to “3. Polymorphism

  1. Belajar dimana mbk broo?
    pinter amat

  2. mantep ni blog. sedot ilmu dlu. smbil liat2🙂

  3. Mateng bgt dh klo liat nie blog. keren abiszzzzz!!!!!

  4. Salut sama bLognya mbk… apik tenan

  5. wah.. bsa buat project nich mbk.. nunut copy y mbk

  6. Copas ya neng… siiiipppp wez, apiikkk

  7. siippppp

  8. neng, minta id line dong ;*

  9. Sini sama aa aja add line vinc_loveyou

  10. Sist Mau kulit putih berkilau seperti raisa hubungi kami di 08179187676

  11. Agung Shop Cosmetica

    Tersedia :
    Peninggi Badan Germany (L/P)
    Pengencang Bokong (Butock)
    Perapat Virgin (Germany)
    Pemutih Badan (Karbol)

    Hubungi : 081294881422

  12. sang widy e e e sang widy kenape ela elu kerak kerok

  13. sist mau ganteng kaya esgud sini ke kantor ku di suryalaya ya aku slalu ada aku main dota 2 sini main bareng add steam aku

  14. MAU BELI IPHONE6 PAKE UANG SENDIRI bisa banget nih!

    JOIN CUMA 75rb JADI RESELLER APLIKASI SELAMANYA!
    SETELAH JOIN GA BAKALAN DIMINTAIN UANG LAGI KOK HASIL
    KEUNTUNGAN JUGA BUAT KAMU BUAT SENDIRI.

    CP : Syahna 085526374859

    MAU KAMU MASIH
    – SEKOLAH KULIAH
    – PEGAWAI
    – IBU RUMAH TANGGA
    – PENGANGGURAN DLL

    SEMUA BISA KOK ASAL NIAT! KERJANYA CUMAN COPY PASTE DOANG KOK!

    BURUAN JOIN SEKARANG SUKSES SENANG BUAT KAMU DAPET IPHONE 6 HASIL SENDIRI

  15. LU MAU BELI I PHONE 6 NABUNG SENDIRI JANGAN MALES WOY BELAJAR TERUS RAJIN MUNDUR

  16. Butuh dana cepat?
    1jam langsung cair

    cukup berikan nama email dan password kamu
    dijamin tidak akan kecewa dengan kinerja kami

  17. WOY JANGAN RIBUT DI POST GW (maaf the canda)

  18. JANGAN RIBUT DISINI WOI !
    GUA SHARE ILMU DISINI !
    JANGAN DI BULLY😦

  19. berisik kalian mengacau web sayaa

  20. Anda Memposting terlalu cepat, Tolong Pelankan dan Hentikan

  21. eh kamu kenapa ribut disini !! sadar dikit saya share ilmu !!

  22. KENAPA SEKARANG JAM 4:12 AM PADAHAL KAN 11:13 !!!!

  23. Aku masih sekolah qq jangan bully aku qaqaaaaa

    qq liat diatas ada puisi cinta sama MATKUL

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s