Wednesday, 19 December 2012

VISUAL C# No.9: [Beginner] Belajar interface, Delegate dan Event dalam C#

Advertisement


Tutorial berikutnya, kita akan melanjutkan khusus untuk pemula/Beginner. Eits, biarpun tutorial ini untuk pemula, tapi jangan dianggap enteng. Karena implementasi dari tutorial ini hampir ditemukan di setiap kode program aplikasi.

Apa itu ‘interface’? Apa itu ‘Delegate’? ‘Event’ yang bagaimana maksudnya? mari kita bahas bersama.



INTERFACE

Sebuah ‘interface’ sangat mirip dengan ‘Class’ tetapi interface tidak memiliki ‘implementation’. Nah, sampai di sini pasti sudah bingung. Implementation itu apa sih?? Itu lho, kode atau fungsi yang terdapat diantara curly braces ( {} ). Jadi interface tidak memiliki curly braces {}. Pada interface, hanya terdapat deklarasi dari Event, Indexers, Method, dan Properties. Pasti bingung, interface ini diturunkan dari Class dan Struct sehingga yang ada di Interface hanya deklarasi saja.

Kalo kita renungkan, kata interface itu terdiri dari dua kata, yaitu inter dan face. Kalo dibahasa indonesiakan kan ‘antar muka’ haha.

Oke, mari kita lanjut. Interface hanya mengandung deklarasi, luh, kalo hanya deklarasi, berarti interface tidak ada gunanya dunk? Interface sangat bermanfaat dalam plug and play arsitektur. Jadi sesuai dengan yang saya bilang diatas (antarmuka). Nah, bila kita menggunakan interface, kita tidak memerlukan pemrograman extra dalam pembuatan sebuah aplikasi.

Mari kita lihat kode Interface berikut ini:


Perhatikan bahwa saya membuat sebuah interface dengan nama ‘IMyInterface’. Secara umum, biasanya penamaan untuk Interface menggunakan huruf ‘I’ besar dibelakang nama. Interface yang baru kita buat ini hanya memiliki single method yaitu ‘MethodToIMplement();’. Seperti yang sudah saya bilang di atas, tidak ada implementation pada interface (penggunaan kode dalam curly braces {} ), melainkan hanya menampilkan method dari class turunan yang akan diimplementasikan.

Mari kita lihat implementasi dari interface pada kode berikut ini:


Bila kita lihat seperti inheritance ya, , memang seperti itulah, nah, sebagai catatan, Class atau Struct yang menurunkan/mewariskan interface, harus meng-include semua interface member, jika tidak, maka aka ada compiler errors.

Coba perhatikan contoh kode di bawah ini yang meng-include atau mengimplementasikan semua member dari interfacenya:


ClassKita harus mengimplementasikan semua Interface member.
Gampang kan mempelajari interface??

DELEGATE

Delegate? Ah, ini apa sih?? Kok ada delegate segala ya? Padahal di pemrograman yang lain jarang ditemui sebuah kata ‘delegate’?

Mari kita simak bersama.

Setelah sebelumnya kita telah membahas tentang Interface, sekarang saatnya kita membahas type reference yang lain selain class dan interface, yaitu delegate.

Taukah anda apa itu reference? Kalo dalam bahasa Indonesia adalah referensi/acuan/sumber acuan. Nah, sumber acuan dalam C# diantaranya adalah Class, Interface, Delegate.

Delegate, merupakan sebuah element dari C# untuk membuat sebuah method/fungsi menjadi sebuah reference. Kalo dalam C dan C++ biasanya disebut function pointer. Tujuannya adalah untuk mendapatkan flexiblitas yang maksimal untuk implementasi fungsi-fungsi saat runtime. Nah, bingung mesti.

Mari kita lihat contoh di bawah ini, saya mengambil contoh ini dari csharp-station.com, perhatikan..


coba perhatikan baris kode ini public delegate int Comparer(object obj1, object obj2); ini adalah deklarasi dari delegate. Deklarasi untuk delegate sama seperti memanggil sebuah fungsi/method kan? Tapi perlu diingat, deklarasi delegate memiliki modifier ‘delegate’. Bila perlu diikuti oleh type data, dalam contoh type datanya adalah int. Baris kode diatas tadi tidak ada implementation nya. Luh, apa itu implementation?

