Anda di halaman 1dari 129

Kata Pengantar

Perkembangan teknologi dan informasi dewasa ini semakin menuntut otomasi yang dapat membuat banyak hal yang sebelumnya tidak dapat diperoleh. Namun demikian hal ini menuntut pemahaman pemrograman yang tidak sederhana untuk pemula. Hal ini terutama karena sintaks dan alur program yang mungkin baru pertama kali ditemui. Pengembangan selanjutnya akan lebih mudah jika konsep pemrograman berorientasi objek (object oriented ) digunakan. Hal ini memungkinkan penggunaan bagian dari program digunakan kembali untuk bagian lain (reusable) dari program tersebut atau bahkan dari program lain. Salah satu bahasa komputer yang dapat memenuhi pemrograman berorientasi objek tersebut adalah bahasa Java. Bahasa ini merupakan bahasa yang tidak tergantung pada platform (operating system dan hardware) serta mempunyai banyak fasilitas antara lain untuk pemrograman berorientasi objek, graphic user interface dan internet. Diktat ini diharapkan berfungsi sebagai panduan untuk matakuliah dan praktikum pemrograman komputer. Mahasiswa diharapkan membaca pula detail pembahasan yang terdapat dalam buiku-buku teks berbahasa Inggris mengenai pemrograman komputer dengan JAVA. Praktikum diharapkan diselenggarakan dengan dibantu oleh asisten. Praktikum dilakukan dengan menggunakan kompiler Java Development Kit (JDK) yang dapat didownload gratis melalui http://java.sun.com/. Untuk kemudahan pemrograman, IDE Netbeans digunakan. Netbeans dapat didownload gratis melalui http://www.netbeans.org. Bobot penilaian praktikum adalah 30% dari seluruh nilai pada pelajaran pemrograman komputer. Beberapa contoh latihan yang tercantum dalam diktat diharapkan dipahami oleh mahasiswa. Diktat ini masih dalam taraf awal dan masih terus dikembangkan, terutama bersumber pada tutorial yang dapat didownload secara gratis dari http://java.sun.com/docs/books/tutorial/. Setelah di download, le tersebut perlu di uncompress.. Tutorial tersebut juga sudah dibukukan dengan judul The Java Tutorial: Second Edition. Namun buku

Gambar 0.1: Cover depan buku The Java Tutorial. tersebut ketinggalan perkembangannya dibandingkan dengan tutorial di internet yang selalu diperbaharui. Segala kritik dan saran sangat diharapkan untuk penyempurnaan diktat ini. Penulis dapat dihubungi melalui e-mail dengan alamat purwanto agus@yahoo.com. Perkembangan lebih lanjut mengenai diktat ini dapat dilihat melalui web site http://apurwanto.110mb.com/. Tugas-tugas praktikum dapat dilihat, dibaca, dikomentari dan ditanyai di http://pemrograman-komputer-java.blogspot.com/

Agus Purwanto Ph.D. Karawaci: October 13, 2009 i

ii

October 13, 2009

ii

Pemrograman Komputer : Bahasa Java

Daftar Isi
Kata Pengantar i

I Memulai
1 Fenomena Java 1.1 Apakah Java ? . . . . . . . . . . . . . . . . 1.1.1 Bahasa Pemrograman Java . . . . . 1.1.2 Platform Java . . . . . . . . . . . . 1.2 Apa yang dapat dilakukan oleh Java ? . . . 1.3 Bagaimana Java bisa merubah hidup saya ? 2 Aplikasi Hello World 2.1 Membuat dan Menggunakan Aplikasi Java 2.1.1 Membuat File Sumber . . . . . . 2.1.2 Kompilasi File Sumber . . . . . . 2.1.3 Mengeksekusi Aplikasi . . . . . . 2.1.4 Bagaimana Selanjutnya ? . . . . . 2.2 Anatomi Aplikasi Java . . . . . . . . . . 2.2.1 Komentar pada code Java . . . . . 2.2.2 Pendenisian Sebuah Class . . . . 2.2.3 Metoda main . . . . . . . . . . . 2.2.4 Penggunaan class dan objek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1
3 3 3 4 4 5 7 7 7 7 7 7 8 8 8 8 9 11 11 11 11 12 12

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

3 Applet Hello World 3.1 Membuat File Sumber Java . . . . . . . . . . . 3.2 Kompilasi File Sumber . . . . . . . . . . . . . 3.3 Membuat File HTML yang mengandung Applet 3.4 Mengeksekusi Applet . . . . . . . . . . . . . . 3.5 Bagaimana selanjutnya . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

II Belajar Bahasa Pemrograman Java


4 Konsep Pemrograman Berorientasi Objek 4.1 Objek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Pesan/Stimulus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Bagaimana Konsep Orientasi Objek Diterjemahkan kedalam Code ? 4.7 Pertanyaan dan Latihan: Konsep Object-Oriented . . . . . . . . . . 4.7.1 Pertanyaan . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.2 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.3 Jawaban . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13
15 16 17 18 20 21 21 22 22 22 23

iv 5 Dasar Bahasa 5.1 Variabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Tipe Data . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.2 Nama Variabel . . . . . . . . . . . . . . . . . . . . . . 5.1.3 Lingkup . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.4 Inisialisasi Variabel . . . . . . . . . . . . . . . . . . . . 5.1.5 Variabel final . . . . . . . . . . . . . . . . . . . . . . 5.1.6 Pertanyaan dan Latihan: Variabel . . . . . . . . . . . . 5.1.7 Jawaban . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Operator Aritmatika . . . . . . . . . . . . . . . . . . . 5.2.2 Operator Relasi dan Syarat . . . . . . . . . . . . . . . . 5.2.3 Operator Geser dan Logika . . . . . . . . . . . . . . . . 5.2.4 Operator assignment . . . . . . . . . . . . . . . . . . . 5.2.5 Operator Lain . . . . . . . . . . . . . . . . . . . . . . . 5.2.6 Pertanyaan dan Latihan: Operator . . . . . . . . . . . . 5.2.7 Jawaban . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Ekspresi, Pernyataan dan Blok . . . . . . . . . . . . . . . . . . 5.3.1 Ekspresi . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.2 Pernyataan . . . . . . . . . . . . . . . . . . . . . . . . 5.3.3 Blok . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.4 Rangkuman . . . . . . . . . . . . . . . . . . . . . . . . 5.3.5 Pertanyaan dan Latihan: Ekspresi, Pernyataan dan Blok 5.3.6 Jawaban . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Pernyataan Kontrol Alur . . . . . . . . . . . . . . . . . . . . . 5.4.1 Pernyataan while dan do-while . . . . . . . . . . . . 5.4.2 Pernyataan for . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Pernyataan if/else . . . . . . . . . . . . . . . . . . . 5.4.4 Pernyataan switch . . . . . . . . . . . . . . . . . . . . 5.4.5 Pernyataan Exception Handling . . . . . . . . . . . . . 5.4.6 Pernyataan Pencabangan . . . . . . . . . . . . . . . . . 5.4.7 Rangkuman Pernyataan Kontrol Alur . . . . . . . . . . 5.4.8 Pertanyaan dan Latihan: Kontrol Alur . . . . . . . . . . 5.4.9 Jawaban . . . . . . . . . . . . . . . . . . . . . . . . . .

DAFTAR ISI
27 27 28 29 29 30 31 31 32 33 33 36 38 40 40 41 42 43 43 43 44 44 45 45 46 46 47 48 49 51 52 54 56 57 61 61 62 64 66 66 67 68 69 70 70 71 73 74 75 75 76 77 78 81 82 82 83 84

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Dasar-Dasar Objek 6.1 Siklus Berlakunya Objek . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Pembuatan Objek . . . . . . . . . . . . . . . . . . . . . . . 6.1.2 Penggunaan Objek . . . . . . . . . . . . . . . . . . . . . . 6.1.3 Membersihkan Objek yang tak digunakan . . . . . . . . . . 6.1.4 Rangkuman Pembuatan dan Penggunaan Objek . . . . . . . 6.1.5 Pertanyaan dan Latihan: Membuat dan Menggunakan Objek 6.1.6 Jawaban . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Character dan String . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 Mengapa class two string ? . . . . . . . . . . . . . . . . . . 6.2.2 Membuat String dan StringBuffer . . . . . . . . . . . . 6.2.3 Metoda Accessor . . . . . . . . . . . . . . . . . . . . . . . 6.2.4 Modikasi StringBuffer . . . . . . . . . . . . . . . . . . 6.2.5 Mengkonversi Objek ke String . . . . . . . . . . . . . . . . 6.2.6 Mengkonversi String ke Bilangan . . . . . . . . . . . . . . 6.2.7 String dan Kompiler Java . . . . . . . . . . . . . . . . . . . 6.2.8 Rangkuman String . . . . . . . . . . . . . . . . . . . . . . 6.2.9 Pertanyaan dan Latihan: String . . . . . . . . . . . . . . . . 6.2.10 Jawaban . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Bilangan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.1 Membuat dan Menggunakan Array . . . . . . . . . . . . . 6.4.2 Array dari Objek . . . . . . . . . . . . . . . . . . . . . . . 6.4.3 Array dari Array . . . . . . . . . . . . . . . . . . . . . . . iv

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

October 13, 2009

Pemrograman Komputer : Bahasa Java

DAFTAR ISI 6.4.4 6.4.5 6.4.6 Mengkopi Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rangkuman mengenai Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pertanyaan dan Latihan: Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

v 85 85 86 87 87 87 88

7 Generic 7.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.1 Class box sederhana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Jenis Generik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

III Menulis Applet


8 Tinjauan Applet 8.1 Applet sederhana . . . . . . . . . . . . . . . 8.2 Siklus Berlakunya Applet . . . . . . . . . . . 8.3 Metoda untuk Milestones . . . . . . . . . . . 8.4 Metoda untuk Drawing dan Event Handling . 8.5 Metoda untuk Menambah Komponen UI . . . 8.6 Yang dapat dan tidak dapat dilakukan Applet 8.6.1 Batasan Keamanan . . . . . . . . . . 8.6.2 Kemampuan Applet . . . . . . . . . 8.7 Test Drive Applet . . . . . . . . . . . . . . . 8.8 Kesimpulan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

91
93 93 94 94 95 95 95 95 95 95 96 97 97 98

9 Keuntungan API Applet 9.1 Menemukan dan Memuat File Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2 Menampilkan String Status Ringkas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 Pertimbangan Praktis untuk Penulisan Applet 99 10.1 Batasan keamanan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 10.2 Membuat User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 11 Class Java Penting 11.1 Penggunaan String dan StringBuffer . . . . . . 11.1.1 Mengapa menggunakan class dua string 11.1.2 Membuat String dan StringBuffer . 11.1.3 Metoda Accessor . . . . . . . . . . . . 11.1.4 Merubah StringBuffer . . . . . . . . 11.1.5 Merubah Object menjadi String . . . . 11.1.6 Mengkonversi String menjadi Angka . 11.1.7 String dan kompiler Java . . . . . . . . 11.1.8 Hal menarik lainnya . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 101 102 102 103 104 105 105 105 105 107 107 107 109 112 112 114 115 115 117 118 118 121

12 Soal-Jawab UTS dan UAS, Pemrograman Komputer 12.1 UTS Genap, 2000/2001, Rabu/21-03-2001, jam 10.00-11.40 12.1.1 Soal . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.2 Jawaban . . . . . . . . . . . . . . . . . . . . . . . . 12.2 UTS 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.1 Soal . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.2 Jawaban . . . . . . . . . . . . . . . . . . . . . . . . 12.3 UAS 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.1 Soal . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.2 Jawaban . . . . . . . . . . . . . . . . . . . . . . . . 12.4 UTS 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4.1 Soal . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4.2 Jawaban . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

Agus Purwanto, Ph. D

October 13, 2009

vi

DAFTAR ISI

October 13, 2009

vi

Pemrograman Komputer : Bahasa Java

Bagian I

Memulai

Bab 1

Fenomena Java
Java banyak ditemui di internet. Bagi pemrogram Java baru, beberapa hal yang sering ditanyakan adalah:

1.1 Apakah Java ?


Java dapat merupakan bahasa pemrograman ataupun suatu platform.

1.1.1 Bahasa Pemrograman Java


Java adalah bahasa pemrograman tingkat tinggi yang: 1. Sederhana 2. Berorientasi objek 3. Distributed 4. Interpreted 5. Robust 6. Aman 7. Architecture-neutral 8. Portabel 9. Berunjuk kerja tinggi 10. Multithreaded 11. Dynamic Java juga tidak umum, karena masing-masing program Java dikompilasi dan diinterpretasi. Dengan kompiler, program Java diterjemahkan ke dalam bahasa menengah yang disebut sebagai Java bytecodes yang merupakan code bebas platform yang kemudian diinterpretasikan dengan Java interpreter. Dengan interpreter masing-masing instruksi dari Java bytecodes diurai dan dijalankan pada komputer. Proses kompilasi terjadi hanya sekali, sedangkan interpretasi terjadi setiap kali program dieksekusi. Java bytecode dapat dianggap sebagai instruksi kode mesin untuk Java Virtual Machine (Java VM). Setiap interpreter Java, apakah itu berupa fasilitas pengembangan Java atau Web browser yang dapat mengeksekusi applet Java, merupakan implementasi dari Java VM. Java VM dapat pula diimplementasikan dalam perangkat keras. Java bytecodes memungkinkan proses tulis sekali, eksekusi dimana-mana. Program Java dapat dikompil menjadi bytecode pada sembarang platform yang mempunyai kompiler Java. Bytecode tersebut kemudian dapat dieksekusi pada setiap implementasi Java VM. Misalkan, program Java yang sama dapat dirun di Windows NT, Solaris dan Macintosh. 3

BAB 1. FENOMENA JAVA

1.1.2 Platform Java


Suatu platform adalah lingkungan perangkat keras/lunak dimana suatu program dieksekusi. Platform Java berbeda dari kebanyakan platform lain dalam hal hanya platform perangkat lunak yang berfungsi diatas platform perangkat keras. Kebanyakan platform lain merupakan kombinasi dari perangkat keras dan sistem operasi. Platform Java mempunyai dua komponen: 1. Java Virtual Machine (Java VM) 2. Java Application Programming Interface (Java API). Java VM telah dibahas di atas. Java VM merupakan dasar dari platform Java dan berguna untuk berbagai platform berbasis perangkat keras. Java API adalah sekumpulan besar komponen perangkat lunak siap pakai yang memberi banyak fasilitas seperti widget Graphical User Interface (GUI). Java API dikelompokkan kedalam library (paket) dari komponen yang berkaitan. Sebagai lingkungan dengan platform bebas, Java sedikit lebih lambat daripada code native. Namun demikian, kompiler pandai, interpreter yang diatur dengan baik, dan kompiler bytecode just-in-time dapat memperbaiki unjuk kerja Java mendekati code native tanpa mengorbankan portabilitas.

1.2 Apa yang dapat dilakukan oleh Java ?


Program Java yang mungkin paling dikenal adalah Java applet. Applet adalah program Java yang menggunakan aturan tertentu yang memungkinkan dapat dieksekusi dalam browser yang mengandung Java VM. Namun demikian, Java tidak hanya berguna untuk menulis applet yang manis dan menghibur untuk Web. Java adalah bahasa pemrograman tingkat tinggi dan banyak fungsi dengan platform bebas. Dengan menggunakan Java API yang berlimpah, banyak macam aplikasi yang dapat dibuat. Tipe yang mungkin paling umum adalah applet dan aplikasi. Aplikasi Java adalah program berdiri sendiri yang dapat dieksekusi langsung pada platform Java. Aplikasi khususnya adalah server yang melayani dan mendukung client pada jaringan. Contoh server adalah server untuk Web, proxy, mail, print dan boot. Program khusus lain adalah servlet. Servlet mirip dengan applet dalam hal perluasan runtime untuk aplikasi. Namun demikian, servlet dieksekusi dalam server Java yang disesuaikan dengan server. Bagaimana Java API mendukung semua jenis program seperti di atas ? Jawabannya adalah dengan menggunakan paket dari komponen perangkat lunak yang memberikan kegunanaan yang luas. API inti adalah API yang selalu dilibatkan pada seluruh implementasi platform Java. API inti memberikan: 1. Esensial: objek, string, thread, bilangan, input dan output, struktur data, sifat sistem, tanggal dan waktu, dan lain-lain. 2. Applet: seperangkat aturan yang digunakan oleh applet Java. 3. Networking: soket URL, TCP dan UDP serta alamat IP 4. Internasionalisasi: membantu penulisan program yang dapat dilokalisasi oleh pengguna didunia. Program dapat secara otomatis menyesuaikan ketentuan lokal dan dapat ditampilkan dengan bahasa yang sesuai ditempat itu. 5. Keamanan: tingkat rendah dan tinggi, termasuk tanda elektronik manajemen kunci public/privat, kontrol akses dan sertikat. 6. Komponen perangkat lunak: dikenal sebagai JavaBeans, dapat dihubungkan dengan arsitektur komponen yang sudah ada seperti arsitektur Microsoft OLE/COM/Active-X, OpenDoc, dan Live Connect dari Netscape. 7. Object serialization: memungkinkan komunikasi dengan Remote Method Invocation (RMI). 8. Java Database Connectivity (JDBC): memungkinkan akses seragam ke database relational yang luas. Java tidak hanya mempunyai inti API, namun juga perluasan standard. Perluasan standard mendenisikan API untuk 3D, server, kerjasama, telepon, pembicaraan, animasi dan masih banyak lagi. October 13, 2009 4

Pemrograman Komputer : Bahasa Java

1.3. BAGAIMANA JAVA BISA MERUBAH HIDUP SAYA ?

1.3 Bagaimana Java bisa merubah hidup saya ?


Kita tidak bisa menjanjikan kemashuran, keberuntungan atau bahkan pekerjaan jika anda mempelajari Java. Namun demikian, Java memungkinkan pemrograman yang lebih baik dengan usaha kurang dibandingkan dengan bahasa pemrograman lain. Kita yakin bahwa Java akan membantu beberapa hal berikut : 1. Mudah dimulai: walaupun Java merupakan bahasa pemrograman berorientasi objek yang canggih, Java mudah dipelajari terutama untuk pemrogram yang sudah terbiasa dengan C atau C++. 2. Penulisan Code lebih ringkas: Perbandingan metrik program (perhitungan class, perhitungan metoda, dan seterusnya) menunjukkan bahwa program yang ditulis dengan Java bisa 4 kali lebih kecil bila ditulis dengan C++. 3. Penulisan code lebih baik: bahasa pemrograman Java mendorong penulisan code yang baik dan pengumpulan sampahnya membantu anda menghindari kebocoran memori. Orientasi objeknya, arsitektur komponen JavaBean, dan API yang menyeluruh dan dapat diperluas memungkinkan anda menggunakan code orang yang telah diuji sehingga mengurangi kemunculan bug. 4. Pengembangan program lebih cepat: waktu pengembangan bisa 2 kali lebih cepat dibandingkan dengan menggunakan C++. Mengapa ? jumlah baris dengan Java adalah kurang dibandingkan dengan jumlah baris dengan C++ dan Java merupakan bahasa pemrograman yang lebih mudah. 5. Menghindari ketergantungan terhadap platform dengan Java murni 100%: anda dapat mempertahankan program portable dan menghindari penggunaan library yang ditulis dengan bahasa pemrograman lain. 6. Menulis sekali, dieksekusi dimana saja: Karena program Java murni 100% dikompilasi menjadi bytecodes yang bebas mesin, program tersebut dapat dieksekusi pada sembarang platform Java secara konsisten. 7. Penyebaran perangkat lunak lebih mudah: Applet dapat diupgrade dengan mudah dari server pusat. Applet memungkinkan penggunaan unjuk kerja Java yang menguntungkan dalam hal penggunaan class baru on the y, tanpa rekompilasi program secara menyeluruh. Program pada dua bagian berikut menunjukkan sedikit dari unjuk kerja di atas. Namun demikian, karena anda perlu mulai dari sesuatu, mengapa tidak mulai dengan Hello World. Dari sini, anda dapat mengerjakan beberapa hal berikut: 1. Pergi ke bab berikut, aplikasi Hello World, yang membimbing anda menulis dan mengeksekusi suatu aplikasi 2. Pergi ke bab sesudahnya, applet Hello World, jika anda lebih suka memulai dengan applet 3. Mempelajari lebih banyak mengenai bahasa Java melalui bab Mempelajari Bahasa Pemrograman Java.

Agus Purwanto, Ph. D

October 13, 2009

BAB 1. FENOMENA JAVA

October 13, 2009

Pemrograman Komputer : Bahasa Java

Bab 2

Aplikasi Hello World


2.1 Membuat dan Menggunakan Aplikasi Java
Dengan mengikuti tahapan pada bab ini, anda dapat membuat dan menggunakan aplikasi Java yang berdiri sendiri.

2.1.1 Membuat File Sumber


Dengan menggunakan editor teks, buatlah le yang diberi nama HelloWorldApp.java dengan code berikut: /** * The HelloWorldApp class implements an application that * simply displays "Hello World!" to the standard output. */ class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); //Display the string. } }

2.1.2 Kompilasi File Sumber


Kompilasi le sumber dengan menggunakan kompiler Java dengan cara mengetikkan javac HelloWorldApp.java pada dos prompt,lalu tekan [Enter]. Jika kompilasi sukses, kompiler membuat le dengan nama HelloWorldApp.class pada direktori yang sama dengan direktori dimana le sumber Java (HelloWorldApp.java) berada. File class ini mengandung bytecode Java, yang bebas platform dan diinterpretasikan oleh sistem runtime Java. Jika kompilasi gagal, pastikan bawa anda mengetikkan dan memberi nama program tepat seperti yang ditunjukkan di atas, dengan menggunakan kapitalisasi tersebut. Jika anda tidak dapat menemukan sumber kesalahannya, Problem Kompiler mungkin berguna bagi anda.

2.1.3 Mengeksekusi Aplikasi


Eksekusi program anda dengan menggunakan interpreter Java. Caranya adalah dengan cara mengetikkan java HelloWorldApp pada dos prompt, lalu tekan [Enter]. Kemudian, anda seharusnya dapat melihat Hello World! tampil di layar komputer anda. Jika gagal, lihat Problem Interpreter.

2.1.4 Bagaimana Selanjutnya ?


Berikutnya, anda dapat: 1. Melanjutkan untuk mempelajari lebih lanjut mengenai anatomi aplikasi, bagaimana aplikasi Hello World bekerja, dan bagaimana bahasa pemrograman Java menerapkan konsep orientasi objek. 2. Pergi ke bab berikutnya, Applet Hello World, yang menuntun anda menulis dan mengeksekusi suatu applet, sekaligus memperkenalkan beberapa unjuk kerja Java lebih jauh. 7

BAB 2. APLIKASI HELLO WORLD

2.2 Anatomi Aplikasi Java


Sekarang anda telah melihat aplikasi Java (dan bahkan mungkin mengkompilasi dan mengeksekusinya), anda mungkin bertanya bagaimana cara kerjanya dan bagaimana kemiripannya dengan aplikasi Java lainnya. Ingat bahwa aplikasi Java adalah program Java yang berdiri sendiri suatu program yang ditulis dalam bahasa pemrograman Java yang dapat dieksekusi pada sembarang browser.

Penting Jika anda tidak tertarik dengan aplikasi Java, anda telah paham dengan konsep orientasi objek, dan anda mengerti code Java sampai saat ini, anda bebas untuk melompat ke Menulis Applet.

2.2.1 Komentar pada code Java


Aplikasi Hello World pada subbab 2.1.1 mempunyai dua blok komentar. Blok pertama, pada bagian atas program, menggunakan pembatas /** dan */. Berikutnya, sebaris code dijelaskan dengan komentar yang diberi tanda dengan //. Java juga mendukung jenis komentar yang ketiga yang umum digunakan juga di C atau C++ yaitu pembatas /* dan */.

2.2.2 Pendenisian Sebuah Class


Blok denisi class dimulai dengan kata class dan berakhir sampai dengan kurung kurawal tutup. Sebuah class merupakan blok bangunan mendasar dari suatu bahasa pemrograman berorientasi objek seperti Java. Class merupakan template yang menjelaskan data dan ifat yang berkaitan dengan instance dari class tersebut. Data yang berkaitan dengan class atau objek disimpan dalam variabel; sifat yang berkaitan dengan class atau objek diimplementasikan dengan metoda. Metoda mirip dengan fungsi atau prosedur dalam bahasa prosedural seperti C. Contoh tradisional dari dunia pemrograman adalah suatu class mengenai segi-empat. Class mengandung variabel titik awal segi empat, lebar dan tingginya. Class mungkin juga mengandung suatu metoda untuk menghitung luasnya. Suatu instance dari class segi-empat akan mengandung informasi untuk segi-empat tertentu seperti dimensi dari lantai di kantor, atau dimensi dari halaman ini. Dalam bahasa pemrograman Java, bentuk paling sederhana dari suatu denisi class adalah class name{ ..... } Kata kunci class memulai denisi class untuk suatu class bernama name. Variabel dan metoda dari class diapit dengan kurung kurawal yang mengawali dan mengakhiri blok denisi class. Aplikasi Hello World tidak mempunyai variabel dan mempunyai satu metoda bernama main. Untuk informasi mengenai konsep orientasi objek, lihat konsep pemrograman orientasi objek. Untuk mempelajari bagaimana konsep orientasi objek diimplementasikan dalam bahasa pemrograman Java, lihat Objek dan Class dalam Java.

2.2.3 Metoda main


Setiap aplikasi Java harus mengandung satu metoda main dengan sintaks berikut: public static void main(String[] args) Sintaks tersebut terdiri dari 3 modier: 1. public menunjukkan bahwa metoda main dapat dipanggil oleh sembarang objek. Kontrol akses untuk member dari class membahas modier akses yang didukung oleh bahasa pemrograman Java. 2. static menunjukkan bahwa metoda main adalah suatu metoda class. Pemahaman instans dan anggota class membahas metoda dan variabel class. 3. void menunjukkan metoda main tidak mengembalikan nilai apapun. October 13, 2009 8

Pemrograman Komputer : Bahasa Java

2.2. ANATOMI APLIKASI JAVA Bagaimana metoda main bisa dipanggil ?

Metoda main dalam bahasa pemrograman Java mirip dengan fungsi main dalam C dan C++. Ketika interpreter Java mengeksekusi suatu aplikasi, eksekusi tersebut dimulai dengan memanggil metoda main. Metoda main kemudian memanggil semua metoda lain yang dibutuhkan untuk mengeksekusi aplikasi anda. Jika anda mencoba untuk menerapkan interpreter Java pada class yang tidak mempunyai metoda main, interpreter menolak dan menampilkan pesan salah seperti: In class NoMain: void main(String argv[]) is not defined Argumen pada metoda main Sebagaimana dapat dilihat pada potongan code berikut ini, metoda main menerima argumen tunggal: suatu array dengan elemen bertipe string. public static void main(String[] args) Array ini merupakan mekanisme untuk melalukan informasi dari sistem runtime ke aplikasi anda. Masing-masing string dalam array disebut sebagai command-line argument. Argumen tersebut memungkinkan pengguna merubah operasi dalam aplikasi tanpa rekompilasi. Misalnya, program pengurutan memungkinkan penguna untuk menspesikasi data diurutkan secara menurun dengan command-line argument: -descending Aplikasi Hello World mengabaikan command-line argumentnya, sehingga tidak banyak yang dapat dibahas disini. Namun demikian, anda dapat memperoleh informasi lebih lanjut, termasuk kerangka untuk pengurai command-line yang dapat anda modikasi sesuai dengan kebutuhan anda, dalam bab setting atribut program.

Penting Catatan uintuk pemrogram C dan C++: Bilangan dan tipe argumen yang dilalukan dalam metoda main pada lingkungan runtime Java berbeda dari jumlah dan tipe argumen yang dilalukan pada fungsi main untuk C dan C++. Untuk informasi lebih lanjut lihat command-line arguments dalam bab mengenai setting atribut program.

2.2.4 Penggunaan class dan objek

Disini dibahas bagaimana aplikasi Hello World menggunakan class dan object. Jika anda belum memahami konsep orientasi objek, anda bisa bingung disini. Jika demikian, silahkan untuk membaca bab Konsep Pemrograman Berorientasi Obje Aplikasi Hello World merupakan program Java paling sederhana yang dapat anda tulis dan berfungsi dengan baik. Karena kesederhanaannya, tidak ada class lain kecuali HelloWorldApp. Namun demikian, kebanyakan program yang dibuat biasanya kompleks dan membutuhkan class lain dan code Java pendukung. Aplikasi Hello World ternyata menggunakan class lain class System yang merupakan bagian dari API (Application Programming Interface) yang tersedia pada lingkungan Java. Class System menyediakan akses bebas system untuk fungsi yang tergantung pada system. Untuk informasi mengenai class System, lihat Akses ke sumber system. Penggunaan Metoda Class atau Variabel Mari kita lihat potongan program System.out.println("Hello World!"); Tulisan System.out adalah nama lengkap dari variabel out dalam class System. Perhatikan bahwa aplikasi tidak pernah melakukan instance terhadap class System dan bahwa out diacu langsung dari nama class. Hal ini adalah karena out adalah variabel class variabel berkaitan dengan class tidak dengan instance dari class. Anda dapat pula menghubungkan metoda dengan class metoda class. Untuk mengacu variabel class dan metoda, anda menggabungkan nama class dan nama dari metoda class atau variabel class bersama dengan titik (.).

Agus Purwanto, Ph. D

October 13, 2009

10 Penggunaan Metoda Instance atau Variabel

BAB 2. APLIKASI HELLO WORLD

Metoda dan variabel yang bukan metoda class atau variabel class disebut sebagai metoda instance dan variabel instance. Untuk mengacu pada metoda dan variabel instance, anda harus mengacu pada metoda dan variabel dari suatu objek. Ketika variabel out milik System adalah variabel class, ia mengacu pada instance dari class PrintStream (suatu class yang tersedia dalam lingkungan pengembangan Java) yang mengimplementasi stream output standard. Ketika class System dimuat dalam aplikasi, ia melakukan instance pada PrintStream dan memberi objek PrintStream baru pada variabel class out. Karena anda sudah mempunyai suatu instance dari suatu class, anda dapat memanggil salah satu dari metoda instance: System.out.println("Hello World!"); Sebagaimana anda lihat, anda mengacu metoda dan variabel instance mirip dengan cara anda mengacu pada metoda dan variabel class. Anda menggabungkan suatu acuan objek (out) dan nama dari metoda atau variabel (println) bersama dengan sebuah titik (.). Kompiler Java memungkinkan anda menggabungkan acuan terhadap class dengan metoda dan variabel instance, menghasilkan susunan seperti pada program contoh: System.out.println("Hello World!"); Baris tersebut menampilkan Hello World! pada stream output standard dari aplikasi yang berkaitan. Rangkuman Metoda class atau variabel class berkaitan dengan class tertentu. Sistem runtime mengalokasikan variabel class sekali per class, tidak tergantung pada banyaknya instance yang terdapat pada class tersebut. Anda mengakses variabel dan metoda class melalui class. Metoda instance atau variabel instance berkaitan dengan objek tertentu (suatu instance dari suatu class). Setiap kali anda membuat suatu objek, objek baru memperoleh salinan dari setiap variabel instance yang didenisikan dalam classnya. Anda mengakses variabel dan metoda instance melalui objek.

October 13, 2009

10

Pemrograman Komputer : Bahasa Java

Bab 3

Applet Hello World


Dengan mengikuti tahapan pada bab ini, anda dapat membuat dan menggunakan suatu applet. Jika anda tidak tertarik dengan applet, anda dapat langsung menuju pembahasan Mempelajari Bahasa Pemrograman Java.

3.1 Membuat File Sumber Java


Buatlah suatu le dengan nama HelloWorld.java dengan kode Java berikut: import java.applet.Applet; import java.awt.Graphics; public class HelloWorld extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } }

3.2 Kompilasi File Sumber


Kompile le sumber dengan menggunakan kompiler Java. Sintaksnya adalah javac HelloWorld.java Jika kompilasi berhasil, kompiler menghasilkan le dengan nama HelloWorld.class dalam direktori (folder) yang sama dengan direktori dimana le sumber Java berada (HelloWorld.java). File class ini berisi bytecodes Java. Jika kompilasi gagal, pastikan bawa anda mengetikkan dan memberi nama program tepat seperti yang ditunjukkan di atas, dengan menggunakan kapitalisasi tersebut. Jika anda tidak dapat menemukan sumber kesalahannya, Problem Kompiler mungkin berguna bagi anda.

3.3 Membuat File HTML yang mengandung Applet


Dengan menggunakan editor text, buatlah le dengan nama Hello.html pada direktori yang mengandung HelloWorld.class. File HTML ini seharusnya mengandung teks berikut ini: <HTML> <HEAD> <TITLE> A Simple Program </TITLE> </HEAD> <BODY> Here is the output of my program: <APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25> </APPLET> </BODY> </HTML> 11

12

BAB 3. APPLET HELLO WORLD

3.4 Mengeksekusi Applet


Untuk mengeksekusi applet, anda perlu memuat le HTML pada aplikasi yang dapat mengeksekusi applet Java. Aplikasi ini bisa saja browser yang komptibel dengan Java atau program pelihat applet Java lainnya, seperti applet viewer yang tersedia pada JDK. Untuk memuat le HTML, anda biasanya perlu memberikan URL dari le HTML yang anda buat. Misalnya, anda bisa memasukkan sesuatu seperti berikut ini kedalam URL browser atau medan lokasi: file:/home/kwalrath/HTML/Hello.html Ketika anda sudah melengkapi tahapan-tahapan ini, dalam jendela browser anda seharusnya dapat melihat : Here is the output of my program: Hello world!

3.5 Bagaimana selanjutnya


Berikutnya, anda dapat: 1. Melanjutkan untuk mempelajari anatomi applet dan mengenai mengimpor class 2. Kembali ke Anatomi aplikasi Java jika anda belum membacanya dan jika anda tertarik untuk melihat pendahuluan cepat mengenai konsep penting Java. 3. Mempelajari lebih banyak mengenai penulisan applet 4. Kembali ke peta perjalanan untuk memperoleh tinjauan mengenai perjalanan yang dapat anda ambil.

October 13, 2009

12

Pemrograman Komputer : Bahasa Java

Bagian II

Belajar Bahasa Pemrograman Java

13

Bab 4

Konsep Pemrograman Berorientasi Objek


Jika anda belum pernah menggunakan bahasa pemrograman beriorientasi objek, anda perlu memahami denisi objek dan class serta bagaimana konsep orientasi objek diimplementasikan menjadi code pemrograman. Bab ini memberikan dasar bahasa pemrograman berorientasi objek secara umum. Bagian terakhir menunjukkan bagaimana konsep umum ini diterjemahkan kedalam code untuk applet yang ditulis dalam bahasa pemrograman Java. Berikut ini adalah hal-hal yang akan dibahas lebih lanjut dalam bab ini: 1. Dalam tinjauan pemrograman, objek adalah sekumpulan perangkat lunak dari variabel dan metoda yang berkaitan. Objek perangkat lunak sering digunakan untuk memodelkan objek dunia nyata yang anda temui dalam kehidupan sehari-hari.

Penting Secara umum, objek adalah suatu kesatuan yang menyimpan keadaan (informasi) dan memberi berbagai operasi (sifat) untuk memeriksa atau merubah keadaan tersebut. Objek ditandai dengan adanya sejumlah operasi dan keadaan yang mengingat efek dari operasi tersebut.

2. Objek-objek perangkat lunak saling berinteraksi dan berkomunikasi dengan menggunakan pesan (message). 3. Dalam tinjauan pemrograman, class adalah cetak biru atau prototype yang mendenisikan variabel dan metoda yang umum untuk semua objek yang bertipe tertentu.

Penting Secara umum, class merupakan template (cetakan) dari berbagai objek dan menggambarkan cara objekobjek tersebut disusun secara internal.

4. Suatu class menurunkan keadaan dan sifat dari superclass-nya. Penurunan merupakan mekanisme alamiah dan sangat berguna untuk mengorganisasi/menstrukturkan program. 5. Interface (antar muka) adalah kontrak dalam bentuk kumpulan metoda dan deklarasi konstan. Jika suatu class mengimplementasi suatu antar-muka, ia menjanjikan untuk mengimplementasikan semua metoda yang dideklarasikan pada antar-muka itu. 6. Bagaimana konsep ini diterjemahkan kedalam code ? Sub bab ini akan menunjukkannya pada applet kecil dan menunjukkan anda code yang menciptakan objek, mengimplentasi class, mengirim pesan, membuat superclass, dan mengimplementasikan suatu interface. 7. Pertanyaan dan Latihan: Konsep orientasi objek. Uji pemahaman anda mengenai objek, class, pesan dan lain-lain dengan melakukan beberapa latihan dan menjawab beberapa pertanyaan. 15

16

BAB 4. KONSEP PEMROGRAMAN BERORIENTASI OBJEK

4.1 Objek
Sesuai dengan istilah orientasi objek, objek merupakan kunci untuk pemahaman teknologi berorientasi objek. Anda dapat melihat sekeliling anda sekarang dan melihat banyak contoh dari objek dunia nyata: meja anda, televisi anda, sepeda anda dan lain-lain. Objek dunia-nyata ini mempunyai 2 sifat yang sama: mereka semua mempunyai keadaan (state) dan sifat (behavior). Misalkan, anjing mempunyai keadaan (nama, warna) dan sifat (menggonggong). Sepeda mempunyai keadaan (gigi sekarang, jumlah gigi, dua roda) dan sifat (mengerem, percepatan, perlambatan, merubah gigi). Objek perangkat lunak merupakan model berdasarkan objek dunia-nyata yang mempunyai keadaan dan sifat. Objek perangkat lunak mempertahankan keadaannya pada variabel (variables) dan mengimplementasikan sifatnya dalam metoda (methods). Penting Objek adalah sekumpulan perangkat lunak dari variabel dan metoda yang berkaitan. Anda dapat menyatakan objek dunia-nyata dengan menggunakan objek perangkat lunak. Anda mungkin ingin menyatakan anjing dalam dunia-nyata sebagai objek perangkat lunak dalam suatu program animasi atau suatu sepeda dunia-nyata sebagai objek perangkat lunak dalam program yang mengontrol suatu sepeda latihan elektronik. Namun demikian, anda dapat pula menggunakan objek perangkat lunak untuk memodelkan konsep abstrak. Misalkan, suatu kejadian (event) adalah objek yang umum digunakan dalam sistem window GUI untuk menyatakan aksi pengguna ketika menekan tombol mouse atau keyboard.

Metoda/sifat

Variabel/keadaan

00 11 00 11 00 11 00 11 00 11 00 11
Metoda/Sifat

Gambar 4.1: Representasi visual umum dari objek perangkat lunak. Segala sesuatu yang diketahui objek perangkat lunak (keadaan) dan dapat dilakukan (sifat) dinyatakan dengan variabel dan metoda dalam objek. Objek perangkat lunak yang memodelkan sepeda dunia-nyata anda mempunyai variabel yang mengindikasikan keadaan sepeda pada saat tersebut: kecepatannya 10 mph, putaran pedal 90 rpm, dan berada pada gigi kelima. Variabel dan metoda ini dikenal secara formal sebagai variabel instance dan metoda instance untuk membedakannya dari variabel class dan metoda class (dibahas pada subbab mengenai class). Sepeda perangkat lunak juga mempunyai metoda mengerem, mengubah putaran pedal dan merubah gigi (sepeda tidak mempunyai metoda untuk merubah kecepatan sepeda karena kecepatannya hanya merupakan efek samping dari gigi, kekuatan pengemudi menggenjotnya, apakah remnya dipakai dan bagaimana kecuraman bukit.). Model sepeda sebagai suatu objek perangkat lunak dapat dilihat pada Gambar 4.2. Segala sesuatu yang tidak diketahui/dilakukan objek tidak dimasukkan dalam objek tersebut. Misalkan, sepeda anda (mungkin) tidak mempunyai nama, tidak dapat berlari dengan kaki atau menggonggong. Oleh karenanya, tidak ada variabel atau metoda untuk keadaan dan sifat tersebut dalam class sepeda. Sebagaimana dapat dilihat dalam Gambar 4.1 dan 4.2, variabel objek merupakan pusat objek. Metoda mengelilingi dan menyembunyikan inti objek dari objek lain dalam program. Pengelompokkan variabel objek dalam lingkungan pelindung yang berasal dari metodanya disebut enkapsulasi. Biasanya, enkapsulasi digunakan untuk menyembunyikan implementasi rinci yang tidak penting dari objek lain. Ketika anda ingin merubah gigi pada sepeda anda, anda tidak perlu mengetahui mekanisme kerja gigi, anda hanya perlu mengetahui tuas mana yang perlu digerakkan. Demikian pula pada program perangkat lunak, anda tidak perlu mengetahui bagaimana suatu class diimplementasikan, anda hanya perlu mengetahui metoda mana yang perlu dipanggil. Maka implementasi rinci dapat diubah setiap saat tanpa mengganggu bagian lain dari program yang bersangkutan. October 13, 2009 16

Pemrograman Komputer : Bahasa Java

4.2. PESAN/STIMULUS

17

Rem

Ubah gigi

Ubah irama

11 00 00 11 00 11 00 11 00 11 00 11 00 11

10mph 90rpm implementasi gigi gigi ke-lima

Gambar 4.2: Model sepeda sebagai suatu objek perangkat lunak. Konsep sesuai dengan Gambar 4.1dimana inti yang merupakan variabel dibungkus dengan selaput pelindung yang merupakan metodaadalah representasi ideal dari suatu objek yang sangat berguna untuk sistem berorientasi objek. Namun demikian, sering untuk implementasi atau alasan esiensi, suatu objek mungkin membuka variabel atau menyembunyikan beberapa metodanya. Dalam banyak bahasa, termasuk Java, suatu objek dapat memilih untuk membuka variabelnya untuk objek lain sehingga memungkinkan objek lain tersebut memeriksa dan bahkan merubah variabel. Juga, suatu objek dapat memilih untuk menyembunyikan metoda dari objek lain sehingga mencegah objek lain tersebut memanggil metoda tersebut. Suatu objek dapat mempunyai kontrol lengkap mengenai pembatasan akses variabel dan metodanya. Penting Enkapsulasi variabel dan metoda yang berhubungan kedalam suatu kumpulan perangkat lunak yang rapih adalah ide sederhana namun sangat berguna karena dua keuntungan: 1. Modularitas: code sumber untuk suatu objek dapat ditulis dan dikembangkan secara terpisah dari dari code sumber untuk objek lain. Juga, suatu objek dapat dengan mudah diberikan pada bagian lain dalam sistemanda dapat memberikan sepeda anda pada orang lain dan sepeda tersebut masih tetap berfungsi. 2. Penyembunyian informasi: Suatu objek mempunyai suatu antarmuka public sehingga objek lain dapat menggunakannya untuk berkomunikasi dengannya. Namun objek dapat memanfaatkan informasi private sehingga metoda dapat diubah setiap saat tanpa mempengaruhi objek lain yang tergantung kepadanyaanda tidak perlu memahami mekanisme gigi pada sepeda anda untuk menggunakannya (lihat Gambar 4.1).

4.2 Pesan/Stimulus
Suatu objek tunggal sendiri biasanya tidak berguna dan sering merupakan komponen dari program yang lebih besar yang mengandung banyak objek lain. Melalui interaksi dari objek-objek ini, programer memperoleh fungsi yang lebih tinggi dan sifat yang lebih rumit. Sepeda anda yang tersandar didinding garasi hanya merupakan kumpulan paduan titanium dan karet; yang tidak mungkin melakukan apapun sendiri. Sepeda hanya berguna bila objek lain (anda) berinteraksi dengannya (mulai mengayuh). Objek perangkat lunak saling berinteraksi dan berkomunikasi melalui pengiriman pesan. Ketika objek A ingin agar objek B melakukan sesuatu pada salah satu dari metoda di objek B, objek A mengirimkan pesan ke objek B (lihat Gambar 4.3). Terkadang, objek penerima memerlukan informasi lebih sehingga ia mengetahui dengan tepat apa yang harus dilakukanmisalnya, ketika anda ingin mengganti gigi pada sepeda anda, anda harus menunjukkan gigi mana yang anda inginkan. Informasi ini diberikan bersama dengan pesan sebagai parameter. Gambar 4.4 menunjukkan 3 komponen untuk melakukan hal tersebut: 1. Objek dimana pesan dialamatkan (SepedaAnda) 2. Nama metoda yang harus dilakukan (gantiGigi) 3. Parameter-parameter yang dibutuhkan oleh metoda (rendah).

Agus Purwanto, Ph. D

17

October 13, 2009

18

BAB 4. KONSEP PEMROGRAMAN BERORIENTASI OBJEK

1 0 0 1 0 1 0 1 0 1 0 1 0 1 11 00 0 1 0 1 00 11 11 00 00 11 00 11 001 11 000 11 0 001 11

Pesan

00 11 0 1 00 11 0 1 11 00 00 11 00 11 0 1 00 11 00 11 0 1 00 11 01 1 00 1 0 01 1
Objek A

Objek B

Gambar 4.3: Objek A mengirim pesan tertentu ke objek B.

1 gantiGigi(rendah) 0 0 1 0 1 0 1 00 11 00 11 0 1 0 1 00 11 00 11 11 00 00 11 00 11 0 1 00 11 0 001 11
SepedaAnda

00 11 0 1 00 11 11 00 00 11 0 1 00 11 00 11 0 1 00 11 0 1 0 1 0 1 0 01 1
Anda

Gambar 4.4: Anda mengirim pesan ke SepedaAnda agar SepedaAnda melakukan gantiGigi ke gigi rendah. Ketiga komponen tersebut merupakan informasi yang cukup untuk objek penerima untuk melakukan metoda yang diinginkan. Tidak ada informasi lain yang dibutuhkan.

Penting Keuntungan pesan adalah: 1. Sifat dari objek dinyatakan melalui metodanya, sehingga pemberian pesan mendukung semua interaksi (yang mungkin) antar objek. 2. Objek tidak perlu berada pada proses atau bahkan mesin yang sama untuk saling mengirimkan dan menerima pesan.

4.3 Class
Dalam dunia nyata, anda sering mempunyai banyak objek dengan jenis yang sama. Misalnya, sepeda anda hanyalah satu dari banyak sepeda di dunia. Dengan menggunakan istilah orientasi objek, kita katakan bahwa objek sepeda anda adalah instance dari class objek yang dikenal dengan nama sepeda (lihat Gambar 4.5 sebagai gambaran umum sebuah objek). Sepeda mempunyai beberapa keadaan (gigi, irama genjot, dua roda) dan sifat (ganti gigi, rem). Namun demikian, masing-masing keadaan sepeda tidak tergantung dan bisa beda dari sepeda lain (lihat Gambar 4.6). Ketika membuat sepeda, pabrik memanfaatkan kenyataan bahwa sepeda mempunyai beberapa karakteristik yang sama karena pembuatan sepeda dari cetakbiru yang samakarena hal demikian adalah lebih esien dibandingkan penggunaan satu cetakbiru untuk satu sepeda. Dalam perangkat lunak berorientasi objek, dimungkinkan untuk mempunyai banyak objek dengan jenis yang sama karena karakteristik yang sama: segiempat, data pegawai, klip video dan sebagainya. Seperti pembuat sepeda, anda dapat memanfaatkan kenyataan bahwa objek dengan jenis yang sama adalah sama dan anda dapat membuat satu cetakbiru dari objek-objek itu. Cetakbiru perangkat lunak untuk objek disebut sebagai class. October 13, 2009 18

Pemrograman Komputer : Bahasa Java

4.3. CLASS

19

API publik

Rincian implementasi private

11 00 00 11 00 11 00 11 00 11 00 11 00 11 00 11
API publik

Gambar 4.5: Gambaran umum sebuah objek.

rem

11 00 00 11 00 11 00 11 00 11 00 11 11 00 0 1 0 1 0 1 0 1 00 11 0 1 00 11 0 1
SepedaKu

ganti gigi

laju=10 gigi=5

1 0 0 1 0 1 0 1 0 1 0 1 11 00 0 1 00 11 0 1 rem 00 11 00 11 00 11 00 11 00 11
SepedaMu

ganti gigi

laju=15 gigi=2

Gambar 4.6: Objek SepedaKu dan SepedaMu yang berasal dari class yang sama.

Penting Suatu class adalah cetakbiru atau prototipe yang mendenisikan variabel dan metoda yang digunakan bersama untuk semua objek dari suatu jenis tertentu. Misalkan, anda dapat membuat suatu class sepeda yang mendeklarasikan beberaoa variabel instance untuk mengandung gigi sekarang, irama genjot sekarang dan seterusnya untuk masing-masing objek sepeda. Class tersebut juga mendeklarasikan dan memberi implementasi untuk metoda instance yang memungkinkan pengendara sepeda merubah gigi, rem, dan merubah irama genjot. Nilai dari variabel instance diberikan oleh masing-masing instance dari class. Maka, sesudah anda membuat class sepeda, anda harus membuat instance dari class tersebut sebelum anda dapat menggunakannya. Ketika anda membuat instance dari suatu class, anda membuat suatu objek dari jenis tersebut dan sistem mengalokasikan memori untuk variabel instance yang dideklarasikan oleh class tersebut. Lalu, anda dapat memanggil metoda instance dari objek tersebut untuk membuatnya melakukan sesuatu. Instance dari class yang sama mempunyai implementasi metoda instance yang sama (implementasi metoda tidak diduplikasi pada basis perobjek) yang berada pada class itu sendiri. Sebagai tambahan terhadap variabel dan metoda instance, class dapat pula mendesikan variabel class dan metoda class. Anda dapat mengakses variabel dan metoda class dari suatu instance dari class atau secara langsung dari suatu classanda tidak harus melakukan instance untuk menggunakan variabel dan metoda class. Metoda class dapat beroperasi hanya pada variabel classmereka tidak mempunyai akses ke variabel instance atau metoda instance. Sistem membuat suatu salinan tunggal dari semua variabel class dari suatu class pada saat pertama kali menemui class tersebut dalam suatu programsemua instance dari class tersebut mempunyai variabel class yang sama. Misalkan bahwa semua sepeda mempunyai jumlah gigi yang sama. Dalam kasus ini, mendenisikan suatu variabel instance untuk jumlah gigi adalah tidak esienmasing-masing instance mempunyai salinan variabel sendirisendiri, namun nilainya sama untuk setiap instance. Dalam situasi demikian, anda dapat mendenisikan suatu variabel class yang mengandung jumlah gigi. Semua instance mengakses variabel ini. Jika satu objek merubah variabel, variabel tersebut berubah untuk semua objek lain dengan tipe itu.

Agus Purwanto, Ph. D

19

October 13, 2009

20 Objek vs. Class

BAB 4. KONSEP PEMROGRAMAN BERORIENTASI OBJEK

Anda mungkin memperhatikan bahwa ilustrasi objek dan class terlihat mirip antara satu sama lainnya. Memang, perbedaan antara class dan objek sering merupakan sumber kebingungan. Dalam dunia nyata, jelas bahwa class tidak merupakan objek yang digambarkan oleh class tersebutcetakbiru dari suatu sepeda bukanlah sepeda. Namun demikian, perbedaannya dalam perangkat lunak agak lebih sulit. Hal ini sebagian karena objek perangkat lunak hanya model elektronik dari objek dunia-nyata atau konsep abstrak. Tetapi, hal tersebut juga karena banyak orang menggunakan istilah objek secara inkonsisten dan menggunakannya untuk mengacu pada class dan instance sekaligus. Keuntungan Class Objek memberi manfaat modularitas dan penyembunyian informasi. Class memberi manfaat penggunaan kembali (reusability). Pabrik sepeda menggunakan kembali cetakbiru berkali-kali untuk membuat banyak sepeda. Pemrogram perangkat lunak menggunakan class yang sama, yang berarti code yang sama, berkali-kali untuk menghasilkan banyak objek.

4.4 Inheritance
Secara umum, objek didenisikan dalam class. Anda mengetahui banyak mengenai objek dengan mengetahui class-nya. Bahkan, bila anda tidak mengetahui apakah anu itu, jika saya katakan itu adalah sebuah sepeda, maka anda akan tahu bahwa itu mempunyai dua roda, setang dan pedal.

Sepeda

0 1 0 1 0 1 0 1 11 00 0 1 0 1 11 00 00 11 001 11 00 11 0 00 11 0 1 00 11 0 001 11

00 11 0 1 00 11 0 1 11 00 00 11 0 1 11 00 00 11 00 11 00 11 00 11 0 1 00 11 0 001 11

0 1 0 1 0 1 0 1 11 00 0 1 0 1 11 00 00 11 00 11 00 11 00 11 0 1 00 11 0 001 11

0 1 0 1 0 1 0 1 11 00 0 1 0 1 11 00 00 11 00 11 00 11 00 11 0 1 00 11 0 001 11

Sepeda Gunung

Sepeda Balap

Sepeda Tandem

Gambar 4.7: Pewarisan sifat dari class Sepeda ke class SepedaGunung, Sepeda balap dan SepedaTandem. Sistem berorientasi objek melangkah lebih jauh dan memungkinkan class didenisikan berdasarkan class lain. Misalnya, sepeda gunung, sepeda balap dan sepeda tandem adalah berbagai jenis sepeda yang berbeda. Dalam istilah orientasi objek, sepeda gunung, sepeda balap dan sepeda tandem adalah subclass dari class sepeda. Dengan lain kalimat class sepeda adalah superclass dari class sepeda gunung, sepeda balap dan sepeda tandem. Masing-masing subclass mewarisi keadaan (dalam bentuk deklarasi variabel) dari superclass. Sepeda gunung, sepeda balap dan sepeda tandem memiliki bersama beberapa keadaan: irama genjot, kecepatan, dll. Masingmasing subclass juta memiliki bersama beberapa metoda dari superclassnya. Sepeda gunung, sepeda balap dan sepeda tandem memeiliki bersama beberapa sifat: rem dan pengubahan kecepatan pedal, misalnya. Namun demikian, subclass tidak hanya dibatasi pada keadaan dan sifat yang diberikan oleh superclassnya. Subclass dapat menambah variabel dan metoda selain yang diwarisi oleh superclassnya. Sepeda tandem mempunOctober 13, 2009 20

Pemrograman Komputer : Bahasa Java

4.5. INTERFACE

21

yai dua dudukan dan dua perangkat setang; beberapa sepeda gunung mempunyai tambahan perangkat gigi dengan perbandingan gigi yang lebih rendah. Subclass dapat pula menumpuk (override) metoda yang diwariskan dan memberikan implementasi khusus pada metoda tersebut. Misalkan, jika anda mempunyai sepeda gunung dengan tambahan perangkat gigi baru, anda dapat menumpuk metoda ganti gigi sehingga pengendara dapat menggunakan gigi tambahan baru tersebut. Anda tidak dibatasi hanya pada satu lapis pewarisan. Tree pewarisan, atau hirarki class dapat dibuat sedalam dibutuhkan. Metoda dan variabel diwarisi melalui tingkatan. Secara umum, semakin dalam hirarki class muncul, sifatnya menjadi lebih khusus. Keuntungan Pewarisan Berikut ini adalah keuntungan dari pewarisan: 1. Subclass memberikan sifat khusus berdasarkan elemen umum yang berasal dari superclass. Melalui penggunaan pewarisan, pemrogram dapat menggunakan kembali code dalam superclass berkali-kali. 2. Pemrogram dapat mengimplementasikan superclass yang disebut sebagai class abstrak yang mendenisikan sifat generik. Superclass abstrak mendenisikan dan sebagian bisa mengimplementasi sifat, namun sebagian besar tidak didenisikan dan diimplementasikan. Pemrogram lain dapat memenuhi rincian dengan subclass khusus.

4.5 Interface
Dalam bahasa Inggris, interface adalah perangkat atau sistem yang digunakan oleh sistem yang tak-terhubung untuk saling berinteraksi. Sesuai dengan denisi ini, beberapa contoh lain adalah 1. kontrol remote adalah interface antara anda dengan perangkat televisi. 2. bahasa Indonesia adalah interface antara 2 orang Indonesia. Dalam bahasa pemrograman Java, interface adalah perangkat yang menghubungkan objek tak-terhubung untuk saling berinteraksi. Interface analog dengan protokol. Sebenarnya, bahasa berorientasi objek lain juga mempunyai interface, namun biasanya mereka memanggil protokol interface. Class sepeda dan hirarkinya mendenisikan hal-hal yang dapat dan tidak dapat dilakukannya. Namun sepeda berinteraksi dengan dunia lain melalui cara lain. Misalkan, sepeda dalam toko dapat diatur melalui program inventory. Program inventory tidak perduli mengenai rincian class kecuali harga dan nomor inventory. Program inventory menset protokol komunikasi. Protokol ini berbentuk seperangkat konstanta dan denisi metoda yang disimpan dalam interface. Interface inventory akan mendenisikan, namun tidak mengimplementasikan, metoda yang mencetak dan mengambil harga eceran, memberikan nomor inventory, dan lain sebagainya. Untuk bekerja dengan program inventory, class sepeda harus memenuhi protokol ini dengan mengimplementasikan interface. Ketika class mengimplementasikan interface, class mengimplementasikakn semua metoda yang didenisikan pada interface. Maka, class sepeda akan memberi implementasi untuk metoda yang mencetak dan mengambil harga eceran, memberikan nomor inventory, dan lain sebagainya. Anda menggunakan interface untuk mendenisikan protokol dari sifat yang dapat diimplementasikan oleh class dimanapun dalam hirarki class. Interface berguna untuk : 1. Menangkap kemiripan antar class tak-terhubung tanpa memaksakan hubungan buatan. 2. Mendeklarasikan metoda yang akan diimplementasikan. 3. Menampakkan penghubung tanpa menampakkan class yang dihubungkan.

4.6 Bagaimana Konsep Orientasi Objek Diterjemahkan kedalam Code ?


Bagian ini membahas applet kecil dan memperlihatkan kode yang menhasilkan objek, mengimplementasikan class, mengirim pesan, membangun superclass dan mengimplementasikan penghubung (interface).

Agus Purwanto, Ph. D

21

October 13, 2009

22

BAB 4. KONSEP PEMROGRAMAN BERORIENTASI OBJEK

4.7 Pertanyaan dan Latihan: Konsep Object-Oriented


4.7.1 Pertanyaan
Gunakan dokumentasi API untuk platform Java 2 untuk menjawab pertanyaan berikut: 1. Applet ClickMe pada halaman 22 menggunakan Color.red untuk menset warna menjadi merah. Warna lain apakah yang dapat anda peroleh dengan cara demikian ? 2. Bagaimana anda membuat warna lain, seperti purple (ungu) ?

4.7.2 Latihan
Gunakan pelajaran yang anda peroleh dari javadocs untuk membuat modikasi pada applet ClickMe: import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class ClickMe extends Applet implements MouseListener { private Spot spot = null; private static final int RADIUS = 7; public void init() { addMouseListener(this); } public void paint(Graphics g) { //draw a black border and a white background g.setColor(Color.white); g.fillRect(0, 0, getSize().width - 1, getSize().height - 1); g.setColor(Color.black); g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); //draw the spot g.setColor(Color.red); if (spot != null) { g.fillOval(spot.x - RADIUS, spot.y - RADIUS, RADIUS * 2, RADIUS * 2); } } public void mousePressed(MouseEvent event) { if (spot == null) { spot = new Spot(RADIUS); } spot.x = event.getX(); spot.y = event.getY(); repaint(); } public void mouseClicked(MouseEvent event) {} public void mouseReleased(MouseEvent event) {} public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} } Untuk mengkompile program ini, anda juga perlu le Spot.java: public class Spot { public int size; public int x, y; public Spot(int intSize) { October 13, 2009 22

Pemrograman Komputer : Bahasa Java

4.7. PERTANYAAN DAN LATIHAN: KONSEP OBJECT-ORIENTED size = intSize; x = -1; y = -1; } } Penting Latihan ini adalah latihan membaca code, menebak dan mencari class dan metoda dari javadocs. Kami belum memberi anda informasi rinci mengenai bagaiman menulis code Java dan apa arti keseluruhannya. Namun anda mungkin akan heran bahwa anda dapat memanfaatkan code ini. Penekanan dari latihan ini adalah untuk membiasakan anda menggunakan javadocs dan membaca code. Jangan kuatir jika anda tidak dapat menyelesaikan latihan ini. Jangan kuatir jika penyelesaian anda tidak sama dengan jawaban kami. Bandingkan penyelesaian tersebut sehingga anda lebih berpengalaman dalam membaca code dan mungkin belajar lebih mengenai API pada platform Java. 1. Modikasi applet untuk menggambar kotak hijau, bukan kotak merah. 2. Modikasi applet untuk menampilkan nama anda dengan warna ungu, bukan merah.

23

4.7.3 Jawaban
Anda dapat menemukan informasi yang diperlukan untuk menjawab pertanyaan dan menyelesaikan latihan dalam dokumentasi API untuk class Color. Jawaban Pertanyaan 1. Jawab: Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green, Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.white, Color.yellow 2. Anda menspesikasikannya dengan menggunakan model warna RGB (Red-Green-Blue). Dalam RGB, ungu adalah: 0.5; 0.0; 0.5. Penyelesaian Latihan 1. Lihat penyelesaian: import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class ClickMeGreen extends Applet implements MouseListener { private Spot spot = null; private static final int RADIUS = 7; public void init() { addMouseListener(this); } public void paint(Graphics g) { //draw a black border and a white background g.setColor(Color.white);

Agus Purwanto, Ph. D

23

October 13, 2009

24

BAB 4. KONSEP PEMROGRAMAN BERORIENTASI OBJEK


g.fillRect(0, 0, getSize().width - 1, getSize().height - 1); g.setColor(Color.black); g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); //draw the spot g.setColor(Color.green); if (spot != null) { g.fillRect(spot.x - RADIUS, spot.y - RADIUS, RADIUS * 2, RADIUS * 2); } } public void mousePressed(MouseEvent event) { if (spot == null) { spot = new Spot(RADIUS); } spot.x = event.getX(); spot.y = event.getY(); repaint(); } public void mouseClicked(MouseEvent event) {} public void mouseReleased(MouseEvent event) {} public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} } 2. Lihat penyelesaian: import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class ClickMePurple extends Applet implements MouseListener { private Spot spot = null; private Color purple = new Color(0.5f, 0.0f, 0.5f); public void init() { addMouseListener(this); } public void paint(Graphics g) { //draw a black border and a white background g.setColor(Color.white); g.fillRect(0, 0, getSize().width - 1, getSize().height - 1); g.setColor(Color.black); g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); //draw the spot g.setColor(purple); if (spot != null) { g.drawString("Mary", spot.x, spot.y); } } public void mousePressed(MouseEvent event) { if (spot == null) { spot = new Spot(0); } spot.x = event.getX(); spot.y = event.getY(); repaint(); }

October 13, 2009

24

Pemrograman Komputer : Bahasa Java

4.7. PERTANYAAN DAN LATIHAN: KONSEP OBJECT-ORIENTED public public public public } void void void void mouseClicked(MouseEvent event) {} mouseReleased(MouseEvent event) {} mouseEntered(MouseEvent event) {} mouseExited(MouseEvent event) {}

25

Agus Purwanto, Ph. D

25

October 13, 2009

26

BAB 4. KONSEP PEMROGRAMAN BERORIENTASI OBJEK

October 13, 2009

26

Pemrograman Komputer : Bahasa Java

Bab 5

Dasar Bahasa
Program BasicDemo berikut ini menambahkan bilangan dari 1 sampai dengan 10, lalu menampilkan hasilnya: public class BasicsDemo { public static void main(String[] args) { int sum = 0; for (int current = 1; current <= 10; current++) { sum += current; } System.out.println("Sum = " + sum); } } Output dari program di atas adalah: Sum = 55 Program sekecil itu sudah dapat menunjukkan banyak dasar bahasa pemrograman Java termasuk variabel, operator dan pernyataan kontrol alur seperti banyak terdapat pada bahasa pemrograman C++.

5.1 Variabel
Variabel adalah suatu data yang diberi nama (diberi identier). Prinsip deklarasi dan lingkupnya sangat mirip dengan variabel pada bahasa pemrograman C++. Berikut ini adalah program MaxVariablesDemo yang mendeklarasikan 8 variabel dengan tipe yang berbeda dalam metoda main: public class MaxVariablesDemo { public static void main(String args[]) { // integers byte largestByte = short largestShort int largestInteger long largestLong =

Byte.MAX_VALUE; = Short.MAX_VALUE; = Integer.MAX_VALUE; Long.MAX_VALUE;

// real numbers float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; // other primitive types char aChar = S; boolean aBoolean = true; // display them all System.out.println("The largest byte value is " + largestByte); System.out.println("The largest short value is " + largestShort); System.out.println("The largest integer value is " + largestInteger); 27

28

BAB 5. DASAR BAHASA


System.out.println("The largest long value is " + largestLong); System.out.println("The largest float value is " + largestFloat); System.out.println("The largest double value is " + largestDouble); if (Character.isUpperCase(aChar)) { System.out.println("The character " + aChar + " is upper case."); } else { System.out.println("The character " + aChar + " is lower case."); } System.out.println("The value of aBoolean is " + aBoolean); }

} Output dari program ini adalah: The The The The The The The The largest byte value is 127 largest short value is 32767 largest integer value is 2147483647 largest long value is 9223372036854775807 largest float value is 3.40282e+38 largest double value is 1.79769e+308 character S is upper case. value of aBoolean is true

5.1.1 Tipe Data


Setiap variabel harus mempunyai tipe data. Tipe data variabel menentukan nilai yang dikandung dan operasi yang dapat dilakukan terhadapnya. Bahasa pemrograman Java mempunyai 2 kategori tipe data, yaitu primitif dan reference. Variabel dengan tipe primitif mengandung nilai tunggal dengan ukuran dan format yang sesuai dan dapat berupa bilangan, huruf atau nilai Boolean (lihat Tabel 5.1). Tabel 5.1: Tipe Data Primitif Keyword byte short int long oat double char boolean Penjelasan Bilangan Bulat Byte-length integer Short integer Integer Long integer Bilangan Real Single-precision oating point Double-precision oating point Tipe Lain huruf tunggal nilai boolean Ukuran/Format 8-bit two2 complement 16-bit two2 complement 32-bit two2 complement 32-bit two2 complement 32-bit IEEE 754 64-bit IEEE 754 16-bit Unicode character true atau false

