Minggu, 29 September 2013

Polimorfisme

Ada dua aspek mendasar dari inheritance, yang pertama adalah reuseability. Reuseability adalah kemampuan menggunakan kembali coding yang telah dibuat secara efisien. Contoh ketika Anda membuat logika pemrograman dari class window yang merupakan base class-nya. Aspek kedua adalah polymorphism; yang berarti mempunyai banyak bentuk atau lebih tepatnya kemampuan untuk menggunakan berbagai tipe bentuk tanpa mengorbankan hal-hal detailnya. Istilah Polymorphism memiliki kesan sulit dan kompleks, tetapi sebenarnya sederhana. Analoginya adalah sebagai berikut, ketika sebuah perusahaan telepon atau provider telepon mengirimkan sinyal ke Anda (dering telepon), mereka tidak mengetahui telepon apa yang Anda gunakan, bisa model lama dengan dering kuno, bisa telepon seluler dengan dering musik mp3, TV Phone, PDA Phone, dan sebagainya. Provider hanya mengetahui bahwa masing-masing memiliki base type telepon dan method untuk berdering. Ketika provider mengirimkan sinyal, mereka hanya berharap bahwa telepon berdering tanpa peduli jenis telepon yang digunakan. Dengan demikian, provider telepon telah memperlakukan telepon Anda secara polymorphism. Dari contoh program inheritance di atas Anda dapat lihat bahwa, listbox is a window karena listbox turunan dari window, button is a window, dan kita berharap dapat memperlakukan keduanya sebagai window. Sama dengan kucing dan anjing yang diturunkan dari class mamalia, Anda dapat mengatakan bahwa kucing dan anjing sama-sama mamalia. Misalkan Anda mempunyai banyak control di collection untuk digambar ke window dan mengharapkan ketika memanggil method gambarWindow() pada control maka control tersebut akan tergambar sesuai dengan tipe object-nya (misalnya ListBox, RadioButton, Command, dan lain-lain) Anda dapat mengimplmentasikan polymorphism dengan dua cara, yaitu: 1. Membuat method dengan keyword Overridable pada base class (class induk). Overridable method adalah method yang akan di-override di class turunannya. 2. Membuat class turunan yang mempunyai method dengan keyword overrides yang mengganti isi dari method dengan keyword virtual yang ada pada base class-nya. Method Overriding adalah method dengan nama yang sama, tipe dan jumlah parameternya juga sama, namun implementasiya berbeda dan digunakan untuk meng-override method yang ada pada base class. Penggunaan prinsip polymorphism pada Visual Basic .NET dapat dilihat pada contoh coding program di bawah ini. Pertama, buat class dengan nama window yang akan digunakan sebagai base class. Public Class window Private _kiri As Integer Public Property kiri() As Integer Get Return _kiri End Get Set(ByVal value As Integer) _kiri = value End Set End Property Private _atas As Integer Public Property atas() As Integer Get Return _atas End Get Set(ByVal value As Integer) _atas = value End Set End Property Public Sub New(ByVal kiri As Integer, ByVal atas As Integer) Me.kiri = kiri Me.atas = atas End Sub Public Overridable Function GambarWindow() As String Return String.Format("Menggambar Control pada posisi ({0}, {1})", kiri, atas) End Function End Class Program 1 Base class polymorphism Visual Basic .NET Selanjutnya buat class turunannya, yaitu listBox dan button. Public Class listBox Inherits window Private _isi As String Public Property isi() As String Get Return _isi End Get Set(ByVal value As String) _isi = value End Set End Property Public Sub New(ByVal kiri As Integer, ByVal atas As Integer, ByVal isi As String) MyBase.New(kiri, atas) Me.isi = isi End Sub Public Overrides Function GambarWindow() As String Return String.Format("Menggambar ListBox pada posisi ({0}, {1}) dan isi content: {2}", kiri, atas, isi) End Function End Class Program 2 Derived class polymorphism Visual Basic .NET Public Class button Inherits window Private _warna As String Public Property Warna() As String Get Return _warna End Get Set(ByVal value As String) _warna = value End Set End Property Public Sub New(ByVal kiri As Integer, ByVal atas As Integer, ByVal warna As String) MyBase.New(kiri, atas) Me.Warna = warna End Sub Public Overrides Function GambarWindow() As String Return String.Format("Menggambar Button pada posisi ({0}, {1}) dan warnanya {2}", kiri, atas, Warna) End Function End Class Program 3 Derived class polymorphism Visual Basic .NET Pada coding di atas dapat dilihat bahwa method GambarWindow() pada class window di-override oleh kedua class turunannya, yaitu listBox dan button. Dengan demikian, kita dapat menerapkan polymorphism dengan cara sebagai berikut: Public Class Form1 Private Sub BtnPolymorphism_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim win As New window(12, 12) Dim lb As New listBox(24, 24, "Content ListBox") Dim tombol As New button(88, 88, "Merah") 'polymorphism MyListBox dan MyButton dianggap sebagai MyControl Dim winarray(2) As window winarray(0) = win winarray(1) = lb winarray(2) = tombol For Each ctr In winarray MessageBox.Show(ctr.GambarWindow()) Next End Sub End Class Program 4 Implementasi polymorphism Visual Basic .NET Jika Anda perhatikan, pada coding di atas dapat dilihat bahwa winarray merupakan variabel bertipe array dari window. Oleh karena, seharusnya yang dapat dimasukkan ke dalam array tersebut adalah object dari class window, namun dalam kasus di atas lb dan tombol juga dapat dimasukkan ke dalam winarray padahal dua object tersebut bukan dari class window. Hal tersebut dapat terjadi karena konsep polymorphism. Class listBox dan button adalah turunan dari class window maka dapat ditarik sebuah kesimpulan umum bahwa dua class tersebut juga merupakan window. Selanjutnya dengan menggunakan overriding method, method gambarWindow() yang ada di base class dapat di-override di class turunannya sehingga dapat mempunyai implementasi yang berbeda dengan base class.

Tidak ada komentar: