DAFTAR ISI DAFTAR ISI
i
BAB 1. INTRODUCTION TO VISUAL PROGRAMMING
1
Visual Programming Environment
1
Visual Programming Terminology
2
Form
2
Component
3
Properties
3
Event
3
Event-Driven
4
Project Management
4
Soal-Soal
10 11
BAB 2. VISUAL COMPONENT
11
About Component Using Component
11
Deleting Component
12
Component Property
12
Design-View and Code-View
14
Event-Handling Method
15 16
Basic Component Form
16
Button
18
Label
19
TextBox
20
MessageBox
22
CheckBox
24
RadioButton
25
GroupBox
26 27
Panel i
ComboBox
28
ListBox
29 29
Soal-Soal BAB 3. OBJECT ORIENTED PROGRAMMING
31
Object Oriented Programming Concept
31
Class and Object
31
Field, Property, Method, and Event
32
Shared Member
36
Constructor & Destructor
36
Characteristic of OOP
38
Encapsulation
38
Inheritance
44
Polymorphism
45 53
Soal-Soal BAB 4. FILE STREAMING
54
File Manipulation
54
File I/O
57
StreamWriter
57
StreamReader
58
FileStream
60 62
Soal-Soal
ii
BAB 1. INTRODUCTION TO VISUAL PROGRAMMING Visual Programming Environment Pemrograman Visual yang pertama kali diperkenalkan pada tahun 1991 merupakan suatu metode pemrograman dimana desain tampilan secara visual dirancang secara terpisah dengan coding yang dibuat. Pada konsep Pemrograman Visual, programmer dapat langsung merancang output yang ingin dihasilkan dengan konsep WYSIWYG (What You See Is What You Get—apa yang dirancang, itu juga yang akan dihasilkan pada outputnya). Dalam lingkungan pemrograman visual, dikenal 2 situasi selama pembuatan program yaitu : •
Design-Time Merupakan waktu dimana programmer merancang program
seperti
Perancangan
apa
layar
yang
ingin
dilakukan
dihasilkan.
dengan
cara
menempelkan komponen-komponen tampilan yang diperlukan ke dalam form. Semua atribut atau nilainilai yang menentukan bagaimana tampilan dari komponen tersebut, atau bagaimana komponen tersebut akan bereaksi terhadap lingkungannya dapat langsung di-set pada saat itu juga (pada bagian properties), sehingga programmer dapat melihat langsung hasil tampilan dari programnya tanpa
harus
menunggu
program
tersebut
dijalankan.
1
Pada saat design time juga ditambahkan penulisan baris-baris
perintah.
Kode
inilah
yang
akan
menentukan bagaimana suatu komponen akan berperilaku pada saat program di-running. •
Run-Time Merupakan waktu saat program dijalankan. Pada saat run-time ini programmer tinggal menikmati show dari program yang dibuat. Programmer pada saat ini biasanya melakukan pengujian atas kode yang dibuat. Pada saat run-time juga bisa dilakukan debugging ketika program mengalami error. Pada proses debugging, programmer bisa melihat isi dari tiap-tiap variable yang berhubungan sehingga bisa dilakukan
perbaikan
apabila
ada
kesalahan.
Programmer juga bisa menempatkan beberapa breakpoint untuk melakukan tracing sehingga lebih mudah untuk memperbaiki kesalahan yang terjadi.
Visual Programming Terminology Form Merupakan
window
yang
digunakan
sebagai
tempat untuk membuat desain tampilan dari program. Form dapat diisi dengan Menu atau Control yang diperlukan dalam membuat program. Sebuah Visual Application (Windows Application) minimal mempunyai 1 Form. Saat program dijalankan Form yang ditempatkan sebagai Startup Object akan secara otomatis dibuat dan di show.
2
Component Merupakan Object yang digunakan untuk mengisi Form. Component dapat dibuat baik pada saat designtime maupun pada saat run-time. Component dapat dibedakan menjadi 2 macam, yaitu component visual dan component non-visual. Component visual dapat dilihat baik pada saat design-time maupun run-time, sedangkan component non-visual hanya dapat dilihat saat designtime (di bawah form saat design-time ada tempat khusus untuk menampung component non-visual)
dan tidak
kelihatan pada saat run-time.
Properties Merupakan
atribut
dari
suatu
component.
Component yang sama akan selalu memiliki property yang sama,
sedangkan
component
yang
berbeda
dapat
memiliki baik property yang sama maupun property berbeda. Setiap property dapat diisi dengan nilai / value yang berbeda-beda.
Event Merupakan suatu tindakan yang bisa dilakukan terhadap suatu component. Component bisa diatur untuk melakukan sesuatu saat sebuah event terjadi pada dirinya. Penulisan kode perintah dilakukan pada sebuah method yang dirancang untuk menangani suatu event. 2 atau lebih component dapat menggunakan method yang sama untuk menangani event mereka yang sejenis. Dalam penanganan suatu event, biasanya method tersebut akan 3
mengembalikan 2 parameter, 1 adalah “sender” yang berisi component mana yang men-trigger event tersebut (bertipe Object), 1 lagi adalah “e” yang berisi informasi lain-lain yang perlu ada dalam event tersebut (berbeda tipe untuk tiap event).
Event-Driven Merupakan konsep dimana sesuatu perintah atau procedure baru akan dilakukan setelah terjadi event tertentu. Tidak seperti konsep pemrograman console, dimana
baris
program
akan
dijalankan
mulai
dari
procedure Main. Pada konsep event-driven tidak semua procedure yang ada di dalam program akan dijalankan, melainkan hanya pada procedure tertentu yang event nya benar-benar terjadi. Misalkan suatu Button dibuat action untuk event click, namun ketika program dijalankan, user bisa memilih apakah akan meng-click Button tersebut atau tidak. Jika tidak di-click maka method tersebut tidak akan pernah dijalankan.
Project Management Microsoft Visual Studio .NET merupakan IDE gabungan dari seluruh bahasa yang didukung oleh teknologi .NET (Visual Basic, Visual C++, Visual C#, Visual J#, dll). Layar utama pada Microsoft Visual Studio .NET 2005 adalah:
4
Gambar 1: Tampilan awal Microsoft Visual .NET 2005
Untuk membuat sebuah project baru pilih link Create Project pada sub-window Recent Projects atau pilih File | New | Project kemudian akan muncul kotak dialog seperti di bawah ini:
5
Gambar 2: Tampilan "New Project"
Untuk membuat aplikasi dengan bahasa Visual Basic pada Project Types pilih Visual Basic. Untuk menentukan jenis aplikasi yang akan dibuat pada bagian Templates pilih salah satu aplikasi yang ingin dibuat. Sebagai contoh pilihlah Windows Application. Setelah memilih jenis aplikasi yang ingin dibuat tentukan nama Project yang Anda buat dengan mengisikan nama Project Anda di Textbox Name, lokasi penyimpanan Project dapat Anda tentukan dengan mengisi Textbox Location. Aktifkan “Create directory for solution” untuk memasukkan project tersebut ke dalam solution baru dengan solution folder yang baru sesuai dengan nama project nya. 6
Gambar 3: Tampilan awal "Windows Application" Design
Solution ibarat project manager, bisa terdapat lebih dari 1 project dalam 1 solution. Dari beberapa project tersebut bisa dipilih mana yang akan menjadi startup project untuk solution tersebut, yang berarti project mana yang dijalankan saat solution dijalankan (F5). Untuk membuat project baru dan memasukkan ke dalam solution yang ada, gunakan Add to Solution pada pilihan Solution.
7
Gambar 4: Multiple project
Setelah berisi lebih dari 1 project, solution explorer akan menjadi:
Gambar 5: Tampilan Solution Explorer untuk multiple project 8
Untuk menentukan startup project, right-click nama solution dan pilih Properties, pilih project yang ingin dibuat sebagai startup project pada Single startup project atau biarkan pilihan pada Current selection untuk membuat project yang sedang dipilih menjadi startup project.
Gambar 6: Solution Properties
Dalam 1 project juga bisa berisi beberapa form dimana hanya ada 1 startup form yang akan dijalankan ketika project itu dijalankan. Untuk mengatur startup form, right-click nama project dan pilih Properties, pilih form pada Startup form.
9
Gambar 7: Project Properties
Soal-Soal 1. Apa perbedaan dari Design time dengan Run time? 2. Apa yang dimaksud dengan Form? 3. Apa yang dimaksud dengan Event? 4. Apa yang dimaksud dengan Event-Driven? 5. Apa perbedaan Solution dengan Project?
10
BAB 2. VISUAL COMPONENT About Component Using Component Untuk menambahkan component pada form, user harus berada pada design-view dan membuka jendela ToolBox. Untuk membuka jendela ToolBox, arahkan mouse ke tulisan miring ToolBox yang ada di kiri atas (click kalau perlu), dan daftar component (baik visual maupun non-visual) akan tampil. Ada 3 cara untuk menempatkan component tersebut ke form: •
Double-click component (component akan ditaruh di kiri atas dengan ukuran standar),
•
Drag-and-drop component ke form untuk menentukan
lokasi
component
tersebut
(ukuran standar), dan •
Click component dan drag-and-drop di form untuk
menentukan
lokasi
dan
ukuran
component tersebut.
11
Gambar 8: Tampilan ToolBox
Deleting Component Untuk menghapus component, pilih component yang ingin dihapus pada Form, kemudian tekan tombol Delete pada keyboard, atau right-click pada component yang ingin dihapus, kemudian pilih menu Delete.
Component Property Untuk
mengatur
nilai
dari
property
suatu
component, pilih component yang bersangkutan di dalam Form, kemudian pada Window Properties, cari property yang ingin diatur nilainya pada kolom sebelah kiri. Pada 12
kolom sebelah kanan, isi dengan nilai yang diinginkan. Nilai yang diisi bisa beraneka ragam, mulai dari angka (Integer), String, ataupun berupa pilihan (enumeration). Ada beberapa property standar yang dimiliki oleh hampir semua component dimana mempunyai fungsi yang hampir sama untuk tiap-tiap component. Property standar tersebut adalah: Nama Property
(Name)
Anchor
BackColor Enabled Font ForeColor Size Location
Tag
TabIndex
Deskripsi Digunakan untuk member nama pada component tersebut. Nama digunakan untuk identitas suatu component, terutama ketika digunakan pada Code View. Tidak boleh ada 2 component atau lebih yang menggunakan property (Name) yang sama. Digunakan untuk menentukan posisi sebelah mana dari ujung component yang akan menempel ke posisi ujung dari container 1 nya. Mengatur warna background dari component yang ada, dapat diberi warna transparent, dengan memberi nilai Color.Transparent. Mengatur status agar component dapat diakses atau tidak. Mengatur jenis tulisan pada component. Mengatur warna tulisan pada component. Width: Mengatur lebar component. Height: Mengatur tinggi component. X: Mengatur posisi horizontal component. Y: Mengatur posisi vertikal component. Property tambahan yang bebas diisi nilai angka (Integer). Biasanya digunakan untuk identifier apabila beberapa component yang mempunyai event-handling method yang sama. Digunakan untuk mengatur urutan tab. Menentukan urutan component yang aktif jika
1
Container: Sebuah komponen yang berfungsi untuk menampung komponen lain, contohnya : form, panel. 13
user menekan tab. Makin kecil berarti makin lebih dahulu diakses. Tulisan yang tampil pada sebuah component Untuk mengatur perataan tulisan. Digunakan untuk mengatur tampil atau tidaknya sebuah component
Text TextAlign Visible
Terdapat perbedaan yang cukup penting pada property (Name) dan Text. Property Text mengatur teks yang ditampilkan pada component tersebut sedangkan property
(Name)
menunjukkan
identitas
component
tersebut. 2 component tidak boleh menggunakan property (Name) yang sama sementara boleh menggunakan property Text yang sama.
Gambar 9: Perbandingan (Name) dengan Text
Design-View and Code-View Tampilan pada Visual Studio .NET terdiri dari 2 bagian yaitu Design-View dan Code-View. Pada DesignView user bisa melakukan perancangan tampilan secara WYSIWYG pada form, sedangkan Code-View digunakan untuk menuliskan kode yang akan dijalankan. ToolBox hanya berfungsi pada design-view. Pengubahan antar tampilan bisa dilakukan pada Solution Explorer. 14
Gambar 10: Design-View dan Code-View
Event-Handling Method Untuk membuat method yang digunakan untuk meng-handle event, bisa dilakukan dengan 3 cara: •
Melakukan double-click pada component yang
bersangkutan
pada
design-view.
Tampilan code-view akan muncul secara otomatis
dan
cursor
akan
langsung
diarahkan ke dalam method tersebut. Cara ini hanya bisa menghasilkan default eventhandling method dimana masing-masing component mempunyan default event yang berbeda. •
Masuk
ke
code-view
dan
memilih
component di combobox sebelah kiri dan memilih event di combobox sebelah kanan. Cursor akan langsung diarahkan ke method yang dibuat. Dengan cara ini bisa dibuat semua event-handling method yang ada. •
Masuk ke code-view dan mengetikkan sendiri
nama
method,
parameter,
dan
handles nya. Cara ini lebih rentan terhadap kesalahan
karena
meskipun
parameter 15
sender
nya
selalu
Object,
namun
parameter e nya sering berbeda. Dengan cara ini bisa dibuat semua event-handling method yang ada.
Gambar 11: Event-Handling Method
Basic Component Form Form
merupakan
component
utama
dalam
windows application. Merupakan container utama dari component yang lain. Ketika aplikasi dijalankan, otomatis akan dibuat sebuah Form dan Form tersebut akan ditampilkan (dijalankan method show nya). Property dari Form yang sering digunakan adalah: Nama Property FormBorderStyl
Deskripsi Mengatur border style dari Form. Bisa 16
e
IsMdiContainer
KeyPreview
Opacity
TransparencyKe y WindowState
diatur agar Form tidak bisa di-resize maupun Form tanpa border. Mengatur apakah Form bisa dijadikan sebagai MdiParent atau tidak. Jika diaktifkan, warna Form akan berubah menjadi abu-abu dan Form tidak bisa menerima Mouse Event. Jika diaktifkan, maka semua Key Event yang dialami oleh component dalam Form tersebut akan dianggap sebagai Key Event untuk Form itu sendiri. Menentukan tingkat transparansi dari Form. Nilai berupa bilangan pecahan atau persen. Nilai 0 berarti Form tidak tampak, sendangkan nilai 1 (100%) berarti Form tampak secara penuh. Menentukan warna apa yang akan ditampilkan secara transparan ketika aplikasi dijalankan. Menentukan kondisi Form saat Form tersebut di show.
Berikut ini adalah method dari Form yang sering digunakan: Nama Method
Show
Activate
Deskripsi Menampilkan Form ke layar. Apabila Form belum pernah ditampilkan, maka akan ditampilkan paling depan, sedangkan jika sebelumnya sudah pernah ditampilkan namun ada di belakang layar (inactive), maka tidak akan terjadi apa-apa. Mempunyai efek yang sama dengan memberi nilai true pada property Visible. Menampilkan Form yang inactive ke depan layar. Tidak bisa digunakan apabila 17
sebelumnya Form belum pernah ditampilkan. Menyembunyikan Form. Mempunyai efek yang sama dengan memberi nilai false pada property Visible. Menutup Form. Form yang sudah di-close tidak bisa dishow lagi, kecuali didefinisikan dengan Object baru.
Hide
Close
Button Button merupakan sebuah component standar dalam aplikasi visual, dan dikenali oleh user secara umum sebagai interface untuk men-trigger suatu kejadian / event. Sebuah Button dapat di-trigger event click-nya dengan menggunakan
mouse,
mnemonic
shortcut,
tombol ENTER dan tombol SPACEBAR
ataupun
jika Button
sedang menerima fokus. 2 Button dapat diberi Mnemonic Key supaya orang
dapat mengaksesnya seperti sebuah shortcut. Cara untuk membuat mnemonic adalah dengan memberi tanda And (&) pada huruf yang dituliskan pada property Text. Contoh:
&Nama
Tampilan: Nama Shortcut: Alt-N
N&ama
Tampilan: Nama Shortcut: Alt-A
Sedangkan jika ingin menuliskan String literal And (&) harus menggunakan &&. Contoh:
2
Mnemonic Key : Sebuah huruf kunci yang dipakai bersama dengan tombol Alt, untuk mengakses sebuah kontrol. 18
Save & Close
Tampilan: Save Close (Salah)
Save && Close Tampilan: Save & Close (Benar)
Property lain yang sering digunakan adalah: Nama Property
DialogResult
FlatStyle
Deskripsi Untuk mengatur value yang akan dikembalikan kepada parent Form ketika Button di click. Biasanya dipakai jika dalam Form tersebut dimunculkan dengan perintah ShowDialog. Digunakan untuk mengatur tampilan dari Button.
Label Label merupakan component yang sangat penting untuk
memberikan
informasi
kepada
user.
Untuk
menuliskan informasi di dalam Form yang perlu dilakukan adalah menambahkan Label ke dalam Form. Biasanya label digunakan untuk memberikan informasi untuk memberikan deskripsi tentang component yang lain misalkan seperti Textbox. Ketika aplikasi dijalankan Label memiliki sifat read only yang artinya component ini tidak dapat diganti nilainya oleh user yang berinteraksi dengan Form. Berikut ini adalah property Label yang sering digunakan: Nama Property AutoSize BorderStyle
Deskripsi Property yang digunakan untuk mengatur ukuran Label supaya secara otomatis autofit dengan isinya. Untuk mengatur jenis border pada 19
component. Digunakan untuk mengatur tampilan dari Label. Digunakan untuk mengatur apakah Label dapat menerima Mnemonic atau tidak. Jika false, maka karakter And (&) akan ditulis apa adanya.
FlatStyle
UseMnemonic
TextBox TextBox mengetikkan
memungkinkan sebuah
text
di
seorang
user
dalamnya.
untuk
TextBox
mempunyai fasilitas untuk ditulis sebagai Multiline dan fasilitas melakukan masking password character. Berikut ini adalah property TextBox yang sering digunakan: Nama Property
AcceptsTab
AllowDrop
BorderStyle
CharacterCasing
CausesValidation
Multiline
Deskripsi Jika bernilai true, maka tombol TAB akan dibaca sebagai sebuah character. Jika bernilai false, maka tombol TAB akan berfungsi memindahkan fokus ke component yang lain. Untuk mengatur apakah component dapat menerima data yang di-drag oleh user kepada component tersebut. Untuk mengatur jenis border pada component. Untuk mengatur jenis case character yang diketikkan ke dalam component apakah harus uppercase, lowercase, atau normal. Digunakan untuk mengatur apakah validation event dari component tersebut aktif atau tidak. Validation event mencakup 2 event yaitu Validating dan Validated. Mengatur apakah TextBox dapat 20
ReadOnly
SelectedText
SelectionLength SelectionStart WordWrap
memuat lebih dari satu baris atau tidak. Jika bernilai true, maka isi di dalam TextBox tidak dapat diubah-ubah. Property ini berbeda dengan property Enabled, karena walaupun dibuat read only, TextBox masih bisa diakses dan di-copy isinya. Jika text di dalam komponen TextBox di-block maka text yang di-block tersebut menjadi nilai bagi SelectedText Mengembalikan nilai yang berupa jumlah karakter yang di-block dalam TextBox. Mengembalikan index awal dari String yang di-block karakter nya. Untuk mengatur apakah fasilitas word wrap 3 aktif atau tidak ketika property Multiline diaktifkan.
Berikut ini adalah method dari TextBox yang sering digunakan: Nama Method AppendText Clear Copy Cut DoDragDrop Focus
Deskripsi Untuk menambahkan text ke dalam TextBox. Untuk menghapus semua text yang ada di dalam TextBox. Untuk meng-copy text yang di-block ke dalam clipboard. Untuk memindahkan text yang diblock ke dalam clipboard. Untuk memulai action drag and drop. Untuk mengalihkan fokus ke TextBox.
3
Word Wrap : adalah fasilitas dalam sebuah komponen supaya text yang tampil di dalam komponen tersebut jika text mencapai sisi kanan dari komponen tersebut, maka text akan ditampilkan di baris berikutnya. 21
Menambahkan text ke dalam component dengan isi dari clipboard. Melakukan block terhadap beberapa text yang ada di dalam TextBox. Melakukan block terhadap semua text di dalam TextBox.
Paste
Select SelectAll MessageBox MessageBox
merupakan
component
untuk
memberikan informasi mengenai suatu hal kepada user sekaligus meminta suatu feedback (jawaban / umpan balik) pada program. Informasi yang disampaikan bisa ditampilkan sebagai suatu peringatan, informasi, maupun suatu
pesan
menampilkan
kesalahan. icon
MessageBox
khusus
untuk
juga
bisa
memperindah
penyampaian pesan.
Gambar 12: Contoh suatu MessageBox lengkap
MessageBox
merupakan
class
yang
banyak
memiliki shared method sehingga tidak perlu dibuat object nya secara langsung. Untuk menampilkan MessageBox digunakan method show. Format lengkap dari method show pada MessageBox adalah:
22
MessageBox.Show(message,
caption,
buttons,
msgtype)
Contoh: MessageBox.Show("Mau di-save dulu?", "MyApplication", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning)
Penggunaan lebih jauh adalah untuk mendapatkan respon dari user dengan tombol-tombol yang bisa dipilih seperti
Yes-No-Cancel,
MessageBox
akan
Abort-Retry-Ignore,
mengembalikan
nilai
dll. bertipe
DialogResult yang bisa dikombinasikan dengan if clause ataupun select-case clause. If MessageBox.Show("Mau keluar program?", "MyApplication", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
Application.Exit() Else ' Do nothing End If
Atau bisa juga menggunakan select-case clause: Select Case MessageBox.Show("Mau di-save dulu?", "MyApplication", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning)
Case Windows.Forms.DialogResult.Yes ' Action for Yes option 23
Case Windows.Forms.DialogResult.No ' Action for No option Case Windows.Forms.DialogResult.Cancel ' Action for Cancel option End Select
Note: Fungsi MsgBox dari VB6 masih bisa digunakan. CheckBox CheckBox merupakan component yang sering kali dipakai baik dalam aplikasi desktop atau aplikasi web. CheckBox merupakan component yang digunakan oleh para developer untuk meminta input dari user yang tipenya bersifat pilihan bebas (boleh pilih lebih dari satu atau disebut juga non-exclusive), misalnya: hobi. Nama Property
Appearance
CheckAlign
Checked
CheckState ThreeState
Deskripsi Mempunyai dua nilai yaitu Normal dan Button. Jika CheckBox diberi nilai Normal maka akan tampak seperti CheckBox pada umumnya, berbeda halnya jika diberi nilai Button akan CheckBox akan berubah menjadi Toogle Button. Untuk mengatur perataan horizontal dan vertical dari kotak relatif terhadap teks nya. Mengambalikan nilai boolean yang menyatakan apakah CheckBoxdalam keadaan dipilih atau tidak. Pilihan Indeterminate (Third State) akan dianggap sebagai Checked. Mengatur default state dari CheckBox. Mengaktifkan pilihan untuk 24
kondisi ketiga dari CheckBox. Event yang akan di-trigger ketika pilihan dari CheckBox berubah adalah event CheckChanged.
Gambar 13: Macam-macam tampilan CheckBox
RadioButton RadioButton
merupakan
component
yang
digunakan untuk memberi beberapa pilihan kepada user dan
user
hanya
boleh
memilih
satu
pilihan
saja
(exclusive). RadioButton biasanya dipakai bersamaan dengan
component
GroupBox
/
Panel
untuk
mengelompokkan beberapa pilihan. Misalkan terdapat 2 kategori pilihan yang harus dijawab oleh user yaitu agama dan jenis kelamin, supaya user bisa memilih masingmasing satu pilihan untuk agama dan jenis kelamin, masing-masing RadioButton dikelompokan ke dalam GroupBox / Panel. Untuk agama dibuat GroupBox / Panel sendiri, begitu juga dengan pilihan jenis kelamin. Nama Property Appearance
Checked
Deskripsi Kegunaan property ini sama seperti Appearance pada CheckBox. Mengambalikan nilai boolean yang menyatakan apakah RadioButton dalam keadaan 25
dipilih atau tidak. Jika satu RadioButton nilai checked nya dibuat true, maka RadioButton lain yang berada dalam GroupBox / Panel yang sama akan dijadikan unchecked semua karena hanya 1 yang bisa aktif pada satu saat.
GroupBox GroupBox merupakan salah satu component yang digunakan
sebagai
container.
Container
berarti
component yang bisa menjadi naungan atau bisa diisi oleh component
lain.
Sering
digunakan
untuk
mengelompokkan component dalam kelompok-kelompok tertentu. Digunakan juga untuk memisahkan kelompok pada RadioButton. Untuk
memasukkan
component
ke
dalam
GroupBox, drag-and-drop atau buat component di dalam GroupBox. Secara otomatis component akan menjadi bagian dari GroupBox tersebut. Component yg berada di dalam GroupBox tidak akan dianggap sebagai control dari Form lagi, melainkan control dari GroupBox yang bersangkutan, dimana GroupBox tersebut merupakan control dari Form.
26
Gambar 14: Memasukkan component ke GroupBox
Gambar 15: Pemindahan susunan komponen
Panel Panel merupakan salah satu component yang digunakan sebagai container. Pada prinsipnya sama dengan GroupBox, hanya mempunyai sedikit tambahan fasilitas yaitu AutoScroll yang digunakan agar Panel bisa menampilkan scroll bar jika lebar Panel tidak cukup. Selain itu Panel juga secara default tidak mempunyai border, sehingga component tidak tampak dikotak-kotaki.
27
ComboBox ComboBox merupakan component yang digunakan untuk menampilkan daftar untuk dipilih oleh user. Daftar tersebut akan muncul ketika tombol DropDown dari ComboBox di-click. Pilihan yang dipilih oleh user dapat dibaca melalui property Text maupun Items, meskipun keduanya sebenarnya mempunyai penggunaan yang berbeda. Items merupakan pilihan yang bisa dipilih oleh user, sedangkan Text biasanya digunakan untuk member informasi kepada user sebelum tombol DropDown di-click (misalnya “Select birth year here” dengan isi dari Items nya adalah 1980 sampai 2000). Nama Property DropDownStyle
Items
SelectedIndex SelectedItem MaxDropDownItems
Sorted
Deskripsi Mengatur cara pemilihan dari ComboBox. Nilainya berupa enumeration: DropDown, DropDownList, dan Simple. Untuk menyatakan item-item yang terdapat dalam ComboBox. Mengembalikan nilai berupa Collection. Mengatur dan mengetahui index dari item yang sedang dipilih. Mengembalikan nilai dari item yang sedang dipilih. Jumlah maksimum item yang dapat ditampilkan dari DropDownList. Untuk mengatur apakah item di dalam ComboBox akan secara otomatis diurutkan atau tidak.
28
ListBox ListBox merupakan component yang digunakan untuk menampilkan daftar
untuk dipilih oleh user.
Component ini mirip dengan ComboBox, namun memiliki beberapa perbedaan property, yaitu: Nama Property Items
MultiColumn
SelectedIndex SelectedIndices SelectedItem SelectedItems
SelectionMode
Sorted
Deskripsi Untuk menyatakan item yang terdapat dalam ListBox. Mengembalikan nilai berupa Collection. Menyatakan apakah ListBox mendukung penggunaan kolom lebih dari satu apabila tinggi ListBox tidak mencukupi. Mengatur dan mengetahui index dari item yang sedang dipilih. Mengembalikan Collection dari nilai-nilai index yang sedang dipilih. Mengembalikan nilai (String) dari item yang sedang dipilih. Mengembalikan Collection dari item yang sedang dipilih. Mengatur cara pemilihan pada ListBox. Nilainya berupa enumeration : None, One, MultiSimple, dan MultiExtended. Untuk mengatur apakah item di dalam ListBox akan secara otomatis diurutkan atau tidak.
Soal-Soal 1. Apa yang dimaksud dengan Component? 2. Sebutkan minimal 8 component visual yang anda ketahui. 3. Dari 8 component tersebut sebutkan minimal 4 property yang terdapat pada component tersebut. 29
4. Dari 8 component tersebut sebutkan minimal 4 eventyang terdapat pada component tersebut. 5. Apa yang dimaksud dengan Shortcut Key? 6. Apa yang dimaksud dengan Mnemonic Key? 7. Apa perbedaan antara CheckBox dengan RadioButton? 8. Apa perbedaan antara ComboBox dengan ListBox? 9. Sebutkan 3 component yang bisa disebut sebuagai Container. 10. Apa fungsi property “Parent”?
30
BAB 3. OBJECT ORIENTED PROGRAMMING
Object Oriented Programming Concept Class and Object Definisi resmi dari Microsoft adalah adalah:
An object is a structure containing data and methods that manipulate the data.
Classes
are
symbolic
representations
of
objects; classes describe the properties, fields, methods, and events that form objects in the same way that blueprints describe the items that form buildings.
Class bisa diartikan sebagai cikal-bakal object, dimana class merupakan rancangan yang mendefinisikan apa yang dimiliki dan apa yang bisa dilakukan oleh object, sedangkan object adalah benda nyata yang dibuat berdasarkan rancangan yang didefinisikan di class. Anggap class adalah rancangan produk, sedangkan object adalah produk itu sendiri. Seperti sebuah blueprint dari suatu bangunan yang bisa digunakan untuk membuat banyak bangunan, dari sebuah class bisa dihasilkan sebanyak mungkin object yang dibutuhkan. Object sering disebut sebagai instance dari suatu class.
31
Gambar 16: Ilustrasi perbedaan Class dan Object
Class Bike bukan sebuah Bike. Oleh karena itu pada bagian class tidak diberi warna (transparan) karena hanya sebuah rancangan (blueprint). Pada gambar disebelahnya diberikan warna sebagai symbol bahwa object tersebut memang ada dan bisa digunakan.
Field, Property, Method, and Event Field & Property Field karakteristik
dan dari
Property object.
Field
adalah dan
suatu Property
merepresentasikan informasi apa saja yang dimiliki oleh object tersebut. Field bersifat seperti variable, bisa dibaca dan diberi nilai selayaknya variable. Sintaks nya adalah:
access_level [Shared] var_name [As data_types]
[] = optional (boleh tidak ditulis)
Default:
32
•
access_level = harus disebutkan. Dim = Private.
•
not shared
•
tanpa [As data_types] akan dianggap sebagai: as Object
Property sendiri mirip sekali dengan Field, namun pada implementasinya, menggunakan Get untuk membaca dan Set untuk memberikan nilai. Sintaks nya adalah:
access_level
[Shared]
Property
var_name
[As
data_types] Get ‘ what_to_do_if_something_read_this_property End Get
Set(ByVal value [As data_types]) ‘ what_to_do_if_something_set_this_property End Set End Property
[] = optional (boleh tidak ditulis)
Default: •
access_level = harus disebutkan. Tidak boleh menggunakan Dim.
•
not shared.
•
tanpa [As data_types] akan dianggap sebagai: As Object. 33
Method Method adalah function maupun procedure yang didefinisikan sebagai bagian dari suatu class. Method menunjukkan apa yang bisa dilakukan oleh sebuah object. Pada dasarnya, method sama seperti yang dibahas pada bab sebelumnya, dengan cara deklarasi yang sama juga.
Procedure (tanpa return value): [access_level] [Shared] Sub proc_name ( param1, param2 ) statements End Sub
Function (dengan return value): [access_level] [Shared] Function func_name ( param1, param2 ) [As data_type] statements return value End Sub
[] = optional / bisa tidak ditulis
Default: •
access_level = public.
•
not shared.
34
•
untuk Function, jika tidak disebutkan [As data_types] akan dianggap: As Object.
•
Value pada return value harus bertipe sama dengan data_type.
Event Event
merupakan
pemberitahuan
yang
diterima / diberikan oleh suatu object dari / ke object lain. Event membuat suatu object untuk melakukan suatu action ketika sesuatu terjadi. Pada Console Application, event belum banyak berperan, namun pada Visual Application, event akan sangat banyak berperan. Alur
pada
Visual
Application,
dikenal
dengan istilah Event-Driven Programming yang berarti bahwa alur pemrograman pada Visual Application hampir semuanya berasal dari event. Jika terjadi event ini, alur akan mengarah kesini, jika terjadi event itu, alur akan mengarah kesitu. Jika tidak ada event, program akan berada dalam kondisi idle (menunggu event), tidak seperti Console Application dimana ketika sudah tidak ada baris
kode
yang
dieksekusi,
program
akan
berhenti. Pembuatan custom event untuk sebuah custom object cukup rumit dan biasanya hanya berguna pada high-level programming, oleh karena itu tidak akan dibahas di materi ini.
35
Shared Member Ketika mendefinisikan suatu member (property & method) dari suatu Class tanpa keyword shared, member tersebut akan diidentifikasi sebagai instance member. Instance member adalah member yang ketika suatu object dibuat, system akan membuat sebuah copy dari member tersebut untuk dipakai masing-masing object yang dibuat. Instance member berbeda dengan class member (dideklarasikan menggunakan keyword shared), dimana system
hanya
menyediakan
satu
resource
untuk
berapapun banyaknya instance dari class tersebut. Instance member harus diakses secara spesifik dengan menyertakan nama dari object yang diakses. Sedangkan
class
member
bisa
diakses
dengan
menyertakan nama dari sembarang object dari class tersebut ataupun dengan menggunakan nama class nya secara langsung. Dalam
contoh
class
Bike
di
atas,
numberOfGears merupakan class variable dimana nilai variable tersebut akan sama untuk semua instance dari class
Bike
tersebut,
yaitu
18.
Sedangkan
currentSpeed, currentCadence, dan currentGear merupakan instance variable yang nilainya mungkin akan berbeda untuk setiap instance dari Bike.
Constructor & Destructor Constructor Dalam konsep OOP, constructor adalah suatu method yang digunakan untuk membuat 36
object dari suatu class. Dalam .NET, constructor dideklarasikan dengan nama procedure Sub New. Constructor dapat di-overload, yang berarti dalam sebuah class bisa mempunyai dua atau lebih constructor
asal
mempunyai
berbeda.
Constructor
parameter
diakses
yang
dengan
menggunakan keyword New. Contoh deklarasi dan penggunaannya adalah: Public Class MyCar
Public Sub New() what_to_do_when_creating_an_object End Sub
Public Sub New(ByVal i As Integer) what_to_do_when_creating_an_object End Sub
End Class
Module MyModule
Sub Main() Dim obj1 As MyCar = New MyCar Dim obj2 As MyCar = New MyCar(5) End Sub
End Module
Destructor
37
Dalam konsep OOP, destructor adalah suatu method yang digunakan untuk melepaskan semua resource yang dialokasikan object semasa hidupnya.
Dalam
.NET,
destructor
tidak
mempunyai peran yang berarti karena konsep Garbage Collector yang dimiliki .NET, dimana alokasi memori akan secara otomatis dibebaskan apabila sudah tidak ada rujukan / referensi lagi ke suatu object. Namun jika secara eksplisit ingin didefinisikan sendiri, maka bisa di-override method Finalize.
Characteristic of OOP Konsep
Object
Oriented
Programming
mempunyai
beberapa karakteristik yang membedakannya dengan Procedural Programming. Penggunaan class dan object menjadi karakteristik mutlak
dalam
OOP.
Selain
itu
juga
terdapat
beberapa
karakteristik lain dalam OOP yaitu Encapsulation, Inheritance, Polymorphism.
Encapsulation Access Level Encapsulation merupakan suatu konsep untuk pengaturan akses pada setiap member dari class. Encapsulation juga memungkinkan sebuah object untuk mengatur bagaimana property diubah dan method dijalankan. Contohnya adalah, sebuah object dapat melakukan validasi terlebih dahulu sebelum property diubah. Bisa dibaratkan sebagai 38
sebuah kotak hitam yang menyediakan jasa dan layanan, namun tidak bisa dilihat apa sebenarnya yang ada di dalam kotak tersebut. Konsep ini sangat berguna untuk mencegah akses yang tidak diinginkan pada data yang sensitif. Untuk mengatur akses dari suatu member, digunakan 5 macam access level, yang sering digunakan adalah: •
Public Public merupakan access level yang paling mudah diakses. Semua class pada semua namespace (assembly) dapat secara bebas mengakses public member.
•
Protected Protected access level memperbolehkan class itu sendiri dan subclass nya untuk mengakses member tersebut.
•
Friend Friend
merupakan
access
level
yang
memungkinkan akses dari semua class pada namespace (assembly) yang sama dengan class tersebut. •
Protected Friend Protected access level memperbolehkan class itu sendiri, subclass, dan semua class
39
dalam namespace (assembly) yang sama untuk mengakses member tersebut. •
Private Private merupakan access level yang paling terbatas.
Member
yang
dideklarasikan
secara private hanya bisa diakses dari dalam
class
itu
sendiri.
Cara
untuk
mengakses private member dari class lain hanya melalui method yang mengakses member tersebut, dimana method tersebut tentu tidak dideklarasikan secara private. Keyword
Dim
akan
dianggap
sebagai
Private.
Berikut adalah tabel yang diambil dari MSDN:
Access modifier
Access level granted
Elements you can declare with this access level
Declaration context within which you can use this modifier
Public
Unrestricted: Any code that can see a public element can access it
Interfaces Modules Classes Structures Structure members Procedures Properties Member
Source file Namespace Interface Module Class Structure
40
variables Constants Enumerations Events External declarations Delegates Protected
Derivational: Code within the class that declares a protected element, or a class derived from it, can access the element
Interfaces Classes Structures Procedures Properties Member variables Constants Enumerations Events External declarations Delegates
Class
Friend
Assembly: Code within the assembly that declares a friend element can access it
Interfaces Modules Classes Structures Structure members Procedures Properties Member variables Constants Enumerations Events External declarations Delegates
Source file Namespace Interface Module Class Structure
Protected Friend
Union of Protected and Friend: Code within the
Interfaces Classes Structures Procedures
Class
41
Private
same class or the same assembly as a protected friend element, or within any class derived from the element's class, can access it
Properties Member variables Constants Enumerations Events External declarations Delegates
Declaration context: Code within the type that declares a private element, including code within contained types, can access the element
Interfaces Classes Structures Structure members Procedures Properties Member variables Constants Enumerations Events External declarations Delegates
Module Class Structure
Encapsulating Information Dengan adanya access level, akan ada beberapa member dari class yang tidak bisa diakses secara langsung. Untuk melakukan akses pada member tersebut, digunakan function dengan access level yang lebih luas dimana function tersebut akan mengakses member tersembunyi tersebut
dengan
atau
tanpa
syarat.
Contoh
sederhana adalah class Human yang mempunyai private member name. Dengan asumsi bahwa tidak semua Human bisa menanyakan name dari Human 42
lain, maka property name tersebut dibungkus dengan suatu function getName yang melakukan verifikasi status Human yang menanyakan nama Human tersebut. Kode nya adalah:
Public Class Human Private name As String Public status As Integer
Sub New(ByVal name As String, ByVal status as Integer)
Me.name = name Me.status = status End Sub
Public Function getName(ByVal questioner As Human) As String
Select Case (questioner.status) Case 1 ' Bad Person Return "Sorry, you're a bad person" Case 2 ' Normal Person Return "My name is " & name Case 3 'Pretty Woman Return "Hi Baby, my name is " & name & _ ", what's yours my lady?" Case Else Return "" End Select End Function End Class
43
Inheritance Inheritance adalah suatu konsep dimana suatu class otomatis mempunyai property dan method yang didefinisikan di supertype nya. Class di .NET mempunyai kemampuan untuk mewarisi property dan method dari induknya dengan menggunakan keyword Inherits. Contoh penggunaannya adalah:
Gambar 17: Penggunaan Inheritance
Dalam contoh, class Animal merupakan induk langsung (superclass) dari class Lion, dan class Lion merupakan anak langsung (subclass) dari class Animal. Class Lion akan mewarisi property age dan procedure eat() dan sleep() dari class Animal, namun tidak mewarisi property name karena dideklarasikan secara Private. Aturan dalam inheritance adalah: •
Subclass
mewarisi
member
yang
dideklarasikan secara Public, Protected, dan Protected Friend. 44
•
Subclass
mewarisi
member
yang
dideklarasikan secara Friend selama class tersebut berada di dalam namespace / assembly yang sama. •
Subclass tidak mewarisi procedure / function apabila
subclass
tersebut
mendefinisikan
procedure / function dengan nama dan parameter yang sama (disebut juga method overriding). •
Subclass
menyembunyikan
superclass
apabila
variable
subclass
dari
tersebut
mendefinisikan variable dengan nama yang sama. Untuk mengakses variable di subclass itu sendiri digunakan nama variable tersebut. Untuk mengakses variable di superclass yang disembunyikannya
digunakan
keyword
MyBase untuk mengacu pada superclass nya. •
Subclass tidak mewarisi constructor.
Polymorphism Polymorphism Philosophy Dalam pengertian umum, Polymorphism adalah suatu organisme yang mempunyai bentuk dewasa yang berbeda-beda. Seperti kupu-kupu yang
mempunyai
4
bentuk.
Dalam
OOP,
Polymorphism mempunyai beberapa penjelasan: •
Polymorphism
berarti
mengizinkan
sebuah definisi (function) untuk dipakai
45
pada
beberapa
tipe
data
yang
berbeda. •
Polymorphism adalah kemampuan dari object yang berbeda tipe (class) untuk merespon method dengan nama yang sama, namun mungkin menjalankan action yang berbeda.
•
Polymorphism mengizinkan member dari subclass untuk diperlakukan sama dengan memeber dari superclass nya.
•
Polymorphism berarti jika class B merupakan subclass dari class A, class B tidak harus memiliki semua method dari class A. Mungkin saja ada method di class B yang melakukan action yang berbeda dari method di class A.
Method Overloading Method Overloading merupakan penerapan Polymorphism
pada
Procedural
Programming,
namun tidak jarang digunakan juga pada OOP. Method Overloading berarti suatu method bisa dideklarasikan
lebih
dari
menggunakan
nama
satu
yang
kali
dengan
sama,
namun
menggunakan parameter yang berbeda, untuk melakukan menghasilkan Constructor
hal
yang
return juga
bisa
type
berbeda
maupun
yang
berbeda.
di-overload.
Contoh
deklarasi: 46
Public Sub gotoNextCity()
End Sub
Public Sub gotoNextCity(ByVal car As Car)
End Sub
Public Sub gotoNextCity(ByVal plane as Plane)
End Sub
Function gotoNextCity() mempunyai 3 bentuk. Hal ini berguna jika object bisa melakukan perjalanan ke kota selanjutnya melalui 3 cara: berjalan kaki, naik mobil, maupun naik pesawat. Semua mengacu ke tujuan yang sama dengan nama method yang sama, namun action nya akan berbeda jika menggunakan alat tranportasi yang berbeda (minimal dari segi waktu dan biaya), sehingga dibutuhkan method yang berbeda untuk menanganinya.
Method Overriding Method
Overriding
merupakan
inti
penerapan Polymorphism pada OOP. Method Overriding adalah kemampuan suatu object untuk menjalankan method dari superclass nya dengan cara yang berbeda. Hal ini dapat dilakukan dengan menumpuk (override) method yang ada pada 47
superclass nya dengan method pribadi class tersebut dengan nama method dan parameter yang sama. Untuk melakukan hal ini, method di superclass harus dideklarasikan Overridable (mengijinkan untuk di-override), sedangkan method di subclass harus dideklarasikan Overrides (meminta ijin untuk meng-override). Contoh:
Gambar 18: Function Overriding
Jika object Bird dibuat dan dijalankan method
move(),
maka
dia
akan
terbang,
sedangkan jika Fish yang menjalankan method move(), dia akan berenang. Kegunaan terbesar 48
adalah bahwa 2 object berbeda tersebut bisa ditampung dalam 1 penampung yaitu Animal, dan dari Animal bisa dijalankan method move() masing-masing.
Contoh
penggunaan
and
keuntungan dari superclass:
Sub Main() Dim bird As New Bird Dim fish As New Fish Dim ArrAnimal As New ArrayList ArrAnimal.Add(bird) ArrAnimal.Add(fish) For Each animal As Animal In ArrAnimal animal.move() Next End Sub
Note: Overrides akan mengganti method dari superclass nya sehingga jika suatu instance dari Fish ditampung pada object Animal, maka akan menggunakan move() dari Fish, karena move() dari Animal sudah digantikan dan benar-benar hilang.
Shadowing Shadowing
pada
intinya
adalah
sama
dengan Overriding, namun Shadowing memaksa suatu method untuk di-override dengan atau tanpa ijin
(Overridable)
dari
superclass
nya.
Shadowing banyak digunakan untuk meng-override 49
method dari built-in class dimana hampir semua method nya tidak dideklarasikan Overridable. Keyword Shadows digunakan untuk melakukan Shadowing.
Gambar 19: Shadowing
Note: Shadows mengganti method dari superclass, namun tidak menghilangkan method asli dari superclass, sehingga jika suatu instance dari Fish ditampung pada object Animal, maka akan menggunakan
move()
dari
Animal,
karena
move() dari Animal hanya disembunyikan saja dan masih bisa diakses.
Note: Perbedaan mendasar antara Shadowing dengan Overriding adalah bahwa Shadowing dapat 50
mendefinisikan
ulang
semua
class
member,
sedangkan Overriding hanya dapat mendefinisikan ulang procedure dan property. Shadowing juga dapat mendefinisikan ulang access level, signature, dan return type, sementara Overriding harus menggunakan
semua
parameter
yang
sama
seperti induknya.
Abstraction Abstraction
merupakan
satu
dari
dua
implementasi nyata konsep polymorphism dalam OOP. Absract Class merupakan class yang tidak bisa di-instiate atau tidak bisa dibuat instance nya . Analogi nya adalah class Food, tidak pernah ada ditemukan object dari Food, yang ada adalah object dari Carrot, Apple, Rice, dsb. Itu semua karena Food merupakan konsep abstrak dari segala sesuatu yang bisa dimakan. Tidak ada object dari Food. Dalam Abstract Class, sering dijumpai adanya Abstract Method (selain method normal). Abstract
Method
adalah
method
yang
tidak
memiliki method body, dengan kata lain hanya ada deklarasi nama method, parameter, dan return type nya saja. Subclass dari sebuah Abstract Class yang harus
menyediakan body
untuk setiap
Abstract Method yang dimiliki superclass nya (kecuali
subclass
tersebut
juga
merupakan 51
Abstract
Class).
Keyword
MustInherit
digunakan untuk membuat suatu class menjadi abstract dan MustOverride untuk membuat suatu method menjadi abstract. Deklarasi Abstract Class beserta Abstract Method adalah:
Public MustInherit Class Food Public Sub rot()
‘ Normal Method
End Sub Public MustOverride Sub getEaten() ' Abstract Method End Class
Interface Interface
merupakan
satu
dari
dua
implementasi nyata konsep polymorphism dalam OOP.
Dalam
pengertian
umum,
Interface
mendefisikan batas komunikasi antara dua buah entity (seperti software, hardware, dan user). Dalam konsep OOP, Interface merupakan suatu kumpulan method yang harus di-override bagi yang mengimplementasikannya. interface sedangkan
digunakan untuk
Untuk
keyword
membuat Interface,
mengimplementasilan
suatu
interface digunakan keyword Implements. Public Interface MyInterface 52
Sub fly() Function getAge() As Integer End Interface
Public Class Lion Inherits Animal Implements MyInterface Public Sub fly() Implements MyInterface.fly End Sub Public Function getAge() As Integer Implements MyInterface.getAge End Function End Class
Soal-Soal 1. Apa perbedaan antara Class dengan Object? Buatlah 3 contoh Class dengan masing-masing 2 Object. 2. Apa yang dimaksud dengan Property dan Method? Buatlah property dan method dari 3 class yang telah anda buat. 3. Apa yang dimaksud dengan Encapsulation, Inheritance, dan Polymorphism? 4. Apa perbedaan antara method overloading, method overriding, serta method shadowing? 5. Apa yang dimaksud dengan Shared member, Abstract Class, Abstract Method, serta Interface?
53
BAB 4. FILE STREAMING File Manipulation .NET memiliki kemampuan untuk melakukan manipulasi file ataupun directory. Class yang digunakan adalah File dan Directory.
Keduanya
ada
di
namespace
System.IO.
Pembuatan object bisa dilakukan dengan menuliskan nama file nya langsung, baik secara absolut maupun secara relatif. Alamat absolut berarti menuliskan alamat secara lengkap, yaitu mulai dari drive yang bersangkutan, lalu folder, subfolder, dan sampai pada nama file yang bersangkutan. Sedangkan alamat relatif akan cukup
menuliskan
subfolder
serta nama
file
yang
bersangkutan, namun dihitung dari folder tempat dimana aplikasi itu berjalan.
Gambar 20: Penggunaan alamat absolute dan relatif 54
Note: Pada .NET alamat relatif maupun absolut bisa dipisahkan dengan slash (/) maupun back-slash (\).
Pada class File, banyak method yang dideklarasikan shared, sehingga object dari File tidak perlu dibuat. Method yang sering dipakai adalah: •
Exists() Î Mengecek apakah file tersebut ada atau tidak. Akan bernilai true jika ada dan false jika tidak ada.
•
Create(String) dan CreateText(String) Î Membuat
file
baru.
Create
FileStream
(I/O
untuk
CreateText
akan
akan file
me-return
me-return
biner)
dab
StreamWriter
(Output untuk file teks). Jika file tersebut sudah ada, file lama akan dihapus dan diganti dengan file kosong yang baru. •
AppendText(String) Î Membuka file untuk ditulis. Akan dibahas lebih lanjut pada sub bab berikutnya.
•
Copy(String, String) Î Meng-copy file dari source ke destination.
•
Delete(String) Î Menghapus file.
•
Open, OpenRead, OpenText, OpenWrite Î Membuka file untuk keperluan I/O. Akan me-return Stream dari file yang bersangkutan (FileStream, StreamReader, ataupun StreamWriter).
55
•
Î Membaca semua
ReadAllText(String)
baris file teks, me-return String yang berisi semua teks dari file tersebut, dan menutup Stream. •
ReadAllLines(String)
Î Membaca semua
baris file teks, me-return Array of String yang masing-masing berisi baris dari file tersebut, dan menutup Stream.
Pada
class
Directory,
banyak
method
yang
dideklarasikan shared, sehingga object dari Directory tidak perlu dibuat. Method yang sering dipakai adalah: •
Exists() Î Mengecek apakah directory tersebut ada atau tidak. Akan bernilai true jika ada dan false jika tidak ada.
•
CreateDirectory(String)
Î
Mengecek
apakah directory tersebut ada atau tidak. Akan bernilai true jika ada dan false jika tidak ada. •
GetFiles(String) Î Mengambil semua file yang ada di directory tersebut.
•
GetDirectories(String) Î Mengambil semua directory yang ada di directory tersebut.
•
Delete(String) Î Menghapus directory.
•
GetCurrentDirectory()
Î
Mengambil
directory yang saat ini sedang aktif. •
SetCurrentDirectory(String)
Î
Men-set
directory aktif.
56
File I/O File I/O berarti melakukan pembacaan (Input) dan penulisan (Output) dari dan ke file. Untuk membaca dan menuliskan file secara teks digunakan StreamReader dan StreamWriter, sedangkan untuk membaca dan menuliskan file secara biner digunakan FileStream. StreamWriter Class StreamWriter digunakan untuk menuliskan output ke suatu file. Penulisan bisa dilakukan seperti menulis pada console, yaitu dengan menggunakan method Write dan WriteLine. Jangan lupa untuk menutup stream jika sudah selesai atau perubahan yang terjadi pada file tersebut tidak akan disimpan.
Dim f As New StreamWriter("C:\Dummy.txt") f.WriteLine("Hello World") f.Close()
Program tersebut akan membuat file dengan nama “Dummy.txt” dan menuliskan “Hello World” ke file tersebut. Jika file sudah ada, maka file sebelumnya akan dihapus dan
diganti
dengan
file
kosong.
Jika
ingin
mempertahankan file lama dan menambah (append) isi file tersebut bisa digunakan constructor:
Dim f As New StreamWriter("C:\Dummy.txt", True)
57
Selain
menggunakan
constructor
dari
StreamWriter, bisa dibuat dengan cara lain yaitu dengan menggunakan class File:
Dim f As StreamWriter = File.CreateText("C:\MyFile.txt") ‘ Untuk overwrite mode Dim f As StreamWriter = File.AppendText("C:\MyFile.txt") ‘ Untuk append mode
StreamReader Class StreamReader digunakan untuk membaca data dari suatu file. Pembacaan bisa dilakukan seperti pada console yaitu dengan menggunakan method Read dan ReadLine, dengan tambahan satu fungsi lagi yaitu ReadToEnd.
Penutupan
stream
tetap
disarankan
walaupun tidak mempengaruhi hasil.
Dim f As New StreamReader("C:\Dummy.txt") Dim s As String Do s = f.ReadLine Console.WriteLine(s) Loop While (s <> "") f.Close() Program
akan
membuka
file
dengan
nama
“Dummy.txt” dan melakukan pembacaan dari awal sampai akhir file. Method ReadLine akan bernilai zero-length String (“”) apabila sudah tidak ada lagi data yang bisa dibaca (dengan kata lain sudah mencapai End of File). 58
Jika memang ingin membaca seluruh file, bisa digunakan perintah ReadToEnd. Contoh:
Console.WriteLine(f.ReadToEnd) Pembacaan untuk String Pada StreamReader sebenarnya menggunakan sistem pointer atau istilah yang lebih mudah dimengerti adalah kursor. Saat pertama kali stream dibuka, pointer akan selalu berada di BOF (Beginning of File). Setiap kali dilakukan pembacaan pointer akan bergerak maju sampai akhirnya mencapai EOF (End of File) dan tidak membaca apapun lagi.
Gambar 21: Tentang Pointer
Dimulai dari BOF, perintah ReadLine akan membaca dari pointer saat ini sampai ditemukan EOL (End of Line) atau EOF, dan pointer akan bergeser ke EOL tersebut. EOL sebenarnya berisi 2 karakter (CR & LF). Pembacaan ReadLine berikutnya akan membaca dari posisi 13 sampai ditemukan EOL lagi. Pointer akan bergeser ke EOL tersebut dan seterusnya. Sedangkan
59
ReadToEnd akan membaca dari posisi pointer saat ini sampai EOF. Sedangkan untuk perintah
Read
dan
Peek,
keduanya sama-sama membaca 1 karakter (return type nya adalah Integer yang berisikan kode ASCII nya), namun Read akan menggeser posisi pointer sebanyak 1 karakter sedangkan Peek tidak menggeser pointer sama sekali. Perbandingannya adalah: •
Pada saat ada di BOF, jika dilakukan Peek, maka akan di-return ASCII dari “H”, namun pointer
masih
di
BOF,
sehingga
bila
dilakukan pembacaan ReadLine, hasilnya akan tetap “Hello World”. •
Pada saat ada di BOF, jika dilakukan Read, maka akan di-return ASCII dari “H”, pointer akan bergeser di posisi 0, sehingga bila dilakukan pembacaan ReadLine, hasilnya akan menjadi “ello World”.
FileStream Class FileStream digunakan untuk membaca dan menulis data dari dan ke suatu file secara biner. Bentuk stream ini berbeda dari StreamWriter maupun StreamReader, namun bisa menjalankan fungsi dari 2 class tersebut. FileStream menyediakan pembacaan secara biner, yang berarti semua karakter akan dianggap bukan sebagai teks, melainkan sebagai kode-kode ASCII. Constructor dari FileStream sendiri sangat banyak, yang paling mudah digunakan adalah constructor pertama 60
yang hanya menyertakan nama file dan file mode nya. Deklarasinya adalah:
Dim fs As New FileStream("C:\MyFile.txt", FileMode.Open)
FileMode: •
Append: Membuka file dan menempatkan pointer pada EOF sehingga ketika stream ditulis akan ditambahkan (append) ke file.
•
Create: Membuat file baru. Jika file sudah ada, akan dihapus dan diganti dengan file baru yang masih kosong.
•
CreateNew: Membuat file baru. Jika file sudah ada, akan menghasilkan exception.
•
Open:
Membuka
file
untuk
dibaca
dan
menempatkan pointer pada BOF. •
OpenOrCreate: Membuka file untuk dibaca jika file sudah ada. Jika file belum ada akan membuat file baru.
•
Truncate: Membuka file dan menghapus seluruh isi file tersebut.
Contoh:
Dim fs As New FileStream("C:\Dummy.txt", FileMode.Open) For i As Integer = 0 To fs.Length - 1 Console.WriteLine(Chr(fs.ReadByte)) Next fs.Close() 61
Class FileStream mempunyai masing-masing 2 cara membaca dan menulis (Read, ReadByte, Write, WriteByte). ReadByte dan WriteByte digunakan untuk membaca dan menulis satu karakter (dalam kode ASCII) sedangkan Read dan Write digunakan untuk membaca dan menulis beberapa karakter sekaligus dengan menggunakan array (dalam kode ASCII juga).
Soal-Soal 1. Buatlah suatu aplikasi yang menanyakan nama, alamat, dan umur untuk n user dan kemudia simpanlah informasi tersebut ke dalam suatu file teks. 2. Buatlah aplikasi untuk membaca file teks dari soal nomor 1 dan menampilkannya ke layer.
62