Anda dapat menggunakan nilai primitif secara langsung pada program anda. Misalkan, jika anda perlu memberikan nilai 4 pada variabel bilangan bulat, anda dapat menuliskan : int anInt = 4; Digit 4 merupakan nilai bilangan bulat literal. Berikut ini adalah beberapa contoh lain dari penggunaan nilai literal dari berbagai tipe primitif: Secara umum, digit tanpa titik (desimal) merupakan bilangan bulat. Anda dapat menyatakannya sebagai long integer dengan meletakkan L atau l sesudah bilangan. L lebih baik karena tidak mirip dengan digit 1. Sederetan digit dengan titik desimal merupakan bilangan dengan tipe double. Jika anda ingin menspesikannya sebagai float, anda dapat memberikan f atau F sesudah bilangan tersebut. Huruf literal dinyatakan sebagai huruf tunggal Unicode yang diapit dengan tanda kutip tunggal. Dua literal Boolean adalah true dan false. October 13, 2009 28

Pemrograman Komputer : Bahasa Java

5.1. VARIABEL

29

Tabel 5.2: Contoh nilai literal Literal 178 8864L 37.266 37.266D 87.363F 26.77e3 c true false Tipe Data int long double double oat double char boolean boolean

Array, class dan interface adalah variabel dengan tipe reference. Berbeda dengan variabel bertipe primitif, variabel dengan tipe reference merupakan reference/acuan terhadap address/alamat dari nilai atau sekumpulan nilai yang diwakili oleh variabel. Reference disebut juga sebagai pointer, atau alamat memori dalam bahasa pemrograman lain. Bahasa pemrograman Java tidak mendukung penggunaan alamat secara eksplisit seperti C++.

5.1.2 Nama Variabel


Suatu program mengacu pada nilai variabel melalui nama variabel. Misalkan, ketika program pada halaman 27 menampilkan nilai dari variabel LargestByte, program MaxVariablesDemo menggunakan nama LargestByte. Nama seperti itu, yang terdiri dari identier tunggal, disebut sebagai nama sederhana. Hal ini berbeda dengan nama qualied yang digunakan class untuk mengacu pada variabel anggota dari objek atau class lain. Berikut ini adalah kriteria untuk nama sederhana: 1. Ia harus merupakan identier legal. Identier adalah deret yang bebas yang terdiri dari huruf Unicode yang dimulai dengan sebuah huruf. 2. Ia tidak boleh merupakan keyword, literal boolean (true atau false) atau kata null. 3. Ia harus unik dalam lingkup yang bersangkutan. Berikut ini adalah konvensi (kebiasaan): nama variabel dimulai dengan huruf kecil, dan nama class dimulai dengan huruf besar. Jika nama variabel terdiri lebih dari satu kata, kata tersebut digabung, dan masing-masing kata sesudah kata pertama dimulai dengan huruf besar, seperti ini: isVisible. Huruf underscore dapat digunakan dimanapun dalam nama namun biasanya hanya digunakan untuk memisahkan kata dalam konstanta (karena konstanta biasa dinyatakan dalam huruf besar semua).

5.1.3 Lingkup
Lingkup variabel adalah daerah pada program dimana variabel dapat diacu dengan nama sederhananya. Lingkup menentukan kapan sistem membuat dan menghapus memori untuk variabel. Lokasi deklarasi variabel dalam program menentukan lingkupnya: 1. variabel anggota 2. variabel lokal 3. parameter metoda 4. parameter exception-handler. Variabel anggota adalah anggota dari class atau objek. Ia dideklarasikan dalam class namun diluar dari metoda atau konstruktor. Lingkup variabel anggota adalah seluruh deklarasi dalam class. Namun, deklarasi dari anggota perlu muncul sebelum digunakan dan penggunaannya adalah dalam bentuk pernyataan inisialisasi anggota. Deklarasi variabel lokal dilakukan dalam blok code. Secara umum, lingkup dari variabel lokal meluas dari deklarasinya sampai ke akhir dari blok tersebut dimana variabel tersebut dideklarasikan. Dalam program MaxVariablesDemo, semua variabelnya yang dideklarasikan dalam metoda main adalah variabel lokal. Lingkup dari masing-masing variabel dalam program tersebut meluas dari deklarasinya ke akhir metoda main.

Agus Purwanto, Ph. D

29

October 13, 2009

30

BAB 5. DASAR BAHASA

Gambar 5.1: Lingkup variabel. Parameter adalah argumen formal untuk metoda atau konstruktor dan digunakan untuk melalukan nilai ke metoda dan konstruktor. Lingkup parameter adalah keseluruhan metoda atau konstruktor yang mampunyai parameter tersebut. Parameter Exception-handler serupa dengan parameter namun merupakan argumen terhadap suatu exceptionhandler (bukan metoda atau konstruktor). Lingkupnya adalah blok code yang diapit oelh kurung kurawal yang mengikuti pernyataan catch. Pertimbangkan potongan program berikut: if (...) { int i = 17; ... } System.out.println("The value of i = " + i);

// error

Baris terakhir tidak akan berhasil dikompilasi karena variabel lokal i berada di luar lingkup. Lingkup dari i berada pada blok code yang diapit kurung kurawal. Variabel i tidak lagi berlaku sesudah tutup kurung kurawal tersebut. Perbaikannya adalah: 1. deklarasi variabel diletakkan di luar blok pernyataan if, atau 2. panggilan metoda println dipindahkan kedalam blok pernyataan if.

5.1.4 Inisialisasi Variabel


Variabel lokal dan variabel anggota dapat diinisialisasi dengan pernyataan pemberian nilai (assignment) ketika mereka dideklarasikan. Tipe data dari variabel tersebut harus sesuai dengan tipe data dari nilai yang diberikan. Program MaxVariablesDemo pada halaman 27 memberikan nilai awal untuk semua variabel lokal ketika mereka dideklarasikan. Deklarasi variabel lokal tersebut adalah: // integers byte largestByte = short largestShort int largestInteger long largestLong = Byte.MAX_VALUE; = Short.MAX_VALUE; = Integer.MAX_VALUE; Long.MAX_VALUE;

// real numbers float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE;

October 13, 2009

30

Pemrograman Komputer : Bahasa Java

5.1. VARIABEL // other primitive types char aChar = S; boolean aBoolean = true;

31

Parameter dan parameter exception-handler tidak dapat diinisialisasi dengan cara tersebut. Nilai parameter di set oleh pemanggil yang menggunakan parameter tersebut.

5.1.5 Variabel final


Anda dapat mendeklarasikan variabel sebagai final. Nilai dari variabel ini tidak dapat berubah sesudah di inisiasi. Variabel demikian mirip dengan konstanta dalam bahasa pemrograman lain. Untuk mendeklarasikan variabel final, digunakan kata kunci final dalam deklarasinya, misalnya: final int aFinalVar = 0; Pernyataan terdahulu mendeklarasikan variabel final dan menginisialisasinya sekaligus. Usaha berikutnya untuk merubah nilai akan mengakibatkan error pada kompiler. Jika diperlukan, inisialisasi dari variabel lokal nal dapat ditunda. Misalnya: final int blankfinal; ....... blankfinal = 0; Variabel lokal nal yang telah dideklarasi tapi tidak diinisialisasi disebut sebagai blank final. Setelah diinisialisasi, nilainya tidak dapat diubah.

5.1.6 Pertanyaan dan Latihan: Variabel


Pertanyaan 1. Tentukan nama variabel berikut ini yang memenuhi persyaratan bahasa pemrograman Java: int anInt i i1 1 thing1 1thing ONE-HUNDRED ONE_HUNDRED something2do 2. Jawab pertanyaan berikut mengenai program BasicDemo pada halaman 27: (a) Apa saja nama dari variabel yang dideklarasikan dalam program ? Ingat bahwa parameter metoda juga merupakan variabel. (b) Apa tipe data dari masing-masing variabel ? (c) Apa lingkup dari masing-masing variabel ? Latihan 1. Modikasilah program MaxVariablesDemo pada halaman 27 agar aBoolean mempunyai nilai yang berbeda. 2. Tulis kembali program MaxVariablesDemo untuk menampilkan nilai minimum dari masing-masing tipe data bilangan bulat. Anda dapat menebak nama dari variabel-variabel tersebut jika anda membaca dokumentasi API. 3. Dapatkan anda menebak nama dari metoda dalam class Character yang dapat anda gunakan sebagai pengganti dari isUpperCase untuk menentukan kapitalisasi dari huruf ? Modikasilah program MaxVariablesDemo agar menggunakan metoda tersebut, bukan metoda isUpperCase.

Agus Purwanto, Ph. D

31

October 13, 2009

32

BAB 5. DASAR BAHASA

5.1.7 Jawaban
Pertanyaan 1. Nama variabel yang berlaku adalah: anInt i i1 thing1 ONE_HUNDRED something2do 2. Jawab: args, sum, current. 3. Tipe data dari args adalah String[], yang berarti bahwa ia merupakan array dari string. sum dan current keduanya dideklarasikan sebagai int yang merupakan tipe bilangan bulat. 4. args mempunyai lingkup dalam keseluruhan metoda main. sum adalah variabel lokal yang berlaku dari deklarasinya sampai ke akhir metoda main. current berlaku dari deklarasinya sampai akhir loop for. Latihan Berikut ini adalah penyelesaian dari ketiga latihan: public class MinVariablesDemo { public static void main(String args[]) { // integers byte smallestByte = short smallestShort int smallestInteger long smallestLong =

Byte.MIN_VALUE; = Short.MIN_VALUE; = Integer.MIN_VALUE; Long.MIN_VALUE;

// real numbers float smallestFloat = Float.MIN_VALUE; double smallestDouble = Double.MIN_VALUE; // other primitive types char aChar = S; boolean aBoolean = false; // display them all System.out.println("The System.out.println("The System.out.println("The System.out.println("The

smallest smallest smallest smallest

byte value is " + smallestByte); short value is " + smallestShort); integer value is " + smallestInteger); long value is " + smallestLong);

System.out.println("The smallest float value is " + smallestFloat); System.out.println("The smallest double value is " + smallestDouble); if (Character.isLowerCase(aChar)) { System.out.println("The character " + aChar + " is lower case."); } else { System.out.println("The character " + aChar + " is upper case."); } System.out.println("The value of aBoolean is " + aBoolean); } } October 13, 2009 32

Pemrograman Komputer : Bahasa Java

5.2. OPERATOR

33

5.2 Operator
Operator melakukan fungsi terhadap satu, dua atau tiga operand. Operator yang membutuhkan satu operand disebut sebagai unary operator. Misalkan, ++ adalah operator unari yang menambahkan nilai satu dari operand. Operator yang membutuhkan dua operand adalah operator biner. Misalkan, = adalah operator biner yang memberi nilai dari operand di ruas kanan ke operand di ruas kiri. Operator ternari adalah operand yang membutuhkan 3 operand. Bahasa pemrograman Java mempunyai 1 operator ternari, ?:, yang merupakan singkatan dari pernyataan if-else. Operator unari mendukung notasi awalan (prex) atau akhiran (postx). Notasi awalan adalah operator muncul sebelum operand: operator op //prefix notation

Notasi akhiran adalah sebaliknya: op operator //postfix notation

Semua operator biner menggunakan notasi inx, yang berarti bahwa operator muncul di antara operand: op1 operator op2 //infix notation

Operator ternary juga inx; masing-masing operator muncul di antara operand: op1 ? op2 : op3 //infix notation

Sebagai tambahan melakukan operasi, operator memberikan nilai. Nilai pemberian dan tipenya tergantung dari operator. Misalkan, operator aritmatika, yang melakukan operasi aritmatika dasar seperti penambahan dan pengurangan, mengembalikan/memberikan bilangan sebagai hasil dari operasi aritmatika. Tipe data yang dikembalikan oleh operator aritmatika tergantung pada operand nya: Jika anda menambahkan 2 bilangan bulat, anda akan memperoleh bilangan bulat juga.

5.2.1 Operator Aritmatika


Bahasa pemrograman Java mendukung berbagai operator arimatika untuk semua bilangan pecahan dan bilangan bulat. Operator tersebut adalah + (penambahan), - (pengurangan), * (perkalian), / (division), dan % (modulo). Sebagai catatan op1 % op2 adalah menghitung sisa dari pembagian op1 dengan op2. Berikut ini adalah program ArithmeticDemo, yang mendenisikan 2 bilangan bulat dan 2 bilangan pecahan double-precision dan menggunakan 5 operator aritmatika untuk melakukan operasi aritmatika yang berbeda. Program ini juga menggunakan + untuk menggabungkan string: public class ArithmeticDemo { public static void main(String[] args) { //a few numbers int i = 37; int j = 42; double x = 27.475; double y = 7.22; System.out.println("Variable values..."); System.out.println(" i = " + i); System.out.println(" j = " + j); System.out.println(" x = " + x); System.out.println(" y = " + y); //adding numbers System.out.println("Adding..."); System.out.println(" i + j = " + (i + j)); System.out.println(" x + y = " + (x + y)); //subtracting numbers System.out.println("Subtracting..."); System.out.println(" i - j = " + (i - j)); System.out.println(" x - y = " + (x - y));

Agus Purwanto, Ph. D

33

October 13, 2009

34

BAB 5. DASAR BAHASA

//multiplying numbers System.out.println("Multiplying..."); System.out.println(" i * j = " + (i * j)); System.out.println(" x * y = " + (x * y)); //dividing numbers System.out.println("Dividing..."); System.out.println(" i / j = " + (i / j)); System.out.println(" x / y = " + (x / y)); //computing the remainder resulting from dividing numbers System.out.println("Computing the remainder..."); System.out.println(" i % j = " + (i % j)); System.out.println(" x % y = " + (x % y)); //mixing types System.out.println("Mixing types..."); System.out.println(" j + y = " + (j + y)); System.out.println(" i * x = " + (i * x)); } } Keluarannya adalah: Variable values... i = 37 j = 42 x = 27.475 y = 7.22 Adding... i + j = 79 x + y = 34.695 Subtracting... i - j = -5 x - y = 20.255 Multiplying... i * j = 1554 x * y = 198.37 Dividing... i / j = 0 x / y = 3.8054 Computing the remainder... i % j = 37 x % y = 5.815 Mixing types... j + y = 49.22 i * x = 1016.58 Perhatikan bahwa ketika bilangan bulat dan bilangan pecahan digunakan sebagai operand untuk operasi aritmatika tunggal, hasilnya adalah bilangan pecahan. Bilangan bulat secara implisit dikonversikan menjadi bilangan pecahan sebelum operasi berlangsung. Tabel berikut adalah rangkuman dari tipe data yang dikembalikan oleh operator aritmatika berdasarkan tipe data dari operand. Konversi yang diperlukan terjadi sebelum operasi dilakukan. Sebagai tambahan dari bentuk biner untuk + dan -, masing-masing operator ini mempunyai versi unari yang melakukan operasi berikut: Dua operator aritmetika pintas adalah ++ yang menaikkan operand dengan 1, dan -- yang mengurangi operand dengan 1. Keduanya dapat muncul sebelum (prex) atau sesudah (postx) operand. Versi prex ++op / --op, menghitung nilai operand sesudah operasi penambahan/pengurangan. Versi postx adalah sebaliknya. Berikut ini adalah program SortDemo yang menggunakan ++ dua kali dan -- sekali: public class SortDemo { October 13, 2009 34

Pemrograman Komputer : Bahasa Java

5.2. OPERATOR

35

Tabel 5.3: Rangkuman tipe data yang dikembalikan Hasil Tipe long int double float Tipe Data Operand Tidak satu operand pun float atau double; paling tidak, satu operand bertipe long. Tidak satu operand pun float atau double; tidak satu operand pun bertipe long. paling tidak, satu operand bertipe double. paling tidak, satu operand bertipe float; tidak satu operand pun bertipe double.

Tabel 5.4: Versi Unari untuk + dan Operator + Penggunaan +op -op Penjelasan merubah op menjadi int untuk byte, short, atau char mengurangkan op

public static void main(String[] args) { int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 }; for (int i = arrayOfInts.length; --i >= 0; ) { for (int j = 0; j < i; j++) { if (arrayOfInts[j] > arrayOfInts[j+1]) { int temp = arrayOfInts[j]; arrayOfInts[j] = arrayOfInts[j+1]; arrayOfInts[j+1] = temp; } } } for (int i = 0; i < arrayOfInts.length; i++) { System.out.print(arrayOfInts[i] + " "); } System.out.println(); } } Program ini meletakkan 10 nilai bilangan bulat ke dalam array, struktur berukuran tetap, yang dapat menyimpan berbagai nilai dengan tipe yang sama, lalu mengurutkannya. Keluarannya adalah: 3 8 12 32 87 127 589 622 1076 2000 Mari kita pelajari bagaimana program tersebut menggunakan operator -- untuk mengontrol loop terluar. Berikut ini adalah pernyataan tersebut: for (int i = arrayOfInts.length; --i >= 0; ) { ... } Pernyataan for adalah konstruksi loop yang akan anda temui nanti. Yang penting diperhatikan adalah kelangsungan proses loop sepanjang nilai yang dikembalikan oleh --i adalah lebih besar atau sama dengan 0. Menggunakan prex -- berarti bahwa iterasi terakhir dari loop terjadi ketika i sama dengan 0. Jika kita menggunakan versi postx dari --, iterasi terakhir dari loop ini terjadi ketika i=-1, yang tidak benar untuk program ini karena i digunakan sebagai indeks array dan -1 bukan merupakan indeks array yang berlaku. Dua loop lain menggunakan versi postx dari ++. Dalam kedua kasus, prex atau postx tidak menjadi masalah, karena nilai yang dikembalikan oleh operator tidak digunakan. Jika nilai return tidak digunakan untuk apapun, versi postx sering digunakan. Tabel berikut adalah rangkumannya:

Agus Purwanto, Ph. D

35

October 13, 2009

36

BAB 5. DASAR BAHASA

Tabel 5.5: Rangkuman operator ++ dan -Penggunaan op++ ++op op---op Keterangan Menambahkan op dengan 1; mengevaluasi nilai op sebelum dinaikkan Menambahkan op dengan 1; mengevaluasi nilai op sesudah dinaikkan Mengurangkan op dengan 1; mengevaluasi nilai op sebelum dikurangkan Mengurangkan op dengan 1; mengevaluasi nilai op sesudah dikurangkan

5.2.2 Operator Relasi dan Syarat


Operator relasi membandingkan 2 nilai dan menentukan hubungan diantaranya. Misalkan, operator != mengembalikan nilai true bila 2 operand tidak sama (lihat Tabel 5.6) Berikut ini adalah contoh program yang mendenisikan Tabel 5.6: Operator Relasi Penggunaan op1 > op2 op1 >= op2 op1 < op2 op1 <= op2 op1 == op2 op1 != op2 Mengembalikan true jika op1 lebih dari op2 op1 lebih dari atau sama dengan op2 op1 kurang dari op2 op1 kurang dari atau sama dengan op2 op1 samadengan op2 op1 tidak samadengan op2

3 bilangan bulat dan menggunakan operator relasi untuk membandingkannya: public class RelationalDemo { public static void main(String[] args) { //a few numbers int i = 37; int j = 42; int k = 42; System.out.println("Variable values..."); System.out.println(" i = " + i); System.out.println(" j = " + j); System.out.println(" k = " + k); //greater than System.out.println("Greater System.out.println(" i > System.out.println(" j > System.out.println(" k >

than..."); j = " + (i > j)); i = " + (j > i)); j = " + (k > j));

//false //true //false, they are equal

//greater than or equal to System.out.println("Greater than System.out.println(" i >= j = System.out.println(" j >= i = System.out.println(" k >= j =

or equal to..."); " + (i >= j)); //false " + (j >= i)); //true " + (k >= j)); //true

//less than System.out.println("Less than..."); System.out.println(" i < j = " + (i < j)); System.out.println(" j < i = " + (j < i)); System.out.println(" k < j = " + (k < j));

//true //false //false

October 13, 2009

36

Pemrograman Komputer : Bahasa Java

5.2. OPERATOR //less than or equal to System.out.println("Less than or System.out.println(" i <= j = System.out.println(" j <= i = System.out.println(" k <= j =

37

equal to..."); " + (i <= j)); " + (j <= i)); " + (k <= j));

//true //false //true

//equal to System.out.println("Equal to..."); System.out.println(" i == j = " + (i == j)); System.out.println(" k == j = " + (k == j)); //not equal to System.out.println("Not equal to..."); System.out.println(" i != j = " + (i != j)); System.out.println(" k != j = " + (k != j)); } } Keluarannya adalah: Variable values... i = 37 j = 42 k = 42 Greater than... i > j = false j > i = true k > j = false Greater than or equal to... i >= j = false j >= i = true k >= j = true Less than... i < j = true j < i = false k < j = false Less than or equal to... i <= j = true j <= i = false k <= j = true Equal to... i == j = false k == j = true Not equal to... i != j = true k != j = false

//false //true

//true //false

Operator relasi sering digunakan dengan operator syarat untuk membuat pernyataan pengambilan keputusan. Bahasa ini mendukung 6 operator syarat: 5 biner dan 1 unari, sebagaimana tertera pada Tabel. Program berikut menggunakan operator && untuk menentukan apakah indeks array berada diantara kedua batasnya. Ia menentukan apakah kedua indeksnya adalah lebih dari atau samadengan 0 dan kurang dari NUM ENTRIES, yang sebelumnya didenisikan sebagai nilai konstanta: 0 <= index && index < NUM_ENTRIES Jika kedua operator adalah boolean, operator & melakukan operasi yang sama dengan operasi yang dilakukan oleh &&. Namun, & selalu mengevaluasi kedua operatornya dan mengembalikan true jika keduanya bernilai true. Proses yang analog juga berlaku antara operand yang mengapit operator dan . Jika operand nya adalah bilangan, & dan melakukan manipulasi bit.

Agus Purwanto, Ph. D

37

October 13, 2009

38

BAB 5. DASAR BAHASA

Tabel 5.7: Operator Syarat Penggunaan op1 && op2 op1 || op2 ! op op1 & op2 op1 | op2 op1 op2 Mengembalikan true jika op1 dan op2 adalah true, secara bersyarat mengevaluasi op2 op1 atau op2 adalah true, secara bersyarat mengevaluasi op2 op adalah false op1 dan op2 adalah true, selalu mengevaluasi op1 dan op2 op1 atau op2 adalah true, selalu mengevaluasi op1 dan op2 op1 dan op2 berbeda; salah satu bernilai true, sedangkan lainnya false

5.2.3 Operator Geser dan Logika


Operator geser melakukan manipulasi bit pada data dengan menggeser bit kekanan atau kekiri (lihat Tabel 5.8). Masing-masing operator menggeser bit dari operand disebelah kiri sebesar banyaknya posisi yang ditunjukkan Tabel 5.8: Operator Geser Operasi geser bit dari op1 kekanan dengan jarak op2 geser bit dari op1 kekiri dengan jarak op2 geser bit dari op1 kekanan dengan jarak op2 (unsigned)

Penggunaan op1 >> op2 op1 << op2 op1 >>> op2

oleh operand di sebelah kanan. Penggeseran terjadi dalam arah sesuai yang ditunjukkan oleh operator. Sebagai contoh, pernyataan berikut menggeser bit dari bilangan bulat 13 ke kanan dengan satu posisi: 13 >> 1; Representasi biner dari 13 adalah 1101. Hasil dari operasi geser tersebut adalah 1101 digeser kekanan dengan satu posisi 0110, atau 6 dalam desimal. Angka 0 paling kiri dimunculkan karena digit totalnya adalah 4. Tabel 5.9 menunjukkan 4 operator yang berguna untuk melakukan fungsi bitwise pada operandnya. Jika Tabel 5.9: Operator untuk fungsi bitwise Penggunaan op1 & op2 op1 | op2 op1 hat op2 op1 op2 Operasi bitwise and bitwise or bitwise xor bitwise komplemen

operandnya adalah bilangan bulat, operasi & melakukan fungsi AND bitwise pada masing-masing pasangan paralel dari bit pada masing-masing operand. Fungsi AND menset bit hasilnya menjadi 1 jika bit pada kedua operand nya adalah 1. Misalkan anda ingin melakukan operasi AND pada 13 dan 12, seperti ini: 13 & 12. Hasilnya adalah 12 karena representasi biner dari 12 adalah 1100, dan representasi biner dari 13 adalah 1101, sehingga 1101 & 1100 -----1100 //13 //12 //12

Jika kedua operandnya adalah bilangan, operator melakukan operasi inclusive or, dan melakukan operasi exclusive or atau xor. Inclusive or adalah jika salah satu bit adalah 1, hasilnya adalah 1. Exclusive or adalah jika kedua operandnya berbeda, hasilnya adalah 1. Akhirnya, operator complement membalik nilai dari masing-masing bit operand: jika bit operand adalah 1, hasilnya adalah 0 dan sebaliknya. October 13, 2009 38

Pemrograman Komputer : Bahasa Java

5.2. OPERATOR

39

Manipulasi bitwise sangat berguna untuk pengaturan ag boolean. Misalkan, program anda mempunyai beberapa ag boolean yang mengindikasikan status dari berbagai komponen dalam program anda: apakah terlihat, bisa ditarik dan lain-lain. Daripada mendenisikan variabel boolean secara terpisah untuk menyimpan masing-masing ag, anda dapat mendenisikan variabel tunggal, flag, untuk semuanya sekaligus. Masing-masing bit dalam flag mewakili statusnya. Manipulasi bit dapat dilakukan untuk menset dan memperoleh masing-masing ag. 1. Ambil konstanta yang menunjukkan berbagai ag dari program anda. Flag ini seharusnya merupakan kelipatan 2 untuk memastikan bahwa masing-masing bit digunakan hanya sekali. 2. Denisikan variabel flag yang bitnya akan di set sesuai dengan status masing-masing ag. 3. Contoh berikut menginisialisasi flag menjadi 0, yang berarti bahwa semua ag adalah false (tak satupun bit yang diset). static static static static final final final final int int int int VISIBLE = 1; DRAGGABLE = 2; SELECTABLE = 4; EDITABLE = 8;

int flags = 0; 4. Untuk menset ag visible ketika sesuatu menjadi terlihat, anda dapat menggunakan pernyataan: flags = flags | VISIBLE; 5. Untuk memeriksa visibilitasnya, anda dapat menuliskan: if ((flags & VISIBLE) == VISIBLE) { ... } Berikut ini adalah program lengkapnya: public class BitwiseDemo { static static static static final final final final int int int int VISIBLE = 1; DRAGGABLE = 2; SELECTABLE = 4; EDITABLE = 8;

public static void main(String[] args) { int flags = 0; flags = flags | VISIBLE; flags = flags | DRAGGABLE; if ((flags & VISIBLE) == VISIBLE) { if ((flags & DRAGGABLE) == DRAGGABLE) { System.out.println("Flags are Visible and Draggable."); } } flags = flags | EDITABLE; if ((flags & EDITABLE) == EDITABLE) { System.out.println("Flags are now also Editable."); } } } Keluarannya adalah: Flags are Visible and Draggable. Flags are now also Editable.

Agus Purwanto, Ph. D

39

October 13, 2009

40

BAB 5. DASAR BAHASA

5.2.4 Operator assignment


Anda menggunakan operator assignment dasar =, untuk memberikan satu nilai kelainnya. Program MaxVariablesDemo pada halaman 27 menginisialisasi semua variabel lokalnya: // integers byte largestByte = short largestShort int largestInteger long largestLong = Byte.MAX_VALUE; = Short.MAX_VALUE; = Integer.MAX_VALUE; Long.MAX_VALUE;

// real numbers float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; // other primitive types char aChar = S; boolean aBoolean = true; Bahasa pemrograman Java juga memberi beberapa operator assignment pintas yang memungkinkan anda melakukan aritmatika, geser, atau operasi bitwise dan operator assignment semuanya sekaligus dengan satu operator. Misalkan anda ingin menambahkan bilangan ke suatu variabel dan memberikan hasilnya kembali ke variabel tersebut, seperti ini: i = i + 2; Anda dapat meringkas pernyataan tersebut dengan menggunakan operator +=: i += 2; Hal ini juga berlaku bagi operator-operator lain.

5.2.5 Operator Lain


Tabel 5.10 menunjukkan operator lain yang didukung oleh Java. Tabel 5.10: Operator Lain Operator ?: [] . ( params) (tipe) mengkonversi nilai ke tipe yang dispesikasi new instanceof Keterangan Pernyataan if-else singkat untuk deklarasi, membuat dan mengakses array untuk membentuk nama berkualitas dibatasi koma, daftar parameter membuat objek baru atau array baru menentukan apakah operand pertama merupakan instance dari operand kedua

Pernyataan if-else ringkas Operator ?: merupakan operator syarat yang merupakan singkatan dari pernyataan if-else: op1 ? op2 : op3 Operator ?: mengembalikan op2 jika true atau op3 jika false. Operator [] Anda menggunakan kurung kotak untuk mendeklarasikan array, membuat array dan mengakses elemen tertentu dalam sebuah array. Berikut ini adalah contoh deklarasi array: float[] arrayOfFloats = new float[10]; October 13, 2009 40

Pemrograman Komputer : Bahasa Java

5.2. OPERATOR

41

Pernyataan di atas mendeklarasikan suatu array yang dapat menyimpan 10 bilangan pecahan. Berikut ini adalah cara untuk mengakses elemen ke-7 dari array tersebut: arrayOfFloats[6]; Perhatikan bahwa indeks array dimulai pada 0. Operator . Operator dot mengakses anggota instans dari suatu objek atau anggaota class dari suatu class. Operator () Ketika mendeklarasikan atau memanggil metoda, anda melampirkan argumen metoda di antara kurung. Anda dapat menspesikasi daftar argumen yang kosong dengan menggunakan (). Operator (type) Operator ini mengkonversi nilai ke tipe yang dispesikasikan. Operator new Anda dapat menggunakan operator new untuk membuat objek atau array baru. Berikut ini adalah contoh pembuatan objek Integer baru dari class Integer dalam paket java.lang: Integer anInteger = new Integer(10); Operator instanceof Operator ini memeriksa apakah operator pertama merupakan instans dari operator kedua: op1 instanceof op2 op1 adalah merupakan nama dari objek dan op2 adalah nama dari class. Suatu objek adalah instans dari suatu class jika objek tersebut secara langsung atau tidak langsung merupkan keturunan dari class tersebut.

5.2.6 Pertanyaan dan Latihan: Operator


Pertanyaan 1. Perhatikan potongan program berikut: arrayOfInts[j] > arrayOfInts[j+1] Operator apakah yang terdapat dalam potongan program tersebut ? 2. Perhatikan potongan program berikut: int i = 10; int n = i++%5; (a) Berapakah nilai i dan n sesudah eksekusi ? (b) Pertanyaan yang sama, namun notasi postx diganti dengan notasi prex. 3. Berapakah nilai i sesudah potongan program berikut dieksekusi ? int i = 8; i >>=2; 4. Berapakah nilai i sesudah potongan program berikut dieksekusi ? int i = 17; i >>=1;

Agus Purwanto, Ph. D

41

October 13, 2009

42 Latihan 1. Tuliskan program untuk memeriksa apakah bilangan pecahan adalah nol.

BAB 5. DASAR BAHASA

2. Tuliskan program untuk menghitung jumlah ekuivalen dolar Amerika jika diberikan sejumlah rupiah.

5.2.7 Jawaban
Jawaban Pertanyaan 1. [], >, [], + 2. Jawab: (a) i adalah 11, dan n adalah 0. (b) i adalah 11, dan n adalah 1. 3. i adalah 2. 4. i adalah 8.

Penyelesaian Latihan 1. public class FloatTest { public static void main(String[] args) { float f = 100.0f; float MAX = 0.001f; float MIN = -MAX; System.out.print(String.valueOf(f)); if ((f < MAX) && (f > MIN)) { System.out.println(" is pretty darn close to 0."); } else { System.out.println(" is not close to 0."); } } } 2. import java.text.DecimalFormat; //DecimalFormat is discussed in //http://java.sun.com/docs/books/tutorial/java/data/decimalFormat.html public class CurrencyExchange { static double FRANCS_PER_DOLLAR = 6.85062; public static void main(String[] args) { DecimalFormat formatter = new DecimalFormat("###,###.00"); double numFrancs = 10000000.0; double numDollars = numFrancs/FRANCS_PER_DOLLAR; System.out.println(formatter.format(numFrancs) + "FF is equal to $" + formatter.format(numDollars) + "."); } } October 13, 2009 42

Pemrograman Komputer : Bahasa Java

5.3. EKSPRESI, PERNYATAAN DAN BLOK

43

5.3 Ekspresi, Pernyataan dan Blok


Variabel dan operator, pada 2 subbab terdahulu, adalah dasar pemrograman. Anda menggabungkan literal, variabel dan operator untuk membentuk ekspresi, bagian dari code yang melakukan komputasi dan mengembalikan nilai. Ekspresi tertentu dapat dibuat lengkap melalui pernyataan (satuan lengkap untuk eksekusi). Dengan mengelompokkan pernyataan dengan kurung kurawal, anda membuat blok dari code.