Nah, inilah beda pemanggilan method dengan pendeklarasian delegate. Saat kita membuat method, pasti terdapat sebuah implementation, itu lho kode kode yang ada dalam kurung kurawal {}
Misalnya
function ehem(string aha){
//inilah implementation
}

Beda dengan delegate, reference ini tidak memiliki implementasi. Jadi ya seperti pada contoh, kita hanya mendeklarasikan delegate. Nah, lalu apa fungsi delegate?? Sebelum menjawab ini, mari kita berpikir sejenak tentang method/function.

Saat kita membuat sebuah method/function misalnya pada method ‘ehem’ di atas, di sana kita memberikan variable ‘aha’ dengan type data ‘string’, nah semua kode dalam implementation ({}) berisikan algoritma pemrograman kita. Method ini hanya akan memproses variable dengan type data ‘string’, bagaimana bila anda ingin membuat sebuah cara yang lebih flexible sehingga type data lain pun dapat diproses? Disinilah peran delegate, sangat flexible seperti pada contoh di atas.

Untuk menggunakan delegate, kita harus membuat sebuah ‘instance’, perhatikan penggalan baris kode dari kode di atas berikut ini:

Comparer cmp = new Comparer(Name.CompareFirstNames);

Nah, delegate ini nanti juga akan banyak sekali berhubungan dengan event yang akan kita bahas pada topik di bawah ini. (^^,)

EVENT

Bila anda cukup familiar dengan bahasa pemrograman lain selain C#, pasti akan sangat mudah memahami apa itu Event. C#, Windows dan GUI modern lain bekerja berdasarkan ‘event based model’. Misalnya pada Windows Form, terdapat looping event procedure yang selalu bekerja menunggu action dari pengguna. Bila pengguna melakukan action Click maka event ini akan memanggil method/fungsi yang sesuai atau yang sudah didefinisikan oleh user.

Di dalam C#, event dan delegate bekerja bersama-sama mari kita lihat kode program di bawah ini, saya ambil dari csharp-station.com,



Perhatikan bahwa event dan delegate bekerja bersama-sama untuk membuat sebuah program. Pada contoh di atas kita membuat sebuah file C# dengan nama ‘Eventdemo.cs’. Dan kita membuat sebuah class ‘Eventdemo’ yang merupakan pewarisan dari class ‘Form’, dan class ‘Form’ ini kita gunakan untuk membuat Windows Form. Saya yakin anda sudah paham apa itu Windows Form pada tutorial kita nomor 2 dan 3. Dengan pewarisan dari class ‘Form’ ini maka kita dapat menggunakan fungsi fungsi yang ada pada Windows Form seperti Title Bar, System Menu, Minimize/Maximize/Close, border, dan lain-lain.

Perhatikan kode public delegate void Startdelegate(); , terlebih dahulu kita membuat sebuah delegate, ingat delegate tidak ada implementation ({}).

Kemudian kita men-deklarasikan event, public event Startdelegate StartEvent; pada deklarasi event ini terdapat delegate dan event name.

Nah, pasti bingung dengan adanya tanda (+), seperti dalam Javascript ya, coba perhatikan kode berikut ini:
StartEvent += new Startdelegate(OnStartEvent);

Antara Event dan Delegate terdapat sebuah hubungan register dan unregister untuk mengaitkan (hooked) antara keduanya. Dalam contoh di atas, kita me-registerkan delegate dengan type Startdelegate ke dalam Event StartEvent. Ini dinamakan proses register. Nah, bila anda ingin meng-unregister ya tinggal ganti aja tanda + dengan tanda -.

Kemudian perhatikan kode berikutnya,

clickMe.Click += new EventHandler(OnClickMeClicked);

‘clickMe’ dan ‘Click’ jelas, untuk ‘EventHandler’ ini merupakan bawaan dari .NET, jadi kita tinggal membuat callback function , disini sebagai callback function adalah ‘OnClickMeClicked’ yang akan menampilan window kecil pemberitahuan.

Oh, iya perlu diingat bahwa Windows Form bekerja dimulai dengan pemanggilan fungsi Run() dalam static method seperti kode berikut ini:

static void Main(string[] args);



EmoticonEmoticon