Kelas
Bab ini akan membahas konsep-konsep dasar
dari kelas dan objek. Selanjutnya, akan didemonstrasikan bagaimana
mendefinisikan kelas dan tipe enumerasi, yang menunjukkan bagaimana keduanya
digunakan pada aplikasi.
1.1 Kelas dan Objek
KONSEP: Kelas
adalah elemen dasar dari pemrograman beroerientasi-objek, dimana di dalamnya
dimungkinkan bagi programer untuk membangun aplikasi yang kaya dan handal.
Pemrograman
berorientasi objek (PBO) adalah
sebuah cara dalam merancang dan mengkode aplikasi-aplikasi yang fokus pada
objek-objek pada aplikasi-aplikasi dunia nyata. Pada bab ini, akan disajikan
objek-objek dari sudut panjang programer. Konsep abstrak dari pemrograman
beroerientasi objek dan bagaimana relasinya dengan aplikasi dunia-nyata tidak
akan dibahas di sini.
Objek adalah sebuah kontainer atau pemuat
untuk anggota-anggota seperti properti, bidang, metode, dan event. Objek
umumnya merepresentasikan sejumlah entitas pada permasalahan yang ingin
diselesaikan. Jika Anda menciptakan sebuah aplikasi dealer mobil, misalnya,
entitas-entitas pada aplikasi itu kemungkinan memiliki nama seperti mobil,
konsumen, penjual, manajer, dan arsip. Jika Anda menciptakan sebuah aplikasi
antarmuka pengguna, entitas-entitas pada aplikasi itu kemungkinan memiliki nama
seperti tombol, kotak teks, kotak list, label, dan tombol radio.
Sebuah objek memiliki sejumlah atribut yang dipandang sebagai
karakteristik-karakteristik yang berlaku untuk semua objek bertipe sama.
Sebagai contoh, sebuah objek mobil dapat memiliki atribut seperti model, warna,
dan tahun pembuatan. Sebuah objek juga memiliki sejumlah watak, yang merepresentasikan aksi-aksi yang dapat dilakukan
terhadap objek tersebut. Objek mobil dapat memiliki watak-watak seperti nyalankan, berhenti, dan belok.
Sebuah objek juga dapat memivi event,
yang merepresentasikan respons oleh objek akibat aksi eksternal. Objek Button dalam .NET, misalnya, memicu
event Click ketika user mengklik
sebuah tombol.
Jika Anda telah berpengalaman dalam
memprogram Visual Basic, Anda tentu telah menggunakan sejumlah objek. Pada
dasarnya, tombol, kotak periksa, kotak list, dan kontrol-kontrol lain adalah
objek. Tetapi apa yang mungkin belum Anda ketahui adalah bahwa objek-objek
tersebut awalnya didefiniskan menggunakan kelas.
Kelas
Sebuah kelas mendefinisikan properti-properti
dan metode-metode yang dapat diterapkan terhadap objek-objek dari kelas
tersebut. Kelas didefinisikan menggunakan katakunci Class. Sebagai contoh, setiap form yang Anda tambahkan pada sebuah
aplikasi didefinisikan oleh sebuah kelas, seperti berikut:
Public
Class Form1
End Class
Setiap kontrol pada jendela Toolbox Visual Studio didefinisikan
oleh kelas. Kelas Button, misalnya,
memuat definisi untuk properti-properti, metode-metode, dan event-event yang
membedakannya dari kelas-kelas lain. Kontrol TextBox memuat properti-properti dengan nama Name, Text, Visible, dan ForeColor. Semua objek TextBox
memiliki properti-properti ini.
Framework .NET Microsoft memiliki pustaka
kelas yang bisa dipakai untuk menuliskan aplikasi-aplikasi untuk desktop,
aplikasi bergerak, dan Web. Kelas-kelas dikelompokkan ke dalam
namespace-namespace. Namespace adalah sebuah kontainer yang memuat kelas-kelas
dengan tipe sama. Sebagai contoh, namespace System.Collections memuat kelas-kelas yang berkaitan dengan koleksi
(array, list, dictionary, set). Namespace System.Windows.Forms
memuat kelas-kelas yang berkaitan dengan aplikasi Windows.
Menciptakan Objek
Jika sebuah kelas telah didefinisikan, Anda
dapat menciptakan satu atau lebih objek dengan tipe kelas tersebut. Kadangkala
objek dinamakan dengan instansi kelas.
Statemen berikut melakukan hal ini:
Dim
anakBaru As New Siswa
Operator New
memberitahu VB untuk menciptakan sebuah objek di dalam memori, dan diperlukan
untuk menciptakan sebuah objek (objek String
adalah pengecualian untuk aturan ini). Atau, Anda dapat memisahkan statemen
tersebut menjadi dua statemen. Sebagai contoh, Anda ingin mendeklarasikan
variabel pada level kelas di dalam sebuah form:
Private
anakBaru As Siswa
Variabel ini tidak mereferensi atau mengakses
objek apapun pada titik ini. Kemudian pada titik lain di dalam program, Anda
dapat menciptakan sebuah instansi (objek) kelas dan menugaskannya kepada
variabel:
anakBaru
= New Siswa
Operator = menugaskan objek baru kepada
variabel anakBaru. Anda dapat
mengatakan bahwa variabel anakBaru
sekarang memuat sebuah referensi yang menunjuk ke sebuah objek Siswa.
Kontrol-Kontrol Visual Studio
Visual Studio menciptakan objek-objek dari
kontrol-kontrol ketika Anda menggeretnya dari jendela ToolBox ke sebuah form. Sebagai contoh, kode berikut dituliskan
pada sebuah file designer dari form ketika sebuah tombol diciptakan dan
properti-properti tertentu ditetapkan pada jendela designer:
Me.btnOk
= New Button()
Me.btnOk.Location
= New System.Drawing.Point(43, 48)
Me.btnOk.Name
= “tombolOK”
Me.btnOk.Size
= New System.Drawing.Size(75, 23)
Me.btnOk.Text
= “OK”
Perhatikan bagaimana baris pertama
menggunakan operator New untuk
menciptakan sebuah objek dari kelas Button.
Kemudian sejumlah nilai properti ditugaskan kepada objek tersebut (Location, Name, Size, dan Text).
Katakunci Nothing
Katakunci Nothing mengindikasikan sebuah nilai null, yang disebabkan ketika
sebuah variabel tipe referensi belum diinisialisasi. Anda tidak dapat memanggil
metode atau mengakses properti dari sebuah objek yang bernilai Nothing. Statemen-statemen berikut,
misalnya, akan menyebabkan error runtime:
Dim
anakBaru As Siswa
anakBaru.TampilkanPelajaran()
Jika kode Anda perlu mengetahui apakah sebuah
variabel telah diinisialisasi atau tidak, Anda dapat membandingkannya dengan
katakunci Nothing:
If
anakBaru Is Nothing Then
'Anda harus menginisialisasi variabel ini
anakBaru = New Siswa
End If
Tipe Nilai dan Tipe Referensi
Ada dua kategori umum untuk tipe-tipe data
Visual Basic: tipe nilai dan tipe referensi. Sebuah variabel yang
dideklarasikan sebagai tipe nilai memuat datanya pada satu lokasi memori. Tipe
nilai mencakup semua tipe seperti Integer,
Decimal, Double, dan Boolean.
Tipe-tipe data ini menggunakan lokasi penyimpanan berukuran standar.
Sebuah variabel yang dideklarasikan sebagai
tipe referensi tidak secara langsung memuat datanya. Tetapi, ia menunjuk
(mereferensi) sebuah objek di suatu tempat di dalam memori. Kelas adalah tipe
referensi, seperti Array. Variabel
referensi adalah sebuah variabel yang dideklarasikan menggunakan tipe
referensi. Ketika sebuah objek diciptakan dengan memanggil operator New, .NET akan menyediakan ruang di
dalam memori untuk objek itu. Alamat dari objek ini disimpan di dalam sebuah
variabel referensi. Hal ini lebih memakan waktu daripada tipe nilai.
Tipe Nilai
Tipe nilai tidak memerlukan inisialisasi.
Setelah Anda mendeklarasikannya, Anda akan memiliki penyimpanan untuk variabel
itu. Variabel dengan tipe Integer, Double, Boolean, dan tipe-tipe standar lain adalah variabel tipe nilai.
Variabel tipe nilai mudah digunakan, menempati memori yang kecil, dan sederhana
untuk dipahami ketika menggunakan operator penugasan (=).
Ketika Anda menugaskan satu tipe nilai kepada
tipe nilai lain menggunakan operator penugasan (=), sebuah salinan data di
dalam variabel di sisi kanan operator penugasan diciptakan. Data disalin ke
variabel di sisi kiri operator. Pada contoh berikut, mHitung disalin ke temp:
Dim
mHitung As Integer = 25
Dim temp As
Integer = mHitung
Jika sebuah nilai baru ditugaskan kepada temp, mHitung tidak akan terpengaruh:
temp
= 40 'mHitung masih tetap 25
Namun, tidak semua variabel berperilaku
seperti ini. Ketika sebuah variabel objek ditugaskan kepada objek lain, hal ini
menjadi lebih kompleks.
Tipe Referensi
Ketika Anda menciptakan objek dari sebuah
kelas dan menugaskannya kepada suatu variabel, variabel tersebut bertipe
referensi. Sebagai contoh, kode berikut menciptakan sebuah objek Orang, menugaskan referensinya kepada
P, dan menugaskan sebuah nilai pada properti Nama-nya:
Dim
P As New Orang
P.Nama
= ''John Kristof''
Gambar 1.1 menunjukkan relasi antara P dan
data yang ditunjukknya. Data yang dimuat di dalam objek Orang ditempatkan di memori khusus yang dinamakan dengan managed heap. P memuat sebuah referensi
yang menunjuk ke data, bukan data itu sendiri. Jika nantinya objek Orang tidak lagi diperlukan, Anda dapat
menugaskan nilai Nothing kepada P:
P = Nothing
Gambar 1.1 Sebuah variabel tipe referensi yang menunjuk
sebuah objek di dalam memori
String
Objek string adalah tipe referensi, tetapi ia
merupakan kasus khusus karena pendeklarasiannya tidak memerlukan operator New. Berikuta adalah dua contoh dari
pendeklarasian objek String:
Dim
strNama As String
Dim strKota
As String = “Siantar”
Menugaskan Objek
Operator penugasan (=) menugaskan sebuah
ekspres di sisi kanannya kepada sebuah variabel di sisi kirinya. Ketika Anda
menugaskan integer, misalnya, nilai dari ekspresi di sisi kanan disalin ke
variabel di sisi kiri:
Dim
Y As Integer = 25
Dim
X As Integer
X = Y
Setelah kode di atas dieksekusi, X akan
bernilai 25. Tetapi bagaimana jika variabel X dan Y adalah objek (tipe
referensi)?
Dim
Y As New Akun
Dim
X As Akun
X
= Y
Pada contoh ini, isi dari Y tidak disalin ke
X. Tetapi, referensi yang dimuat di dalam Y disalin ke dalam X. Pada dasarnya,
variabel X dan Y sekarang mereferensi objek yang sama (memuat referensi yang
menunjuk ke objek yang sama).
Contoh Array
Kode berikut menciptakan sebuah array integer
dengan nama ujian, mengisi array,
dan menugaskan array itu kepada variabel dengan nama skor:
Dim
skor() As Integer
Dim
ujian() As Integer = {80, 95, 88, 76, 54}
skor
= ujian
Setelah kode ini dieksekusi, array yang sama
akan direferensi oleh kedua skor dan
ujian, seperti ditunjukkan pada
Gambar 1.2. Kode berikut dapat dipakai untuk menunjukkan bahwa kedua array
menggunakan memori yang sama. Dengan menugaskan nilai baru kepada skor(2), Anda secara otomatis
menugaskan nilai sama kepada ujian(2):
skor(2)
= 11111
MessageBox.Show(ujian(2).ToString())
'menampilkan “11111”
Gambar 1.2 Satu array direferensi oleh kedua variabel
Kotak pesan menunjukkan bahwa ujian(2) sama dengan 11111, sama
seperti skor(2). Tipe referensi dual
ini dapat menyebabkan kesalahan pemrograman.
Menggunakan Loop Untuk Menyalin Array
Jika Anda ingin menyalin elemen-elemen dari
satu array ke array lain, Anda bisa menggunakan loop untuk melakukannya.
Pertama, Anda menyediakan ruang di dalam array skor. Kemudian, Anda menyalin data:
Dim
skor(ujian.Length - 1) As Integer
For
i As Integer = 0 To ujian.Length - 1
skor(i) = ujian(i)
Next
Gambar 1.3 menunjukkan hasil penyalinan
array. Kode berikut menunjukkan bahwa kedua array tidak menggunakan memori yang
sama. Ketika sebuah nilai baru ditugaskan kepada skor(2), nilai dari ujian(2)
tidak berubah:
skor(2)
= 11111
MessageBox.Show(ujian(2).ToString())
' menampilkan “88”
Gambar 1.3 Hasil setelah penyalinan array
Menggunakan Object.Clone untuk
Menyalin Data
Tidak semua variabel referensi adalah array,
jadi Anda memerlukan cara umum untuk menyalin data dari satu variabel tipe
referensi ke variabel tipe referensi lain. Di sinilah metode Object.Clone bisa dimanfaatkan. Metode Clone menyalin data dari variabel referensi
satu ke yang lain. Dengan menggunakan array ujian dan array skor
dari contoh sebelumnya, statemen berikut menyalin isi dari array ujian ke array skor:
skor
= CType(ujian.Clone(), Integer())
Metode Clone
menghasilkan sebuah Object, jadi
nilai baliknya harus dikonversi menjadi sebuah array Integer. Penyalinan yang dihasilkan oleh metode Clone adalah penyalinan dangkal karena ia
tidak menangani kemungkinan bahwa elemen-elemen di dalam array bisa saja berupa
objek-objek yang memuat tipe-tipe referensi lain.
Berikut adalah contoh lain, menggunakan dua
objek Orang:
Dim
P As New Orang
P.Nama
= “John Kristof”
Dim
S As Orang
S =
CType(P.Clone(), Orang)
Membandingkan Objek
Semua objek .NET dapat dibandingkan
ekualitasnya dengan memanggil metode Equals
atau dengan menggunakan operator =. Ini adalah kasus untuk string:
Dim
A As String = “abcde”
Dim
B As String = “abcde”
If
A = B Then ... ‘hasil: True
If
A.Equals(B) Then ... ‘hasil: True
Jenis perbandingan lain adalah dengan
menggunakan metode CompareTo, yang
membandingkan nilai X dan nilai Y:
·
Jika X < Y, CompareTo
menghasilkan sebuah nilai negatif.
·
Jika X = Y, CompareTo
menghasilkan nol.
·
Jika X > Y, CompareTo
menghasilkan sebuah nilai positif tak-nol.
Metode CompareTo sangat berguna karena ia
secara otomatis dipanggil ketika Anda mengurutkan sebuah array. Anda dapat
memanggilnya, seperti pada contoh-contoh berikut.
Contoh-Contoh CompareTo
Pada contoh berikut, hasil adalah sebuah
nilai negatif:
Dim
A As String = “abcde”
Dim
B As String = “abd”
Dim hasil As
Integer = A.CompareTo(B)
Pada contoh berikut, hasilnya adalah sebuah
nilai positif:
Dim
A As String = “abf”
Dim
B As String = “abd”
Dim
hasil As Integer = A.CompareTo(B)
Pada contoh berikut, hasilnya adalah nilai
nol:
Dim
A As String = “abd”
Dim
B As String = “abd”
Dim hasil As
Integer = A.CompareTo(B)
Membandingkan Tipe Kelas Sendiri
Kelas Anda sendiri, secara default, tidak
akan menggunakan metode Equals dan CompareTo secara efektif. Sebagai
contoh, perbandingan dari dua objek Siswa berikut tidak ada gunanya.
Pemanggilan terhadap metode Equals
akan menghasilkan False, meskipun siswa-siswa memiliki nomor ID yang sama:
Dim
s1 As New Siswa(1001)
Dim
s2 As New Siswa(1001)
If
s1.Equals(s2) Then ...
Sama halnya, pemanggilan s1.CompareTo(s2) berikut tidak ada gunanya:
Dim
hasil As Integer = s1.CompareTo(s2)
Ini berarti bahwa Anda tidak dapat secara
efektif mengurutkan sebuah array yang memuat objek-objek Siswa, paling tidak belum. Pada Bab 3, Anda akan belajar bagaimana
mengimplementasikan metode Equals
dan CompareTo pada kelas Anda
sendiri.
1.2 Menciptakan Kelas Sendiri
Pada diskusi-diskusi ke depan, Anda akan
menggunakan kelas yang didefinisikan user (atau kelas sendiri) sebagai sebuah
kelas yang Anda rancang dan bangun mulai dari nol, berlawanan dengan
kelas-kelas yang telah ada pada Framework .Net. Anda menciptakan sebuah kelas
dalam Visual Basic dengan menuliskan definisi kelas. Anda menggunakan bentuk
umum berikut ketika menuliskan definisi kelas:
Public Class NamaKelas
‘anggota-anggota kelas
di sini
End
Class
NamaKelas adalah nama dari kelas. Katakunci Public disebut dengan penspesifikasi akses. Penspesifikasi akses Public
memberitahu VB bahwa kelas ini dapat diakses oleh semua bagian dari aplikasi
Anda. Dengan demikian, ini berarti bahwa dimungkinkan untuk menciptakan
objek-objek dari kelas ini di semua bagian dari kelas Anda. Ikuti langkah-langkah
berikut untuk menambahkan sebuah definisi kelas pada suatu projek:
1. Pilih PROJECT pada batang menu, kemudian
pilih Add Class. Kotak dialog Add New Item akan ditampilkan seperti pada Gambar 1.4. Pastikan bahwa Class dipilih pada panel Templates. Perhatikan bahwa pada
gambar, nama Class1.vb ditampilkan
pada kotak teks Name. Pada contoh ini, Class1.vb
adalah nama default untuk file yang memuat kode untuk kelas, dan Class1 adalah nama default untuk kelas.
Gambar 1.4 Menambahkan kelas pada sebuah projek
2. Ubah nama default
yang ditampilkan pada kotak teks Name
menjadi nama yang Anda ingin berikan. Sebagai contoh, jika Anda ingin menamai
kelas bari dengan Siswa, masukkan Siswa.vb pada kotak teks Name.
3. Klik tombol Add. Sebuah definisi kelas kosong yang
baru akan ditambahkan pada projek Anda. Definisi kelas yang kosong akan
ditampilkan pada jendela Code, dan
sebuah entri untuk file kelas baru akan ditampilkan pada jendela Solution Explorer.
Menambahkan Kelas Pada Jendela
Solution Explorer
Anda dapat pula menambahkan sebuah kelas pada
projek dari dalam jendela Solution Explorer. Untuk melakukannya, klik
kanan pada nama projek, pilih Add,
dan pilih Class. Ini ditampilkan
pada Gambar 1.5.
Variabel Level-Kelas
Variabel level-kelas adalah sebuah variabel yang dideklarasikan
di dalam sebuah kelas tetapi di luar dari semua metode di dalam kelas. Ini akan
membuat variabel itu dapat diakses oleh semua metode di dalam kelas. Variabel lokal, di sisi lain,
dideklarasikan di dalam sebuah metode dan hanya dapat diakses di dalam metode
tersebut. Anda mendeklarasikan sebuah variabel level-kelas menggunakan bentuk
umum berikut:
PenspesifikasiAkses
nama As
TipeData
PenspesifikasiAkses menentukan aksesibilitas dari variabel.
Bidang-bidang yang dideklarasikan dengan penspesifikasi akses Private hanya dapat diakses oleh
statemen-statemen di dalam metode-metode pada kelas yang sama.
Gambar 1.5 Menambahkan kelas pada suatu projek dari
dalam jendela Solution Explorer
Nama adalah nama dari variabel, dan TipeData adalah tipe data dari
variabel. Sebagai contoh, kode berikut mendeklarasikan sebuah kelas dengan nama
Siswa. Kelas ini memuat variabel mNomorID, mNamaBelakang, dan mRerataUjian:
Public
Class Siswa
Private mNomorID As String
Private mNamaBelakang As String
Private mRerataUjian As Double
End
Class
Definisi kelas itu sendiri tidak menciptakan
objek kelas. Ia hanya menetapkan cetak-biru dari organisasi kelas.
Penyembunyian Informasi
Pada pemrograman berorientasi objek, prinsip enkapsulasi mengatakan bahwa
Anda harus mengikat dan membungkus atribut-atribut dan watak-watak ke dalam
sebuah kelas. Anda bisa memandang kelas sebagai kontainer atau pemuat yang
mengenkapsulasi segala sesuatu di dalamnya untuk memudahkan transportasi dan
kegunaan. Prinsip penyembunyian
informasi, yang sangat erat kaitannya dengan enkapsulasi, mengatakan bahwa
anggota-anggota kelas tertentu sebaiknya hanya dapat diakses oleh metode-metode
di dalam kelas. Umumnya, ini berlaku pada variabel yang dilabel Private. Banyak insinyur perangkat
lunak memandang enkapsulasi dan penyembunyian informasi adalah hal yang sama.
Anggota-anggota yang tersembunyi
(dideklarasikan Private) hanya bisa
diakses oleh metode-metode di dalam kelas yang sama. Ini merupakan ide baik
karena membuat program menjadi lebih tangguh dan lebih mudah didebug.
Sebuah variabel level-kelas dapat
dideklarasikan Public, sehingga kode
yang ada dimana pun di dalam aplikasi dapat mengaksesnya secara langsung.
Tetapi, hal itu akan melanggar prinsip penyembunyian informasi. Alternatifnya,
Anda bisa menggunakan metode-metode publik dan properti-properti untuk
mendefinisikan antarmuka.
Metode
Metode adalah sebuah aksi yang
mengimplementasikan watak tertentu dari sebuah kelas. Anda dapat memanggil
sebuah metode dengan memprefiksnya dengan nama dari sebuah objek kelas. Sebagai
contoh, sebuah kelas dengan nama Akun
memiliki metode dengan nama BacaDariFile.
Pertama, Anda akan menciptakan sebuah objek dari kelas Akun:
Dim
simpanan As New Akun
Kemudian, Anda bisa memanggil metode BacaDariFile:
simpanan.BacaDariFile(“akun.dat”)
Berikut adalah bagaimana metode ini
dideklarasikan di dalam kelas Akun:
Public
Class Akun
.
.
Public Sub BacaDariFile(ByVal namaFile As
String)
'(kode yang membaca file di sini)
End Sub
End Class
Metode Shared
Metode spesial ini dapat dipanggil
menggunakan nama kelas bukan menggunakan objek kelas. Salah satu contohnya
adalah metode Array.Sort yang
mengurutkan array:
Dim
skor() As Integer = {62, 45, 89}
Array.Sort(skor) ‘sekarang: 45, 62, 89
Metode ToString
Semua kelas di dalam pustaka .NET mendukung
metode ToString, yang menghasilkan
representasi string dari data yang ada di dalam objek kelas tertentu. Metode
ini didefinisikan di dalam kelas Object,
dan semua kelas lain mewarisi metode-metode dasar dari kelas Object. Sidik metode untuk ToString adalah:
Public
Overridable Function ToString As String
Katakunci Overridable memberitahu bahwa Anda bisa mendefinisikan ulang atau
mengganti watak dari metode ToString
dengan menciptakan versi metode ini pada kelas sendiri. Berikut adalah
bagaimana Anda melakukannya di dalam kelas Siswa:
Public
Overrides Function ToString() As String
Return mNomorID & “, “ &
mNamaBelakang & “, Rerata Ujian = “ & mRerataUjian
End
Function
Perhatikan bahwa katakunci Overrides harus digunakan untuk
memberitahu VB bahwa Anda ingin mengganti definisi metode ToString yang ada di dalam kelas Object.
Properti
Dalam Visual Basic, properti adalah sebuah
metode spesial yang menggunakan nama anggota sama untuk mendapatkan/membaca dan
menetapkan sebuah nilai. Jika metode adalah implementasi dari watak kelas,
properti adalah implementasi dari atribut kelas. Objek Button, misalnya, memiliki sejumlah properti yang dicantumkan pada
jendela Properties. Anda dapat
menggunakannya dalam Visual Basic. Sekarang, Anda akan belajar bagaimana
menambahkan properti-properti pada kelas sendiri. Ini merupakan bentuk standar
untuk definisi properti:
Public
Property NamaProperti() As TipeData
Get
'(kode yang menghasilkan data)
End Get
Set(nilai As TipeData)
'(kode yang menugaskan nilai pada
sebuah variabel kelas)
End Set
End Property
NamaProperti adalah nama dari prosedur properti dan oleh
karena itu nama dari properti yang diimplementasikan oleh prosedur. Kurung yang
ditempatkan setelah NamaProperti
bersifat opsional. TipeData
mengindikasikan tipe dari data, seperti Integer
atau String. Perhatikan bahwa
prosedur ini memiliki dua bagian: bagian Get
dan bagian Set. Bagian Get memuat kode yang dieksekusi ketika
nilai properti dibaca, dan bagian Set memuat kode yang dieksekusi ketika sebuah
nilai disimpan di dalam properti.
Kode berikut mendefinisikan sebuah bidang
private dan properti publik di dalam kelas Siswa:
class
Siswa
Private mNamaBelakang As String
Public Property NamaBelakang As String
Get
Return mNamaBelakang
End Get
Set(nilai value As String)
mNamaBelakang = nilai
End Set
End
Property
End Class
Properti Auto-Implementasi Atau
Implementasi-Diri
Properti implementasi-diri adalah sebuah
properti yang didefinisikan dengan sebaris kode. Anda tidak perlu menciptakan
bidang anggota private untuk memuat data properti. Ada dua bentuk umumnya:
Public
Property NamaProperti As TipeData
Public
Property NamaProperti As TipeData = NilaiAwal
Anda bisa memberikan setiap nama properti
dengan kurung opsional:
Public
Property NamaProperti() As TipeData
Public
Property NamaProperti() As TipeData = NilaiAwal
NilaiAwal adalah sebuah nilai opsional yang dapat Anda
tugaskan kepada properti ketika ia diciptakan. Ketika Anda mendeklarasikan
sebuah properti implementasi-diri, Visual Studio secara otomatis menciptakan
bidang private tersembunyi dengan nama bidang
cadangan yang memuat nilai properti.
Berikut adalah contoh-contoh dari properti
implementasi-diri yang dapat dipakai di dalam kelas Siswa:
Public
Property nomorID As String
Public
Property NamaBelakang As String
Public
Property RerataUjian As Double = 0.0
Membaca dan Menetapkan Nilai Properti
Sebelum mengakses properti, Anda perlu
mendeklarasikan sebuah objek kelas yang memuat properti. Anda dapat menempatkan
statemen berikut di mana saja di dalam program di luar kelas Siswa:
Dim
anakBaru As New Siswa
Bagian Set
dari prosedur properti dieksekusi ketika sebuah nilai ditugaskan kepada
properti. Statemen berikut menetapkan nilai dari NamaBelakang:
anakBaru.NamaBelakang
= “Kristof”
Oleh karena itu, statemen berikut di dalam
prosedur properti akan dieksekusi:
mNamaBelakang
= nilai
Bagian Get
dari sebuah prosedur properti dieksekusi ketika program perlu memiliki salinan
dari NamaBelakang. Dimisalkan bahwa
di luar kelas Siswa, Anda menuliskan
statemen berikut, yang menyalin nilai dari NamaBelakang
ke sebuah TextBox:
teksNamaBelakang.Text
= orangBaru.NamaBelakang
Kemudian statemen berikut di dalam prosedur
properti akan dieksekusi:
Return mNamaBelakang
Memvalidasi Masukan di dalam Properti
Sebuah properti sangat berguna ketika Anda
perlu memvalidasi nilai-nilai yang ditugaskan kepadanya. Pada contoh berikut,
yang mengimplementasikan properti RerataUjian,
nilai yang ditugaskan kepada properti harus di dalam rentang 0.0 dan 100.0:
1
2
3
4
5
6
7
8
9
10
11
12
|
Public
Property RerataUjian As Double
Get
Return mRerataUjian
End
Get
Set(ByVal
nilai As Double)
If nilai >= 0.0 And nilai <= 100.0 Then
mRerataUjian = nilai
Else
MessageBox.Show(“Rerata ujian tak valid “, “Error”)
End If
End
Set
End Property
|
Baris 6 memeriksa rentang dari nilai masukan
yang ditugaskan kepada properti. Jika baris 6 bernilai True, maka baris 7 menugaskan nilai masukan kepada mRerataUjian. Jika nilai masukan
terlalu besar atau terlalu kecil, variabel mRerataUjian
tidak akan berubah, dan baris 9 akan menampilkan pesan error.
Penginisialisasi Objek
Visual Basic menyediakan perangkat sederhana
untuk mendeklarasikan sebuah objek dan menugaskan nilai-nilai kepada
properti-propertinya. Ini dinamakan dengan penginisialisasi objek, yang
memiliki dua format standar berikut:
Dim
NamaVar As New NamaKelas With {
.Properti = nilai [,.Properti
= nilai]...}
NamaVar
= New NamaKelas
With {
.Properti = nilai [,.Properti
= nilai]...}
NamaVar adalah nama dari variabel. Dim dapat diganti dengan Public, Private, atau pengkualifikasi lainnya. NamaKelas adalah nama dari kelas. Properti adalah nama dari properti.
Statemen berikut mendeklarasikan dan
menginisialsiasi sebuah objek Siswa
menggunakan nilai-nilai literal:
Dim
aSiswa As New Siswa With {
.nomorID = “1234”,
.NamaBelakang = “Kristof”,
.ReratUjian = 85.4 }
Berikut menugaskan sebuah objek baru kepada
sebuah variabel:
aSiswa
= New Siswa With {
.nomorID = “1234”,
.NamaBelakang = “Kristof”,
.ReratUjian = 85.4 }
Statemen berikut menciptakan dan
menginisialisasi sebuah objek Siswa
menggunakan nilai-nilai kontrol:
Dim
aSiswa As New Siswa With {
.nomorID = teksNomorID.Text,
.NamaBelakang = teksNamaBelakang.Text,
.RerataUjian = CDbl(teksRerata.Text) }
Menggunakan Fungsi CType
Fungsi CType
mengkonversi sebuah ekspresi menjadi sebuah tipe yang berbeda. Berikut adalah
bentuk umum dari CType:
CType(NilObjek,
NamaTipe) As NamaTipe
NilObjek adalah sebuah variabel atau ekspresi yang
akan dikonversi. NamaTipe adalah
nama dari tipe kemana NilObjek akan
dikonversi. Sebagai contoh, properti SelectedItem
dari kontrol ListBox menghasilkan
sebuah objek. Jika Anda ingin menugaskan objek ini kepada sebuah variabel Siswa, Anda perlu memanggil fungsi CType:
Dim
pilihSiswa As Siswa = CType(listSiswa.SelectedItem, Siswa)
Tidak semua ekspresi dapat dikonversi.
Dimisalkan bahwa Anda ingin menugaskan sebuah objek Siswa kepada sebuah variabel AkunBank.
Tidak ada konversi standar untuk ini, jadi VB akan melemparkan eksepsi InvalidCastException:
Dim
sis As New Siswa
Dim
bank As AkunBank = CType(sis, Siswa)
'error
Objek Siswa
dan objek AkunBank tidak memiliki
kesamaan, jadi Anda sebaiknya tidak menugaskannya satu sama lain.
Model Aplikasi Tiga-Tingkat
Hampir semua aplikasi bisnis saat ini mengikuti
perancangan dasar yang dinamakan dengan aplikasi model tiga-tingkat. Setiap
tingkat memuat kelas-kelas yang memanggil metode-metode yang ada di dalam
tingkat di bawahnya, seperti ditunjukkan pada Gambar 1.6.
Gambar 1.6 Mode aplikasi tiga-tingkat
Tingkat presentasi,
yang dikenal pula lapisan layanan user, memuat semua objek yang berinteraksi
dengan user. Visual Basic menggunakan sebuah kelas untuk mendefinisikan form,
berikut dengan sejumlah kontrolnya. Ketika Anda menuliskan kode di dalam form,
kode Anda tersebut berada di dalam tingkat antarmuka pengguna. Ini mencakup,
misalnya, semua prosedur event handler, variabel level-kelas, dan subprosedur
di dalam kelas form.
Tingkat menengah,
yang juga dikenal dengan tingkat logika bisnis atau lapisan layanan bisnis,
memuat kelas-kelas yang menyediakan informasi inti pada aplikasi, seperti
perhitungan-perhitungan dan pembuatan keputusan. Ini mencakup aturan-aturan
organisasi, yang memuat prinsip-prinsip operasional yang berlaku untuk sejumlah
aplikasi. Kelas-kelas yang dimuatnya tidak berinteraksi dengan user. Tingkat
ini memuat metode-metode dan properti-properti yang dipanggil oleh kelas-kelas
di dalam tingkat presentasi.
Tingkat akses
data, yang juga dikenal dengan lapisan layanan
data, memuat kelas-kelas yang berinteraksi secara langsung dengan sumber data.
Pada Tutorial 1.1, Anda akan melihat sebuah
aplikasi dua-tingkat yang menggunakan form untuk memanggil metode-metode dan
properti-properti di dalam sebuah kelas dengan nama Siswa. Aplikasi ini memuat
tingkat presentasi dan tingkat menengah.
Tutorial 1.1: Menciptakan Sebuah
Kelas Siswa
Pada Tutorial ini, Anda akan menciptakan
sebuah aplikasi yang menggunakan form agar user dalam memasukkan data ke dalam
kelas Siswa. Anda akan menambahkan
kontrol-kontrol pada sebuah form agar user dapat memasukkan ID siswa, nama
belakang, dan rerata skor. Ketika user mengklik sebuah tombol, kode Anda akan
menugaskan nilai-nilai masukan ke dalam properti-properti dari kelas Siswa. Terakhir, Anda akan menampilkan
kembali objek Siswa pada sebuah
label. Gambar 1.7 menunjukkan form setelah user mengklik tombol Simpan. Gambar 1.8 menunjukkan form
yang sama setelah user mengklik tombol Lihat.
Langkah-Langkah
Tutorial
Langkah 1: Ciptakanlah sebuah projek Windows Forms Application yang baru
dengan nama Contoh Kelas Siswa.
Langkah 2: Selanjutnya, tambahkan sebuah kelas dengan
nama Siswa pada projek. Klik kanan
pada nama projek, pilih Add, dan
pilih Class. Pada jendela dialog,
pilih Code, pilih Class, dan ketikkan nama kelas dengan Siswa.vb. Perhatikan gambar berikut:
Langkah 3: Buka file Siwa.vb dan ganti isinya dengan definisi kelas berikut:
Public
Class Siswa
Public Property NomorID As String
Public Property NamaBelakang As String
Private mRerataUjian As Double
Public Property RerataUjian As Double
Get
Return mRerataUjian
End Get
Set(ByVal nilai As Double)
If nilai >= 0.0 And nilai <=
100.0 Then
mRerataUjian = nilai
Else
MessageBox.Show("Rerata
ujian tak valid", "Error")
End If
End Set
End Property
Public Overrides Function ToString() As
String
Return nomorID & ", "
& NamaBelakang & ", Rerata Ujian = " & RerataUjian
End Function
End
Class
Kelas ini memuat properti auto-implementasi
dengan nama nomorID dan NamaBelakang. Karena properti RerataUjian memerlukan pemeriksaan
rentang, ia diimplementasikan dengan bagian Get dan Set.
Langkah 4: Buka form startup dengan mode design dan
tambahkan kontrol-kontrol seperti ditunjukkan pada Tabel 1.1. Selain itu,
tambahkan label-label seperti ditunjukkan pada Gambar 1.7.
Tabel 1.1 Contoh Kelas Siswa: Nama-nama kontrol
Tipe Kontrol
|
Nama Kontrol
|
Pengaturan Properti
|
TextBox
TextBox
TextBox
Label
Button
Button
|
teksNomorID
teksNamaBelakang
teksReratUjian
labelSiswa
tombolSimpan
tombolLihat
|
BorderStyle = Fixed3D
AutoSize = False
Text = Simpan
Text = Lihat
|
Selanjutnya, Anda akan menuliskan kode pada
form startup yang menyalin masukan-masukan user ke properti-properti dari kelas
Siswa.
Langkah 5: Deklarasikan sebuah variabel Siswa pada level kelas:
Private
objSiswa As New Siswa
Langkah 6: Ciptakanlah event handler Click untuk tombol Simpan. Anda dapat mengabaikan parameter-parameter dari prosedur tombolSimpan_Click karena sifatnya
opsional:
Private
Sub tombolSimpan_Click(…) Handles tombolSimpan.Click
objSiswa.NomorID = teksNomorID.Text
objSiswa.NamaBelakang = teksNamaBelakang.Text
objSiswa.RerataUjian =
CDbl(teksRerataUjian.Text)
labelSiswa.Text = "(Informasi siswa telah
disimpan)"
End
Sub
Kode ini menyalin nilai-nilai dari
kontrol-kontrol TextBox ke dalam
properti-properti dari objek objSiswa.
Label ditambahkan untuk memberitahu user.
Langkah 7: Ciptakanlah sebuah event handler Click untuk tombol Simpan yang menggunakan metode Siswa.ToString
untuk menampilkan objek Siswa:
Private
Sub tombolLihat_Click(…) Handles tombolLihat.Click
labelSiswa.Text = objSiswa.ToString()
End
Sub
Langkah 8: Simpan projek, dan jalankan aplikasi.
Konstruktor
Konstruktor adalah sebuah metode yang
dijalankan secara otomatis ketika sebuah objek kelas diciptakan. Dalam Visual
Basic, konstruktor selalu diberi nama New.
Konstruktor umumnya menginisialisasi variabel-variabel anggota kelas menjadi
nilai-nilai default, tetapi ia dapat pula dipakai untuk melakukan inisialisasi
kelas yang diperlukan. Jika sebuah kelas terkoneksi dengan jaringan, misalnya,
maka konstruktor dapat dipakai untuk membuka koneksi ke komputer secara jarak
jauh.
Konstruktor default adalah sebuah konstruktor
tanpa parameter. Berikut menciptakan sebuah konstruktor untuk kelas Siswa yang
menugaskan nilai default kepada anggota data mNomorID:
Public
Sub New()
mNomorID = “999999”
End
Sub
Dengan memiliki konstruktor ini, jika program
klien menciptakan sebuah objek Siswa,
Anda akan mengetahui apa nilai yang dimuat oleh mNomorID dari objek tersebut.
Konstruktor Terparameterisasi
Sebuah kelas dapat memuat satu atau lebih
konstruktor. Jadi, selain konstruktor default, Anda bisa menciptakan
konstruktor terparameterisasi (konstruktor dengan parameter-parameter). Berikut
adalah sebuah konstruktor terparameterisasi yang menugaskan nilai kepada tiap
variabel level-kelas Siswa:
Public
Sub New(ByVal pNomorID As String, ByVal pNamaBelakang As String,
ByVal pRerataUjian As Double)
mNomorID = pNomorID
mNamaBelakang = pNamaBelakang
mRerataUjian = pRerataUjian
End
Sub
Perhatikan konvensi penamaan di sini. Setiap
parameter memiliki prefiks “p” dan tiap variabel level-kelas diawali dengan
“m”.
Ketika menuliskan sebuah konstruktor, Anda
tidak bisa menggunakan nama sama untuk parameter-parameter yang Anda gunakan
untuk properti-properti kelas.
Public
Sub New(ByVal NomorID As String, ByVal NamaBelakang As String,
ByVal RerataUjian As Double)
NomorID = NomorID
NamaBelakang = NamaBelakang
RerataUjian = RerataUjian
End
Sub
Nama-nama parameter pada contoh ini
menyembunyikan nama-nama properti publik yang sesuai. Anda perlu memilih nama
untuk tiap parameter konstruktor yang berbeda dari nama dari tiap variabel dan
properti.
Bagaimana Visual Basic Menciptakan
Konstruktor
Jika kelas Anda tidak memuat konstruktor
apapun, Visual Basic akan menciptakan sebuah konstruktor default kosong yang
tidak terlihat bagi Anda. Ini dilakukan agar Anda bisa mendeklarasikan sebuah
objek seperti ini:
Dim
tahunKedua As New Siswa
Tetapi jika Anda menambahkan sebuah
konstruktor terparameterisasi pada kelas, konstruktor default tidak otomatis
ditambahkan untuk Anda. Dimisalkan bahwa berikut adalah satu-satuny konstruktor
yang ada di dalam kelas Siswa:
Public
Sub New(ByVal pNomorID As String, ByVal pNamaBelakang As String,
ByVal pRerataUjian As Double)
'(kode konstruktor di sini)
End
Sub
Maka, statemen berikut tidak akan dapat
dikompilasi:
Dim objSiswa
As New Siswa
Anda mungkin memiliki alasan untuk tidak
mengijinkan sebuah objek dikonstruksi kecuali jika ia ditugasi nilai-nilai yang
bermakna. Keputusan seperti ini didasari pada kebutuhan aplikasi. Jika Anda
memiliki sebuah konstruktor terparameterisasi, dan Anda juga berharap dapat
menciptakan objek tanpa perlu melewatkan parameter, Anda sebaiknya menambahkan
sebuah konstruktor default.
Konstruktor Dengan Parameter Opsional
Parameter opsional tidak mensyaratkan metode
pemanggil untuk melewatkan nilai argumen tertentu. Kadangkala Anda ingin
menciptakan objek kelas menggunakan banyak informasi yang bervariasi.
Anda bisa mendeklarasikan parameter-parameter
opsional di dalam setiap metode (termasuk konstruktor) menggunakan katakunci Optional, sepanjang Anda menugaskan
nilai default untuk setiap parameter. Pada contoh berikut, pNamaBelakang dan pRerataUjian
adalah parameter opsional:
Public
Sub New(ByVal pNomorID As String,
Optional ByVal pNamaBelakang As String =
'''',
Optional ByVal pRerataUjian As Double = 0.0)
NomorID = pNomorID
NamaBelakang = pNamaBelakang
RerataUjian = pRerataUjian
End
Sub
Sekarang, karena parameter kedua dan ketiga
adalah opsional, semua statemen berikut adalah cara valid dalam mendeklarasikan
objek-objek Siswa:
Dim
A As New Siswa(“200103“)
Dim
B As New Siswa(“200103“,“Kristof“)
Dim
C As New Siswa(“200103“,“Kristof “, 86.4)
Ada dua aturan penting yang harus diikuti.
Begitu sebuah parameter diberi label opsional, semua parameter setelahnya di
dalam daftar parameter dari metode harus juga dilabel opsional. Kedua, semua
parameter opsional harus ditugasi nilai-nilai default.
Tutorial 1.2: Menambahkan Sebuah Konstruktor
Terparameterisasi Pada Kelas Siswa
Pada tutorial
ini, Anda akan menambahkan sebuah konstruktor dengan tiga parameter pada kelas Siswa. Aplikasi ini akan meminta user
untuk memasukkan nilai-nilai, yang kemudian dilewatkan kepada konstruktor Siswa. Kemudian aplikasi akan
menampilkan nilai-nilai yang disimpan di dalam objek Siswa.
Langkah 1: Pada Windows
Explorer, buat salinan dari folder
yang memuat projek Contoh Kelas Siswa yang telah Anda ciptakan pada Tutorial 1.1. Buka projek baru.
Langkah 2: Ubah judul form menjadi Kelas Siswa dengan Konstruktor.
Langkah 3: Tambahkan konstruktor berikut pada kelas Siswa:
Public Sub New(ByVal pNomorID As String,
Optional
ByVal pNamaBelakang As String = "",
Optional
ByVal pRerataUjian As Double = 0.0)
NomorID
= pNomorID
NamaBelakang
= pNamaBelakang
RerataUjian
= pRerataUjian
End Sub
Perhatikan
bahwa parameter kedua dan parameter ketiga adalah parameter opsional.
Langkah 4: Edit kode sumber untuk form. Pertama, ubah deklarasi
dari objSiswa menjadi berikut:
Private objSiswa As Siswa
Statemen ini
mendeklarasikan sebuah variabel Siswa,
tetapi ia tidak menciptakan sebuah objek dari kelas Siswa.
Langkah 5: Modifikasi event handler tombolSimpan_Click sehingga ia memuat kode berikut:
Private Sub tombolSimpan_Click(…) Handles tombolSimpan.Click
Dim
rerataUjian As Double
If
Double.TryParse(teksRerataUjian.Text, rerataUjian) Then
objSiswa = New Siswa(teksNomorID.Text,
teksNamaBelakang.Text, rerataUjian)
labelSiswa.Text = "(Informasi siswa telah
disimpan)"
Else
labelSiswa.Text = "Rerata ujian tak valid"
End
If
End Sub
Langkah 6: Simpan aplikasi dan uji dua kali, seperti ditunjukkan
pada Gambar 1.10 dan Gambar 1.11.
Properti ReadOnly
Properti ReadOnly
dipakai oleh metode-metode yang ada di luar kelas untuk membaca nilai properti
terkini tetapi tidak untuk mengubahnya. Pengkualifikasi ReadOnly harus ditambahkan pada deklarasi properti, dan statemen Set di dalam properti diabaikan. Sebagai
contoh,
Public
ReadOnly Property Count As Integer
Get
Return mCount
End Get
End
Property
Sebuah properti ReadOnly dapat mencegah program klien dalam memodifikasi variabel
di balik properti. Selain itu, nilai yang dihasilkan oleh sebuah properti dapat
dihitung dari data internal. Contohnya adalah properti Count di dalam kelas Collection,
yang menghasilkan sebuah nilai yang mengindikasikan berapa banyak item di dalam
koleksi. Anda tidak dapat secara langsung mengubah nilai itu. Anda hanya perlu
menambah atau menghapus item dari koleksi sebelum nilai dari Count berubah. Berikut adalah
contohnya:
Dim
kol as New Collection
kol.Add(“John”)
kol.Add(“Kristof”)
MessageBox.Show(kol.Count)
'menampilkan “2”
kol.Count =
20 'Error!
Contoh
Ingat kembali properti RerataUjian di dalam kelas Siswa
yang telah Anda gunakan. Agar tidak membiarkan pemanggil menetapkan nilainya,
Anda dapat menghitung nilainya sebagai penjumlahan dari semua skor ujian yang
dibagi dengan banyaknya ujian. Untuk melakukannya, Anda menambahkan sebuah
variabel level-kelas yang baru:
Private
mNilaiUjian As New Collection
Anda kemudian menciptakan sebuah metode agar
pemanggil dapat menjumlahkan sejumlah skor ujian pada koleksi:
Public
Sub TambahNilaiUjian(ByVal nilai As Double)
mNilaiUjian.Add(nilai)
End
Sub
Sekarang Anda menulis-ulang properti RerataUjian, membuatnya menjadi ReadOnly. Loop For Each akan beriterasi
pada koleksi, menjumlahkan setiap nilai ujian pada jumUjian. Kemudian properti tersebut menghasilkan jumUjian yang dibagi dengan banyaknya
ujian (yang dimuat di dalam mNilaiUjian.Count:
Public
ReadOnly Property RerataUjian As Double
Get
Dim jumUjian As Double = 0.0
For Each nilai As Double In mNilaiUjian
jumUjian += nilai
Next
Return jumUjian / mNilaiUjian.Count
End Get
End
Property
Hasilnya merupakan implementasi yang lebih
berguna dari rerata ujian siswa yang telah dimiliki pada versi sebelumnya dari
kelas Siswa.
Properti Shared
Properti shared menjadi miliki dari kelas
dimana di dalamnya ia dideklarasikan, bukan milik dari objek-objek individual
dari kelas. Jadi, setiap objek kelas tidak memiliki salinan terpisah dari
properti ini. Hanya ada satu area penyimpanan yang dikhususkan untuk properti
ini, dan area penyimpanan itu dipakai secara bersama oleh semua objek kelas.
Sebagai contoh, Anda dapat mendeklarasikan sebuah properti shared dengan nama NamaSekolah di dalam kelas Siswa:
Public
Shared Property NamaSekolah As String
Dengan memiliki deklarasi ini, sebuah program
dapat menetapkan nama sekolah dengan statemen yang menggunakan nama kelas,
diikuti dengan nama properti:
Siswa.NamaSekolah
= “Institut Komputer Tarabunga”
Anda juga dapat menciptakan variabel
level-kelas shared. Sebagai contoh, variabel berikut dapat memuat sebuah
integer yang mengindikasikan kredit maksimum untuk tiap siswa:
Private
Shared smKreditMaks As Integer
1.3 Tipe Enumerasi
Tipe enumerasi adalah sebuah daftar nama
simbolis yang berkaitan dengan konstanta-konstanta integer. Tujuannya adalah
untuk membuat program lebih mudah dimengerti dengan memberikan nama-nama.
Dimisalkan bahwa sebuah aplikasi bekerja dengan empat jenis akun yang berbeda,
yang dinomori 0, 1, 2, dan 3. Adalah sulit, ketika melihat kode program, untuk
mengingat integer mana yang berkaitan dengan setiap jenis akun. Oleh karena
itu, Anda bisa mendefinisikan sebuah tipe enumerasi yang menyediakan informasi
ini:
Enum
TipeAkun
Pemeriksaan
Penyimpanan
Perdagangan
Pendapatan
End
Enum
Tipe enumerasi mendefinisikan dan membatasi himpunan
nilai yang dapat ditugaskan kepada variabel dengan tipe ini. Secara internal,
nilai-nilai bertipe TipeAkun
ditugasi nilai integer 0, 1, 2, dan 3.
Anda tidak boleh menggunakan katakunci New ketika mendeklarasikan sebuah objek
enumerasi:
Dim
akun As TipeAkun
Jika Anda mendeklarasikan sebuah objek TipeAkun, hanya nilai-nilai yang
didefinisikan yang bisa ditugaskan kepadanya:
akun
= TipeAkun.Pemeriksaan
akun
= TipeAkun.Perdagangan
Pada kasus-kasus spesial, Anda dapat
menugaskan sebuah integer kepada sebuah variabel bertipe TipeAkun, tetapi Anda sebaiknya hanya melakukannya ketika tidak ada
opsi lain. Sebagai contoh, dimisalkan bahwa Anda akan membaca sebuah integer
dari TextBox, dan integer tersebut
dimaksudkan untuk mengindikasikan tipe akun. Fungsi CType perlu digunakan untuk mengkonversi integer tersebut menjadi TipeAkun:
Dim
akun As TipeAkun
Dim
N As Integer = CInt(teksTipeAkun.Text)
akun
= CType(N, TipeAkun)
Tidak ada konversi yang diperlukan untuk
menugaskan tipe enumerasi kepada sebuah integer:
Dim N As
Integer = akun
Menggunakan Ekspresi Boolean
Tipe enumerasi secara khusus berguna ketika
dipakai pada ekspresi Boolean yang melibatkan perbandingan. Sebagai contoh,
dimisalkan bahwa Anda ingin melakukan aksi tertentu jika sebuah akun adalah
pendapatan:
If
akun = TipeAkun.Pendapatan Then
pajak = True
End
If
Statemen semacam itu lebih mudah dipahami
daripada statemen seperti ini:
If
kodeAkun = 3 Then
pajak = True
End
If
Sama halnya, statemen Select Case dapat
menjelajah daftar nilai enumerasi dan mengambil aksi terpisah untuk tiap nilai:
Select
Case akun
Case TipeAkun.Pendapatan
labelHasil.Text = “Pajak pendapatan
yang akan disetor”
Case TipeAkun.Pemeriksaan
labelHasil.Text = “Akun untuk membayar
tagihan”
'dan lainnya
End
Select
Pada Tutorial 1.3, Anda akan memeriksa sebuah
aplikasi yang menggunakan tipe enumerasi.
Tutorial 1.3: Tipe Akun Enumerasi
Pada tutorial ini, Anda akan memeriksa dan
menguji sebuah aplikasi sehingga user dapat memilih jenis akun dari sebuah
kotak list. Setiap kali pilihan user berubah, indeks terseleksi dari kotak list
akan dikonversi menjadi sebuah objek TipeAkun.
Kemudian, dengan menggunakan statemen Select
Case, sebuah metode menyeleksi
deskripsi sesuai untuk ditampilkan. Keluaran program ditampilkan pada Gambar
1.12.
Langkah 1: Buka projek Contoh Enum TipeAkun. Pada jendela Code dari form startup, perhatikan TipeAkun yang dideklarasikan di akhir
file:
Enum
TipeAkun
Pemeriksaan
Penyimpanan
Perdagangan
Pendapatan
End
Enum
Langkah 2: Periksa kode lain, yang ditunjukkan di
sini:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
Public Class Form1
Private namaTipe() As String
= {"Pemeriksaan", "Penyimpanan",
"Perdagangan",
"Pendapatan"}
Private Sub Form1_Load(…)
Handles MyBase.Load
listTipe.DataSource =
namaTipe
End Sub
Private Sub
TampilDeskripsi(ByVal akun As TipeAkun)
Select Case akun
Case
TipeAkun.Pendapatan
labelHasil.Text
= "Pembayaran pajak penghasilan"
Case
TipeAkun.Pemeriksaan
labelHasil.Text
= "Untuk membayar tagihan"
Case
TipeAkun.Penyimpanan
labelHasil.Text
= "Menyimpan uang untuk kebutuhan konsumtif"
Case
TipeAkun.Perdagangan
labelHasil.Text
= "Untuk bermain pasar saham"
End Select
End Sub
Private Sub
listTipe_SelectedIndexChanged(…)
Handles
listTipe.SelectedIndexChanged
Try
Dim indeks As
Integer = listTipe.SelectedIndex
TampilDeskripsi(CType(indeks, TipeAkun))
Catch ex As Exception
labelHasil.Text =
ex.Message
End Try
End Sub
Enum TipeAkun
Pemeriksaan
Penyimpanan
Perdagangan
Pendapatan
End Enum
End Class
|
Baris 2 mendeklarasikan sebuah array string
yang memuat nama-nama anggota dari TipeAkun.
Baris 6 menugaskan array ini kepada kotak list ketika form pertama kali dimuat.
Ketika user membuat pilihan, event handler SelectedIndexChanged
(baris 22-30) dieksekusi. Indeks dari item terseleksi dikonversi menjadi sebuah
objek TipeAkun pada baris 26 dan
dilewatkan kepada metode TampilDeskripsi
(baris 9-20). Statemen Select Case menunjukkan tiap nilai enumerasi
yang mudah dipahami.
Langkah 3: Jalankan dan uji aplikasi dengan memilih
tipe akun yang berbeda pada kotak list.
1.4 Fokus Pada Perancangan Program dan
Penyelesaian Permasalahan: Aplikasi Teller Bank
Pada bagian ini, Anda akan menciptakan sebuah
aplikasi dua-tingkat yang mensimulasikan sebuah teller bank elektronis sehingga
user dapat melihat akun, menyimpan uang, menarik uang, dan melihat saldo
terkini.
Perancangan ini mempunyai sejumlah
persyaratan:
1. Informasi akun (ID,
nama akun, dan saldo akun) akan disimpan di dalam sebuah file data.
2. User dapat memasukkan
nomor akun dan melakukan pencarian akun. Jika akun ditemukan di dalam file
data, aplikasi akan membaca nama dari pemilik akun dan saldo akun.
3. User dapat memasukkan
sejumlah uang untuk disimpan. Aplikasi akan menunjukkan saldo akun yang telah
diperbarui.
4. User dapat menarik
uang, dan aplikasi akan menampilkan saldo akun yang telah diperbarui.
Pada versi aplikasi ini, saldo akun
terperbarui tidak akan dituliskan ke dalam file.
Path File
Kode berikut menunjukkan bagaimana memanggil
metode File.OpenText untuk membuka
file untuk pembacaan:
Dim
infile As StreamReader = OpenText(“c:\temp\akun.dat”)
Sebuah contoh path file bisa berupa nama file
saja (seperti akun.dat); atau bisa pula berupa path penuh, seperti
c:\temp\akun.dat; atau bisa memuat path relatif seperti ..\akun.dat. Notasi ..\
mengindikasikan bahwa Anda perlu mundur satu level direktori untuk menemukan
file data. Program VB terkompilasi disimpan di dalam folder bin\Debug dari
sebuah projek. Oleh karena itu, jika Anda menempatkan file akun.dat pada
direktori akar dari projek, path yang Anda lewatkan pada metode OpenText harus mundur dua level
direktori, seperti berikut:
Private
ReadOnly PATHFILE As String = ''..\..\akun.dat''
Membaca Bidang-Bidang Dari Sebuah
File Teks
Kelas StreamReader
memiliki sebuah metode dengan nama ReadLine,
yang membaca satu baris masukan ke dalam sebuah variabel String:
Dim
infile As StreamReader = OpenText(PATHFILE)
Dim
satuBaris As String = infile.ReadLine()
File data pada aplikasi Teller Bank memuat
tiga item informasi pada tiap barisnya, yang dipisahkan dengan koma. Berikut
adalah contoh dari salah satu baris:
11111,John
Kristof,825.50
Banyak file data menggunakan format ini.
Umumnya, program perlu membagi string semacam itu menjadi bidang-bidang
terpisah, masing-masing menjadi string sendiri. Untungnya, metode String.Split dapat dipakai untuk
membagi string semacam ini menjadi sebuah array string, menggunakan karakter
pembatas yang Anda pilih.
Diasumsikan bahwa string yang dihasilkan dari
pemanggilan ReadLine disimpan di
dalam sebuah string dengan nama satuBaris.
Berikut adalah bagaimana Anda dapat memanggil metode Split, melewatkan karakter pembatas kepadanya:
Dim
infile As StreamReader = OpenText(mPathFile)
Dim
satuBaris As String = infile.ReadLine()
Dim
bidang() As String = satuBaris.Split(”,”c)
Sebagai hasinya, array bidang akan memuat ID
akun (1111) pada posisi pertama, nama akun (John Kristof) pada posisi kedua,
dan saldo akun (825.50) pada posisi ketiga.
Notasi “,”c menciptakan sebuah konstanta
karakter tunggal yang memuat koma. Pada dasarnya, sembarang konstanta karakter
dapat dikode dengan cara ini, seperti huruf A: “A”c.
Mendeteks Akhir File
Ketika membaca dari InputStream, cara termudah untuk memeriksa akhir dari sebuah file
adalah dengan memeriksa properti EndOfStream.
Properti ini bernilai True jika
akhir file telah diraih. Hal ini umumnya dikode sebagai kondisi dari sebuah
loop While:
Dim
infile As StreamReader = OpenText(mPathFile)
While
Not infile.EndOfStream
infile.ReadLine()
'dan lainnya
End While
Kelas Akun
Aplikasi Teller Bank akan memuat sebuah kelas
dengan nama Akun yang memuat ID
akun, nama pemilik akun, dan saldo akun. Sebuah properti dengan nama ErrorTerakhir akan memuat deskripsi
dari error terakhir yang terjadi ketika memanggil metode-metode di dalam kelas.
Selain itu, kelas ini memiliki metode-metode berikut:
- New(idAkun): konstruktor yang menerima ID akun dan menciptakan sebuah objek Akun baru.
- BacaData(): membuka file data dan melakukan pencarian ID akun. Jika ID ditemukan, metode ini akan membaca nama akun dan saldonya dari file dan menghasilkan True. Jika ID tidak ditemukan, metode ini akan menugaskan sebuah pesan kepada properti ErrorTerakhir dan menghasilkan False.
- Tabung(jumlah): menabung sejumlah uang di dalam akun.
- Tarik(jumlah) As Boolean: mencoba menarik sejumlah uang dari akun. Jika saldo sedikitnya sebesar jumlah uang yang ditarik, maka metode ini akan mengurangkan jumlah uang itu dari saldo dan menghasilkan True. Jika saldo lebih kecil dari uang yang ditarik, maka metode ini akan menugaskan pesan error kepada properti ErrorTerakhir dan menghasilkan False.
Kelas Form1
Pada form startup dari aplikasi, Anda akan
menciptakan sejumlah event handler berikut:
- tombolCari_Click: membuka file data akun dan melakukan pencarian rekaman yang memuat nomor akun yang sesuai. Jika kecocokan ditemukan, metode ini akan menyalin nama akun dan saldonya ke kontrol-kontrol Label pada form.
- tombolTabung_Click: membaca jumlah uang yang akan ditabung dari sebuah kontrol TextBox dan melewatkannya kepada metode Akun.Tabung. Event handler ini menampilkan saldo yang telah diperbarui pada sebuah Label.
- tombolTarik_Click: membaca jumlah uang yang ditarik dari sebuah kontrol TextBox dan melewatkannya kepada metode Akun.Tarik. Jika metode ini menghasilkan True, maka ia akan menampilkan saldo akun yang telah diperbarui pada sebuah Label. Jika ia menghasilkan False, pesan error akan ditampilkan pada sebuah Label.
- tombolTutup_Click: menutup form.
Perancangan Antarmuka User
User akan berinteraksi dengan sebuah jendela
yang memuat beberapa kotak teks, label, dan tombol. Anda akan mengendalikan
aksi-aksi dari user dengan menonaktifkan tombol-tombol sampai informasi akun
ditemukan. Gambar 1.13 menampilkan jendela startup dari aplikasi, dimana di
dalamnya user dapat memasukkan sebuah nomor akun dan mengklik tombol Cari. Tombol Tabung dan Tarik
dinonatifkan. Gambar 1.14 menampilkan jendela yang sama setelah user memasukkan
sebuah nomor akun dan mengklik tombol Cari.
Karena akun ditemukan pada file, nama akan dan saldonya akan ditampilkan, dan
tombol Tabung dan Tarik akan diaktifkan.
Gambar 1.15 menampilkan hasil ketika user
melakukan pencarian sebuah akun yang tidak ditemukan di dalam file. Semua
informasi akun yang ada dihapus dari form, dan tombol Tabung dan Tarik
dinonaktifkan. Pada Gambar 1.16, user menabung sejumlah uang ke dalam akun
dengan memasukkan sebuah nilai ke dalam kotak teks dan mengklik tombol Tabung. Perhatikan bahwa saldo akun
telah berubah.
Pada Gambar 1.17, user menarik sejumlah uang
dari akun dengan memasukkan sebuah nilai ke dalam kotak teks dan mengklik
tombol Tarik. Perhatikan bahwa saldo
akun telah berubah. Tabel 1.2 mencantumkan nama dari tiap kontrol pada form
startup.
Tabel 1.2 Nama dari tiap kontrol pada aplikasi Teller
Bank
Tipe Kontrol
|
Nama Kontrol
|
Nilai Properti
|
Form
PictureBox
GroupBox
TextBox
TextBox
Label
Label
Button
Button
Button
Button
|
Form1
PictureBox1
GroupBox1
teksNomorAkun
teksJumlah
labelNamaAkun
labelSaldo
tomboCari
tombolTabung
tombolTarik
tombolTutup
|
Text = Aplikasi Teller Bank
Image = logo.png
Text = Pilih aksi:
BorderStyle = Fixed3D, AutoSize = False
BorderStyle = Fixed3D, AutoSize = False
Text = Cari
Text = Tabung
Text = Tarik
Text = Tutup
|
Tutorial 1.4: Membangun Aplikasi Teller Bank
Pada tutorial
ini, Anda akan membangun aplikasi Telle Bank.
Langkah 1: Buka projek dengan nama Aplikasi Bank Teller.
Langkah 2: Tambahkan sebuah kelas dengan nama Akun pada projek.
Langkah 3: Tambahkan statemen-statemen Imports pada file Akun.vb,
tepat di atas deklarasi kelas.
Langkah 4: Sisipkan variabel berikut ke dalam kelas Akun yang akan memuat saldo akun
terkini. Selain itu, ciptakan sebuah properti ReadOnly yang menghasilkan nilai dari mSaldo.
Private mSaldo As Decimal
Public ReadOnly Property Saldo As Decimal
Get
Return mSaldo
End
Get
End Property
Langkah 5: Sisipkan properti-properti implementasi-diri berikut:
Public Property IDAkun As String
Public Property NamaAkun As String
Public Property PathFile As String
Public Property ErrorTerakhir As String
NamaAkun memuat nama dari pemilik akun. PathFile memuat sebuah string yang memuat lokasi dari file masukan.
ErrorTerakhir memuat sebuah string
yang memuat pesan error yang terakhir kali dihasilkan oleh metode-metode di
dalam kelas ini.
Langkah 6: Sisipkan konstruktor berikut, yang menerima sebuah
nomor ID akun:
Public Sub New(ByVal pIDAkun As String)
IDAkun = pIDAkun
NamaAkun = String.Empty
mSaldo = 0D
End Sub
Langkah 7: Sisipkan metode BacaData,
yang membaca file data dan mencoba menemukan data yang memuat ID akun tertentu.
Jika ID ditemukan, metode ini menghasilkan True.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
Public Function BacaData() As Boolean
Dim infile As StreamReader = Nothing
ErrorTerakhir = String.Empty
Try
infile = OpenText(PathFile)
While Not infile.EndOfStream
Dim entireLine As String =
infile.ReadLine()
Dim bidang() As String =
entireLine.Split(","c)
If bidang(0) = IDAkun Then
NamaAkun = bidang(1)
mSaldo = CDec(bidang(2))
Return True
End If
End While
ErrorTerakhir = "Akun " &
IDAkun & "tidak ditemukan"
Return False
Catch ex As Exception
ErrorTerakhir = ex.Message
Return False
Finally
If infile IsNot Nothing Then
infile.Close()
End Try
Return False
End Function
|
Baris 5
membuka file masukan, menggunakan nama file dan path pada properti PathFile. Jika file ditemukan, metode OpenText menghasilkan sebuah StreamReader yang dapat dipakai untuk
membaca semua data dari file. Baris 7 membaca satu baris dari file, dan baris 8
memecah baris menjadi sebuah array string dengan nama bidang. Baris 9 membandingkan bidang pertama dengan IDAkun dengan ID yang sedang dicari.
Jika cocok, baris 10-11 akan menugaskan nilai-nilai bidang pada NamaAkun dan mSaldo. Baris 12 menghasilkan nilai True. Di sisi lain, jika loop While
berakhir dengan mencapai baris 15, diasumsikan bahwa ID tidak ditemukan.
Perhatikan
bahwa pada kode tersebut blok Finally
dipakai untuk memuat sebuah statemen yang menutup file masukan (baris 21). Anda
mengetahui bahwa kode di dalam sebuah blol Finally
dijamin atau dipastikan selalu dieksekusi, bahkan jika eksepsi dilempar di
dalam blok Try. Bahkan ketika
statemen Return dieksekusi, blok Finally masih tetap dieksekusi sebelum
kendali program meninggalkan fungsi BacaData.
Langkah 8: Tambahkan metode Tabung
dan Tarik pada kelas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
Public Sub Tabung(ByVal
jumlah As Decimal)
'menabung sejumlah uang
di dalam akun dengan menunjumlahkannya
'pada saldo
mSaldo += jumlah
End Sub
Public Function Tarik(ByVal
jumlah As Decimal) As Boolean
'menarik <jumlah>
jika saldo yang ada
'sedikitnya sebesar
jumlah.
'menghasilkan False jika
saldo kurang dari <jumlah>
If jumlah <= mSaldo
Then
mSaldo -= jumlah
Return True
Else
ErrorTerakhir =
"Saldo terlalu kecil untuk menarik jumlah
yang diminta"
Return False
End If
End Function
|
Pada baris
11, metode Tarik menguji apakah
jumlah yang diminta lebih besar dari saldo akun, jika ya, ia menetapkan nilai
dari ErrorTerakhir dan menghasilkan False (baris 15-16). Selanjutnya,
ketika menuliskan kode untuk form, Anda akan menampilkan pesan error pada ErrorTerakhir ketika metode Tarik menghasilkan False. Di sisi lain, jika Tarik
menghasilkan True, Anda mengetahui
bahwa saldo akan diperbarui sehingga nilai saldo menjadi baru.
Kelas Form1
Selanjutnya,
Anda akan menuliskan kode di dalam form startup dari aplikasi.
Langkah 9: Buka jendela Code
untuk form startup dan sisipkan kode berikut. Event handler tombolCari_Click diaktivasi ketika user
mengklik tombol Cari setelah memasukkan nomor akun pada sebuah kotak teks.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Private skrgAkun As Akun
Private ReadOnly PATHFILE As
String = "..\..\akun.dat"
Private Sub
tombolCari_Click(…) Handles tombolCari.Click
'user mengklik tombol
Cari untuk mencari sebuah akun
skrgAkun = New
Akun(teksNomorAkun.Text)
skrgAkun.PathFile =
PATHFILE
If skrgAkun.BacaData()
Then
labelNamaAkun.Text =
skrgAkun.NamaAkun
labelSaldo.Text =
"Rp. " & skrgAkun.Saldo.ToString()
tombolTabung.Enabled
= True
tombolTarik.Enabled
= True
Else
MessageBox.Show(skrgAkun.ErrorTerakhir, "Error")
Bersihkan()
End If
End Sub
|
Baris 6-7
menciptakan sebuah Akun baru dan
menetapkan path file. Baris 8 memanggil metode BacaData untuk membuka file data dan mencoba mencari lokasi dari
informasi akun yang sesuai dengan nomor akun yang dimasukkan oleh user. Jika BacaData menghasilkan True, baris 9-10 menampilkan nama akun
dan saldonya. Baris 11-12 mengaktifkan tombol Tabung dan Tarik. Jika BacaData menghasilkan False, baris 14 akan menampilkan pesan
error pada properti ErrorTerakhir.
Langkah 10: Tambahkan metode Bersihkan,
yang menghapus nama akun dan saldonya dan menonaktifkan tombol Tabung dan Tarik. Metode ini dipanggil ketika user memasukkan sebuah nomor
akun yang tidak ditemukan di dalam file masukan.
Private Sub Bersihkan()
labelNamaAkun.Text = String.Empty
labelSaldo.Text = String.Empty
tombolTabung.Enabled = False
tombolTarik.Enabled = False
End Sub
Langkah 11: Tambahkan event handler berikut untuk tombol Tabung. Ia melewatkan jumlah yang
dimasukkan oleh user (pada teksJumlah)
kepada metode Akun.Tabung, dan ia
membaca dan menampilkan saldo akun:
Private Sub tombolTabung_Click(…) Handles
tombolTabung.Click
'user
mengklik tombol Tabung
Try
skrgAkun.Tabung(CDec(teksJumlah.Text))
labelSaldo.Text = "Rp. " &
skrgAkun.Saldo.ToString()
Catch
MessageBox.Show("Silahkan masukkan
jumlah deposit numerik", "Error")
End
Try
End Sub
Langkah 12: Tambahkan event handler berikut untuk tombol Tarik. Ia memanggil metode Akun.Tarik, melewatkan kepadanya jumlah
yang dimasukkan oleh user pada kotak teks (teksJumlah):
1
2
3
4
5
6
7
8
9
10
11
12
|
Private Sub
tombolTarik_Click(…) Handles tombolTarik.Click
'user mengklik tombol
Tarik
Try
If
skrgAkun.Tarik(CDec(teksJumlah.Text)) Then
labelSaldo.Text
= "Rp. " & skrgAkun.Saldo.ToString()
Else
MessageBox.Show(skrgAkun.ErrorTerakhir, "Error")
End If
Catch
MessageBox.Show("Silahkan masukkan jumlah penarikan numerik", "Error")
End Try
End Sub
|
Kode ini
menangani dua jenis error. Jika user memasukjan sebuah nilai tak numerik, baris
4 akan melemparkan eksepsi dan baris 10 mengingatkan user untuk memasukkan
nilai numerik. Atau, jika user mencoba untuk menarik uang yang lebih banyak
daripada akun saldo, maka baris 7 akan menampilkan pesan error yang disimpan
pada properti ErrorTerakhir.
Baris 13: Tambahkan event handler Click untuk tombol Tutup:
Private Sub tombolTutup_Click(…) Handles
tombolTutup.Click
'user mengklik tombol Tutup
Me.Close()
End Sub
1.5 Pengujian Perangkat Lunak Secara Manual
Sebelum menciptakan sebuah aplikasi, Anda
tentu mengetahui apa yang harus dilakukan. Spesifikasi persyaratan adalah
deskripsi utuh dari watak aplikasi. Ia mencakup penjelasan tiap masukan dan
aksi oleh user, dan bagaimana tiap masukan dan aksi memengaruhi watak program.
Berikut adalah spesifikasi persyaratan sederhana untuk sebuah program yang
membaca sebuah integer dan menampilkan warna terkait:
- Aplikasi memberitahu user tentang rentang nilai integer yang dapat diterima.
- User memasukkan sebuah integer N.
- Jika user memasukkan nilai tak numerik, aplikasi akan menampilkan pesan error.
- Jika N berada di luar rentang nilai yang dapat diterima, aplikasi akan menampilkan pesan error.
- Jika N berada di dalam rentang nilai yang dapat diterima, aplikasi akan menampilkan nama sebuah warna yang cocok dengan N dari daftar berikut: 0: putih, 1: kuning, 2: hijau, 3: merah, 4: biru, 5: oranye.
Spesifikasi persyaratan ini akan dipakai pada
Tutorial 1.5.
Tutorial 1.5: Secara Manual Menguji Masukan Integer
Pengujian perangkat lunak dapat menjadi lebih
kompleks ketika aplikasi memiliki banyak masukan dan keluaran. Pada tutorial
ini, Anda akan belajar beberapa teknik dasar dalam menciptakan pengujian
manual. Anda akan memeriksa sebuah aplikasi yang meminta user untuk memasukkan
sebuah integer. Aplikasi akan menampilkan sebuah string menggunakan integer
tersebut sebagai subskript ke dalam sebuah array string. Kemudian Anda akan
memeriksa pengujian manual untuk aplikasi ini. Antarmuka user ditampilkan pada
Gambar 1.18.
Langkah 1: Buka projek dengan nama Pengujian Manual.
Langkah 2: Jalankan aplikasi, masukkan sebuah integer,
dan klik tombol OK.
Langkah 3: Tutup aplikasi dan buka jendela Code dari
form startup. Berikut adalah kode sumbernya:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
Public Class Form1
Private ReadOnly warna() As
String = {"putih",
"kuning",
"hijau", "merah", "biru", "oranye"}
Private Sub Form1_Load(…)
Handles MyBase.Load
labelMinta.Text =
"Masukkan sebuah integer " &
"antara 0 dan
" &
warna.GetUpperBound(0).ToString
End Sub
Private Sub tombolOK_Click(…)
Handles tombolOK.Click
Dim indeksWarna As
Integer
If
Integer.TryParse(teksNilai.Text, indeksWarna) Then
If indeksWarna <
0 OrElse indeksWarna >
warna.GetUpperBound(0) Then
labelMinta.Text
= "Nilai berada di luar rentang"
Else
labelMinta.Text
= "Anda memilih warna " &
warna(indeksWarna)
End If
Else
labelMinta.Text =
"Silahkan masukkan sebuah integer"
End If
End Sub
End Class
|
Pada Form_Load,
baris 6 menginisialisasi sebuah kontrol Label
dengan pengumuman kepada user untuk memasukkan nilai pada rentang yang dapat
diterima. Anda tentu mengingat bahwa fungsi GetUpperBound menghasilkan subskript tertinggi pada array tertentu.
Pada event handler dari tombol OK, baris 13 menggunakan TryParse untuk mengkonversi kotak teks menjadi sebuah integer. Jika
gagal, baris 22 menampilkan pesan error. Baris 14 memeriksa indeksWarna terhadap rentang nilai yang dapat diterima.
Jika indeksWarna berada di dalam rentang
yang valid, baris 19 menggunakan indeksWarna
sebagai subskript ke dalam array warna, untuk mendapatkan nama warna.
HALO KK,MATERINYA SANGGAT BERMANFFAT,SAYA JGA SALAH SATU YANG MENGGUHNAKAN BUKU CIPTAAN BAPA
ReplyDelete