5.3.1 Ekspresi
Ekspresi melakukan kerja program. Ekspresi dapat digunakan untuk menghitung, memberi nilai kepada variabel dan untuk mengontrol aliran eksekusi. Tugas ekspresi adalah 1. melakukan komputasi sesuai dengan elemen ekspresi 2. mengembalikan nilai sebagai hasil dari komputasi. Dari program contoh MaxVariablesDemo pada halaman 27, kita lihat potongannya: ... // other primitive types char aChar = S; boolean aBoolean = true; // display them all System.out.println("The largest byte value is " + largestByte); ... if (Character.isUpperCase(aChar)) { ... } Ekspresi dan nilai yang dikembalikan dari potongan program tersebut dapat dilihat pada Tabel 5.11. Tabel 5.11: Ekspresi dari program MaxVariablesDemo Ekspresi aChar = S "The largest byte value is " + largestByte Character.isUpperCase(aChar) Aksi assign karakter S ke aChar menggabungkan 2 string largestByte dikonversi ke string memanggil metoda isUpperCase Nilai yang dikembalikan nilai aChar sesudah assignmen The largest byte value is 127

true

Bahasa pemrograman Java memungkinkan anda untuk membuat ekspresi dan pernyataan gabungan dari berbagai ekspresi yang lebih kecil selama tipe data yang diperlukan oleh satu bagian sesuai dengan tipe data dari bagian lainnya. Berikut ini adalah contoh gabungan ekspresi: x * y * z Pada contoh ini, urutan dimana ekspresi dievaluasi tidak penting karena hasil dari perkalian adalah tidak tergantung dari urutan. Namun demikian, hal ini tidak selalu benar. Untuk memastikan urutan eksekusi, dapat digunakan kurung yang menunjukkan prioritas eksekusi, seperti: (x + y)/ 100 Tabel 5.12 menunjukkan precedence.

5.3.2 Pernyataan
Pernyataan secara kasar serupa dengan kalimat dalam bahasa alamiah. Pernyataan membentuk satuan lengkap dari eksekusi. Kalimat berikut ini dapat dibuat menjadi pernyataan dengan mengakhiri ekspresi dengan titik-koma

Agus Purwanto, Ph. D

43

October 13, 2009

44

BAB 5. DASAR BAHASA

Tabel 5.12: Precedence operator postx operator unari pembuatan / cast perkalian penambahan geser relasi kesamaan bitwise AND bitwise exclusif OR bitwise inclusif OR logical AND logical OR syarat assignment [] . ( params) expr + + expr + + expr expr + expr expr ! new (type)expr /% + << >> >>> < > <= >= instanceof == ! = & && ?: = += = = /= %= &= = | = <<= >>= >>>=

1. ekspresi assignment 2. penggunaan ++ atau 3. pemanggilan metoda 4. ekspresi pembuatan objek Pernyataan semacam di atas disebut sebagai pernyataan ekspresi. Berikut ini adalah contoh dari pernyataan ekspresi: aValue = 8933.234; aValue++; System.out.println(aValue); Integer integerObject = new Integer(4); //assignment statement //increment statement //method call statement //object creation statement

Sebagai tambahan dari pernyataan ekspresi di atas, ada 2 macam pernyataan lain: 1. Pernyataan deklarasi yang mendeklarasikan variabel. Anda telah sering melihatnya pada berbagai contoh, misalnya double aValue = 8933.234; // declaration statement 2. Pernyataan kontrol alur yang mengatur urutan kapan pernyataan tertentu dieksekusi. Loop for dan if merupakan contoh dari pernyataan kontrol alur.

5.3.3 Blok
Blok adalah kumpulan nol atau lebih pernyataan di antara kurung kurawal buka dan tutup. Berikut ini adalah potongan program yang diambil dari program MaxVariablesDemo pada halaman 27: if (Character.isUpperCase(aChar)) { System.out.println("The character " + aChar + " is upper case."); } else { System.out.println("The character " + aChar + " is lower case."); }

5.3.4 Rangkuman
Ekspresi adalah sederetan variabel, operator, panggilan metoda yang mengevaluasi nilai tunggal. Anda dapat menuliskan ekspresi majemuk dengan menggabungkan ekspresi selama tipe yang diperlukan oleh semua operator yang terlibat dalam ekspresi majemuk tersebut adalah benar. Ketika menuliskan ekspresi majemuk, tunjukkan secara eksplisit dengan menggunakan kurung mengenai operator mana yang dioperasikan terlebih dahulu. October 13, 2009 44

Pemrograman Komputer : Bahasa Java

5.3. EKSPRESI, PERNYATAAN DAN BLOK

45

Jika anda memilih untuk tidak menggunakan kurung, urutan proses ditentukan oleh presedens. Pernyataan membentuk satuan lengkap untuk eksekusi dan diakhiri dengan titik-koma. Terdapat 3 jenis pernyataan yaitu pernyataan ekspresi, deklarasi dan kontrol alur. Anda dapat mengelompokkan 0 atau lebih pernyataan bersamasama dalam blok dengan kurung kurawal. Walaupun tidak diperlukan, dianjurkan untuk menggunakan blok pada pernyataan kontrol alur walaupun hanya ada satu pernyataan dalam blok.

5.3.5 Pertanyaan dan Latihan: Ekspresi, Pernyataan dan Blok


Pertanyaan 1. Apakah tipe data dari ekspresi berikut, dengan asumsi bahwa tipe i adalah int ? i > 0 i = 0 i++ (float)i i == 0 "aString" + i 2. Pertimbangkan ekspresi berikut: i--%5>0 (a) Apakah hasil dari ekspresi tersebut dengan asumsi nilai i awal adalah 10 ? (b) Modikasi ekspresi sehingga dapat mempunyai hasil yang sama, namun lebih mudah dibaca oleh pemrogram. Latihan Tuliskan program untuk mengkonrmasi jawaban nomor 2a dan 2b.

5.3.6 Jawaban
Jawaban Pertanyaan 1. Jawab: i > 0 i = 0 i++ (float)i i == 0 "aString" + i 2. (a) false (b) Penyelesaian Latihan public class OperatorEx { public static void main(String[] args) { int i = 10; if ((i-- % 5)>0) { System.out.println("true"); } else { System.out.println("false"); } } } (i-- % 5) > 0 [boolean] [int] [int] [float] [boolean] [String]

Agus Purwanto, Ph. D

45

October 13, 2009

46

BAB 5. DASAR BAHASA

5.4 Pernyataan Kontrol Alur


Jika anda menuliskan program, anda mengetikkan pernyataan kedalam le. Tanpa kontrol alur, interpreter mengeksekusi pernyataan ini sesuai dengan urutan kemunculan dari kiri ke kanan, atas ke bawah. Anda dapat menggunakan pernyataan kontrol alur dalam program anda untuk mengeksekusi pernyataan secara bersyarat. Misalkan pernyataan if berikut mengeksekusi pernyataan System.out.println dalam kurung, berdasarkan nilai yang dikembalikan oleh Character.isUpperCase(aChar): char c; ... if (Character.isUpperCase(aChar)) { System.out.println("The character " + aChar + " is upper case."); } Tabel 5.13 menunjukkan beberapa pernyataan kontrol alur. Tabel 5.13: Pengontrol Alur Tipe Pernyataan looping pengambilan keputusan exception handling branching Kata Kunci while, do-while, for if-else, switch-case try-catch-finally, throw break, continue, label:, return

Dalam subbab ini, anda akan mempelajari notasi berikut untuk menggambarkan bentuk umum dari pernyataan kontrol alur: control flow statement details { statement(s) } Secara teknis, kurung kurawal tidak dibutuhkan jika blok mengandung hanya satu pernyataan. Namun, dianjurkan untuk selalu menggunakan kurung tersebut karena code lebih mudah dibaca dan mencegah terjadinya kesalahan ketika memodikasi code.

5.4.1 Pernyataan while dan do-while


Anda menggunakan pernyataan while untuk secara terus-menerus mengeksekusi blok pernyataan selama kondisinya tetap true. Sintaks umumnya adalah while (ekspresi){ pernyataan } Pertama, pernyataan while mengevaluasi ekspresi, yang harus mengembalikan nilai boolean. Jika ekspresi adalah true, maka pernyataan while mengeksekusi pernyataan yang berada dalam blok while. Pernyataan while terus memeriksa ekspresi dan mengeksekusi pernyataan dalam blok sampai ekspresi bernilai false. Contoh berikut menggunakan pernyataan while untuk melangkah karakter-demi-karakter dalam string, melampirkan masing-masing karakter dari string ke akhir dari buffer string sampai menemukan huruf g: public class WhileDemo { public static void main(String[] args) { String copyFromMe = "Copy this string until you " + "encounter the letter g."; StringBuffer copyToMe = new StringBuffer(); int i = 0; char c = copyFromMe.charAt(i); while (c != g) { October 13, 2009 46

Pemrograman Komputer : Bahasa Java

5.4. PERNYATAAN KONTROL ALUR copyToMe.append(c); c = copyFromMe.charAt(++i); } System.out.println(copyToMe); } }

47

Nilai yang dicetak pada baris terakhir adalah: Copy this strin. Bahasa ini mempunyai pernyataan lain yang mirip dengan pernyataan while, yaitu pernyataan do-while. Sintaks umumnya adalah: do { pernyataan } while (ekspresi); Terlihat bahwa do-while mengevaluasi ekspresi di bawah loop. Jadi pernyataan dalam blok do-while dieksekusi paling tidak sekali. Berikut ini adalah contoh program dengan hasil seperti program WhileDemo, namun ditulis dengan menggunakan do-while: public class DoWhileDemo { public static void main(String[] args) { String copyFromMe = "Copy this string until you " + "encounter the letter g."; StringBuffer copyToMe = new StringBuffer(); int i = 0; char c = copyFromMe.charAt(i); do { copyToMe.append(c); c = copyFromMe.charAt(++i); } while (c != g); System.out.println(copyToMe); } } Keluarannya adalah:Copy this strin.

5.4.2 Pernyataan for


Pernyataan for memberikan cara yang ringkas untuk proses iterasi. Bentuk umumnyua adalah: for (initialization; termination; increment) { statement } Ekspresi initialization adalah ekspresi untuk menginisialisasi loop; dieksekusi hanya sekali pada awal loop. Ekspresi termination menentukan kapan loop berhenti. Ekspresi ini dievaluasi di atas untuk setiap iterasi. Ketika ekspresi bernilai false, loop berhenti. Akhirnya, ekspresi increment adalah ekspresi yang diakses sesudah setiap iterasi. Semua komponen tersebut bersifat tambahan. Sebenarnya, untuk loop tak-hingga, ketiga ekspresi tersebut dapat dibuang sehingga: for ( ; ; ) { ... } // infinite loop

Loop for sering digunakan untuk mengiterasi elemen dalam array, atau karakter dalam string. Program ForDemo menggunakan pernyataan untuk mengiterasi elemen dalam array dan mencetaknya: public class ForDemo { public static void main(String[] args) { int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076,

Agus Purwanto, Ph. D

47

October 13, 2009

48 2000, 8, 622, 127 };

BAB 5. DASAR BAHASA

for (int i = 0; i < arrayOfInts.length; i++) { System.out.print(arrayOfInts[i] + " "); } System.out.println(); } } Keluarannya adalah : 32 87 3 589 12 1076 2000 8 622 127. Penting Anda dapat mendeklarasikan variabel lokal dalam ekspresi initialization untuk loop for. Lingkup dari variabel ini meluas dari deklarasinya ke akhir blok for. Jika variabel untuk kontrol loop tersebut tidak diperlukan diluar loop, terbaik adalah mendeklarasikan variabel dalam ekspresi initialization. Nama i, j dan k sering digunakan sebagai kontrol tersebut; pendeklarasiannya dalam ekspresi initialization membatasi lingkup berlakunya dan mengurangi kemungkinan munculnya kesalahan.

5.4.3 Pernyataan if/else


Pernyataan if memungkinkan program anda untuk secara selektif mengeksekusi pernyataan lain berdasarkan pada kriteria tertentu. Misalkan, program anda mencetak informasi debug, berdasarkan nilai dari variabel boolean bernama DEBUG. Jika DEBUG adalah true, program anda mencetak informasi debug, seperti nilai variabel x. Jika tidak, program akan berlangsung secara normal. Potongan programnya bisa saja seperti berikut: if (DEBUG) { System.out.println("DEBUG: x = " + x); } Contoh tersebut merupakan versi sederhana dari pernyataan if: blok menentukan apakah if dieksekusi jika kondisinya true. Secara umum, bentuk sederhana tersebut dapat ditulis sebagai if (expression) { statement(s) } Bagaimana jika anda ingin melakukan seperangkat pernyataan yang berbeda jika ekspresinya adalah false ? Anda dapat menggunakan pernyataan else untuk itu. Pertimbangkan contoh lain. Misalkan anda perlu program untuk melakukan aksi yang berbeda tergantung apakah pengguna meng-klik tombol OK atau tombol lain pada jendela waspada. Program anda dapat melakukan hal ini dengan menggunakan pernyataan if bersama dengan else: . . . // response is either OK or CANCEL depending // on the button that the user pressed . . . if (response == OK) { // code to perform OK action } else { // code to perform Cancel action } Blok else dieksekusi jika bagian if adalah false. Bentuk lain dari pernyataan else adalah else if, yang mengeksekusi pernyataan berdasarkan ekspresi lain. Suatu pernyataan if dapat diikuti banyak pernyataan else if namun hanya satu else. Berikut ini adalah program IfElseDemo yang memberi grade berdasarkan nilai test: A untuk nilai 90% keatas, B 80% ke atas, dan seterusnya: public class IfElseDemo { public static void main(String[] args) {

October 13, 2009

48

Pemrograman Komputer : Bahasa Java

