Thursday, December 15, 2016

Bab 1. VB.NET Untuk Programer



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.

Gambar 1.7 Setelah mengklik tombol Simpan


Gambar 1.8 Setelah 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:

Gambar 1.9 Menambahkan kelas Siswa pada projek


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.

Gambar 1.10 Contoh keluaran 1


Gambar 1.11 Contoh keluaran 2


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

Gambar 1.12 Program Contoh Enum TipeAkun

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.13 Jendela startup Aplikasi Teller Bank

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.

Gambar 1.14 Aplikasi Teller Bank setelah pencarian akun berhasil

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.

Gambar 1.15 Aplikasi Teller Bank setelah pencarian akun tidak berhasil


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

Gambar 1.16 Aplikasi Teller Bank yang menunjukkan sejumlah uang ditabung ke dalam sebuah akun


Gambar 1.17 Aplikasi Teller Bank yang menunjukkan sejumlah uang ditarik dari sebuah akun


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.

Gambar 1.18 Aplikasi yang menggunakan sebuah integer untuk mengetahui warna

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.

















1 comment:

  1. HALO KK,MATERINYA SANGGAT BERMANFFAT,SAYA JGA SALAH SATU YANG MENGGUHNAKAN BUKU CIPTAAN BAPA

    ReplyDelete