Menuliskan kode program tidak hanya sekadar mengetikkan
perintah-perintah yang menginstruksikan aplikasi untuk mengerjakan
sesuatu, tetapi bisa jadi juga merupakan seni membangun struktur kode
program dengan kaidah tertentu. Konsep yang semakin banyak digunakan
adalah Object Oriented Programming atau Pemrograman Berorientasi Object.
1980-an. Penggunaannya semakin meluas dengan dikenalnya bahasa
pemrograman Java yang mengimplementasikan virtual machine yang
mengizinkan aplikasi berjalan pada platform yang berbeda tanpa
dilakukan perubahan kode program. Bahkan kemunculan platform .NET dan
bahasa pemrograman yang disertakan dalam Visual Studio (Visual Basic,
C#) oleh Microsoft seakan mengharuskan Anda untuk memahami paradigma
OOP agar dapat menggunakan kemampuan .NET secara optimal. Konsep OOP
juga telah didukung dan digunakan pada bahasa pemrograman scripting,
seperti PHP, Perl, Phyton, dan Ruby.
OOP vs Procedural Programming
Selain
menggunakan paradigma OOP, programer dapat menuliskan struktur kode
program yang baik dengan menggunakan Procedural Programming, di mana
programer membuat kode program dengan pendekatan procedural dan bekerja
dengan function/procedure di dalam aplikasinya. Tetapi, tidak ada
jawaban yang benar-benar tepat jika Anda diberi pertanyaan: apakah
sebaiknya menggunakan OOP atau Procedural Programming? Karena jawabannya
sangat relatif, terutama tergantung pada aplikasi yang ingin Anda buat.
Jika Anda mempertimbangkan pemeliharaan dan pengembangan aplikasi yang
eï¬sien di masa yang akan datang, mungkin Anda dapat memilih pendekatan
OOP. Tetapi, jika aplikasi Anda merupakan program sederhana yang dapat
dibuat dengan mudah dan cepat dengan function/procedure, gunakanlah
pendekatan Procedural Programming. Semua itu juga tergantung pada Anda
sebagai programer, untuk memilih pendekatan yang cocok dan lebih baik
bagi Anda dalam mengerjakan sebuah aplikasi.
Pengenalan OOP
Prinsip
utama OOP adalah memperlakukan masing-masing bagian dari sebuah
aplikasi sebagai object. Berbeda dengan Procedural Programming, di mana
sebuah aplikasi terdiri kumpulan function dan instruksi. Masing-masing
object pada OOP dapat menerima pesan, memproses data, dan mengirim pesan
pada object lainnya, serta dapat dilihat sebagai sebuah item yang
berdiri sendiri dengan tanggung jawab dan aturan tertentu. Pada sebuah
object, Anda tidak perlu mengetahui bagaimana object itu bekerja. Anda
hanya perlu mengetahui apa yang dilakukan object tersebut. Terdapat
banyak contoh untuk menjelaskan konsep OOP, hal yang umum diberikan
adalah contoh pada dunia nyata. Misalnya sebuah mobil, seekor
[censored], ataupun makhluk dan benda lain yang dapat mewakili sebuah
object. Tetapi bagi seorang programer, mungkin akan lebih cepat memahami
jika diberikan contoh yang langsung diambil dari aplikasi. Bayangkan
sebuah aplikasi katalog buku, dimana Anda memiliki kategori buku,
kategori ini merupakan suatu object. Kategori tersebut memiliki nama,
judul, nomor ID yang unik ataupun deskripsi yang lain. Deskripsi dari
object ini disebut dengan property. Pada object kategori, Anda dapat
menambahkan, menghapus, atau menampilkan kategori. Aksi-aksi pada object
ini (simpan, hapus, tampilkan) disebut dengan method. Anda dapat
menggunakan method dan property yang tersedia pada object tersebut pada
aplikasi Anda.
Class
Pada OOP, Anda akan sering bekerja dengan
class. Class dapat dianalogikan sebagai sebuah template, sebuah
struktur yang meliputi method dan property. Pada sebuah class, property
(yang mendeskripsikan object) merupakan variabel dan method (yang
merupakan aksi dari object) adalah function. Property dan method yang
dideï¬ nisikan pada class disebut dengan members.
Inheritance, Encapsulation, dan Polymorphism
Anda
dapat menambahkan fungsi dari sebuah class dengan konse inheritance.
Pada contoh katalog, sebuah kategori dapat memiliki satu atau lebih
produk, masing-masing produk memiliki kumpulan method dan property-nya
yang diturunkan (inherit) dari property dan method dari kategori. Jika
diambil contoh dari dunia nyata, Anda mungkin akan dihadapkan dengan
silsilah [censored] untuk menjelaskan konsep inheritance, yang
bagaimanapun juga, memang merupakan contoh yang sangat tepat. Pada OOP
juga dikenal Encapsulation, dimana object terbungkus (terenkapsulasi)
sebagai sebuah black box (kotak hitam) di mana Anda tidak perlu
mengetahui bagaimana proses bekerjanya sebuah object. Object dapat
berinteraksi satu sama lain dengan interface berupa members (kumpulan
property dan method) yang dapat diakses. Members dapat dideklarasikan
sebagai public, protected, dan private. Konsep Polymorphism digunakan
untuk menerangkan dua atau lebih class yang memiliki reaksi berbeda pada
pesan yang sama.
OOP pada Visual Basic 6.0
Pada Visual Basic
6.0 (dan Visual Basic versi sebelumnya), banyak diperdebatkan apakah
bahasa pemrograman Visual Basic termasuk sebagai bahasa pemrograman
berorientasi object ataukah tidak. Pada satu sisi, Visual Basic 6.0
mendukung object dan interface, dan juga mengimplementasikan class yang
dideï¬ nisikan pada class module dan disimpan pada ï¬ le dengan
ekstensi .cls. Bahkan implementasi drag and drop control yang pasti
dikenal oleh setiap programer Visual Basic merupakan contoh object yang
dapat di-reuse. Pada saat Anda meletakkan sebuah control, misalnya
sebuah command button pada form Visual Basic, Anda telah menciptakan
object baru yang memiliki members berupa property, method, dan events.
Visual Basic 6.0 juga mengenal keyword private, friend, public, dan
static yang digunakan untuk mengatur level akses dari
elemen yang
dideklarasikan. Tetapi, pada sisi lain Visual Basic 6.0 dianggap tidak
mengimplementasikan inheritance dan hanya memiliki ï¬ tur object
oriented yang terbatas. Sebuah class pada Visual Basic 6.0 tidak
mendukung untuk menurunkan property dan function-nya pada class yang
lain. Bagaimana dengan polymorphism? Visual Basic 6.0 mendukung
polymorphism melalui interface pada ActiveX. Pada Component Object
Model (COM) yang membentuk infrastruktur spesiï¬ kasi ActiveX, terdapat
multiple interface yang memungkinkan komponen software dikembangkan
tanpa mengubah kode program yang ada. Secara umum, OOP pada Visual
Basic 6.0 lebih diimplementasikan pada user interface dan kurang
memberikan dukungan bagi programer untuk mengimplementasikan OOP pada
kode program. Paradigma ini yang kemudian diubah pada generasi Visual
Basic .NET.
OOP pada Visual Basic .NET
Perdebatan apakah
Visual Basic merupakan bahasa pemrograman berorientasi object ataukah
tidak, berakhir pada saat dirilisnya Visual Studio .NET dan generasi
seterusnya. Pada .NET, Visual Basic murni merupakan bahasa pemrograman
berorientasi object. Kegunaan OOP yang utama adalah memaksimalkan
penggunaan kembali kode program (code reuse). Saat Anda melakukan drag
and drop, prosesnya dikerjakan oleh control designer sehingga Anda tidak
perlu mengetahui bagaimana object itu bekerja. Bahkan Anda bebas
menggunakan sebanyak mungkin control dan memodiï¬ kasi warna, bentuk,
judul, bahkan event handling dari object. Dasar dari tipe sistem .NET
adalah inheritance, yang tidak Anda temui dalam Visual Basic sebelumnya.
Contoh implementasi inheritance pada .NET adalah namespace, .NET
mengenal enam tipe kategori yang dapat dideï¬nisikan pada namespace:
1. Classes.
Merupakan tipe referensi yang dideï¬ nisikan dengan struktur Class .. End Class.
2. Arrays.
Merupakan
tipe referensi yang menyimpan object dari tipe yang lain. Class Array
didefinisikan pada namespace System pada .NET Framework Class Library.
3. Structures.
Dideï¬nisikan dengan struktur Structure ... End Structure.
4. Interfaces.
Dideï¬nisikan dengan struktur Interface .. End Interface.
5. Delegates.
Merupakan tipe referensi yang mengenkapsulasi method dan didefinisikan dengan statement Delegate.
6. Enumerations.
Merupakan kumpulan nilai yang berkaitan, dideï¬nisikan dengan struktur Enum ..End Enum.
Masing-masing dari enam kategori tersebut dapat mendeï¬ nisikan satu atau lebih members. Tipe-tipe members pada .NET adalah:
1. Fields.
Merupakan
konstanta atau variabel yang mengizinkan akses tipe data. Fields dapat
dideï¬ nisikan oleh class, structure, dan enumeration. Fields
digunakan sebagai data yang bersifat read-only, atau sering
dideï¬nisikan sebagai konstanta. Fields juga dapat berupa variabel
read-only yang nilainya dideï¬nisikan kali pertama pada class
constructor dan tidak dapat diubah lagi.
2. Properties.
Property
dapat dideï¬ nisikan untuk class, structure, dan interface. Umumnya
property dapat dibaca (readable) dan ditulis (writable), walaupun dapat
juga diperlakukan read-only atau write-only.
3. Methods.
Merupakan
function atau subrutin yang tersedia pada sebuah class, structure,
interface, atau delegate. Pada sebuah method terdapat parameter atau
argumen yang dapat dikirimkan by value atau by reference. Bagi programer
Visual Basic 6.0 sudah tentu tidak asing lagi dengan parameter by value
maupun by reference yang biasa digunakan dalam pembuatan
function/procedure. By value berarti perubahan nilai pada variabel
parameter yang dikirimkan hanya akan berlaku di dalam function,
sementara by reference berarti perubahan nilai pada variabel di dalam
function akan tetap berlaku pada saat function tersebut selesai
dieksekusi dan kembali pada pemanggil. Dengan menggunakan keyword ByVal
atau ByRef, Anda dapat menentukan bagaimana parameter dikirimkan.
4. Events.
Pada
Visual Basic versi sebelumnya, Anda tentu telah mengenal event yang
menimbulkan istilah event-driven programming. Event merupakan sebuah
function yang dipanggil untuk merespon kejadian/event tertentu, seperti
klik mouse, penekanan tombol keyboard, perubahan nilai ï¬eld pada
database, dan lain-lain. Umumnya event mengirimkan dua parameter, yaitu
object yang mengindikasikan sender/pengirim event, dan object yang
menyediakan informasi pada event tersebut.
Pada sebuah class, Anda dapat melakukan modiï¬kasi pada method dengan cara
overriding
maupun overloading. Overriding berarti Anda mengubah implementasi dari
sebuah method, sementara overloading berarti menambahkan method baru
dengan nama yang sama, tetapi dengan pengenal yang berbeda. Overloading
mengizinkan Anda memiliki dua atau lebih method dengan nama yang sama.
Dua method tersebut akan muncul pada fasilitas IntelliSense sehingga
pengguna
dapat memilih method yang diinginkan. Bagaimanapun, salah
memilih method dapat menyebabkan runtime-error, Anda dapat menghilangkan
method yang tidak diinginkan untuk tampil dengan menggunakan keyword
Shadows.
Generic Class
Inovasi baru generasi .NET adalah
ï¬tur yang dikenal dengan generics yang menyediakan sejumlah generic
class. Untuk memahami kegunaan dari generic class, bayangkan Anda ingin
membuat berbagai versi sebuah class di mana Anda ingin class tersebut
bekerja pada lebih dari satu tipe data, misalnya class yang dapat
bekerja pada tipe data integer, string, dan lain-lain. Dengan generic
class, Anda tidak perlu menentukan tipe data yang diinginkan hingga
Anda menciptakan object-nya di dalam program Anda. Anda dapat menemukan
generic class pada namespace System. Collections.Generic pada .NET
Framework Class Library. Selain menggunakan generic class yang tersedia
pada .NET Framework, Anda juga dapat menuliskan sendiri generic class
Anda. Dapat disimpulkan keuntungan dari generic class adalah:
1. Keamanan tipe data.
Generic
class memeriksa kevalidan tipe data pada saat compile-time dan bukan
pada saat run-time. Hal ini mengurangi kemungkinan konfl ik tipe data
pada saat run-time.
2. Kinerja yang lebih baik.
Karena tipe
data yang digunakan pada generic class dikenali pada saat compile-time,
maka tidak diperlukan proses type casting pada saat run-time yang
tentunya mempercepat waktu proses.
3. Penggunaan ulang (reuse).
Anda hanya perlu menuliskan class satu kali dan dapat menggunakannya dengan tipe data yang bervariasi.
Partial Class
Pada
.NET versi 2.0, dikembangkan partial class atau class yang terpisah,
yang memungkinkan Anda untuk memisahkan deï¬ nisi class pada beberapa
ï¬le. Pada saat compile-time, compiler akan mengelompokkan partial
class tersebut dan memperlakukannya sebagai satu kesatuan. Keuntungan
dari partial class adalah mengelompokkan pada batas yang jelas antara
business logic dan user interface. Dengan partial class, kode program
yang merupakan user interface tidak perlu ditampilkan pada programer,
yang pada umumnya tidak perlu mengaksesnya.Partial class juga
mempermudah proses debugging, di mana kode dipartisi ke dalam beberapa
ï¬le yang berbeda.
Beberapa Fitur Baru
Beberapa ï¬tur baru
adalah penambahan keyword baru, yaitu Shared dapat digunakan untuk
statement property, sub, dim, function, operator, dan event. Digunakan
untuk melakukan sharing members class, Anda dapat mengakses members yang
di-share dengan memanggil nama class.Dukungan terhadap multithreading
dan exception handling merupakan keunggulan penting pada .NET. Teknik
multithreading sering diperlukan dalam aplikasi yang memerlukan banyak
proses yang harus berjalan simultan. Dimana Anda dapat menciptakan,
menghapus, menghentikan sementara, atau mengatur prioritas sebuah
thread. Teknik exception handling diperlukan untuk menangani kesalahan
program, pada .NET dikenal structured exception handling dengan
menggunakan perintah
try...catch..ï¬nally. Di mana blok try berisi
baris kode, blok catch merupakan baris yang akan diproses jika terjadi
exception, blok ï¬nally bersifat optional dan digunakan jika Anda perlu
membersihkan resource yang digunakan.Fitur lain, yaitu My Namespace
merupakan contoh implementasi OOP yang berguna bagi programer untuk
mengakses class dan function pada .NET Framework.
Penutup
Penguasaan
OOP merupakan salah satu syarat bagi Anda yang ingin mendalami .NET
dengan baik, karena bahasa pemrograman .NET murni termasuk dalam
kategori bahasa pemrograman berorientasi object sebagaimana yang
sebelumnya kita kenal pada bahasa pemrograman C++.Kembali pada
perbandingan antara OOP dengan Procedural Programming, keduanya memiliki
struktur yang baik untuk membuat sebuah aplikasi, di mana OOP
menekankan pada penggunaan object sementara Procedural Programming
menekankan pada
penggunaan function/procedure. Anda dapat melihat
persamaannya, yaitu diperlukan kemampuan untuk menuliskan kode program
secara terstruktur dan rapi, yang mana sangat penting untuk pembuatan
aplikasi yang membutuhkan team work yang baik, ataupun untuk
pengembangan aplikasi di masa yang akan datang.