5.4. PERNYATAAN KONTROL ALUR int testscore = 76; char grade; if (testscore >= 90) { grade = A; } else if (testscore >= 80) grade = B; } else if (testscore >= 70) grade = C; } else if (testscore >= 60) grade = D; } else { grade = F; } System.out.println("Grade = } } Output dari program ini adalah : Grade = C

49

{ { {

" + grade);

Anda dapat memperhatikan bahwa nilai testscore dapat memenuhi lebih dari satu ekspresi dalam pernyataan if majemuk: 76 >= 70 dan 76 >= 60. Namun, sejalan dengan runtime, sistem memproses pernyataan tersebut sebagai berikut: setelah kondisi dipenuhi, pernyataan yang sesuai dieksekusi (grade = C;), dan kontrol melalui pernyataan if tanpa mengevaluasi kondisi sisanya. Bahasa ini mendukung operator ? :, yang merupakan versi ringkas dari pernyataan if. Ingat pernyataan dari program MaxVariablesDemo di halaman 27: if (Character.isUpperCase(aChar)) { System.out.println("The character " + aChar + " is upper case."); } else { System.out.println("The character " + aChar + " is lower case."); } Berikut ini adalah cara penulisannya dengan menggunakan operator ? : System.out.println("The character " + aChar + " is " + (Character.isUpperCase(aChar) ? "upper" : "lower") + "case."); Operator ? : mengembalikan string upper jika metoda isUpperCase mengembalikan true. Sebaliknya, ia mengembalikan string lower. Hasilnya digabung dengan bagian lain dari pesan yang akan ditampilkan. Penggunaan ? : memang masuk akal disini karena pernyataan if adalah sekunder dari panggilan terhadap metoda println. Setelah terbiasa menggunakannya, code menjadi lebih mudah dibaca.

5.4.4 Pernyataan switch


Gunakan pernyataan switch untuk memproses pernyataan secara bersyarat berdasarkan ekspresi bilangan bulat. Berikut ini adalah contoh program SwitchDemo, yang mendeklarasikan bulan bernama bilangan bulat yang nilainya merepresentasikan bulan dalam kalender. Program menampilkan nama bulan, berdasarkan nilai month dengan menggunakan pernyataan switch: public class SwitchDemo { public static void main(String[] args) { int month = 8; switch (month) { case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break;

Agus Purwanto, Ph. D

49

October 13, 2009

50 case case case case case case case case } } } 5: 6: 7: 8: 9: 10: 11: 12:

BAB 5. DASAR BAHASA


System.out.println("May"); break; System.out.println("June"); break; System.out.println("July"); break; System.out.println("August"); break; System.out.println("September"); break; System.out.println("October"); break; System.out.println("November"); break; System.out.println("December"); break;

Pernyataaan switch mengevaluasi ekspresi dalam hal ini nilai month dan mengeksekusi pernyataan case yang sesuai. Maka, keluaran dari program adalah August. Sebagai alternatif, pernyataan if dapat digunakan sebagai pengganti pernyataan switch: int month = 8; if (month == 1) { System.out.println("January"); } else if (month == 2) { System.out.println("February"); } . . . // and so on Penentuan penggunaan pernyataan if atau switch dapat didasarkan pada kejelasan dan faktor lain. Pernyataan if biasa digunakan untuk membuat keputusan berdasarkan kondisi dan nilai yang banyak, sedangkan switch hanya berdasarkan nilai bilangan bulat tunggal. Juga, nilai untuk masing-masing case dalam pernyataan switch harus tunggal. Hal penting lain untuk pernyataan switch adalah pernyataan break sesudah masing-masing case. Masingmasing pernyataan break mengakhiri pernyataan switch, dan alur kontrol berlanjut ke pernyataan pertama sesudah blok switch. Pernyataan break diperlukan karena tanpanya, pernyataan case diakses terus secara berurutan. Berikut ini adalah ilustrasi mengapa perlu menggunakan break: public class SwitchDemo2 { public static void main(String[] args) { int month = 2; int year = 2000; int numDays = 0; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31; break; case 4: case 6: case 9: case 11: numDays = 30; break; case 2: if ( ((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0) ) numDays = 29; else October 13, 2009 50

Pemrograman Komputer : Bahasa Java

5.4. PERNYATAAN KONTROL ALUR numDays = 28; break; } System.out.println("Number of Days = " + numDays); } } Keluaran dari program ini adalah Number of Days = 29

51

Secara teknis, break terakhir tidak diperlukan karena aliran akan keluar dari pernyataan switch biar bagaimanapun. Namun, dianjurkan untuk menggunakan break untuk pernyataan case untuk mengurangi kemungkinan kesalahan jika tiba-tiba anda ingin menambahkan pernyataan case nantinya. Akhirnya, anda dapat menggunakan pernyataan default pada akhir dari switch untuk menangani semua nilai yang tidak secara eksplisit ditangani oleh satu dari pernyataan case. int month = 8; . . . switch (month) { case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default: System.out.println("Hey, thats not a valid month!"); break; }

5.4.5 Pernyataan Exception Handling


Bahasa pemrograman Java mempunyai mekanisme yang dikenal sebagai perkecualian untuk membantu laporan program dan penanganan kesalahan. Ketika error terjadi, program akan melempar perkecualian. Hal ini berarti bahwa alur normal dari program diinterupsi dan lingkungan runtime akan berusaha mencari suatu penanganan perkecualian (exception handler)suatu blok code yang menangani tipe error tertentu. Penanganan demikian memungkinkan program keluar (jika error tak bisa diperbaiki) dengan tidak terlalu merugikan. Ada 3 pernyataan untuk penanganan perkecualian: 1. Pernyataan try yang mengidentikasikan pernyataan dimana perkecualian mungkin terjadi. 2. Pernyataan catch yang berhubungan dengan pernyataan try dan mengidentikasikan blok pernyataan yang menangani tipe tertentu dari perkecualian. Pernyataan dieksekusi jika perkecualian dari tipe tertentu muncul dalam blok try. 3. Pernyataan finally harus berhubungan dengan pernyataan try dan mengidentikasikan blok pernyataan yang dieksekusi tanpa tergantung dari error yang mungkin terjadi dalam blok try. Berikut ini adalah bentuk umum dari pernyataan-pernyataan tersebut: try { statement(s) } catch (exceptiontype name) { statement(s) } finally { statement(s) }

Agus Purwanto, Ph. D

51

October 13, 2009

52

BAB 5. DASAR BAHASA

5.4.6 Pernyataan Pencabangan


Bahasa pemrograman Java mendukung 3 pernyataan pencabangan: 1. Pernyataan break 2. Pernyataan continue 3. Pernyataan return Pernyataan break dam continue dapat digunakan dengan atau tanpa label. Label adalah nama yang diletakkan sebelum pernyataan. Label diikuti dengan titik-dua: statementName: someJavaStatement; Pernyataan break Pernyataan ini mempunyai dua bentuk: berlabel dan tidak. Anda telah melihat bentuk tak berlabel yang digunakan dengan pernyataan switch. Sebagaimana dikemukakan disana, pernyataan break tak-berlabel mengakhiri blok switch, dan alur kontrol beralih ke pernyataan berikutnya setelah blok switch. Anda dapat pula menggunakan break tak-berlabel untuk mengakhiri loop for, while atau do-while. Program BreakDemo berikut ini mengandung loop for yang mencari nilai tertentu dalam array: public class BreakDemo { public static void main(String[] args) { int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 }; int searchfor = 12; int i = 0; boolean foundIt = false; for ( ; i < arrayOfInts.length; i++) { if (arrayOfInts[i] == searchfor) { foundIt = true; break; } } if (foundIt) { System.out.println("Found " + searchfor + " at index " + i); } else { System.out.println(searchfor + "not in the array"); } } } Pernyataan break mengakhiri loop for ketika nilai tersebut ditemukan. Alur kontrol pindah ke pernyataan setelah blok for, yang mencetak pernyataan pada akhir program. Outputnya adalah: Found 12 at index 4 Bentuk tak-berlabel digunakan untuk memberhentikan switch, for, while atau do-while terdalam; bentuk berlabel memberhentikan pernyataan terluar, yang diidentikasikan dengan label khusus dalam pernyataan break. Program berikut BreakWithLabelDemo adalah mirip dengan yang terdahulu, namun mencari nilai dalam array 2D. Dua loop bersarang (nested) digunakan. Ketika nilai ditemukan, break berlabel mengakhiri pernyataan berlabel search, yang merupakan loop for terluar: public class BreakWithLabelDemo { public static void main(String[] args) { int[][] arrayOfInts = { { 32, 87, 3, 589 }, October 13, 2009 52

Pemrograman Komputer : Bahasa Java

5.4. PERNYATAAN KONTROL ALUR { 12, 1076, 2000, 8 }, { 622, 127, 77, 955 } }; int searchfor = 12; int i = 0; int j = 0; boolean foundIt = false; search: for ( ; i < arrayOfInts.length; i++) { for (j = 0; j < arrayOfInts[i].length; j++) { if (arrayOfInts[i][j] == searchfor) { foundIt = true; break search; } } }

53

if (foundIt) { System.out.println("Found " + searchfor + " at " + i + ", " + j); } else { System.out.println(searchfor + "not in the array"); } } } Keluaran dari program ini adalah: Found 12 at 1, 0 Sintaks bisa sedikit membingungkan. Pernyataan break mengakhiri pernyataan berlabel; ia tidak memindahkan alur kontrol ke label. Alur kontrol pindah ke pernyataan sesudah pernyataan berlabel yang bersangkutan. Pernyataan continue Anda dapat menggunakan pernyataan continue untuk meloncati iterasi pada saat tertentu. Bentuk tak-berlabel meloncati ke akhir blok loop terdalam dan mengevaluasi ekspresi boolean yang mengontrol loop, meloncati sisa iterasi dalam loop. Program ContinueDemo memeriksa huruf pada buffer string. Jika karakter pada saat tertentu bukanlah p, pernyataan continue meloncati sisa iterasi dan proses berlanjut ke karakter berikutnya. Jika p, program menambah cacahan dan mengkonversi p menjadi huruf besar: public class ContinueDemo { public static void main(String[] args) { StringBuffer searchMe = new StringBuffer( "peter piper picked a peck of pickled peppers"); int max = searchMe.length(); int numPs = 0; for (int i = 0; i < max; i++) { //interested only in ps if (searchMe.charAt(i) != p) continue; //process ps numPs++; searchMe.setCharAt(i, P); } System.out.println("Found " + numPs + " ps in the string.");

Agus Purwanto, Ph. D

53

October 13, 2009

54 System.out.println(searchMe); } } Keluarannya adalah: Found 9 ps in the string. Peter PiPer Picked a Peck of Pickled PePPers

BAB 5. DASAR BAHASA

Bentuk berlabel dari continue meloncati iterasi dari loop terluar yang berlabel. Program ContinueWithLabelDemo menggunakan loop bersarang untuk mencari substring dalam string lain. Dua loop bersarang dibutuhkan: satu untuk mengiterasi substring dan satu lainnya untuk mengiterasi string yang diperiksa. Program ini menggunakan continue berlabel untuk meloncati iterasi dari loop terluar: public class ContinueWithLabelDemo { public static void main(String[] args) { String searchMe = "Look for a substring in me"; String substring = "sub"; boolean foundIt = false; int max = searchMe.length() - substring.length(); test: for (int i = 0; i <= max; i++) { int n = substring.length(); int j = i; int k = 0; while (n-- != 0) { if (searchMe.charAt(j++) != substring.charAt(k++)) { continue test; } } foundIt = true; break test; } System.out.println(foundIt ? "Found it" : "Didnt find it"); } } Keluarannya adalah Found it Pernyataan return Anda menggunakan return untuk keluar dari metoda. Alur kontrol mengembalikan proses ke pernyataan setelah panggilan pada metoda pemanggil. Pernyataan return mempunyai dua bentuk: yang mengembalikan nilai dan yang tidak. Untuk mengembalikan nilai, letakkan nilai (atau ekspresi yang menghitung nilai) sesudah kata kunci return: return ++count; Tipe data dari nilai yang dikembalikan oleh return harus sesuai dengan tipe dari nilai return dari deklarasi metoda. Jika metoda dideklarasikan sebagai void, gunakan bentuk return yang tidak mengembalikan nilai: return;

5.4.7 Rangkuman Pernyataan Kontrol Alur


Untuk mengontrol alur program, bahasa pemrograman Java mempunyai: 1. tiga jenis loop, October 13, 2009 54

Pemrograman Komputer : Bahasa Java

5.4. PERNYATAAN KONTROL ALUR 2. pernyataan if-else, 3. pernyataan switch, 4. pernyataan exception-handling 5. pernyataan pencabangan Loop

55

Gunakan pernyataan while untuk mengiterasi pada blok pernyataan ketika ekspresi boolean bernilai true. Ekspresi dievaluasi pada bagian atas dari loop: while (boolean expression) { statement(s) } Gunakan pernyataan do-while untuk mengiterasi pada blok pernyataan ketika ketika ekspresi boolean bernilai true. Ekspresi dievaluasi pada bagian bawah dari loop, sehingga pernyataan dalam blok do-while dieksekusi paling tidak sekali: do { statement(s) } while (expression); Pernyataan for mengiterasi blok pernyataan, dan mengandung inisialisasi ekspresi, kondisi berhenti, dan ekspresi penambahan: for (initialization ; termination ; increment) { statement(s) } Pernyataan Pembuat Keputusan Bahasa pemrograman Java mempunyai dua pernyataan pembuat keputusan: if-else dan switch. Pernyataan yang lebih bersifat umum adalah if; penggunaan switch untuk membuat keputusan pilihan majemuk tergantung pada satu nilai bilangan bulat tunggal. Berikut ini adalah pernyataan if yang paling mendasar dengan blok pernyataan dieksekusi jika ekspresi boolean adalah true: if (boolean expression) { statement(s) } Berikut ini adalah pernyataan if dengan pernyataan else. Pernyataan if mengeksekusi blok pertama jika ekspresi boolean true; jika tidak, ia mengeksekusi blok kedua: if (boolean expression) { statement(s) } else { statement(s) } Anda dapat menggunakan else if untuk membuat pernyataan if gabungan: if (boolean expression) { statement(s) } else if (boolean expression) { statement(s) } else if (boolean expression) { statement(s) } else { statement(s) } Pernyataan switch mengevaluasi ekspresi bilangan bulat dan mengeksekusi pernyataan case yang sesuai:

Agus Purwanto, Ph. D

55

October 13, 2009

56 switch (integer expression) { case integer expression: statement(s) break; ... default: statement(s) break; } Pernyataan Exception-Handling Gunakan pernyataan try, catch dan finally untuk menangani perkecualian: try { statement(s) } catch (exceptiontype name) { statement(s) } catch (exceptiontype name) { statement(s) } finally { statement(s) } Pernyataan Pencabangan

BAB 5. DASAR BAHASA

Pernyataan ini mengubah alur kontrol dalam program ke pernyataan berlabel. Anda memberi label pernyataan dengan menempatkan identier legal (label) diikuti dengan titik-dua sebelum pernyataan: statementName: someJavaStatement; Gunakan bentuk tak-berlabel untuk pernyataan break untuk mengakhiri pernyataan switch, for, while atau do-while terdalam: break; Gunakan bentuk berlabel untuk pernyataan break untuk mengakhiri pernyataan switch, for, while atau do-while bagian luar: break label; Pernyataan continue mengakhiri iterasi dari loop terdalam dan mengevaluasi ekspresi boolean yang mengontrol loop: continue; Pernyataan continue berlabel mengakhiri iterasi dari loop berlabel continue label; Gunakan return untuk mengakhiri metoda: return; Anda dapat mengembalikan nilai ke pemanggil dengan menggunakan return berikut nilai: return value;

5.4.8 Pertanyaan dan Latihan: Kontrol Alur


Pertanyaan 1. Perhatikan program SortDemo pada halaman 34. Pernyataan kontrol alur manakah yang ada disana ? 2. Apakah yang salah dari potongan program berikut ? October 13, 2009 56

Pemrograman Komputer : Bahasa Java

5.4. PERNYATAAN KONTROL ALUR if (i = 1) { /* do something */ }

57

3. Lihat program WhileDemo pada halaman 46 dan DoWhileDemo pada halaman 47. Apa keluaran dari masingmasing program jika anda mengubah nilai dari masing-masing string copyFromMe menjadi golly gee. this is fun. Jelaskan. Latihan Pertimbangkan potongan program berikut: if (aNumber >= 0) if (aNumber == 0) System.out.println("first string"); else System.out.println("second string"); System.out.println("third string"); 1. Jika aNumber adalah 3, apa keluarannya ? 2. Tuliskan program test yang mengandung potongan program tersebut; buat aNumber 3. Apakah output dari program ? Apakah tepat seperti yang anda perkirakan ? Jelaskan. 3. Dengan menggunakan spasi dan line break, reformat potongan program tersebut agar kontrol alur lebih mudah dipahami. 4. Gunakan kurung kurawal untuk memperjelas code dan mengurangi kemungkinan error oleh pengembang code berikutnya.

5.4.9 Jawaban
Jawaban Pertanyaan 1. SortDemo mengandung 4 pernyataan kontrol. Secara berurutan: 2 pernyataan for, 1 pernyataan if dan 1 pernyataan for. 2. == seharusnya digunakan, bukan =. Jika anda coba untuk mengkompilenya, kompiler akan memperingatkan anda nilai boolean yang dibutuhkan, bukan nilai bilangan bulat. 3. Berikut ini adalah program yang sudah dimodikasi berdasarkan program WhileDemo dan DoWhileDemo. public class NewWhileDemo { public static void main(String[] args) { String copyFromMe = "golly gee. this is fun."; StringBuffer copyToMe = new StringBuffer(); int i = 0; char c = copyFromMe.charAt(i); while (c != g) { copyToMe.append(c); c = copyFromMe.charAt(++i); } System.out.println(copyToMe); } } public class NewDoWhileDemo { public static void main(String[] args) { String copyFromMe = "golly gee. this is fun."; StringBuffer copyToMe = new StringBuffer();

Agus Purwanto, Ph. D

57

October 13, 2009

58

BAB 5. DASAR BAHASA

int i = 0; char c = copyFromMe.charAt(i); do { copyToMe.append(c); c = copyFromMe.charAt(++i); } while (c != g); System.out.println(copyToMe); } } Program NewWhileDemo menampilkan baris kosong karena huruf pertama adalah g, sehingga loop tidak dimasuki dan tidak ada karakter yang dilampirkan ke copyToMe. Program NewDoWhileDemo menampilkan golly karena g pertama diabaikan, dan yang kedua mengakhiri loop tanpa menambah g kedua ke string. Penyelesaian Latihan 1. Penyelesaian: second string third string 2. Penyelesaian: public class NestedIf { public static void main(String[] args) { int aNumber = 3; if (aNumber >= 0) if (aNumber == 0) System.out.println("first string"); else System.out.println("second string"); System.out.println("third string"); } } Keluarannya: second string third string 3 lebih dari atau sama dengan 0, sehingga eksekusi berlangsung ke pernyataan if kedua. Test pernyataan if kedua gagal karena 3 tidak sama dengan 0. Maka kalimat else berlangsung. Maka, second string ditampilkan. println terakhir berada di luar pernyataan if, sehingga ia selalu dieksekusi. Jadi third string selalu tampil. 3. Penyelesaian: if (aNumber >= 0) if (aNumber == 0) System.out.println("first string"); else System.out.println("second string"); System.out.println("third string"); 4. Penyelesaian dengan menggunakan konvensi code Sun: October 13, 2009 58

Pemrograman Komputer : Bahasa Java

5.4. PERNYATAAN KONTROL ALUR if (aNumber >= 0) { if (aNumber == 0) { System.out.println("first string"); } else { System.out.println("second string"); } } System.out.println("third string");

59

Agus Purwanto, Ph. D

59

October 13, 2009

60

BAB 5. DASAR BAHASA

October 13, 2009

60

Pemrograman Komputer : Bahasa Java

Bab 6

Dasar-Dasar Objek
Pembahasan berikut adalah mengenai pembahasan umum mengenai siklus berlakunya objek. Informasi berikut berlaku untuk semua objek, termasuk cara pembuatan objek, penggunaan dan akhirnya mengenai cara sistem membersihkan objek ketika objek tersebut sudah tidak digunakan.

6.1 Siklus Berlakunya Objek


Pembahasan meliputi cara pembuatan dan penggunaan semua tipe objek. Pembahasan juga meliputi cara sistem membersihkan objek ketika objek tersebut sudah tidak diperlukan lagi. Program Java biasanya menggunakan banyak objek yang saling berinteraksi melalui pengiriman pesan. Melalui interaksi ini, program Java dapat mengimplementasikan GUI, menjalankan animasi, mengirim atau menerima informasi melalui jaringan. Ketika objek telah selesai melakukan tugasnya, sampahnya dikumpulkan dan sumber dayanya di daur ulang untuk digunakan oleh objek lain. Berikut ini adalah program kecil bernama CreateObjectDemo, yang membuat 3 objek: satu objek Point dan dua objek Rectangle. Anda membutuhkan ketiganya untuk mengkompil program ini. public class CreateObjectDemo { public static void main(String[] args) { // create a point object and two rectangle objects Point origin_one = new Point(23, 94); Rectangle rect_one = new Rectangle(origin_one, 100, 200); Rectangle rect_two = new Rectangle(50, 100); // display rect_ones width, height, and area System.out.println("Width of rect_one: " + rect_one.width); System.out.println("Height of rect_one: " + rect_one.height); System.out.println("Area of rect_one: " + rect_one.area()); // set rect_twos position rect_two.origin = origin_one; // display rect_twos position System.out.println("X Position of rect_two: " + rect_two.origin.x); System.out.println("Y Position of rect_two: " + rect_two.origin.y); // move rect_two and display its new position rect_two.move(40, 72); System.out.println("X Position of rect_two: " + rect_two.origin.x); System.out.println("Y Position of rect_two: " + rect_two.origin.y); } } Sesudah membuat objek ini, program memanipulasi objek dan menampilkan beberapa informasi mengenainya. Berikut ini adalah output dari program: 61

62 Width of rect_one: 100 Height of rect_one: 200 Area of rect_one: 20000 X Position of rect_two: Y Position of rect_two: X Position of rect_two: Y Position of rect_two:

BAB 6. DASAR-DASAR OBJEK

23 94 40 72

Subbab ini menggunakan contoh di atas untuk menjelaskan mengenai siklus kehidupan dari objek dalam program. Dari sini, anda dapat mempelajari cara untuk menulis program yang menggunakan objek dan cara sistem melakukan pembersihan.

6.1.1 Pembuatan Objek


Sebagaimana anda ketahui, class merupakan cetak biru dari objek; anda membuat objek dari class. Masing-masing pernyataan berikut diambil dari program CreateObjectDemo yang tertera pada halaman 61: Point origin_one = new Point(23, 94); Rectangle rect_one = new Rectangle(origin_one, 100, 200); Rectangle rect_two = new Rectangle(50, 100); Baris pertama membuat objek dari class Point dan kedua serta ketiga membuat objek dari class Rectangle. Masing-masing pernyataan mempunyai 3 bagian: 1. Deklarasi: Pernyataan sebelum tanda samadengan di atas merupakan deklarasi variabel yang menghubungkan nama dengan tipenya. Ketika anda membuat objek, ada tidak harus mendeklarasikan variabel yang mengacunya. Namun, deklarasi variabel sering muncul pada baris yang sama dengan bagian yang membuat objek. 2. Instansiasi: Kata kunci new adalah operator Java yang membuat objek baru (mengalokasikan ruang memori). 3. Inisialisasi: Operator new diikuti dengan panggilan terhadap constructor. Misalnya, Point(23,94) adalah panggilan terhadap constructor Point saja. Konstruktor menginisialisasi objek baru. Ketiga subsubbab berikut menjelaskan ketiga hal di atas dengan lebih rinci. Deklarasi variabel untuk mengacu pada objek Anda telah mempelajari cara mendeklarasi variabel sederhana: type name Hal ini memberitahu kompiler bahwa anda akan menggunakan name untuk mengacu pada data dengan tipe type. Sebagai tambahan dari tipe primitif, seperti int dan boolean, class dan interface merupakan tipe juga. Untuk mendeklarasikan variabel yang mengacu pada objek, anda dapat menggunakan nama dari class atau interface, seperti tipe variabel. Program sample pada halaman 61 menggunakan nama class Point dan Rectangle sebagai tipe untuk mendeklarasikan variabel. Point origin_one = new Point(23, 94); Rectangle rect_one = new Rectangle(origin_one, 100, 200); Rectangle rect_two = new Rectangle(50, 100); Deklarasi tidak membuat objek baru. Pernyataan Point origin one tidak membuat objek Point baru; ia hanya mendeklarasikan variabel bernama origin one, yang digunakan untuk mengacu pada objek Point. Reference pada saat deklarasi adalah masih kosong. Reference kosong dikenal sebagai null reference. Instansiasi Objek Operator new menginstansiasi class dengan mengalokasikan memori untuk objek baru. Operator new membutuhkan argumen postfix tunggal: panggilan ke konstruktor. Nama dari konstruktor merupakan nama dari class yang di instansiasi. Konstruktor menginisialisasi objek baru. Operator new mengembalikan reference kepada objek yang dibuatnya. Reference ini sering diberikan pada variabel dengan tipe yang sesuai. Jika tidak demikian, objek tidak dapat diakses sesudah pernyataan dengan operator new selesai dieksekusi. October 13, 2009 62

Pemrograman Komputer : Bahasa Java

6.1. SIKLUS BERLAKUNYA OBJEK Inisialisasi suatu objek Berikut ini adalah class Point public class Point { public int x = 0; public int y = 0; //A constructor! public Point(int x, int y) { this.x = x; this.y = y; } }

63

Class ini mengandung konstruktor tunggal. Anda dapat mengenali konstruktor karena ia mempunyai nama yang sama dengan class dan tidak mempunyai tipe return. Konstruktor pada class Point mengambil 2 argumen bilangan bulat sebagaimana dideklarasikan dengan pernyataan int x, int y. Pernyataan berikut memberikan 23 dan 94 sebagai nilai dari argumen tersebut: Point origin_one = new Point(23, 94); Berikut ini adalah class Rectangle yang mengandung 4 konstruktor: public class Rectangle { public int width = 0; public int height = 0; public Point origin; //Four constructors public Rectangle() { origin = new Point(0, 0); } public Rectangle(Point p) { origin = p; } public Rectangle(int w, int h) { this(new Point(0, 0), w, h); } public Rectangle(Point p, int w, int h) { origin = p; width = w; height = h; } //A method for moving the rectangle public void move(int x, int y) { origin.x = x; origin.y = y; } //A method for computing the area of the rectangle public int area() { return width * height; } } Masing-masing konstruktor memungkinkan anda memberikan nilai awal untuk aspek yang berbeda dari rectangle: titik pusat, lebar, tinggi; ketiganya; atau tidak sama sekali. Jika class mempunyai konstruktor multipel, mereka mempunyai nama yang sama namun banyak argumen atau tipe yang berbeda. Misalkan, kita punya pernyataan:

Agus Purwanto, Ph. D

63

October 13, 2009

64 Rectangle rect_one = new Rectangle(origin_one, 100, 200);

BAB 6. DASAR-DASAR OBJEK

Kompiler mengetahui bahwa konstruktor pada class Rectangle membutuhkan argumen Point diikuti dengan argumen 2 bilangan bulat. Hal ini menginisialisasi variabel origin pada Rectangle menjadi sama dengan objek Point yang diacu oleh origin one. Pernyataan ini juga menset lebar menjadi 100 dan tinggi 200. Disana ada 2 reference terhadap objek Point yang sama; objek dapat mempunyai reference multipel. Reference multipel dapat mengacu pada objek yang sama. Baris berikutnya memanggil konstruktor yang membutuhkan 2 argumen bilangan bulat, yang memberikan nilai awal untuk width dan height. Jika anda memeriksa pernyataan dalam konstruktor, anda akan melihat bahwa ia membuat objek Point baru dengan nilai x dan y yang diinisialisasi dengan 0: Rectangle rect_two = new Rectangle(50, 100); Konstruktor Rectangle yang digunakan dalam pernyataan berikut tidak membutuhkan argumen, sehingga ia diberi nama konstruktor tak-berargumen: Rectangle rect = new Rectangle(); Jika class tidak secara eksplisit mendeklarasikan konstruktor, platform Java secara otomatis memberikan konstruktor tak-berargumen (disebut sebagai default constructor), yang tidak mengerjakan apapun. Oleh karenanya, semua class paling tidak mempunyai satu konstruktor.

6.1.2 Penggunaan Objek


Setelah objek dibuat, anda mungkin akan menggunakannya. Anda mungkin perlu informasi darinya, ingin merubah keadaannya atau melakukan aksi tertentu. Objek memberikan anda 2 cara untuk melakukannya: 1. Memanipulasi atau memeriksa variabelnya, 2. Memanggil metodanya Mengacu Variabel milik Objek Berikut ini adalah bentuk umum dari nama yang berkualitas: objectReference.variableName Anda dapat menggunakan nama sederhana untuk meng-instansi variabel ketika variabel instance berada dalam lingkup berlakunya; yaitu berada di dalam class objek. Pernyataan yang berada di luar class objek harus menggunakan nama berkualitas. Misalkan, pernyataan dalam class CreateObjectDemo berada diluar class Rectangle. Maka untuk mengacu pada variabel origin, width dan height dalam objek Rectangle yang bernama rect one, class CreateObjectDemo harus menggunakan nama rect one.origin, rect one.width dan rect one.height. Program menggunakan 2 dari nama ini untuk menampilkan lebar dan tinggi dari rect one:

System.out.println("Width of rect_one: " + rect_one.width);System.out.println("Height of rect_one: " + rect Usaha untuk menggunakan nama sederhana width dan height pada class CreateObjectDemo tidak berlaku, karena variabel tersebut hanya berada pada lingkup objek sehingga mengakibatkan error kompiler. Program akan menggunakan pernyataan yang sama untuk menampilkan informasi mengenai rect two. Objek dengan tipe yang sama mempunyai salinannya masing-masing dari variabel instans. Maka masing-masing objek Rectangle mempunyai variabel dengan nama origin, width dan height. Ketika anda mengakses suatu variabel instans melalui referensi objek, anda mengacu pada objek tersebut. Dua objek rect one dan rect two pada program CreateObjectDemo mempunyai variabel origin, width dan height yang berbeda. Bagian pertama dari nama berkualitas. objectReference, harus merupakan acuan terhadap objek. Anda dapat menggunakan nama variabel reference disini sebagaimana pada contoh terdahulu, atau anda dapat menggunakan sembarang pernyataan yang mengembalikan acuan objek. Ingat bahwa operator new mengembalikan acuan (reference) terhadap objek. Maka anda dapat menggunakan nilai yang dikembalikan dari new untuk mengakses variabel objek baru: int height = new Rectangle().height; Pernyataan ini membuat objek Rectangle baru dan segera memperoleh tingginya. Intinya, pernyataan tersebut menghitung tinggi default dari Rectangle. Sebagai catatan, sesudah pernyataan ini dieksekusi, program tidak lagi mempunyai reference terhadap Rectangle yang dibuat, karena program tidak pernah menyimpan reference pada variabel. Objek tidak direferensi, sehingga sumber dayanya dapat didaur ulang oleh platform Java. October 13, 2009 64

Pemrograman Komputer : Bahasa Java

6.1. SIKLUS BERLAKUNYA OBJEK Mengenai Akses Variabel

65

Manipulasi langsung pada variabel objek melalui objek dan class lain sebaiknya dihindari karena mungkin diperoleh nilai yang tidak masuk akal. Misalkan, pertimbangkan class Rectangle dari subbab terdahulu. Dengan menggunakan class tersebut, anda dapat membuat rectangle dengan lebar dan tinggi yang negatif. Secara ideal, selain dengan memungkinkakn manipulasi langsung, class dapat memberikan metoda dimana objek lain dapat memeriksa atay merubah variabel. Metoda ini memastikan bahwa nilai variabel adalah masuk akal untuk objek dengan tipe yang bersangkutan. Class Rectangle dapat memberikan metoda dengan nama setWidth, setHeight, getWidth dan getHeight untuk menset dan memperoleh lebar dan tinggi. Metoda ini akan melaporkan kesalahan bila pemanggil mencoba menset lebar dan tinggi dengan bilangan negatif. Keuntungan lain dari penggunaan metoda dibandingkan dengan akses langsung adalah bahwa class dapat merubah tipe dan nama variabel yang digunakan untuk menyimpan lebar dan tinggi tanpa menimbulkan efek pada client. Bahasa pemrograman Java memberikan mekanisme akses kontrol dimana class dapat menentukan akses langsung apa yang dapat dilakukan. Class seharusnya melindungi variabel terhadap manipulasi langsung dengan objek lain jika manipulasi tersebut dapat menghasilkan nilai yang tidak masuk akal untuk objek dengan tipe yang bersangkutan. Perubahan pada variabel ini seharusnya dikontrol dengan pemanggilan metoda. Jika class menjamin akses terhadap variabelnya, anda dapat berasumsi bahwa anda dapat memeriksa dan merubah variabel tersebut tanpa efek buruk. Untuk mempelajari lebih lanjut mengenai mekanisme kontrol akses, silahkan lihat subbab yang relevan. Juga dengan membuat variabel dapat diakses, mereka menjadi bagian dari API class, yang berarti bahwa penulis dari class tidak seharusnya merubah nama atau tipe-nya. Memanggil Metoda Milik Objek Anda juga menggunakan nama berkualitas untuk memanggil metoda dari objek. Untuk membentuk nama berkualitas dari metoda, anda melampirkan nama metoda pada referensi objek, dengan titik diantaranya. Anda juga perlu menggunakan argumen di dalam kurung. Jika metoda tersebut tidak membutuhkan argumen apapun, gunakan kurung kosong: objectReference.methodName(argumentList); atau objectReference.methodName(); Class Rectangle mempunyai 2 metoda: area untuk menghitung luasan rectangle dan move untuk merubah origin dari rectangle. Berikut ini adalah code CreateObjectDemo yang memanggil 2 metoda ini: System.out.println("Area of rect_one: " + rect_one.area()); ... rect_two.move(40, 72); Pernyataan pertama memanggil metoda area dari rect one dan menampilkan hasilnya. Baris kedua memindahkan rect two karena metoda move memberikan nilai baru pada origin.x dam origin.y dari objek. Variabel instans objectReference harus merupakan reference terhadap objek. Anda dapat menggunakan nama variabel, namun anda juga dapat menggunakan pernyataan sembarang yang mengembalikan reference objek. Operator new mengembalikan referensi objek, sehingga anda dapat menggunakan nilai yang dikembalikan dari new untuk memanggil metoda dari objek yang baru: new Rectangle(100, 50).area() Pernyataan new Rectangle(100, 50) mengembalikan referensi yang mengacu pada objek Rectangle. Sebagaimana terlihat, anda dapat menggunakan notasi dot untuk memanggil metoda area dari Rectangle yang baru untuk menghitung area dari segiempat yang baru. Beberapa metoda, seperti area, mengembalikan nilai. Untuk metoda yang mengembalikan nilai, anda dapat menggunakan panggilan metoda dengan pernyataan. Anda dapat memberi nilai yang dikembalikan pada variabel, menggunakannya untuk membuat keputusan, atau mengontrol loop. Pernyataan berikut memberikan nilai yang dikembalikan oleh area ke variabel: int areaOfRectangle = new Rectangle(100, 50).area(); Perhatikan bahwa menggunakan metoda pada objek tertentu adalah sama dengan mengirimkan pesan pada objek tersebut. Dalam kasus ini, objek tersebut adalah rectangle yang dikembalikan oleh konstruktor. Sedikit mengenai akses metoda,.... Metoda pada class Point dan Rectangle semuanya dideklarasikan sebagai public, sehingga mereka dapat diakses oleh sembarang class lain. Terkadang, class perlu untuk membatasi

Agus Purwanto, Ph. D

65

October 13, 2009

66

BAB 6. DASAR-DASAR OBJEK

akses ke metodanya. Misalkan, class mungkin mempunyai metoda yang hanya subclass yang diperbolehkan mengakses. Class dapat menggunakan mekanisme yang sama untuk mengontrol akses terhadap metodanya karena ia menggunakan akses kontrol pada variabelnya.

6.1.3 Membersihkan Objek yang tak digunakan


Beberapa bahasa berorientasi objek memerlukan anda memperhatikan objek yang anda buat dan anda perlu secara eksplisit menghapusnya ketika mereka tidak lagi diperlukan. Pengaturan memori secara eksplisit adalah sangat merepotkan dan mudah menimbulkan kesalahan. Platform Java memungkinkan anda untuk membuat sebanyak objek anda inginkan (tergantung kemampuan sistem, tentunya) dan anda tidak perlu memikirkan penghapusan untuk pembebasan memori. Lingkungan runtime Java menghapus objek ketika mereka tidak lagi diperlukan. Proses ini disebut sebagai garbage collection. Objek berhak menggunakan garbage collection jika sudah tidak ada lagi reference terhadap objek itu. Reference yang disimpan pada variabel biasanya dibuang ketika variabel keluar lingkup. Atau anda dapat secara eksplisit membuang reference objek dengan menset variabel ke nilai khusus null. Ingat bahwa program dapat mempunyai reference majemuk untuk objek yang sama; semua reference terhadap objek harus dibuang sebelum objek berhak untuk garbage collection Garbage Collector/Tukang Sampah Lingkungan runtime Java mempunyai tukang sampah yang secara periodik membebaskan memori yang digunakan oleh objek yang tidak lagi diacu. Tukang sampah ini melakukan tugasnya secara otomatis, walaupun terkadang anda perlu memanggilnya secara eksplisit dengan menggunakan metoda gc dalam class System. Misalkan, anda mungkin ingin menjalankan tukang sampah sesudah bagian dari code yang membuat sejumlah besar sampah atau sebelum bagian dari code yang memerlukan memori besar. Finalization Sebelum objek bersampah dikumpulkan, tukang sampah memberi objek kesempatan untuk membersihkan sesudah ia memanggil metoda finalize objek. Proses ini dikenal sebagai nalization. Kebanyakan programer tidak perlu kuatir mengenai implementasi metoda finalize. Terkadang, programer mungkin harus mengimplementasi metoda finalize untuk membebaskan sumber daya yang di luar kontrol tukang sampah. Metoda finalize adalah anggota dari class Object, yang berada pada urutan teratas pada hirarki class dan merupakan superclass dari semua class. Class dapat menumpuk metoda finalize untuk melakukan nalisasi yang diperlukan untuk objek dengan tipe yang bersangkutan. Jika anda menumpuk finalize, implementasi metoda anda harus memanggil super.finalize sebagai langkah terakhir.

6.1.4 Rangkuman Pembuatan dan Penggunaan Objek


Anda membuat objek dari class dengan menggunakan operator new dan konstruktor. Operator new mengembalikan reference ke objek yang dibuat. Anda dapat memberi reference ke variabel atau menggunakannya secara langsung. Class mengontrol akses ke variabel instans dan metodanya dengan menggunakan mekanisme akses platform Java. Variabel instans dan metoda yang dapat diakses oleh code diluar class yang mendeklarasikannya dapat diacu dengan menggunakan nama berkualitas. Nama berkualitas adalah variabel instans seperti berikut : objectReference.variableName Contoh nama berkualitas dari metoda adalah: objectReference.methodName(argumentList) atau objectReference.methodName() Tukang sampah secara otomatis membersihkan objek yang sudah tak digunakan lagi. Objek sudah tidak digunakan lagi ketika program tidak lagi mengandung reference terhadapnya. Anda dapat secara eksplisit membuang reference dengan menset variabel yang menyimpan reference ke null. October 13, 2009 66

Pemrograman Komputer : Bahasa Java

6.1. SIKLUS BERLAKUNYA OBJEK

67

6.1.5 Pertanyaan dan Latihan: Membuat dan Menggunakan Objek


Pertanyaan 1. Apa yang salah dengan program berikut ? // // This program wont compile because something is wrong. // public class SomethingIsWrong { public static void main(String[] args) { Rectangle myRect; myRect.width = 40; myRect.height = 50; System.out.println("myRects area is " + myRect.area()); } } 2. Code berikut membuat satu objek Point dan satu objek Rectangle: public class Point { public int x = 0; public int y = 0; // a constructor! public Point(int x, int y) { this.x = x; this.y = y; } } public class Rectangle { public int width = 0; public int height = 0; public Point origin; // four constructors public Rectangle() { origin = new Point(0, 0); } public Rectangle(Point p) { origin = p; } public Rectangle(int w, int h) { this(new Point(0, 0), w, h); } public Rectangle(Point p, int w, int h) { origin = p; width = w; height = h; } // a method for moving the rectangle public void move(int x, int y) { origin.x = x; origin.y = y; } // a method for computing the area of the rectangle public int area() { return width * height;

Agus Purwanto, Ph. D

67

October 13, 2009

68 } }

BAB 6. DASAR-DASAR OBJEK

Berapa reference terhadap objek tersebut muncul sesudah code dieksekusi ? Apakah objek-objek tersebut berhak untuk pengumpulan sampah ? ... Point point = new Point(2,4); Rectangle rectangle = new Rectangle(point, 20, 20); point = null; ... 3. Bagaimana program menghapus objek yang dibuatnya ? Latihan 1. Perbaiki program SomethingIsWrong pada pertanyaan 1. 2. Diberikan class berikut public class NumberHolder { public int anInt; public float aFloat; } Tuliskan code yang membuat instans dari class tersebut, inisialisasi kedua variabel anggotanya, dan tampilkan nilai untuk masing-masing anggota variabel.

6.1.6 Jawaban
Jawaban Pertanyaan 1. Code tidak pernah membuat objek Rectangle. Dengan program sederhana ini, kompiler menghasilkan peringatan. Namun, dalam situasi yang lebih realistis, myRect mungkin diinisialisasi ke null dalam satu tempat, misalkank di konstruktor dan digunakan kemudian. Dalam kasus itu, program akan dapat dikompilasi, namun menghasilkan NullPointerException pada saat runtime. 2. Ada satu reference terhadap objek Point dan satu terhadap objek Rectangle. Tak satupun yang berhak memanfaatkan pengumpulan sampah. 3. Program tidak secara eksplisit menghapus objek. Program dapat menset semua reference ke objek ke null sehingga menjadi berhak memanfaatkan pengumpulan sampah. Namun, program tidak menghapus objek. Penyelesaian Latihan 1. Penyelesaian: public class SomethingIsRight { public static void main(String[] args) { Rectangle myRect = new Rectangle(); myRect.width = 40; myRect.height = 50; System.out.println("myRects area is " + myRect.area()); } } 2. Penyelesaian: public class NumberHolderDisplay { public static void main(String[] args) { NumberHolder aNumberHolder = new NumberHolder(); aNumberHolder.anInt = 1; October 13, 2009 68

Pemrograman Komputer : Bahasa Java

6.2. CHARACTER DAN STRING aNumberHolder.aFloat = 2.3f; System.out.println(aNumberHolder.anInt); System.out.println(aNumberHolder.aFloat); } }

69

6.2 Character dan String


Data character - baik berupa karakter tunggal atau sederetan karakter - dapat disimpan dan dimodikasi dengan satu atau tiga class pada java.lang: Character, String, dan StringBuffer. Platform Java mengandung 3 class yang dapat digunakan untuk data character: 1. Character: adalah class yang instans-nya dapat menyimpan nilai karakter tunggal. Class ini juga mendenisikan metoda yang mudah digunakan untuk memanipulasi atau memeriksa data karakter tunggal. 2. String: adalah class untuk bekerja dengan data tetap yang terdiri dari berbagai karakter. 3. StringBuffer: adalah class untuk menyimpan dan memanipulasi data yang tidak tetap yang terdiri dari berbagai karakter. Suatu objek dengan tipe Character mengandung nilai karakter tunggal. Anda menggunakan objek Character sebagai ganti dari variabel char ketika anda memerlukan objek - misalnya, ketika melalukan nilai karakter ke metoda yang mengubah nilai atau ketika menempatkan nilai karakter ke dalam struktur data, seperti vektor yang membutuhkan objek. Program contoh berikut ini, CharacterDemo, membuat beberapa objek karakter dan menampilkan beberapa informasi mengenainya. public class CharacterDemo { public static void main(String args[]) { Character a = new Character(a); Character a2 = new Character(a); Character b = new Character(b); int difference = a.compareTo(b); if (difference == 0) { System.out.println("a is equal to b."); } else if (difference < 0) { System.out.println("a is less than b."); } else if (difference > 0) { System.out.println("a is greater than b."); } System.out.println("a is " + ((a.equals(a2)) ? "equal" : "not equal") + " to a2."); System.out.println("The character " + a.toString() + " is " + (Character.isUpperCase(a.charValue()) ? "upper" : "lower") + "case."); } } Berikut ini adalah outputnya: a is less than b. a is equal to a2. The character a is lowercase. Program CharacterDemo memanggil konstruktor dan metoda berikut yang diberikan oleh class Character: 1. Character(char): adalah satu-satunya konstruktor class Character, yang membuat objek Character yang mengandung nilai yang diberikan melalui argumen. Setelah objek Character dibuat, nilai yang dikandungnya tidak dapat diubah.

Agus Purwanto, Ph. D

69

October 13, 2009

70

BAB 6. DASAR-DASAR OBJEK


2. compareTo(Character): adalah suatu metoda instans yang membandingkan nilai yang dikandung oleh dua objek karakter: objek dimana metoda dipanggil dan argumen dari metoda. Metoda ini mengembalikan suatu bilangan bulat yang menunjukkan bahwa nilai dari objek saat tersebut lebih besar, sama dengan atau kurang dari nilai yang dikandung oleh argumen. Suatu huruf adalah lebih besar dari huruf lain jika nilai numeriknya lebih besar. 3. equals(Object): adalah suatu metoda instans yang membandingkan nilai yang dikandung oleh objek pada saat tersebut dengan nilai yang dikandung oleh lainnya. Metoda ini mengembalikan true jika nilai keduanya tersebut adalah sama. 4. toString(): adalah suatu metoda instans yang mengkonversi objek menjadi string. Hasil stringnya adalah satu karakter dan mengandung nilai yang dikandung oleh objek karakter. 5. charValue: adalah suatu metoda instans yang mengembalikan nilai yang dikandung oleh objek karakter sebagai nilai char primitif. 6. isUpperCase(char): adalah suatu metoda class yang menentukan apakah nilai char primitif adalah huruf besar. Hal ini adalah satu dari banyak metoda class karakter yang memeriksa atau memanipulasi data karakter.

6.2.1 Mengapa class two string ?


Platform Java mempunyai 2 class String dan StringBuffer, yang menyimpan dan memanipulasi data stringkarakter yang terdiri dari lebih dari 1 karakter. Class String menghasilkan string dengan nilai yang tetap. Misalkan, jika anda menulis metoda yang membutuhkan data string dan metoda tidak akan mengubah string dengan cara apapun, gunakan objek String pada metoda tersebut. Class StringBuffer menghasilkan string yang dapat dimodikasi; anda menggunakan buffer string ketika anda mengetahui bahwa nilai string tersebut akan berubah. Anda biasa menggunakan buffer string untuk membuat data karakter dinamik: misalkan, ketika membaca data text dari le. Karena string adalah konstan, string lebih esien untuk digunakan daripada buffer string dan dapat digunakan bersama. Oleh karenanya, gunakan string semaksimal mungkin. Berikut ini adalah program StringsDemo yang membalikkan karakter dari string. Program ini menggunakan string dan buffer string: public class StringsDemo { public static void main(String[] args) { String palindrome = "Dot saw I was Tod"; int len = palindrome.length(); StringBuffer dest = new StringBuffer(len); for (int i = (len - 1); i >= 0; i--) { dest.append(palindrome.charAt(i)); } System.out.println(dest.toString()); } } Output dari program ini adalah: doT saw I was toD Sebagai tambahan untuk menekankan perbedaan antara string dengan buffer string, lihat beberapa unjuk kerja antara class String dan StringBuffer: membuat string dan buffer string, menggunakan metoda accessor untuk memperoleh informasi mengenai string dan buffer string, dan memodikasi buffer string.

6.2.2 Membuat String dan StringBuffer


String sering dibuat dari literal string, sederetan karakter yang diapit tanda kutip. Misalkan, ketika kompiler menemukan literal string berikut, platform Java membuat objek String yang nilainya adalah Gobbledygook: Gobbledygook Program StringsDemo pada halaman 70 menggunakan teknik ini untuk membuat string yang diacu oleh variabel palindrome: October 13, 2009 70

Pemrograman Komputer : Bahasa Java

6.2. CHARACTER DAN STRING String palindrome = "Dot saw I was Tod";

71

Anda dapat juga membuat objek String seperti halnya objek lainnya: gunakan operator new dan konstruktor. Class String memberikan beberapa konstruktor yang memungkinkan anda memberi nilai awal dari string, dengan menggunakan sumber yang berbeda seperti array dari karakter, array dari byte atau buffer string. Berikut ini adalah contoh pembuatan string dari array karakter: char[] helloArray = { h, e, l, l, o }; helloString = new String(helloArray); System.out.println(helloString); Baris terakhir menghasilkan tampilan: hello Anda harus selalu menggunakan new untuk membuat buffer string. Program StringsDemo pada halaman 70 menghasilkan buffer string yang diacu oleh dest, menggunakan konstruktor yang menset kapasitas buffer: String palindrome = "Dot saw I was Tod"; int len = palindrome.length(); StringBuffer dest = new StringBuffer(len); Pernyataan di atas menghasilkan buffer string dengan kapasitas awal sama dengan panjang dari string yang diacu dengan nama palindrome. Hal ini memastikan hanya satu alokasi memori untuk dest karena ia cukup besar untuk mengandung karakter yang akan disalin. Dengan menginisialisasi kapasitas buffer string dengan perkiraan yang baik, anda dapat meminimalkan banyak memori yang digunakan. Hal ini membuat program anda menjadi lebih esien karena alokasi memori merupakan operasi yang relatif mahal.

6.2.3 Metoda Accessor


Metoda yang digunakan untuk memperoleh informasi mengenai objek dikenal sebagai metoda accessor. 1. Mengambil ukuran string atau buffer string. Salah satu metoda accessor yang dapat digunakan terhadap string dan buffer string adalah metoda length, yang memberikan banyaknya karakter karakter yang disimpan dalam string atau buffer string. Sesudah 2 baris berikut dieksekusi, len samadengan 17: String palindrome = "Dot saw I was Tod"; int len = palindrome.length(); Lebih lanjut, class StringBuffer mempunyai metoda yang disebut capacity, yang memberikan jumlah ruang yang dialokasi untuk buffer string (bukan digunakan melainkan dialokasikan). Misalkan, kapasitas buffer string yang diacu oleh dest pada program StringsDemo tidak pernah berubah, walaupun panjangnya bertambah 1 untuk setiap iterasi dalam loop. Panjang buffer string adalah banyaknya karakter yang disimpannya; kapasitas buffer string adalah banyaknya ruang karakter yang dialokasikan. Class String tidak mempunyai metoda Capacity, karena String tidak dapat berubah. 2. Mengambil karakter dengan indeks dari String atau StringBuffer. Anda dapat mengambil karakter pada indeks tertentu dari string atau buffer string dengan menggunakan accessor charAt. Indeks dari karakter pertama adalah 0; indeks terakhir adalah length()-1. Misalkan, berikut ini diperoleh karakter pada indeks ke 9 pada string: String anotherPalindrome = "Niagara. O roar again!"; char aChar = anotherPalindrome.charAt(9); Indeks dimulai pada 0 sehingga karakter dengan indeks 9 adalah O. Gunakan metoda charAt untuk memperoleh karakter pada indeks tertentu. Jika anda ingin memperoleh satu karakter dari string atau buffer string, anda dapat menggunakan metoda substring. Metoda ini mempunyai 2 versi. Code berikut memerpoleh substring yang meluas dari indeks 11 sampai dengan indeks 15, yaitu kata "roar": String anotherPalindrome = "Niagara. O roar again!"; String roar = anotherPalindrome.substring(11, 15); Gunakan metoda substring untuk memperoleh bagian dari string atau buffer string.

Agus Purwanto, Ph. D

71

October 13, 2009

72 Metoda Accessor Lain

BAB 6. DASAR-DASAR OBJEK

1. Untuk class String Sebagai tambahan dari accessor length dan charAt seperti dibahas terdahulu, class String mempunyai 2 accessor yang mengembalikan posisi dalam string: indexOf dan lastIndexOf. Metoda indexOf mencari kedepan dari awal string, sedangkan lastIndexOf sebaliknya. Metoda indexOf dan lastIndexOf sering digunakan dengan substring, yang memberikan substring dari string. Class berikut mengilustrasikan penggunaan lastIndexOf dan substring untuk mengisolasi bagian yang berbeda dari lename. // This class assumes that the string used to initialize // fullPath has a directory path, filename, and extension. // The methods wont work if it doesnt. public class Filename { private String fullPath; private char pathSeparator, extensionSeparator; public Filename(String str, char sep, char ext) { fullPath = str; pathSeparator = sep; extensionSeparator = ext; } public String extension() { int dot = fullPath.lastIndexOf(extensionSeparator); return fullPath.substring(dot + 1); } public String filename() { int dot = fullPath.lastIndexOf(extensionSeparator); int sep = fullPath.lastIndexOf(pathSeparator); return fullPath.substring(sep + 1, dot); } public String path() { int sep = fullPath.lastIndexOf(pathSeparator); return fullPath.substring(0, sep); } } Berikut ini adalah program kecil yang membuat objek Filename dan memanggil semua metodanya: public class FilenameDemo { public static void main(String[] args) { Filename myHomePage = new Filename("/home/mem/index.html",/, .); System.out.println("Extension = " + myHomePage.extension()); System.out.println("Filename = " + myHomePage.filename()); System.out.println("Path = " + myHomePage.path()); } } Outputnya adalah: Extension = html Filename = index Path = /home/mem Metoda extension menggunakan lastIndexOf untuk melokalisasi kemunculan terakhir dari titik pada lename. Kemudian, substring menggunakan nilai yang diberikan oleh lastIndexOf untuk mengambil October 13, 2009 72

Pemrograman Komputer : Bahasa Java

6.2. CHARACTER DAN STRING

73

extension lenameyaitu substring dari titik ke akhir dari string. Code ini mengasumsikan bahwa lename mempunyai titik, jika tidak, maka lastIndexOf memberi -1, dan metoda substring melempar StringIndexOutOfBoundsException. Juga, perhatikan bahwa extensi menggunakan dot + 1 sebagai argumen dalam substring. Jika karakter titik adalah karakter terakhir dalam string, maka dot + 1 samadengan panjang dari string yang ternyata satu lebih besar daripada indeks terakhir dalam string (karena indeks dimulai dengan 0). Namun, substring menerima indeks samadengan namun tidak lebih besar daripada panjang string dan menginterpretasikan sebagai akhir dari string. Sementara metoda dalam contoh di atas menggunakan hanya satu versi dari metoda lastIndesOf, class String mendukung 4 versi yang berbeda dari metoda indexOf dan lastIndexOf. Keempat versi tersebut bekerja sebagai berikut: (a) indexOf(int character) (b) lastIndexOf(int character) Memberikan indeks dari kemunculan pertama (terakhir) dari karakter tertentu. (c) indexOf(int character, int from) (d) lastIndexOf(int character, int from) Mengembalikan indeks dari kemunculan pertama (terakhir) dari karakter yang bersangkutan, mencari maju (mundur) dari indeks tertentu. (e) indexOf(String string) (f) lastIndexOf(String string) Mengembalikan indeks dari kemunculan pertama (terakhir) dari string tertentu. (g) indexOf(String string, int from) (h) lastIndexOf(String string, int from) Mengembalikan indeks dari kemunculan pertama (terakhir) dari String yang bersangkutan, mencari maju (mundur) dari indeks tertentu 2. Untuk class StringBuffer Seperti String, StringBuffer memberikan metoda accessor length dan charAt. Sebagai tambahan dari kedua accessor tersebut, StringBuffer juga mempunyai metoda capacity. Metoda capacity berbeda dari panjang karena capacity memberikan banyaknya ruang yang dialokasikan. Misalkan, kapasitas StringBuffer dalam metoda reverseIt tidak pernah berubah, sedangkan panjang dari StringBuffer bertambah satu untuk setiap iterasi dalam loop: public class ReverseString { public static String reverseIt(String source) { int i, len = source.length(); StringBuffer dest = new StringBuffer(len); for (i = (len - 1); i >= 0; i--) dest.append(source.charAt(i)); return dest.toString(); } }

6.2.4 Modikasi StringBuffer


Metoda reverseIt menggunakan metoda lampiran StringBuffer untuk menambahkan karakter pada akhir string tujuan: dest. class ReverseString { public static String reverseIt(String source) { int i, len = source.length(); StringBuffer dest = new StringBuffer(len); for (i = (len - 1); i >= 0; i--) {

Agus Purwanto, Ph. D

73

October 13, 2009

74 dest.append(source.charAt(i)); } return dest.toString(); } }

BAB 6. DASAR-DASAR OBJEK

Jika karakter yang dilampirkan menyebabkan StringBuffer tumbuh diluar kapasitasnya, StringBuffer mengalokasikan memori lebih. Karena alokasi memori merupakan operasi yang relatif mahal, anda dapat membuat code anda lebih esien dengan menginisialisasi kapasitas StringBuffer dengan perkiraan yang masuk akal, sehingga meminimalkan banyaknya proses alokasi memori. Misalkan, metoda reverseIt membuat StringBuffer dengan kapasitas awal samadengan ukuran string sumber untuk memastikan hanya satu alokasi memori untuk dest. Versi dari metoda append yang digunakan pada reverseIt merupakan satu-satunya metoda StringBuffer yang melampirkan data pada akhir StringBuffer. Ada beberapa metoda append yang melampirkan data dari berbagai tipe seperti float, int, boolean, dan bahkan Object, pada akhir StringBuffer. Data dikonversikan ke string sebelum operasi append muncul. Berikut ini adalah contoh dua proses penting: 1. Menyisipkan karakter. Suatu saat, anda mungkin ingin menyisipkan data ke tengah StringBuffer. Anda dapat melakukannya dengan metoda insert, seperti berikut: StringBuffer sb = new StringBuffer("Drink Java!"); sb.insert(6, "Hot "); System.out.println(sb.toString()); Hasilnya adalah: Drink Hot Java! Anda dapat melihat bahwa anda dapat menentukan indeks sebelum anda menyisipkan data. Pada contoh tersebut, Hot perlu disisipkan sebelum J dalam Java. Indeks dimulai dari 0, sehingga indeks J adalah 6. Untuk menyisipkan data pada awal StringBuffer, gunakan indeks 0. Untuk menambahkan data pada akhir StringBuffer, gunakan indeks samadengan ukuran StringBuffer pada saat itu atau gunakan append. 2. Menset karakter. Kegunaan lain dari modier StringBuffer adalah setCharAt, yang menggantikan karakter pada lokasi tertentu pada StringBuffer dengan karakter yang ditentukan pada daftar argumen. setCharAt berguna ketika anda ingin menggunakan StringBuffer kembali.

6.2.5 Mengkonversi Objek ke String


1. Metoda toString Terkadang penting untuk mengkonversi objek ke String karena mungkin diperlukan untuk memberinya kepada metoda yang hanya menerima nilai String. Metoda reverseIt yang digunakan terdahulu menggunakan metoda toString dari StringBuffer untuk mengkonversi StringBuffer ke objek String: class ReverseString { public static String reverseIt(String source) { int i, len = source.length(); StringBuffer dest = new StringBuffer(len); for (i = (len - 1); i >= 0; i--) { dest.append(source.charAt(i)); } return dest.toString(); } } Semua class mewarisi toString dari class Objek dan banyak class dalam paket java.lang menumpuk metoda ini untuk memungkinkan implementasi yang berarti untuk class tersebut. Misalkan, class type wrapperCharacter, Integer, Boolean, dan lainnya semua menumpuk toString untuk memberi representasi String pada objek. October 13, 2009 74

Pemrograman Komputer : Bahasa Java

6.2. CHARACTER DAN STRING

75

2. Metoda valueOf Untuk kenyamanan, class String memberikan metoda valueOf. Anda dapat menggunakan valueOf untuk mengkonversi variabel dengan tipe berbeda menjadi String. Misalkan, untuk mencetak nilai dari pi: System.out.println(String.valueOf(Math.PI));

6.2.6 Mengkonversi String ke Bilangan


Class String sendiri tidak memberi metoda untuk mengkonversi String menjadi bilangan pecahan, bulat atau tipe numerik lain. Namun, empat dari class type wrapper (pembungkus tipe: Integer, Double, Float dan Long) memberikan metoda class bernama valueOf yang mengkonversi String menjadi objek dengan tipe tersebut. Berikut ini adalah contohnya: String piStr = "3.14159"; Float pi = Float.valueOf(piStr);

6.2.7 String dan Kompiler Java


Kompiler Java menggunakan class String dan StringBuffer dibalik layar untuk menangani string literal dan penggabungan: 1. String literal. Literal string dalam Java dinyatakan dengan tanda kutip, seperti "Hello World!" Anda dapat menggunakan string literal dimanapun anda menggunakan objek String. Misalkan, System.out.println menerima argumen String, sehingga anda dapat menggunakan string literal sebagai pengganti String disana: System.out.println("Might I add that you look lovely today."); Anda dapat menggunakan pula metoda String secara langsung dari string literal: int len = "Goodbye Cruel World".length(); Karena kompiler secara otomatis membuat objek String baru untuk setiap string literal yang ditemui, anda dapat menggunakan string literal untuk menginisialisasi String: String s = "Hola Mundo"; Susunan di atas ekuivalen dengan, namun lebih esien daripada, berikut ini yang menghasilkan dua String bukan satu: String s = new String("Hola Mundo"); Kompiler mnghasilkan string pertama ketika ia menemui string literal Hola Mundo, dan yang kedua ketika ia menemui String baru. 2. Penggabungan dan operator +. Anda dapat menggunakan + untuk menggabungkan String: String cat = "cat"; System.out.println("con" + cat + "enation"); Contoh di atas sedikit cacat, karena String tidak dapat diubah. Namun, dibelakang layar, kompiler menggunakan StringBuffer untuk mengimplementasikan penggabungan. Contoh di atas terkompilasi menjadi: String cat = "cat"; System.out.println(new StringBuffer().append("con"). append(cat).append("enation").toString());

Agus Purwanto, Ph. D

75

October 13, 2009

76

BAB 6. DASAR-DASAR OBJEK


Anda dapat pula menggunakan operator + untuk melampirkan nilai ke String yang sebetulnya bukan String: System.out.println("Javas Number " + 1); Kompiler mengkonversi nilai non-string (bilangan bulat 1, dalam contoh tersebut) menjadi objek String sebelum melakukan operasi penggabungan.

6.2.8 Rangkuman String


Tabel 6.1 merangkum metoda yang diperoleh pada class String dan StringBuffer: Tabel 6.1: Rangkuman String dan StringBuffer Metoda / Konstruktor String() String(byte[]) String(byte[], int, int) String(byte[], int, int, String) String(byte[], String) String(char[]) String(char[], int, int) String(String) String(StringBuffer) Tujuan Membuat objek string baru. Untuk semua konstruktor yang berargumen argumen pertama memberikan nilai untuk string

String dan StringBuffer memberikan cara lain untuk memanipulasi data string, termasuk penggabungan, perbandingan, substitusi dan konversi menjadi huruf besar/kecil. java.lang.String dan java.lang.StringBuffer merangkum semua metoda dan variabel yang didukung oleh kedua class ini. Berikut ini adalah program Palindrome yang menentukan apakah suatu string merupakan palindrome. Program ini menggunakan banyak metoda dari class String dan StringBuffer: public class Palindrome { public static boolean isPalindrome(String stringToTest) { String workingCopy = removeJunk(stringToTest); String reversedCopy = reverse(workingCopy); return reversedCopy.equalsIgnoreCase(workingCopy); } protected static String removeJunk(String string) { int i, len = string.length(); StringBuffer dest = new StringBuffer(len); char c; for (i = (len - 1); i >= 0; i--) { c = string.charAt(i); if (Character.isLetterOrDigit(c)) { dest.append(c); } } return dest.toString(); } protected static String reverse(String string) { StringBuffer sb = new StringBuffer(string); return sb.reverse().toString(); } October 13, 2009 76

Pemrograman Komputer : Bahasa Java

6.2. CHARACTER DAN STRING

77

public static void main(String[] args) { String string = "Madam, Im Adam."; System.out.println(); System.out.println("Testing whether the following " + "string is a palindrome:"); System.out.println(" " + string); System.out.println(); if (isPalindrome(string)) { System.out.println("It IS a palindrome!"); } else { System.out.println("It is NOT a palindrome!"); } System.out.println(); } } Keluarannya adalah Testing whether the following string is a palindrome: Madam, Im Adam. It IS a palindrome!

6.2.9 Pertanyaan dan Latihan: String


Pertanyaan 1. Tentukan kapasitas awal dari buffer string berikut StringBuffer sb = new StringBuffer("Able was I ere I saw Elba."); 2. Pertimbangkan string berikut: String hannah = "Did Hannah see bees? Hannah did."; (a) Tentukan nilai yang ditampilkan oleh ekspresi hannah.length() (b) Tentukan nilai yang dikembalikan oleh panggilan metoda hannah.charAt(12) (c) Tuliskan ekspresi yang mengacu pada huruf b pada string yang diacu oleh hannah. 3. Berapa panjang string dikembalikan oleh ekspresi berikut ? "Was it a car or a cat I saw?".substring(9, 12) 4. Tentukan nilai dari result sesudah masing-masing baris bernomor pada program di bawah ini dieksekusi: public class ComputeResult { public static void main(String[] args) { String original = "software"; StringBuffer result = new StringBuffer("hi"); int index = original.indexOf(a); /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ result.setCharAt(0, original.charAt(0)); result.setCharAt(1, original.charAt(original.length()-1)); result.insert(1, original.charAt(4)); result.append(original.substring(1,4)); result.insert(3, (original.substring(index, index+2) + " ")); System.out.println(result); } }

Agus Purwanto, Ph. D

77

October 13, 2009

78 Latihan

BAB 6. DASAR-DASAR OBJEK

1. Tunjukkan 2 cara untuk menggabungkan 2 string berikut agar menjadi string Hi, mom.: String hi = "Hi, "; String mom = "mom."; 2. Tuliskan program untuk menghitung nama depan dari nama lengkap dan menampilkannya. 3. Anagram adalah kata atau anak kalimat yang dibuat dengan memindahkan huruf dari satu kata atau anak kalimat; misalkan, parliament adalah anagram dari partial men dan software adalah anagram dari swear oft. Tuliskan program untuk menentukan apakan satu string merupakan anagram dari string lain. Ruang kosong dan tanda baca diabaikan. 4. Buatlah program sederhana untuk mengurutkan kata.

6.2.10 Jawaban
1. Panjangnya adalah panjang string awal + 16, maka 26 + 16 = 42. 2. Untuk string berikut: String hannah = "Did Hannah see bees? Hannah did."; (a) 32. (b) e. (c) hannah.charAt(15) 3. Panjangnya 3 karakter: car. Ia tidak termasuk spasi sesudah car. 4. Jawab: 1.si 2.se 3.swe 4.sweoft 5.swear oft Penyelesaian Latihan 1. hi.concat(mom) dan hi + mom. 2. Penyelesaian: public class ComputeInitials { public static void main(String[] args) { String myName = "Fred F. Flintstone"; StringBuffer myInitials = new StringBuffer(); int length = myName.length(); for (int i = 0; i < length; i++) { if (Character.isUpperCase(myName.charAt(i))) { myInitials.append(myName.charAt(i)); } } System.out.println("My initials are: " + myInitials); } } 3. Penyelesaian: October 13, 2009 78

Pemrograman Komputer : Bahasa Java

6.2. CHARACTER DAN STRING /** * This class compiles with v 1.2 and 1.3, but not previous * versions, because its sort method uses the Arrays class, * which was added in 1.2. To make Anagram work with early * versions of the Java platform, you need to reimplement * the sort method. */ public class Anagram {

79

/** * Tests whether the passed-in strings are anagrams -* containing the exact same number of each letter. * Punctuation, case, and (obviously) order dont matter. * * @return true if the strings are anagrams; otherwise, false */ public static boolean areAnagrams(String string1, String string2) { String workingCopy1 = removeJunk(string1); String workingCopy2 = removeJunk(string2); workingCopy1 = workingCopy1.toLowerCase(); workingCopy2 = workingCopy2.toLowerCase(); workingCopy1 = sort(workingCopy1); workingCopy2 = sort(workingCopy2); return workingCopy1.equals(workingCopy2); } /** * Removes punctuation, spaces -- everything except letters * and digits from the passed-in string. * * @return a stripped copy of the passed-in string */ protected static String removeJunk(String string) { int i, len = string.length(); StringBuffer dest = new StringBuffer(len); char c; for (i = (len - 1); i >= 0; i--) { c = string.charAt(i); if (Character.isLetterOrDigit(c)) { dest.append(c); } } return dest.toString(); } /** * Sorts the passed-in string. Reimplement this method * if you want to use this class in pre-Java-2 versions * of the platform. * * @return a sorted copy of the passed-in string

Agus Purwanto, Ph. D

79

October 13, 2009

80

BAB 6. DASAR-DASAR OBJEK


*/ protected static String sort(String string) { int length = string.length(); char[] charArray = new char[length]; string.getChars(0, length, charArray, 0); //NOTE: The following line of code causes pre-1.2 //compilers to choke. java.util.Arrays.sort(charArray); return new String(charArray); } public static void main(String[] args) { String string1 = "Cosmo and Laine:"; String string2 = "Maid, clean soon!"; System.out.println(); System.out.println("Testing whether the following " + "strings are anagrams:"); System.out.println(" String 1: " + string1); System.out.println(" String 2: " + string2); System.out.println(); if (areAnagrams(string1, string2)) { System.out.println("They ARE anagrams!"); } else { System.out.println("They are NOT anagrams!"); } System.out.println(); } } 4. Diagram alur untuk pengurutan kata dengan 2 input kata tertera pada Gambar 6.1. Program sederhana untuk
mulai input a,b i<len ? panjang a < panjang b ? T len=panjang b a[i] < b[i] ? Y Cetak a, b Selesai Y len=panjang a i=0 T Y i=i+1 T a[i] > b[i] ? Y Cetak b, a Catatan: cetak b,a atau cetak a,b sama saja T

Gambar 6.1: Diagram alur untuk pengurutan 2 kata. pengurutan kata (dengan 2 input kata) adalah: October 13, 2009 80

Pemrograman Komputer : Bahasa Java

6.3. BILANGAN public class Order { public static void main(String[] args) { int i,j,len; String s1="duduk"; String s2="diri"; len=s1.length()<s2.length()?s1.length():s2.length(); for(i=0;i<len;i++) { String s3=s1.substring(i,i+1); String s4=s2.substring(i,i+1); j=s3.compareTo(s4); if(j==0)continue; else if (j<0) { System.out.println(s1); break; } else { System.out.println(s2); break; } } } }

81

6.3 Bilangan
Untuk bekerja dengan data numerik, anda menggunakan class bilangan. Class Number adalah superclass dari semua class bilangan dalam platform Java. Subclassnya meliputi Float, Integer, dan lain-lain. Subbab ini bermula dengan diskusi mengenai class Number dalam java.lang dan subclassnya. Khususnya, subbab ini menerangkan mengenai mengapa anda perlu class ini, menunjukkan metoda umum dan variabel class yang biasa digunakan, dan menunjukkan cara mengkonversi instans ke string. Sebagai tambahan, subbab ini membicarakan mengenai class lain yang mungkin anda perlukan jika anda menggunakan bilangan. Misalkan, jika anda perlu menampilkan bilangan dalam format khusus, anda dapat menggunakan class NumberFormat dan DecimalFormat dalam java.text. Juga, class Math dalam java.lang mengandung metoda class yang menggunakan fungsi matematika diluar yang diberikan oleh bahasa ini. Class ini mempunyai fungsi trigonometri, fungsi eksponensial, dan lain sebagainya. Class bilangan: 1. Number 2. Byte 3. Double 4. Float 5. Integer 6. Long 7. Short 8. BigDecimal 9. BigInteger Bungkus untuk tipe data lain (agar lengkap): 1. Boolean 2. Character

Agus Purwanto, Ph. D

81

October 13, 2009

82 3. Void Diluar aritmatika dasar adalah class Math.

BAB 6. DASAR-DASAR OBJEK

6.4 Array
Array adalah struktur yang mengandung berbagai nilai dengan tipe yang sama. Panjang dari array diperoleh ketika array dibuat (pada saat runtime). Sesudah pembuatan, array mempunyai struktur dengan panjang yang tetap. Jika anda ingin menyimpan data dengan tipe berbeda dalam satu struktur, atau jika anda perlu struktur dengan ukuran yang dapat diubah secara dinamik, gunakan implementasi Collection, seperti Vector.

6.4.1 Membuat dan Menggunakan Array


Berikut ini adalah program sederhana ArrayDemo yang membuat array, meletakkan nilai padanya dan menampilkan nilainya: public class ArrayDemo { public static void main(String[] args) { int[] anArray; // declare an array of integers anArray = new int[10]; // create an array of integers

// assign a value to each array element and print for (int i = 0; i < anArray.length; i++) { anArray[i] = i; System.out.print(anArray[i] + " "); } System.out.println(); } } Subsubbab berikut ini membahas: 1. Pendeklarasian variabel untuk mengacu array 2. Pembuatan array 3. Pengaksesan elemen array 4. Mengambil ukuran array 5. Penginisialisasi array Pendeklarasian variabel untuk mengacu pada array Baris berikut dari program sederhana pada halaman 82 mendeklarasi variabel array: int[] anArray; // declare an array of integers

Seperti deklarasi untuk variabel dengan tipe lain, deklarasi array mempunyai 2 komponen: tipe dan nama dari array. Type array ditulis sebagai type[], dengan type adalah tipe data dari elemen yang dikandung dalam array, dan [] menunjukkan bahwa ini adalah array. Perhatikan bahwa semua elemen dalam array adalah bertipe sama. Program pada halaman 82 menggunakan int[], sehingga array dengan nama anArray akan digunakan untuk menyimpan data bilangan bulat. Berikut ini adalah deklarasi untuk array untuk tipe data lain: float[] anArrayOfFloats; boolean[] anArrayOfBooleans; Object[] anArrayOfObjects; String[] anArrayOfStrings; Sebagaimana dengan deklarasi untuk variabel dengan tipe lain, deklarasi untuk variabel array tidak mengalokasikan memori untuk menyimpan elemen array. Program contoh harus memberi nilai pada anArray sebelum namanya mengacu pada suatu array. October 13, 2009 82

Pemrograman Komputer : Bahasa Java

6.4. ARRAY Pembuatan Array

83

Anda membuat array secara eksplisit dengan menggunakan operator new. Pernyataan berikut dalam program contoh pada halaman 82 mengalokasikan array dengan memori yang cukup untuk 10 elemen bilangan bulat dan memasukkannya dalam variabel anArray yang telah dideklarasikan lebih dahulu: anArray = new int[10]; // create an array of integers

Secara umum, ketika membuat array, anda harus menggunakan operator new, plus tipe data dari elemen array, plus banyaknya elemen yang diinginkan dalam kurung kotak: new elementType[arraySize] Jika pernyataan new dihilangkan dari program contoh, kompiler akan memberi pesan salah seperti berikut dan kompilasi akan gagal: ArrayDemo.java:4: Variable anArray may not have been initialized. Mengakses elemen array Ketika memori telah dialokasikan untuk array, program memberikan nilai untuk elemen array: for (int i = 0; i < anArray.length; i++) { anArray[i] = i; System.out.print(anArray[i] + " "); } Bagian ini menunjukkan pengaksesan elemen array, baik melalui pemberian nilai ataupun mengambil nilai. Hal ini dapat dilakukan dengan melampirkan kurung kotak diantara nama array. Nilai diantara kurung kotak menunjukkan indeks dari elemen yang diakses. Sebagai catatan, indeks array dimulai dari 0 dan berakhir dengan panjang array dikurangi satu. Mengambil ukuran array Untuk memperoleh ukuran array, anda menuliskan arrayname.length Hati-hati: Pemrogram baru cenderung menggunakan length diikuti dengan sepasang kurung kosong. Hal ini adalah salah karena length bukan metoda. length adalah property pada platform Java untuk semua array. Loop for pada program contoh di halaman 82 mengiterasi masing-masing elemen dari anArray. Loop for menggunakan anArray.length untuk menentukan waktu untuk berhenti. Penginisialisasi Array Bahasa pemrograman Java mempunyai jalur singkat untuk membuat dan menginisialisasi array, seperti berikut: boolean[] answers = { true, false, true, true, false }; Panjang dari array ditentukan oleh banyaknya nilai diantara kurung kurawal.

6.4.2 Array dari Objek


Array dapat menyimpan tipe reference seperti halnya tipe primitif. Anda membuat array tersebut mirip dengan cara membuat array dengan tipe primitif. Berikut ini adalah program contoh, ArrayOfStringsDemo, yang membuat array yang mengandung 3 objek string lalu mencetak string semuanya dengan huruf kecil. public class ArrayOfStringsDemo { public static void main(String[] args) { String[] anArray = { "String One", "String Two", "String Three" }; for (int i = 0; i < anArray.length; i++) { System.out.println(anArray[i].toLowerCase()); } } }

Agus Purwanto, Ph. D

83

October 13, 2009

84

BAB 6. DASAR-DASAR OBJEK

Program ini membuat dan mengisi array dengan satu pernyataan. Namun, anda dapat membuat array tanpa meletakkan elemen apapun padanya. Hal ini dapat menyebabkan kesulitan yang sering ditemui oleh pemula ketika menggunakan array yang mengandung objek. Pertimbangkan baris berikut: String[] anArray = new String[5]; Sesudah baris ini dieksekusi, array anArray muncul dan mempunyai ruang yang cukup untuk menyimpan 5 objek string. Namun, array belum mengandung string apapun. Program harus secara eksplisit membuat string dan meletakkannya dalam array. Hal ini kelihatannya sudah jelas, namun, banyak pemula berasumsi bahwa baris pernyataan tersebut membuat 5 string kosong pada array tersebut. Mereka mungkin saja menuliskan pernyataan berikut yang kemudian akan menghasilkan NullPointerException: String[] anArray = new String[5]; for (int i = 0; i < anArray.length; i++) { // ERROR: the following line gives a runtime error System.out.println(anArray[i].toLowerCase()); } Problem ini mungkin terjadi ketika array dibuat dalam konstruktor atau penginisialisasi lain yang kemudian digunakan ditempat lain dalam program tersebut.

6.4.3 Array dari Array


Array dapat mengandung array. Program ArrayOfStringsDemo pada halaman 83 membuat array dan menggunakan penginisialisasi untuk mengisinya dengan 4 sub-array: public class ArrayOfArraysDemo { public static void main(String[] args) { String[][] cartoons = { { "Flintstones", "Fred", "Wilma", "Pebbles", "Dino" }, { "Rubbles", "Barney", "Betty", "Bam Bam" }, { "Jetsons", "George", "Jane", "Elroy", "Judy", "Rosie", "Astro" }, { "Scooby Doo Gang", "Scooby Doo", "Shaggy", "Velma", "Fred", "Daphne" } }; for (int i = 0; i < cartoons.length; i++) { System.out.print(cartoons[i][0] + ": "); for (int j = 1; j < cartoons[i].length; j++) { System.out.print(cartoons[i][j] + " "); } System.out.println(); } } } Perhatikan bahwa ukuran sub-array di atas tidak sama. Nama sub-array adalah cartoons[0], cartoons[1], dan lain sebagainya. Sebagaimana array dari objek, anda harus secara eksplisit membuat sub-array dalam array. Maka, bila anda tidak menggunakan penginisialisasi, anda perlu menulis code berikut : public class ArrayOfArraysDemo2 { public static void main(String[] args) { int[][] aMatrix = new int[4][]; //populate matrix for (int i = 0; i < aMatrix.length; i++) { aMatrix[i] = new int[5]; //create sub-array for (int j = 0; j < aMatrix[i].length; j++) { aMatrix[i][j] = i + j; } } October 13, 2009 84

Pemrograman Komputer : Bahasa Java

6.4. ARRAY //print matrix for (int i = 0; i < aMatrix.length; i++) { for (int j = 0; j < aMatrix[i].length; j++) { System.out.print(aMatrix[i][j] + " "); } System.out.println(); } } }

85

Anda perlu memberikan ukuran dari array primer ketika anda membuat array. Anda tidak perlu memberikan ukuran sub-array sampai anda membuatnya.

6.4.4 Mengkopi Array


Gunakan metoda arraycopy dari System untuk secara esien mengkopi data dari satu array ke array lainnya. Metoda ini membutuhkan 5 argumen: public static void arraycopy(Object source, int srcIndex, Object dest, int destIndex, int length, Dua argumen Object menunjukkan array untuk mengkopi dari dan ke array. Tiga argumen bilangan bulat menunjukkan lokasi awal pada masing-masing array sumber dan tujuan, serta banyaknya elemen untuk disalin. Program berikut, ArrayCopyDemo, menggunakan arraycopy untuk menyalin beberapa elemen dari array copyFrom sampai array copyTo: public class ArrayCopyDemo { public static void main(String[] args) { char[] copyFrom = { d, e, c, a, f, f, e, i, n, a, t, e, d }; char[] copyTo = new char[7]; System.arraycopy(copyFrom, 2, copyTo, 0, 7); System.out.println(new String(copyTo)); } } Panggilan metoda arraycopy pada contoh ini dimulai dengan penyalinan pada elemen nomor 2 pada array sumber. Ingat bahwa indeks array dimulai dari 0, jadi salinan dimulai pada elemen array c. Panggilan metoda arraycopy meletakkan elemen yang disalin ke array tujuan dimulai pada elemen pertama (elemen 0) dalam array tujuan copyTo. Proses tersebut menyalin 7 elemen c, a, f, f, e, i, dan n. Secara efektif, metoda arraycopy mengambil caffein dari decaffeinated. Perhatikan bahwa array tujuan harus dialokasi sebelum arraycopy dipanggil dan harus cukup besar untuk menyimpan data yang disalin.

6.4.5 Rangkuman mengenai Array


1. Array adalah struktur data dengan ukuran tetap yang dapat mengandung objek multipel dengan tipe yang sama. 2. Array dapat mengandung berbagai tipe dari objek termasuk array. 3. Untuk mendeklarasikan array, anda menggunakan tipe objek yang dapat disimpan array dan kurung. 4. Ukuran array harus dispesikasi ketika dibuat. 5. Anda dapat menggunakan operator new untuk membuat array, atau anda dapat menggunakan penginisialisasi array. 6. Setelah dibuat, ukuran array tidak dapat diubah.

Agus Purwanto, Ph. D

85

October 13, 2009

86 7. Untuk memperoleh ukuran array, anda gunakan atribut length. 8. Elemen dalam array dapat diakses melalui indeksnya. 9. Indeks dimulai dari 0 dan berakhir pada ukuran array dikurangi satu.

BAB 6. DASAR-DASAR OBJEK

10. Untuk mengkopi array, gunakan metoda arraycopy dalam class System.

6.4.6 Pertanyaan dan Latihan: Array


Pertanyaan 1. Tentukan indeks dari Brighton pada array berikut ini: String[] skiResorts = { "Whistler Blackcomb", "Squaw Valley", "Brighton", "Snowmass", "Sun Valley", "Taos" }; 2. Tuliskan pernyataan yang mengacu oada string Brighton dalam array. 3. Tentukan nilai dari pernyataan skiResorts.length. 4. Tentukan indeks dari elemen terakhir dari array. 5. Tentukan nilai dari pernyataan skiResorts[4]. Latihan Program WhatHappens berikut mengandung error. Temukan dan perbaikilah: // // This program compiles but wont run successfully. // public class WhatHappens { public static void main(String[] args) { StringBuffer[] stringBuffers = new StringBuffer[10]; for (int i = 0; i < stringBuffers.length; i ++) { stringBuffers[i].append("StringBuffer at index " + i); } } }

October 13, 2009

86

Pemrograman Komputer : Bahasa Java

Bab 7

Generic
7.1 Pendahuluan
Pada suatu projek perangkat lunak yang tidak sederhana, bug selalu muncul. Perencanaan, pemrograman dan testing yang matang mengurangi kemunculannya, namun entah bagaimana, mereka selalu menemukan cara untuk bersembunyi dalam code anda. Kemunculannya akan semakin jelas jika anda mengembangkannya sehingga program tersebut semakin besar dan kompleks. Untungnya, beberapa bug lebih mudah dideteksi. Bug yang muncul pada saat kompilasi, akan mudah diketahui karena anda akan langsung dapat melihatnya ketika code di kompilasi. Kemunculannya terlihat karena munculnya pesan error, sehingga anda dapat memperbaikinya dengan segera. Bug yang muncul pada saat run lebih sulit dideteksi karena tidak selalu muncul dan pesan error nya tidak selalu jelas. Generic menambah kestabilan code anda dengan membuat lebih banyak bug yang terdeteksi pada saat kompilasi. Beberapa programer memilih mempelajari generic dengan mempelajari Java Collections Framework; karena pada akhirnya, generic sangat digunakan oleh class tersebut. Namun, karena kita belum sampai pada collections, bab ini akan terpusat pada koleksi sederhana yang dapat dibuat dari dasar. Pendekatan ini akan menunjukkan tata bahasa dan terminologi yang diperlukan untuk memahami generic.

7.1.1 Class box sederhana


Mari kita mulai dengan class Box non-generic yang beroperasi pada object dari tipe sembarang. Ia hanya perlu 2 metoda: add yang menambahkan object pada box, dan get yang mengambilnya: public class Box { private Object object; public void add(Object object) { this.object = object; } public Object get() { return object; } } Karena metoda tersebut menerima Object, anda bebas melalukan apapun yang anda inginkan, asalkan bukan jenis primitif. Namun demikian, jika anda memilih lebih spesik (misalkan Integer), pilihannya adalah menggunakannya sesuai dengan dokumentasi (dan kompiler tidak tahu mengenai itu): public class BoxDemo1 { public static void main(String[] args) { // ONLY place Integer objects into this box! Box integerBox = new Box();

87

88 integerBox.add(new Integer(10)); Integer someInteger = (Integer)integerBox.get(); System.out.println(someInteger); } }

BAB 7. GENERIC

Program BoxDemo1 membuat object Integer, melalukan ke add, dan meberi nilai dengan objek serupa ke someInteger dengan menggunakan nilai kembalian melalui get. Ia kemudian mencetak nilai objek (10) pada output standard. Kita tahu bahwa peleburan dari Object ke Integer adalah benar karena kita lihat bahwa prosedurnya sudah sesuai dengan dokumentasi. Namun ingat, kompiler tidak tahu mengenai hal ini: kompiler percaya saja bahwa peleburannya benar. Lagipula, ia tidak akan mencegah pemrogram ceroboh untuk melalukan objek dengan jenis yang salah, misalnya String: public class BoxDemo2 { public static void main(String[] args) { // ONLY place Integer objects into this box! Box integerBox = new Box(); // Imagine this is one part of a large application // modified by one programmer. integerBox.add("10"); // note how the type is now String // ... and this is another, perhaps written // by a different programmer Integer someInteger = (Integer)integerBox.get(); System.out.println(someInteger); } } Dalam BoxDemo2 kita simpan angka 10 sebagai String, yang bisa saja bisa diperoleh GUI dari pengguna. Namun, peleburan dari Object ke Integer terlewatkan. Jelas, hal ini merupakan bug, namun proses kompilasi tetap berlangsung dan anda tak akan tahu masalah ini sampai pada saat di jalankan (run), yaitu ketika aplikasi mendadak berhenti dengan ClassCastException: Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at BoxDemo2.main(BoxDemo2.java:6) Kesalahan semacam ini dapat dihindari dengan penggunaan generic.

7.2 Jenis Generik


Mari kita gunakan generik untuk class Box. Pertama, kita buat deklarasi jenis generik dengan mengubah code public class Box menjadi public class Box<T>. Hal ini memperkenalkan satu variabel jenis bernama T yang dapat digunakan didalam class. Teknik yang sama dapat digunakan pula pada interface. Tak ada konsep sulit disini. Bahkan, ia serupa dengan variabel secara umum. Anggap saja T merupakan jenis khusus dari variabel yang nilainya tergantung pada jenis variabel yang anda lalukan. Jenis tersebut dapat berupa class, interface atau variabel jenis lain, tapi bukan jenis data primitif. Dalam konteks ini, kita dapat pula mengatakan bahwa T adalah parameter jenis formal dari class Box. /** * Generic version of the Box class. */ public class Box<T> { private T t; // T stands for "Type" public void add(T t) { October 13, 2009 88

Pemrograman Komputer : Bahasa Java

7.2. JENIS GENERIK this.t = t; } public T get() { return t; } }

89

Sebagaimana anda lihat, kita telah mengganti kemunculan Object dengan T. Untuk mengacu class generik dari code anda, anda harus melakukan generic type invocation, yang menggantikan T dengan nilai nyata, seperti Integer: Box<Integer> integerBox; Anda dapat menganggap generic type invocation serupa dengan as being similar to an ordinary method invocation, but instead of passing an argument to a method, youre passing a type argument Integer in this case to the Box class itself. Like any other variable declaration, this code does not actually create a new Box object. It simply declares that integerBox will hold a reference to a Box of Integer, which is how BoxInteger is read. An invocation of a generic type is generally known as a parameterized type. To instantiate this class, use the new keyword, as usual, but place Integer between the class name and the parenthesis: integerBox = new Box<Integer>(); Or, you can put the entire statement on one line, such as: BoxInteger integerBox = new BoxInteger(); Once integerBox is initialized, youre free to invoke its get method without providing a cast, as in BoxDemo3: public class BoxDemo3 { public static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); integerBox.add(new Integer(10)); Integer someInteger = integerBox.get(); // no cast! System.out.println(someInteger); } } Furthermore, if you try adding an incompatible type to the box, such as String, compilation will fail, alerting you to what previously would have been a runtime bug: BoxDemo3.java:5: add(java.lang.Integer) in Box<java.lang.Integer> cannot be applied to (java.lang.String) integerBox.add("10"); ^ 1 error Its important to understand that type variables are not actually types themselves. In the above examples, you wont nd T.java or T.class anywhere on the lesystem. Furthermore, T is not a part of the Box class name. In fact during compilation, all generic information will be removed entirely, leaving only Box.class on the lesystem. Well discuss this later in the section on Type Erasure Also note that a generic type may have multiple type parameters, but each parameter must be unique within its declaring class or interface. A declaration of BoxT,T, for example, would generate an error on the second occurrence of T, but BoxT,U, however, would be allowed. Type Parameter Naming Conventions By convention, type parameter names are single, uppercase letters. This stands in sharp contrast to the variable naming conventions that you already know about, and with good reason: Without this convention, it would be difcult to tell the difference between a type variable and an ordinary class or interface name. The most commonly used type parameter names are: * E - Element (used extensively by the Java Collections Framework) * K - Key * N - Number * T - Type * V Value * S,U,V etc. - 2nd, 3rd, 4th types Youll see these names used throughout the Java SE API and the rest of this tutorial.

Agus Purwanto, Ph. D

89

October 13, 2009

90

BAB 7. GENERIC

October 13, 2009

90

Pemrograman Komputer : Bahasa Java

Bagian III

Menulis Applet

91

Bab 8

Tinjauan Applet
Bab ini membahas bagian dari applet. Setiap applet diimplementasikan dengan membuat subclass dari class Applet. Gambar menunjukkan tingkatan pewarisan dari class Applet. Tingkatan ini menentukan hal dan cara yang dapat dilakukan applet sebagaimana akan dijelaskan kemudian.

8.1 Applet sederhana


Berikut ini adalah source code untuk applet dengan nama Simple. Applet ini menampilkan string deskriptif mengenai waktu ia masuk, seperti ketika pengguna pertama kali memasuki halaman dimana applet tersebut berada. Pembahasan berikut menggunakan applet Simple dan diharapkan dapat memberi ilustrasi mengenai applet secara umum. /* * 1.0 code. */ import java.applet.Applet; import java.awt.Graphics; public class Simple extends Applet { StringBuffer buffer; public void init() { buffer = new StringBuffer(); addItem("initializing... "); } public void start() { addItem("starting... "); } public void stop() { addItem("stopping... "); } public void destroy() { addItem("preparing for unloading..."); } void addItem(String newWord) { System.out.println(newWord); buffer.append(newWord); repaint(); } 93

94

BAB 8. TINJAUAN APPLET

public void paint(Graphics g) { //Draw a Rectangle around the applets display area. g.drawRect(0, 0, size().width - 1, size().height - 1); //Draw the current string inside the rectangle. g.drawString(buffer.toString(), 5, 15); } }

8.2 Siklus Berlakunya Applet 8.3 Metoda untuk Milestones


Class Applet memberi kerangka kerja untuk eksekusi applet, mendenisikan metoda yang dipanggil sistem ketika milestone peristiwa besar dalam siklus hidup applet terjadi. Kebanyakan applet menindih beberapa atau semua metoda ini untuk menanggapi milestone secara tepat. public class Simple extends Applet { . . . public void init() { . . . } public void start() { . . . } public void stop() { . . . } public void destroy() { . . . } . . . } Applet Simple, seperti applet lainnya, merupakan subclass dari class Applet. Class Simple menindih 4 metoda Applet sehingga ia dapat menanggapi peristiwa besar: 1. init: untuk menginisialisasi applet setiap saat applet tersebut dimuat. 2. start: untuk memulai eksekusi applet seperti ketika applet dimuat atau ketika user mengunjungi kembali halaman yang berisi applet tersebut. 3. stop: untuk memberhentikan eksekusi applet, seperti ketika pengguna meninggalkan halaman applet atau keluar dari browser. 4. destroy: untuk melakukan pembersihan terakhir untuk unloading. Tidak setiap applet perlu untuk menindih metoda-metoda di atas. Beberapa applet sederhana tidak perlu menindih sama sekali. Applet Hello World hanya menampilkan string sekali saja, dengan menggunakan metoda paint, yang akan dijelaskan kemudian. Kebanyakan applet melakukan lebih dari itu. Metoda init berguna untuk inisialisasi sekali saja yang tidak membutuhkan waktu lama. Secara umum, metoda ini seharusnya mengandung code yang biasanya anda letakkan pada konstruktor. Applet tidak seharusnya mempunyai konstruktor karena applet tidak dijamin untuk mempunyai lingkungan penuh sampai metoda init dipanggil. Misalkan, metoda pemuatan image Applet tidak bekerja didalam konstriktor applet. Metoda init, dilain pihak, adalah tempat yang baik untuk memanggil metoda pemuatan image, karena metoda kembali dengan cepat. Setiap applet yang melakukan sesuatu sesudah inisialisasi (kecuali tanggapan langsung terhadap aksi pengguna) harus menindih metoda start. Metoda start melakukan kerja applet atau (lebih mungkin) memulai satu atau lebih thread untuk melakukan kerja. Kebanyakan applet yang menindih start seharusnya juga menindih metoda stop. Metoda stop seharusnya menunda eksekusi applet, sehingga ia tidak mengambil sumber daya sistem ketika pengguna tidak melihat halaman applet. Misalkan, applet yang menampilkan animasi seharusnya berhenti mencoba untuk menggambar animasi ketika pengguna tidak melihat animasi tersebut. Banyak applet tidak perlu menindih metoda destroy, karena metoda stop mereka (yang dipanggil sebelum destroy) melakukan apapun yang penting untuk menghentikan eksekusi applet. Namun, destroy tersedia untuk applet yang perlu membebaskan sumber daya tambahan. Metoda init, start, stop dan destroy telah ditinjau pada bab ini. October 13, 2009 94

Pemrograman Komputer : Bahasa Java

8.4. METODA UNTUK DRAWING DAN EVENT HANDLING

95

8.4 Metoda untuk Drawing dan Event Handling 8.5 Metoda untuk Menambah Komponen UI 8.6 Yang dapat dan tidak dapat dilakukan Applet
Subbab ini memberi tinjauan mengenai keterbatasan dan kemampuan applet. Rinciannya dapat dibaca pada bab mengenai batasan keamanan.

8.6.1 Batasan Keamanan


Setiap browser mengimplementasikan kebijakan keamanan untuk menjamin applet mengorbankan keamanan sistem. Subbab ini menjelaskan mengenai kebijakan keamanan tersebut. Namun, implementasinya berbeda dari satu browser ke browser lain. Lagipula, kebijakan tersebut berubah-ubah. Misalkan, jika browser dikembangkan hanya untuk lingkungan aman, maka kebijakan keamanan akan lebih longgar dibandingkan dengan yang dibahas disini. Browser memberi batasan pada applet yang dimuat melalui jaringan: 1. Applet tidak dapat memuat librari atau metoda native 2. Ia tidak dapat membaca atau menulis ke le pada host dimana dia dieksekusi. 3. Ia tidak dapat membuat hubungan jaringan kecuali pada host dimana dia berada. 4. Ia tidak dapat memulai program pada host dia berada. 5. Ia tidak dapat membaca sifat sistem tertentu. 6. Jendela applet terlihat berbeda dengan jendela aplikasi. Masing-masing browser mempunyai objek SecurityManager yang mengimplementasikan kebijakan keamanan. Ketika SecurityManager mendeteksi adanya pelanggaran, ia melempar SecurityException. Applet anda dapat menangkap SecurityException dan bereaksi yang sesuai.

8.6.2 Kemampuan Applet


Paket java.applet menyediakan API yang memberik applet kemampuan yang tidak tersedia dalam aplikasi. Misalkan, applet dapat memainkan suara. Berikut ini adalah hal lain yang dapat dilakukukan applet: 1. Applet dapat membuat hubungan jaringan pada host dimana dia berada. 2. Applet yang beroperasi dalam browser dapat dengan mudah menyebabkan dokumen HTML ditampilkan. 3. Applet dapat menampilkan hasil dari metoda public dari applet lain pada halaman yang sama. 4. Applet yang dimuat dari sistem le lokal (dari directory CLASSPATH dari pengguna) tidak mempunyai keterbatasan seperti applet yang dimuat melalui jaringan. 5. Walaupun kebanyakan applet berhenti bekerja ketika anda meninggalkan halamannya, mereka tidak harus berhenti seperti itu.

8.7 Test Drive Applet


Setelah anda menulis code untuk applet anda, anda ingin menjalankan applet anda untuk ditest. Untuk menjalankannya, anda perlu menambahkan applet pada halaman HTML, dengan menggunakan tag <APPLET>. Kemudian anda spesikasikan URL dari halaman HTML untuk browser Java-enabled. Penting Karena anda tidak ingin selalu tergantung pada browser untuk memuat kembali class applet, anda mungkin ingin menggunakan quick-starting tool seperti JDK Applet Viewer. Setiap kali anda merubah applet, anda dapat merestart Applet Viewer untuk memastikan bahwa ia menjalankan class terbaru.

Agus Purwanto, Ph. D

95

October 13, 2009

96 Berikut ini adalah bentuk paling sederhana dari tag <APPLET>:

BAB 8. TINJAUAN APPLET

<APPLET CODE=AppletSubclass.class WIDTH=anInt HEIGHT=anInt> </APPLET> Tag ini memberitahu browser untuk memuat applet dengan bernama AppletSubclass. Berikut ini adalah Gambar yang menunjukkan tempat le class applet, relatif terhadap dokumen HTML yang mengandung tag <APPLET>. Sebagaimana ditunjukkan pada gambar, kecuali applet dideklarasikan berada dalam paket, le classnya harus berada pada directory yang sama dengan direktori dimana le HTML berada (yang mempunyai tag <APPLET>). Ketika Java-enabled browser memasuki tag <APPLET>, ia menyediakan area tampilan dengan lebar dan tinggi yang ditentukan untuk applet, memuat bytecodes untuk subclass Applet yang dispesikasi, membuat instans dari subclass, dan kemudian memanggil metoda init dan start dari instans. Tag <APPLET> mempunyai banyak pilihan yang dapat anda gunakan untuk mengatur eksekusi applet anda. Misalkan, anda dapat meletakkan le applet anda dalam arsip. Anda dapat pula menspesikasi parameter yang akan dilalukan untuk applet.

8.8 Kesimpulan

October 13, 2009

96

Pemrograman Komputer : Bahasa Java

Bab 9

Keuntungan API Applet


API applet memungkinkan anda mengambil keuntungan dari kedekatan hubungan applet dengan web browser. API tersedia dalam paket java.applet terutama pada class Applet dan antarmuka AppletContext. Applet sangat berguna untuk: 1. diberi tahu oleh browser mengenai milestone (init, start, dan lain-lain), 2. memuat le data yang letaknya relatif terhadap URL dari applet atau halaman dimana applet tersebut dieksekusi, 3. menampilkan string mengenai status sederhana, 4. membuat browser menampilkan dokumen, 5. menemukan applet lain yang bekerja dalam halaman yang sama, 6. memainkan musik, 7. mengambil parameter yang diberikan pengguna dalam tag <APPLET>

9.1 Menemukan dan Memuat File Data


Ketika applet perlu memuat data dari le yang dispesikasi dengan URL relatif, applet biasanya menggunakan basis code atau basis dokumen untuk melengkapi URL. Basis kode, yang dikembalikan oleh metoda getCodeBase, adalah URL yang menspesikasi direktori dari tempat class applet dimuat. Basis dokumen, yang dikembalikan oleh metoda getDocumentBase, menspesikasi direktori halaman HTML yang mengandung applet. Kecuali tag <APPLET> menspesikasikan basis code, basis code dan basis dokumen mengacu pada direktori yang sama pada server yang sama. Data yang selalu dibutuhkan applet atau dibutuhkan sebagai backup, biasanya dispesikasikan relatif terhadap basis code. Data yang dispesikasi oleh pengguna, sering dengan menggunakan parameter, biasanya dispesikasi relatif terhadap basis dokumen. Penting Untuk alasan keamanan, browser membatasi URL dari applet untrusted. Misalnya, kebanyakan browser tidak memperbolehkan applet untrusted menggunakan .. untuk memperoleh direktori diatas basis code atau dokumen. Juga, karena applet untrusted tidak dapat membaca le kecuali host tempat applet berada, basis dokumen tidak secara umum berguna jika dokumen dan applet untrusted berada pada server yang berbeda. Class Applet mendenisikan bentuk yang nyaman untuk metoda yang memuat image dan suara. Denisi tersebut memungkinkan anda menspesikasi image dan suara relatif terhadap basis URL. Misalkan, applet diset sesuai dengan struktur direktori dalam Gambar 9.1. Untuk membuat objek Image dengan menggunakan le image a.gif, applet dapat menggunakan code: Image image = getImage(getCodeBase(), "imgDir/a.gif"); 97

98
Tanpa Pernyataan Paket dalam Code Applet suatu Direktori imgDir a.gif file Class

BAB 9. KEUNTUNGAN API APPLET


Paket com.myco.myproject; suatu Direktori imgDir a.gif com myco myproject file Class

Gambar 9.1: Struktur direktori tempat applet berada.

9.2 Menampilkan String Status Ringkas


Semua applet viewer termasuk browser memungkinkan applet menampilkan string status ringkas. Dalam implementasi, string ini muncul pada baris status di dasar jendela applet viewer. Dalam browser, semua applat berada dalam halaman seperti halnya browser itu sendiri. Baris status applet tersebut dengan browser berada pada baris yang sama. Anda tidak boleh meletakkan info penting pada baris status. Jika banyak pengguna mungkin membutuhkan info, tampilkanlah info tersebut dalam daerah applet. Jika hanya sedikit pengguna ahli yang mungkin memerlukannya, pertimbangkan tampilan pada output standard. Baris status biasanya tidak menyolok dan ia dapat ditindih oleh applet lain atau oleh browser. Untuk alasan ini, baris status tersebut baik digunakan untuk informasi yang bersifat sementara. Misalkan, applet yang memuat beberapa le image mungkin menampilkan nama dari le image yang saat itu sedang dalam proses pemuatan. Applet menampilkan baris status dengan menggunakan metoda showStatus, seperti berikut: showStatus("MyApplet: Loading image file " + file); Penting Jangan meletakkan scrolling text dalam baris status. Pengguna browser kebanyakan merasa terganggu karena peletakkan tersebut.

October 13, 2009

98

Pemrograman Komputer : Bahasa Java

Bab 10

Pertimbangan Praktis untuk Penulisan Applet


Dua bab terdahulu membahas mengenai semua API khusus untuk applet. Namun, kebanyakan applet sangat tergantung pada API yang tidak khusus untuk applet. Pelajaran ini memberikan anda bantuan mengenai penggunaan API Java, yang membahasa bagian yang berhubungan dengan applet yang sangat berkaitan dengan browser.

10.1 Batasan keamanan


Satu dari tujuan utama lingkungan Java adalah untuk membuat pengguna browser merasakan keamanan ketika menjalankan applet. Untuk itu, kita telah memulai menggunakan batasan secara konservatif yang mungkin lebih dari yang dibutuhkan. Applet mungkin akan semakin lebih leluasa. Subbab ini membahas mengenai batasan keamatan applet, dari sudut pandang bagaimana mereka mempunyai efek pada rancangan applet. Untuk info lebih lanjut, anda perlu mengacu pada dokumen Marianne Mueller mengenai Frequently Asked Questions - Applet Security. Masing-masing applet viewer mempunyai objek SecurityManager yang memeriksa pelanggaran batasan keamanan. Ketika pelanggaran terdeteksi, ia membuat dan melempar objek SecurityException. Umumnya, konstruktor SecurityException mencetak pesan peringatan pada output standard. Applet dapat menangkap SecurityException dan bereaksi dengan sesuai, seperti dengan memastikan pengguna dan dengan menggunakan cara yang lebih aman (namun kurang ideal) untuk menyelesaikan tugas. Beberapa applet viewer menelan beberapa SecurityException, sehingga applet tidak pernah memperolehnya. Misalkan implementasi applet viewer JDK untuk metoda AppletContext dan getApplet menangkap namun mengabaikan SecurityException. Pengguna dapat melihat pesan salah pada output standard, namun paling tidak applet mempunyai hasil yang masih dapat dioperasikan oleh metoda tersebut. Hal ini masuk akal, karena getApplet harus dapat mengembalikan applet yang operasional yang ditemuinya, bahkan jika ia menemukan yang tidak operasional (Applet viewer menganggap applet sebagai operasional jika ia dapat dimuat dari tuan rumah yang sama dengan tuan rumah yang memanggil getApplet). Sebagaimana dikemukakan pada bab 8, applet viewer (termasuk Web browser) mempunyai keterbatasan berikut: 1. Applet tidak dapat memuat library atau metoda denit: Applet hanya dapat menggunakan code Java miliknya sendiri dan applet viewer dari API Java. Paling tidak, masing-masing applet viewer harus memberikan akses pada API yang didenisikan pada paket java.* 2. Applet tidak dapat secara biasa membaca atau menulis le pada tuan rumah yang mengeksekusinya: Applet viewer JDK memperbolehkan beberapa perkecualian yang khusus untuk pengguna, namun Netscape Navigator 2.0, misalnya, tidak. Applet pada sembarang applet viewer dapat membaca le yang diakses dengan nama URL, bukan nama le. Jalan memutar untuk menulis le adalah dengan membuat applet mengirim data ke aplikasi pada tuan rumah dimana applet berasal. Aplikasi ini dapat menulis le data pada tuan rumahnya. Lihat pembahasan mengenai bekerja dengan aplikasi Server-Side untuk contoh lebih lanjut. 3. Applet tidak dapat membuat hubungan jaringan kecuali pada tuan rumah dimana ia berasal: Jalan memutar untuk batasan ini adalah dengan mempunyai applet bekerja dengan aplikasi yang berada pada tuan rumah dimana aplikasi tersebut berasal. Aplikasi dapat membuat hubungannya sendiri dimanapun pada jaringan. Lihat pembahasan mengenai Penggunaan Server untuk Jalan Memutar mengatasi Batasan Keamanan untuk contoh lebih lanjut. 99

100

BAB 10. PERTIMBANGAN PRAKTIS UNTUK PENULISAN APPLET

4. Applet tidak dapat memulai program pada tuan rumah yang mengeksekusinya: Sekali lagi applet dapat bekerja denga aplikasi server-side sebagai gantinya. 5. Applet tidak dapat membaca sifat sistem yang tertentu: Lihat pembahasan mengenai pembacaan sifat sistem untuk informasi lebih lanjut. 6. Jendela yang dibawa applet terlihat berbeda dengan jendela yang dibawa aplikasi: Jendela applet mempunyai teks peringatan dan salah satu dari balok berwarna atau image. Hal ini membantu pengguna untuk membedakan jendela applet dari aplikasi yang sudah mapan. Gambar 10.1 dan 10.2 menunjukkan jendela yang dibawa program yang dapat beroperasi sebagai applet dan sebagai aplikasi. Gambar 10.1 menunjukkan tampilan jendela ketika program dijalankan pada platform Solaris. Gambar 10.2 diperoleh ketika program menjalankan applet dengan browser Solaris Netscape Navigator 2.0.

Gambar 10.1: Jendela dari aplikasi.

Gambar 10.2: Jendela dari applet.

10.2 Membuat User Interface


Kebanyakan applet mempunyai GUI (Graphical User Interface). Hal ini merupakan konsekuensi alamiah dari kenyataan bahwa masing-masing applet muncul dalam jendela browser. Karena class Applet merupakan subclass dari class Panel AWT dan mempunyai andil pada peristiwa AWT dan drawing, membuat GUI applet adalah semudah membuat GUI aplikasi.

October 13, 2009

100

Pemrograman Komputer : Bahasa Java

Bab 11

Class Java Penting


Pada bab ini dibahas class pada platform Java yang penting untuk programmer. Khususnya mengenai class dari paket java.lang dan java.io yang mengandung 1. String dan StringBuffer 2. Properties 3. System 4. SecurityManager 5. Thread dan class yang berkaitan 6. Throwable dan Exception serta temannya 7. class Reader, Writer, InputStream dan OutputStream dari java.io dan turunannya.

11.1 Penggunaan String dan StringBuffer


Paket java.lang mengandung 2 string class: String dan StringBuffer. Anda telah melihat class String pada beberapa tempat pada tutorial ini. Anda menggunakan class String ketika anda bekerja dengan string yang tidak berubah. Dilain pihak, StringBuffer digunakan jika string dimungkinkan berubah pada saat di-run. Metoda reverseIt dalam kode berikut ini menggunakan class String dan StringBuffer untuk membalik urutan huruf dalam suatu string. Jika anda mempunyai daftar kata-kata, anda dapat menggunakan metoda ini yang dikaitkan dengan program pengurutan untuk menghasilkan daftar dari kata yang mempunyai irama tertentu, hanya dengan membalik urutan huruf, mengurutkan dan membalik string kembali. Berikut ini adalah contohnya: public class ReverseString { public static String reverseIt(String source) { int i, len = source.length(); StringBuffer dest = new StringBuffer(len); for (i = (len - 1); i &gt;= 0; i--) dest.append(source.charAt(i)); return dest.toString(); } } Metoda ReverseIt menerima argumen dengan tipe String yang disebut dengan source yang mengandung data string yang akan dibalikkan. Metoda tersebut menghasilkan StringBuffer, dest yang berukuran sama dengan source. Program tersebut kemudian melakukan loop terbalik pada semua huruf dalam source dan melampirkannya pada dest sehingga membalikkan string. Akhirnya metoda tersebut mengkonversi dest yang merupakan StringBuffer menjadi String. Sebagai tambahan yang memperjelas perbedaan antara String dan StringBuffer, bab ini mengilustrasikan beberapa unjuk kerja dari class String dan StringBuffer: 1. menghasilkan String dan StringBuffer 101

102

BAB 11. CLASS JAVA PENTING

2. menggunakan metoda accessor untuk memperoleh informasi mengenai String atau StringBuffer 3. merubah StringBuffer dan 4. mengkonversi satu jenis string ke lainnya.

11.1.1 Mengapa menggunakan class dua string


Lingkungan pengembangan Java mempunyai dua class yang menyimpan dan memanipulasi data huruf: String untuk string konstan, dan StringBuffer untuk string yang dapat berubah. Anda dapat menggunakan String jika anda tidak menginginkan nilai dari string untuk berubah. Misalkan, jika anda menulis metoda yang membutuhkan data string dan metoda tersebut tidak akan merubah string tersebut dengan cara apapun, gunakan object String. Biasanya, anda menggunakan String untuk melalukan data huruf untuk metoda tertentu dan mengembalikan data huruf dari metoda tersebut. Metoda reverseIt menggunakan argumen String dan mengembalikan nilai String. class ReverseString { public static String reverseIt(String source) { int i, len = source.length(); StringBuffer dest = new StringBuffer(len); for (i = (len - 1); i &gt;= 0; i--) { dest.append(source.charAt(i)); } return dest.toString(); } } Class StringBuffer menghasilkan string yang dapat diubah; anda menggunakan StringBuffer jika anda menginginkan nilai dari data huruf untuk berubah. Anda biasanya menggunakan StringBuffer untuk membentuk data huruf, seperti pada metoda reverseIt. Karena konstan, String lebih murah daripada StringBuffer dan dapat digunakan bersama. Oleh karenanya, gunakan String semestinya.

11.1.2 Membuat String dan StringBuffer


Pernyataan berikut ini diambil dari metoda reverseIt yang menghasilkan StringBuffer dalam 3 tahapan: 1. deklarasi 2. instansiasi 3. inisialisasi StringBuffer dest = new StringBuffer(len); Pernyataan di atas dalam metoda reverseIt menghasilkan StringBuffer bernama dest yang mempunyai panjang awal sama dengan panjang awal dari source. class ReverseString { public static String reverseIt(String source) { int i, len = source.length(); <strong>StringBuffer dest = new StringBuffer(len);</strong> for (i = (len - 1); i &gt;= 0; i--) { dest.append(source.charAt(i)); } return dest.toString(); } } Penulisan StringBuffer dest mendeklarasikan pada kompiler bahwa dest akan digunakan untuk mengacu objek dengan tipe StringBuffer, operator new mengalokasikan memori untuk objek baru, dan StringBuffer(len) menginisialisasi objek. Tiga tahapan ini deklarasi, instansiasi dan inisialisasi dijelaskan dalam pembahasan mengenai pembuatan objek. October 13, 2009 102

Pemrograman Komputer : Bahasa Java

11.1. PENGGUNAAN STRING DAN STRINGBUFFER Membuat String

103

Banyak String dibuat dari literal. Ketika kompiler menemukan sederetan huruf yang diapit dengan tanda kutip ganda, kompiler membuat objek String dengan nilai sesuai dengan teks yang muncul di antara tanda kutip. Ketika kompiler menemukan literal string berikut, ia membuat objek String yang nilainya adalah Gobbledy gook. "Gobbledy gook." Anda dapat pula membuat objek String seperti anda membuat objek Java lain dengan menggunakan katakunci new. new String("Gobbledy gook."); Membuat StringBuffer Metoda konstruktor yang digunakan oleh reverseIt untuk menginisialisasi dest membutuhkan argumen bilangan bulat untuk menunjukkan ukuran awal dari StringBuffer baru. StringBuffer(int length) reverseIt dapat saja menggunakan konstruktor default StringBuffer yang tidak memerlukan panjang buffer ditentukan pada awalnya. Namun, lebi esien untuk memberikan panjang buffer secara spesik jika anda mengetahuinya, sebagai ganti dari alokasi memori yang lebih setiap kali anda melampirkan huruf dalam buffer tersebut.

11.1.3 Metoda Accessor


Metoda reverseIt menggunakan 2 metoda accessor untuk memperoleh informasi mengenai string source: charAt dan length. Kedua String dan StringBuffer menghasilkan sejumlah metoda accessor lain, termasuk untuk memeriksa substring dan memperoleh posisi dari huruf tertentu. Variabel instance dari objek dibungkus dalam objek, tersembunyi didalam dan aman dari inspeksi atau manipulasi oleh objek lain. Dengan perkecualian yang jelas, metoda dari objek merupakan satu-satunya cara objek lain dapat menginspeksi atau merubah variabel instance dari objek. Pembungkusan data objek melindungi objek dari korupsi oleh objek lain dan melindungi rincian implementasi dari pihak luar. Pembungkusan data dlam metoda objek seperti ini merupakan keunggulan pemrograman berorientasi objek. Metoda yang digunakan untuk memperoleh informasi mengenai suatu objek dikenal sebagai metoda accessor. Metoda reverseIt menggunakan 2 metoda accessor string untuk memperoleh informasi mengenai string source. class ReverseString { public static String reverseIt(String source) { int i, len = source.length(); StringBuffer dest = new StringBuffer(len); for (i = (len - 1); i &gt;= 0; i--) { dest.append(source.charAt(i)); } return dest.toString(); } } Pertama, reverseIt menggunakan metoda accessor length dari string untuk memperoleh panjang dari source string: int len = source.length(); Catatan, reverseIt tidak mempedulikan apakah string mempertahankan atribut panjangnya sebagai bilangan bulat, pecahan atau bahkan menghitung panjangnya ketika digunakan. reverseIt hanya tergantung pada antar muka dari metoda length, yang mengembalikan panjang dari String sebagai bilangan bulat. Kedua, reverseIt menggunakan accessor charAt, yang mengembalikan huruf pada posisi yang diberikan pada parameter: source.charAt(i) Huruf yang dikembalikan oleh charAt dilampirkan pada StringBuffer dest. Karena variabel loop i dimulai pada akhir dari source dan berlangsung dengan arah terbalik untuk seluruh string, hururf dilampirkan dengan urutan terbalik pada StringBuffer, sehingga string menjadi terbalik.

Agus Purwanto, Ph. D

103

October 13, 2009

104 Metoda Accessor lain

BAB 11. CLASS JAVA PENTING

Sebagai tambahan dari length dan charAt, String mendukung sejumlah metoda accessor lain yang memberi akses ke substring dan indeks dari huruf tertentu pada String.StringBuffer mempunyai perangkat metoda accessor serupa.

11.1.4 Merubah StringBuffer


Metoda reverseIt menggunakan metoda pelampiran StringBuffer untuk menambahkan huruf pada dest. Sebagai tambahan, metoda StringBuffer merupakan metoda untuk menyisipkan huruf pada buffer, merubah huruf pada lokasi tertentu dalam buffer dan sebagainya. Metoda reverseIt menggunakan metoda lampiran StringBuffer untuk menambahkan huruf pada akhir dari string tujuan: dest: class ReverseString { public static String reverseIt(String source) { int i, len = source.length(); StringBuffer dest = new StringBuffer(len); for (i = (len - 1); i &gt;= 0; i--) { dest.append(source.charAt(i)); } return dest.toString(); } } Jika huruf yang dilampirkan menyebabkan ukuran dari StringBuffer bertambah melebihi kapasitasnya, StringBuffer mengalokasikan lebih banyak memori. Karena alokasi memori merupakan operasi yang relatif lebih mahal, anda dapat membuat kode anda lebih esien dengan menginisialisasi kapasitas StringBuffer dengan perkiraan yang masuk akal, sehingga meminimisasi banyaknya memori yang harus dialokasikan untuknya. Misalkan metoda reverseIt membuat StringBuffer dengan kapasitas awal sama dengan panjang string source untuk memastikan hanya satu kali alokasi memori untuk dest. Versi untuk metoda append yang digunakan dalam reverseIt hanya satu dari metoda StringBuffer yang melampirkna data pada akhir StringBuffer. Masih ada beberapa metoda append yang melampirkan data dari berbagai jenis seperti float, int, boolean dan bahkan Object pada akhir StringBuffer. Data dikonversi ke string sebelum operasi append berlangsung. Penyisipan Huruf Anda mungkin menginginkan untuk menyisipkan data ke tengah StringBuffer. Anda dapat melakukan hal ini dengan menggunakan metoda insert dari StringBuffer seperti contoh berikut: StringBuffer sb = new StringBuffer("Drink Java!"); sb.insert(6, "Hot "); System.out.println(sb.toString()); yang akan menampilkan: Drink Hot Java! Dengan metoda insert dari StringBuffer, anda menspesikasikan indeks sebelum tempat anda menginginkan data disisipkan. Dalam contoh, Hot perlu disisipkan sebelum huruf J dalam kata Java. Indeks dimulai dengan 0, sehingga indeks untuk J adalah 6. Untuk menyisipkan data pada awal StringBuffer, gunakan indeks 0. Untuk menambah data pada akhir Stringbuffer, gunakan indeks sama dengan panjang dari StringBuffer atau gunakan append. Menset Huruf Kegunaan lain dari modier StringBuffer adalah setCharAt, yang menggantikan huruf pada posisi tertentu dalam StringBuffer dengan huruf yang dispesikasikan pada daftar argumen. setCharAt berguna ketika anda ingin menggunakan kembali StringBuffer. October 13, 2009 104

Pemrograman Komputer : Bahasa Java

11.1. PENGGUNAAN STRING DAN STRINGBUFFER

105

11.1.5 Merubah Object menjadi String


reverseIt merubah StringBuffer menjadi String dan mengembalikan string. Anda dapat mengkonversi jenis data yang berbeda menjadi String dengan menggunakan metoda valueOf dari string tersebut.

11.1.6 Mengkonversi String menjadi Angka


Anda dapat pula menggunakan metoda dari class Integer, Float, Double dan Long untuk mengkonversi isi dari String menjadi angka.

11.1.7 String dan kompiler Java


Kompiler Java menggunakan String dan StringBuffer dibalik layar untuk menangani string literal dan penggabungan.

11.1.8 Hal menarik lainnya


String dan StringBuffer merupakan cara yang berguna untuk memanipulasi data string termasuk penggabungan, perbandingan, substitusi dan konversi ke huruf besar/kecil. java.lang.String dan java.lang.StringBuffer merangkum semua metoda dan variabel yang didukung oleh kedua class tersebut.

Agus Purwanto, Ph. D

105

October 13, 2009

106

BAB 11. CLASS JAVA PENTING

October 13, 2009

106

Pemrograman Komputer : Bahasa Java

Bab 12

Soal-Jawab UTS dan UAS, Pemrograman Komputer


12.1 UTS Genap, 2000/2001, Rabu/21-03-2001, jam 10.00-11.40
12.1.1 Soal
Pilihan Majemuk Kerjakan 15 soal di bawah ini. Pilih jawaban yang paling tepat. Nilai 4 diperoleh jika jawaban benar, nol jika tidak diisi atau salah. Mulailah dengan soal termudah lebih dahulu. Jika terdapat kecurangan yang dilakukan oleh maksimal 2 peserta ujian matakuliah ini, penalti dengan nilai (-1) akan diterapkan pada setiap jawaban yang salah untuk semua peserta, sedangkan peserta curang tersebut langsung mendapat nilai E untuk matakuliah ini. 1. Jika diberikan pernyataan : String sekolah = "Apakah Badu sudah berangkat ke sekolah ?"; maka nilai yang ditampilkan oleh ekspresi sekolah.length() adalah a) 38 b) 39 c) 40

d) 41

2. Untuk String sekolah yang diberikan pada soal nomor 1, tentukan nilai yang diberikan oleh sekolah.charAt(18) a) A b) a c) B d) b 3. Keluaran dari pernyataan "Mengapa kamu selalu ribut saja ?".substring(14,18) adalah a) ela 4. Diakhir loop: int j=0,k; for (k=0;k<10;k++);j=2*k; nilai j adalah a) 20

b) elal

c) elalu

d) selalu

b) 18

c) 30

d) pesan error

5. Untuk sekumpulan bilangan yang sudah dimasukkan melalui keyboard, potongan diagram alur pada Gambar 12.1 berguna untuk mencari nilai a) rata-rata b) maksimum c) minimum d) jumlah 6. Nilai j diakhir loop: int j=0,k; for (k=0,k<10;k++)j=2*k; a) 20 b) 18 107 c) 30 d) pesan error

108

BAB 12. SOAL-JAWAB UTS DAN UAS, PEMROGRAMAN KOMPUTER

hasil=bilangan[0] i=1

hasil>bilangan[i] ?

tidak

ya hasil=bilangan[i] i++

ya

i<banyak ? tidak

Gambar 12.1: Potongan diagram alur untuk soal no. 5. 7. Nilai fvar di akhir potongan program berikut: float fvar=0.0;int k=0; do{fvar=fvar*2.0;k=k+2;}while(k<10); a) 0 b) 2.0 c) 8.0 d) 0.5

8. Nilai fvar di akhir potongan program berikut: float fvar=0.0;int k=0; while(k<10){fvar=fvar*2.0;k=k+2;} a) 0 b) 2.0 c) 8.0 d) 0.5

9. Pada potongan program berikut int i,hitung=0;for(i=0;i<10;i++);{hitung=hitung+2;} System.out.println(hitung); Berapakah harga hitung pada posisi System.out.println tersebut ? a) 20 b) 2 c) 30 10. Pada potongan program float a=1.5,b=2.5,x=4.5,y=3.5;if(x>=y)a=b;System.out.println(a); keluaran (output)-nya adalah a) 2.5 b) 1.5 11. Pada potongan program berikut ini: float a, b, c; if(a>b) c=a; else c=b; Jika a=5.1 dan b=1.5, maka nilai c menjadi a) 5.1 b) 1.5 October 13, 2009 108

d) 0

c) 0

d) pesan error

c) 0

d) 51

Pemrograman Komputer : Bahasa Java

12.1. UTS GENAP, 2000/2001, RABU/21-03-2001, JAM 10.00-11.40 12. Potongan program StringBuffer sb = new StringBuffer("terbit"); sb.insert(sb.length(),"terang");System.out.println(sb); menghasilkan: a) terbit terang 13. Potongan program StringBuffer sb = new StringBuffer("terbit"); sb.append(" terang");System.out.println(sb); menghasilkan tampilan: a) terbit terang 14. Potongan program String s = "selamat selama ...";System.out.println(s.indexOf("lama")); menghasilkan tampilan: a) 10 15. Potongan program StringTokenizer st = new StringTokenizer("dunia tenang damai"); st.nextToken();System.out.println(st.nextToken()); menghasilkan tampilan: a) dunia Uraian

109

b) terbitterang

c) terang terbit

d) terangterbit

b) terbitterang

c) terang terbit

d) terangterbit

b) 11

c) 2

d) 3

b) tenang

c) damai

d) dunia tenang

Buatlah program aplikasi sederhana untuk mengurutkan dua kata dalam kalimat "dodo duduk" Untuk mendapatkan nilai penuh, perhatikan hal berikut : 1. Masukan dilakukan dalam bentuk kalimat dengan dua kata pada awal program. 2. Keluaran yang merupakan kata berurut secara alfabetik ditampilkan pada layar monitor.

12.1.2 Jawaban
Pilihan Ganda 1) 2) 3) 4) 5) Uraian Berikut ini adalah program lengkap untuk jawaban soal uraian: import java.util.*; public class Urut2 { public static void main(String[] args) { int i,j,len; System.out.println("\nPROGRAM PENGURUTAN 2 KATA SECARA ALFABETIK,"); System.out.println("DENGAN BATASAN: KATA TERSEBUT TIDAK SAMA"); String stringAwal="dodo duduk"; StringTokenizer st=new StringTokenizer(stringAwal); c d b a c 6) 7) 8) 9) 10) d a a b a 11) 12) 13) 14) 15) a b a c b

Agus Purwanto, Ph. D

109

October 13, 2009

110

BAB 12. SOAL-JAWAB UTS DAN UAS, PEMROGRAMAN KOMPUTER


String a = st.nextToken(); String b = st.nextToken(); len=a.length()<b.length()?a.length():b.length(); for(i=0;i<len;i++) { String s3=a.substring(i,i+1); String s4=b.substring(i,i+1); j=s3.compareTo(s4); if(j==0)continue; else if (j<0) { System.out.println(a); System.out.println(b); break; } else { System.out.println(b); System.out.println(a); break; } } }

} Sebagai perbandingan (tidak dibutuhkan pada jawaban), berikut ini adalah program lengkap yang berlaku untuk input kalimat dengan jumlah kata yang lebih bebas (tergantung inputnya): import java.util.*; public class Urut1 { public static void main(String[] args) { int index,index1,index2,banyak,i,j,len,jumlahKata,kata, indexMin,indexBuang; String stringAwal="saya sedang duduk sedangkan kamu berdiri di samping"; StringBuffer sb=new StringBuffer(""); StringTokenizer st=new StringTokenizer(stringAwal);//untuk batas iterasi StringBuffer sb0=new StringBuffer(stringAwal); for(int k=0;k<st.countTokens();k++){ String s1=new String(sb0.toString());//banyak kata selalu berkurang 1 // Memasukkan kata ke dalam kumpulan string StringTokenizer st1=new StringTokenizer(s1); jumlahKata=st1.countTokens();//jumlah kata selalu berkurang 1 String stringArray[]; stringArray=new String[jumlahKata]; index=0; while(st1.hasMoreTokens()){ String s2=st1.nextToken(); stringArray[index]=s2; index++; } indexMin=0; String min=stringArray[indexMin]; for(kata=1;kata<jumlahKata;kata++) { len=stringArray[kata].length()<min.length()? stringArray[kata].length():min.length();//ambil banyak huruf min. for(i=0;i<len;i++) October 13, 2009 110

Pemrograman Komputer : Bahasa Java

12.1. UTS GENAP, 2000/2001, RABU/21-03-2001, JAM 10.00-11.40 { String s3=min.substring(i,i+1); String s4=stringArray[kata].substring(i,i+1); j=s3.compareTo(s4); if(j==0)continue; else if (j<0) { break; } else { min=stringArray[kata]; indexMin=kata; break; } } } indexBuang=s1.indexOf(min); sb0.delete(indexBuang,indexBuang+min.length()); sb.append(min); sb.append(" "); } System.out.println("\nPROGRAM PENGURUTAN HURUF SECARA ALFABETIK,"); System.out.println("DENGAN BATASAN: TIDAK ADA KATA YANG SAMA"); System.out.println(sb); } }

111

Agus Purwanto, Ph. D

111

October 13, 2009

112

BAB 12. SOAL-JAWAB UTS DAN UAS, PEMROGRAMAN KOMPUTER

12.2 UTS 2007


12.2.1 Soal
Pilihan Majemuk Pilih jawaban yang paling tepat untuk 20 soal berikut. Mulailah dengan soal termudah lebih dahulu. Nilai 3 diperoleh jika jawaban benar, nol jika tidak diisi atau salah. Jika terdapat kecurangan, penalti dengan nilai (-1) akan diterapkan pada setiap jawaban yang salah untuk semua peserta, sedangkan peserta curang tersebut langsung mendapat nilai E untuk matakuliah ini. Jika peserta ujian meninggalkan ruangan ujian, maka ujian bagi peserta tersebut dinyatakan selesai dan kertas ujiannya dikumpulkan. Dilarang menggunakan Handphone atau alat komunikasi lain. Diberikan potongan program berikut untuk 3 soal pertama: class A{ public double[][]var; public static void main(String[] args){ var = new double[3][10]; fungsi(1,2); } public void fungsi(int a, int b){ var[a][b]=1.0; System.out.println(var[a][b]); } } 1. Keluaran dari program adalah a) a b b) 1 c) 0 d) 1 2 d) var[1][2] d) 3

2. Semua nilai var[i][j] dengan 0 i 3 dan 0 j 10 adalah nol kecuali nilai a) var[3][10] b) var[0][0] c) var[0][2] 3. Keluarannya jika pernyataan fungsi(1,2) diganti dengan fungsi(3,10): a) 0 b) 1 c) error 4. Keluaran dari potongan program berikut

public void fungsi(int a){a=2*a;} public static void main(String[] z) {int d=3; fungsi(d);System.out.println(d);} a) 2 b) 3 c) 5 d) 6

5. Nilai j di akhir loop berikut adalah int j=0,k; for (k=0;k<20;k++);j=3*k; a) 19 b) 20 c) 57 d) 60

6. Berapakah harga hitung pada posisi System.out.println() berikut ? int i,hitung=0;for(i=0;i<10;i++);{hitung=hitung+2;} System.out.println(hitung); a) 20 b) 2 c) 30 d) 0

7. Keluaran (output) dari potongan program berikut adalah float a=1.5,b=2.5,x=4.5,y=3.5;if(x==y)a=b; System.out.println(a); a) 2.5 October 13, 2009 b) 1.5 112 c) 0 d) 3.5

Pemrograman Komputer : Bahasa Java

12.2. UTS 2007 8. Nilai c pada potongan program berikut float a=5.1, b=1.5, c; if(a=b) c=a; else if(a<b) c=b; else c=0.0; a) 5.1 9. Nilai j diakhir loop: int j=0,k; for (k=0;k<10;k++)j=3*k; a) 20 b) 27 c) 30 d) 13 b) 1.5 c) 0.0 d) 51

113

10. Pada potongan program berikut ini: int i,j,k; if(i==j){if(k==j) a=b; else x=c;}else{b=c;} pernyataan a=b dieksekusi jika a) i!=j b) i==j; dan k==j 11. Nilai j diakhir loop adalah: int j=0,k; for (k=0;k<10;k++);j=3+k; a) 20 b) 27 c) 30 d) 13

c) i==j; dan k!=j

d) k==j

12. Hasil dari potongan program berikut int p, q, r, s, t; p=10; q=20; r=q; s=p; q=p; t=q; p=r; a) p=20; q=10 13. Keluaran dari pernyataan "Mengapa kamu selalu ribut saja ?".substring(14,18) adalah a) ela 14. Diakhir loop: int j=0,k; for (k=0;k<10;k++);j=2*k; nilai j adalah a) 20 15. Nilai j diakhir loop: int j=0,k; for (k=0,k<10;k++)j=2*k; a) 20 b) 18 c) 30 d) pesan error b) p=10; q=10 c) p=20; q=20 d) p=10; q=20

b) elal

c) elalu

d) selalu

b) 18

c) 30

d) pesan error

16. Nilai fvar di akhir potongan program berikut: float fvar=0.0;int k=0; do{fvar=fvar*2.0;k=k+2;}while(k<10); a) 0 b) 2.0 c) 8.0 d) 0.5

17. Nilai fvar di akhir potongan program berikut: float fvar=0.0;int k=0; while(k<10){fvar=fvar*2.0;k=k+2;} a) 0 18. Pada potongan program b) 2.0 c) 8.0 d) 0.5

Agus Purwanto, Ph. D

113

October 13, 2009

114

BAB 12. SOAL-JAWAB UTS DAN UAS, PEMROGRAMAN KOMPUTER


float a=1.5,b=2.5,x=4.5,y=3.5;if(x>=y)a=b;System.out.println(a); keluaran (output)-nya adalah a) 2.5 b) 1.5

c) 0

d) pesan error

19. Pada potongan program berikut ini: float a, b, c; if(a>b) c=a; else c=b; Jika a=5.1 dan b=1.5, maka nilai c menjadi a) 5.1 b) 1.5 20. Potongan program String s = "selamat selama ...";System.out.println(s.indexOf("lama")); menghasilkan tampilan: a) 10 Uraian Pilih satu diantara 4 soal. Pastikan anda bisa mengerjakan pilihan anda secara tuntas dalam waktu yang diberikan. Pekerjaan yang tidak tuntas hanya diberi nilai 15 (untuk setiap pilihan). Jika dikerjakan lebih dari satu, maka yang dinilai hanya yang tuntas dengan nilai tertinggi. Untuk semua soal, masukkan dilakukan melalui keyboard dan keluaran ditampilkan di layar komputer. 1. (25pts) Buat program untuk menghitung jumlah dari sekumpulan bilangan bulat 2. (30pts) Sama dengan soal 1, namun jumlahkan hanya bilangan bulat yang bernilai genap saja 3. (35pts) Sama dengan soal 2, namun gunakan fungsi main, baca, proses dan tulis. Catatan: fungsi main memanggil fungsi lainnya dan fungsi main mengandung loop (berarti tidak menggunakan array untuk bilangan yang bisa saja berupa pecahan). 4. (40pts) Sama dengan soal 3, namun fungsi main tidak boleh mengandung loop. (berarti gunakan array untuk bilangan yang bisa saja berupa pecahan).

c) 0

d) 51

b) 11

c) 2

d) 3

12.2.2 Jawaban
Pilihan Ganda 1) 2) 3) 4) 5) b d c b d 6) 7) 8) 9) 10) b b c b b 11) 12) 13) 14) 15) d a b a d 16 17 18 19 20 a a a a c

October 13, 2009

114

Pemrograman Komputer : Bahasa Java

12.3. UAS 2007

115

12.3 UAS 2007


12.3.1 Soal
Pilihan Majemuk Pilih jawaban yang paling tepat untuk 20 soal berikut. Mulailah dengan soal termudah lebih dahulu. Nilai 3 diperoleh jika jawaban benar, nol jika tidak diisi atau salah. Jika terdapat kecurangan, penalti dengan nilai (-1) akan diterapkan pada setiap jawaban yang salah untuk semua peserta, sedangkan peserta curang tersebut langsung mendapat nilai E untuk matakuliah ini. Jika peserta ujian meninggalkan ruangan ujian, maka ujian bagi peserta tersebut dinyatakan selesai dan kertas ujiannya dikumpulkan. Dilarang menggunakan Handphone atau alat komunikasi lain. 1. Berikut ini adalah fasilitas yang tidak diperlukan agar komponen visual tombol bisa bereaksi ketika diklik a) addActionListener b) ActionListener c) actionPerformed d) actionMovie 2. Berikut ini adalah fasilitas bukan untuk mengatur layout pada container a) FlowLayout b) BagLayout c) GridBagLayout 3. Pernyataan JTextFieldDemo test = new JTextFieldDemo(); adalah cara untuk a) mengakses destruktor b) melakukakan perhitungan test c) mendeklarasikan bahwa objek bernama test akan muncul d) memberi actionListener pada komponen visual JTextFieldDemo 4. Nilai j di akhir loop berikut adalah int j=0,k; for (k=0;k<20;k++);j=3*k; a) 19 b) 20 c) 57 d) 60 d) GridLayout

5. Berapakah harga hitung pada posisi System.out.println() berikut ? int i,hitung=0;for(i=0;i<10;i++);{hitung=hitung+2;} System.out.println(hitung); a) 20 b) 2 c) 30 d) 0

6. Keluaran (output) dari potongan program berikut adalah float a=1.5,b=2.5,x=4.5,y=3.5;if(x==y)a=b; System.out.println(a); a) 2.5 b) 1.5 c) 0 d) 3.5

7. Nilai c pada potongan program berikut float a=5.1, b=1.5, c; if(a=b) c=a; else if(a<b) c=b; else c=0.0; a) 5.1 8. Nilai j diakhir loop: int j=0,k; for (k=0;k<10;k++)j=3*k; a) 20 b) 27 c) 30 d) 13 b) 1.5 c) 0.0 d) 51

9. Pada potongan program berikut ini: int i,j,k; if(i==j){if(k==j) a=b; else x=c;}else{b=c;} pernyataan a=b dieksekusi jika a) i!=j b) i==j; dan k==j

c) i==j; dan k!=j 115

d) k==j October 13, 2009

Agus Purwanto, Ph. D

116 10. Nilai j diakhir loop adalah:

BAB 12. SOAL-JAWAB UTS DAN UAS, PEMROGRAMAN KOMPUTER

int j=0,k; for (k=0;k<10;k++);j=3+k; a) 20 b) 27 c) 30 d) 13

11. Hasil dari potongan program berikut int p, q, r, s, t; p=10; q=20; r=q; s=p; q=p; t=q; p=r; a) p=20; q=10 b) p=10; q=10 c) p=20; q=20 d) p=10; q=20

12. Cara untuk membuat texteld tak dapat diedit pada saat program di run adalah dengan memberikan a) setEditable(true) b) setNoEditable() c) setUnEditable(false) d) setEditable(false) 13. Keluaran dari pernyataan "Mengapa kamu selalu ribut saja ?".substring(14,18) adalah a) ela 14. Diakhir loop: int j=0,k; for (k=0;k<10;k++);j=2*k; nilai j adalah a) 20 15. Nilai j diakhir loop: int j=0,k; for (k=0,k<10;k++)j=2*k; a) 20 b) 18 c) 30 d) pesan error b) 18 c) 30 d) pesan error b) elal c) elalu d) selalu

16. Nilai fvar di akhir potongan program berikut: float fvar=0.0;int k=0; do{fvar=fvar*2.0;k=k+2;}while(k<10); a) 0 b) 2.0 c) 8.0 d) 0.5

17. Nilai fvar di akhir potongan program berikut: float fvar=0.0;int k=0; while(k<10){fvar=fvar*2.0;k=k+2;} a) 0 18. Pada potongan program float a=1.5,b=2.5,x=4.5,y=3.5;if(x>=y)a=b;System.out.println(a); keluaran (output)-nya adalah a) 2.5 b) 1.5 19. Pada potongan program berikut ini: float a, b, c; if(a>b) c=a; else c=b; Jika a=5.1 dan b=1.5, maka nilai c menjadi a) 5.1 b) 1.5 20. Potongan program String s = "selamat selama ...";System.out.println(s.indexOf("lama")); menghasilkan tampilan: a) 10 October 13, 2009 b) 11 116 c) 2 d) 3 c) 0 d) 51 c) 0 d) pesan error b) 2.0 c) 8.0 d) 0.5

Pemrograman Komputer : Bahasa Java

12.3. UAS 2007 Uraian

117

Buatlah program visual dengan tampilan seperti terlihat pada Gambar 12.2 untuk menghitung jumlah nilai dari suku-suku pada deret aritmetika. Komponen visual sesuai tapi tidak berfungsi memperoleh nilai 30. Fungsi sesuai,

Nilai Awal

Beda

text field Suku ke AL text field

text field Jumlah

text field

Gambar 12.2: Tampilan untuk soal uraian. AL menunjukkan bahwa Action Listener berada pada komponen visual didekatnya. Artinya: proses perhitungan akan dilakukan dan ditampilkan ketika komponen visual tersebut di klik atau tekena cursor atau lainnya (sesuai kreativitas). tetapi layout tidak sesuai memperoleh nilai 30. Upah tulis adalah 20. Betul semua baik layout maupun fungsi nya, akan memperoleh nilai 40

12.3.2 Jawaban
Pilihan Ganda 1) 2) 3) 4) 5) d b c d b 6) 7) 8) 9) 10) b c b b d 11) 12) 13) 14) 15) a d b a d 16 17 18 19 20 a a a a c

Agus Purwanto, Ph. D

117

October 13, 2009

118

BAB 12. SOAL-JAWAB UTS DAN UAS, PEMROGRAMAN KOMPUTER

12.4 UTS 2007


12.4.1 Soal
Pilihan Majemuk Pilih jawaban yang paling tepat untuk 20 soal berikut. Mulailah dengan soal termudah lebih dahulu. Nilai 3 diperoleh jika jawaban benar, nol jika tidak diisi atau salah. Jika terdapat kecurangan, penalti dengan nilai (-1) akan diterapkan pada setiap jawaban yang salah untuk semua peserta, sedangkan peserta curang tersebut langsung mendapat nilai E untuk matakuliah ini. Jika peserta ujian meninggalkan ruangan ujian, maka ujian bagi peserta tersebut dinyatakan selesai dan kertas ujiannya dikumpulkan. Dilarang menggunakan Handphone atau alat komunikasi lain. Diberikan program berikut untuk 5 soal berikut: class A{ public double a, b, c; public static void main(String[] args){ a=1.1; b=2.2; c=3.3; if(a>b){ c = 5.0 * a; }else if(a=b){ c = 100.0; }else{ c = a; } System.out.println(c); } } 1. Keluaran dari program adalah a) 1.1 b) 2.2 c) 5.5 d) 100 d) 100 d) 100 d) 100 d) 100

2. Jika pernyataan a=1.1; diganti menjadi a=-1.1;, keluaran dari program adalah a) 1.1 b) 2.2 c) 5.5 3. Jika pernyataan a=1.1; diganti menjadi a=2.2;, keluaran dari program adalah a) 1.1 b) 2.2 c) 5.5 4. Jika pernyataan a=1.1; diganti menjadi a=11.1;, keluaran dari program adalah a) 1.1 b) 2.2 c) 5.5 5. Jika pernyataan a=1.1; diganti menjadi a=-11.1;, keluaran dari program adalah a) 1.1 b) 2.2 c) 5.5

October 13, 2009

118

Pemrograman Komputer : Bahasa Java

12.4. UTS 2007 Diberikan program berikut untuk 5 soal berikut: class A{ public double a, b, c; public static void main(String[] args){ a=1.1; b=2.2; tulis(); } public void tulis(){ if(a>b){ c = 5.0 * a; }else if(a=b){ c = 100.0; }else{ c = a; } System.out.println(c); } } 6. Keluaran dari program adalah a) 1.1 b) 2.2

119

c) 5.5

d) 100 d) 100 d) 100 d) 100 d) 100

7. Jika pernyataan a=1.1; diganti menjadi a=-1.1;, keluaran dari program adalah a) 1.1 b) 2.2 c) 5.5 8. Jika pernyataan a=1.1; diganti menjadi a=2.2;, keluaran dari program adalah a) 1.1 b) 2.2 c) 5.5 9. Jika pernyataan a=1.1; diganti menjadi a=11.1;, keluaran dari program adalah a) 1.1 b) 2.2 c) 5.5 10. Jika pernyataan a=1.1; diganti menjadi a=-11.1;, keluaran dari program adalah a) 1.1 b) 2.2 c) 5.5 Diberikan program berikut untuk 5 soal berikut: class A{ public int a, b; public A(int a, int b){ this.a = a; this.b = b; }//ini adalah konstruktor public void tulisC(){ if(a<b){ c = 5 * a; }else if(a=b){ c = 100; }else{ c = a; } System.out.println(c); } } class B{ public static void main(String[] args){

Agus Purwanto, Ph. D

119

October 13, 2009

120

BAB 12. SOAL-JAWAB UTS DAN UAS, PEMROGRAMAN KOMPUTER


A objectDariClassA = new A(2, 3); objectDariClassA.tulis(); } }

11. Keluaran dari program adalah a) 2 b) 3 12. Jika pernyataan A objectDariClassA = new A(2, 3); diganti menjadi A objectDariClassA = new A(3, 2); keluaran dari program adalah a) 2 b) 3

c) 10

d) 100

c) 10

d) 100

13. Jika pernyataan A objectDariClassA = new A(2, 3); diganti menjadi A objectDariClassA = new A(-3, -3); keluaran dari program adalah a) 2 b) 3 c) 10 14. Jika pernyataan System.out.println(c); diganti menjadi System.out.println(b); keluaran dari program adalah a) 2 b) 3 15. Jika pernyataan System.out.println(c); diganti menjadi System.out.println(a); keluaran dari program adalah a) 2 b) 3 16. Keluaran (output) dari potongan program berikut adalah float a=1.5,b=2.5,x=4.5,y=3.5;if(x==y)a=b; System.out.println(a); a) 2.5 b) 1.5 c) 0

d) 100

c) 10

d) 100

c) 10

d) 100

d) 3.5

17. Nilai c pada potongan program berikut float a=5.1, b=1.5, c; if(a=b) c=a; else if(a<b) c=b; else c=0.0; a) 5.1 b) 1.5 c) 0.0 d) 51

18. Pada potongan program berikut ini: int i,j,k; if(i==j){if(k==j) a=b; else x=c;}else{b=c;} pernyataan a=b dieksekusi jika a) i!=j b) i==j; dan k==j 19. Pada potongan program float a=1.5,b=2.5,x=4.5,y=3.5;if(x>=y)a=b;System.out.println(a); keluaran (output)-nya adalah a) 2.5

c) i==j; dan k!=j

d) k==j

b) 1.5

c) 0

d) 4.5

20. Pada potongan program berikut ini: float a, b, c; if(a>b) c=a; else c=b; Jika a=5.1 dan b=1.5, maka nilai c menjadi a) 5.1 b) 1.5

c) 0

d) 51

October 13, 2009

120

Pemrograman Komputer : Bahasa Java

12.4. UTS 2007 Uraian

121

Pilih satu diantara 4 soal. Pastikan anda bisa mengerjakan pilihan anda secara tuntas dalam waktu yang diberikan. Pekerjaan yang tidak tuntas hanya diberi nilai 15 (untuk setiap pilihan). Jika dikerjakan lebih dari satu, maka yang dinilai hanya yang tuntas dengan nilai tertinggi. Untuk semua soal, masukkan berupa bilangan bulat sembarang kecuali nol dilakukan melalui keyboard dan keluaran ditampilkan di layar komputer. 1. (25pts) Buat program untuk menghitung perkalian dari sekumpulan bilangan yang habis dibagi 3 2. (30pts) Sama dengan soal 1, namun kalikan hanya bilangan yang habis dibagi 3 dan bernilai negatif saja 3. (35pts) Sama dengan soal 2, namun gunakan fungsi/method main, baca, proses dan tulis. Sebagai catatan: Fungsi baca digunakan untuk membaca input. Fungsi proses digunakan untuk proses perhitungan. Fungsi tulis digunakan untuk menampilkan output. Fungsi main memanggil fungsi lainnya dan fungsi main mengandung loop (berarti tidak menggunakan array untuk bilangan). Untuk loop (yang merupakan proses berulang) silahkan gunakan for atau while. Nama class yang digunakan untuk semua nomor uraian ini tetap sama (berarti gunakan hanya satu class saja dengan nama sesuai dengan kreatitas masing-masing). 4. (40pts) Sama dengan soal 3, namun fungsi main tidak boleh mengandung loop. Loop boleh diletakkan difungsi lainnya (berarti gunakan array untuk bilangan).

12.4.2 Jawaban
Pilihan Ganda 1) 2) 3) 4) 5) Uraian 1. package uts2009_1; import java.util.Scanner; public class Main { public static void main(String[] args) { String str=""; Integer perkalian = 1; Scanner in = new Scanner(System.in); while (! (str = in.next()).equals("$")) { Integer sementara = Integer.valueOf(str); if(sementara%3==0){ perkalian = perkalian * Integer.valueOf(str); } } System.out.println("hasil perkaliannya adalah " + perkalian); } } 2. package uts2009_2; import java.util.Scanner; public class Main { public static void main(String[] args) { a d 6) 7) 8) 9) 10) a d 11) 12) 13) 14) 15) c b d b a 16 17 18 19 20 b c b a a

Agus Purwanto, Ph. D

121

October 13, 2009

122

BAB 12. SOAL-JAWAB UTS DAN UAS, PEMROGRAMAN KOMPUTER


String str=""; Integer perkalian = 1; Scanner in = new Scanner(System.in); while (! (str = in.next()).equals("$")) { Integer sementara = Integer.valueOf(str); if( (sementara%3==0) && (sementara<0) ){ perkalian = perkalian * Integer.valueOf(str); } } if(perkalian==1){ System.out.println("Tidak ada yang bisa dikalikan, maaf"); }else{ System.out.println("hasil perkaliannya adalah " + perkalian); } } } Sebagai catatan, pernyataan yang mengandung if(perkalian==1){ System.out.println("Tidak ada yang bisa dikalikan, maaf"); }else{ merupakan contoh penanganan untuk input yang tidak memenuhi syarat habis dibagi 3 dan bernilai negatif.

3. package uts2009_3; import java.util.Scanner; public class Main public static public static public static { Integer sementara; String str; Integer perkalian;

public static void main(String[] args) { perkalian = 1; Scanner in = new Scanner(System.in); while (! (str = in.next()).equals("$")) { baca(); proses(); } tulis(); } public static void baca(){ sementara = Integer.valueOf(str); } public static void proses(){ if( (sementara%3==0) && (sementara<0) ){ perkalian = perkalian * sementara; } } public static void tulis(){ if(perkalian==1){ System.out.println("Tidak ada yang bisa dikalikan, maaf"); }else{ System.out.println("hasil perkaliannya adalah " + perkalian); } } October 13, 2009 122

Pemrograman Komputer : Bahasa Java

12.4. UTS 2007

123

} 4. package uts2009_4; import java.util.Scanner; import java.util.ArrayList; public class Main public static public static public static { ArrayList bilangan; String str; Integer perkalian;

public static void main(String[] args) { baca(); proses(); tulis(); } public static void baca(){ bilangan = new ArrayList(); Scanner in = new Scanner(System.in); int counter = 0; Integer sementara; while (! (str = in.next()).equals("$")) { sementara = Integer.valueOf(str); bilangan.add(sementara); } } public static void proses(){ perkalian = 1; for(int i=0; i<bilangan.size(); i++){ if( ((Integer)bilangan.get(i)%3==0) && ((Integer)bilangan.get(i)<0) ){ perkalian = perkalian * (Integer)bilangan.get(i); } } } public static void tulis(){ if(perkalian==1){ System.out.println("Tidak ada yang bisa dikalikan, maaf"); }else{ System.out.println("hasil perkaliannya adalah " + perkalian); } } } Sebagai catatan: (a) Digunakan ArrayList agar ukuran array bisa di tambah (b) Method get dalam class ArrayList mengembalikan Object, sehingga perlu dilakukan cast(peleburan) ke Integer. Caranya adalah dengan menuliskan (Integer) didepan bilangan.get(i).

Agus Purwanto, Ph. D

123

October 13, 2009