Pengenalan Pemrograman 1
Versi 1.2
Juni 2007
Sumber JEDI
Pengenalan Pemrograman 1
J.E.N.I
Pengarang
Joyce Avestro
Team
Joyce Avestro
Florence Balagtas
Rommel Feria
Reginald Hutcherson
Rebecca Ong
John Paul Petines
Sang Shin
Raghavan Srinivas
Matthew Thompson
NetBeans IDE 5.5 berjalan pada sistem operasi yang mendukung Java VM.
Dibawah ini merupakan daftar dari platform-platform yang digunakan:
Team Translator
Frans Thamura
Eko Subiyantoro
Cahya Kusuma Ratih
Rizzatama N.S.
Miratul Khusna Mufida
Khansa Fitriannisa
Sulistyaningtyas
Allin Junikhah
Bagus Chandra
Badar Agung Nugroho
Kadek Surya Pranata
Pengenalan Pemrograman 1
J.E.N.I
Solaris OS (SPARC):
o Prosesor: UltraSPARC IIIi 1 GHz
o Memori: 1 GB
o Disk space: 850 MB dari free disk space
Solaris OS (x86/x64 platform edition):
o
o
o
http://java.sun.com/j2se/1.5.0/download.html
http://developer.apple.com/java
(untuk mendownload
JDK Anda harus melakukan register terlebih dahulu).
Pengenalan Pemrograman 1
J.E.N.I
Daftar Isi
1 Pengenalan Pemrograman Komputer
1.1 Tujuan
1.2 Pendahuluan
1.3 Komponen dasar komputer
1.3.1 Hardware
1.3.1.1 Central Processing Unit
1.3.1.2 Memori
1.3.1.3 Input dan Output Device
1.3.2 Software
1.4 Sekilas Bahasa Pemrograman
1.4.1 Apa yang Disebut Bahasa Pemrograman?
1.4.2 Kategori Bahasa Pemrograman
1.5 Alur pembuatan program
1.5.1 Definisi Permasalahan
1.5.2 Analisa Permasalahan
1.5.3 Desain Algorithma dan Representasi
1.5.3.1 Simbol flow chart dan Artinya
1.5.4 Pengkodean, Uji Coba, dan Pembuatan Dokumentasi
1.6 Sistem Numerik dan Konversi
1.6.1 Sistem Bilangan Desimal
1.6.2 Sistem Bilangan Biner
1.6.3 Sistem Bilangan Oktal
1.6.4 Sistem Bilangan Heksadesimal
1.6.5 Konversi
1.6.5.1 Desimal ke Biner dan Biner ke Desimal
1.6.5.2 Desimal ke Oktal/ Heksadesimal dan Oktal/Heksadesimal ke Desimal
1.6.5.3 Biner ke Oktal dan Oktal ke Biner
1.6.5.4 Biner ke Heksadesimal dan Heksadesimal ke Biner
1.7 Latihan
1.7.1 Menyusun Algorithma
1.7.2 Konversi Sistem Bilangan
2 Pengenalan Bahasa Java
2.1 Tujuan
2.2 Latar Belakang Java
2.2.1 Sejarah Singkat Java
2.2.2 Apa itu Teknologi Java
2.2.2.1 Sebuah Bahasa Pemrograman
2.2.2.2 Sebuah Development Environment
2.2.2.3 Sebuah Aplikasi
2.2.2.4 Sebuah Deployment environment
2.2.2.5 Mengapa Mempelajari JAVA?
Pengenalan Pemrograman 1
J.E.N.I
Pengenalan Pemrograman 1
J.E.N.I
4.10 Operators
4.10.1 Operator Arithmetika
4.10.2 Operator Increment dan Decrement
4.10.3 Operator Relasi
4.10.4 Operator Logika
4.10.4.1 && (logika AND) and & (boolean logika AND)
4.10.4.2 || (logika OR) and | (boolean logika inclusive OR)
4.10.4.3 ^ (boolean logika exclusive OR)
4.10.4.4 ! (logika NOT)
4.10.5 Operator Kondisi (?:)
4.10.6 Operator Precedence
4.11 Latihan
4.11.1 Mendeklarasikan dan Mencetak Variable
4.11.2 Mendapatkan nilai rata-rata dari tiga angka
4.11.3 Menampilkan nilai terbesar
4.11.4 Operator precedence
5 Mendapatkan Input dari Keyboard
5.1 Tujuan
5.2 Menggunakan BufferedReader untuk mendapatkan input
5.3 Menggunakan JoptionPane untuk mendapatkan input
5.4 Latihan
5.4.1 3 Kata Terakhir (versi BufferedReader)
5.4.2 3 Kata Terakhir (versi JOptionPane)
6 Struktur Kontrol
6.1 Tujuan
6.2 Struktur Kontrol Keputusan
6.2.1 Statement if
6.2.2 Statement if-else
6.2.3 Statement if-else-if
6.2.4 Kesalahan umum apabila menggunakan statement if-else
6.2.5 Contoh Statement if-else-else if
6.2.6 Statement switch
6.2.7 Contoh statement switch
6.3 Struktur Kontrol Perulangan
6.3.1 while loop
6.3.2 do-while loop
6.3.3 for loop
6.4 Branching Statements
6.4.1 break statement
6.4.1.1 Unlabeled break statement
6.4.1.2 Labeled break statement
6.4.2 continue statement
6.4.2.1 Unlabeled continue statement
6.4.2.2 Labeled continue statement
6.4.3 return statement
Pengenalan Pemrograman 1
J.E.N.I
6.5 Latihan
6.5.1 Nilai
6.5.2 Membaca Bilangan
6.5.3 Cetak Seratus Kali
6.5.4 Perpangkatan
7 Java Arrays
7.1 Tujuan
7.2 Penganalan array
7.3 Pendeklarasian array
7.4 Pengaksesan sebuah element array
7.5 Panjang Array
7.6 Array Multidimensi
7.7 Latihan
7.7.1 Hari dalam seminggu
7.7.2 Nomor Terbesar
7.7.3 Buku Alamat
8 Argumen dari Command-lin
8.1 Tujuan
8.2 Argumen Command-line
8.3 Argumen Command-line di NetBeans
8.4 Latihan
8.4.1 Mencetak Argumen
8.4.2 Operasi Aritmatik
9 Bekerja dengan Pustaka Class Java
9.1 Tujuan
9.2 Pengenalan Pemrograman Berorientasi Object
9.3 Class dan Object
9.3.1 Perbedaan Class dan Object
9.3.2 Instansiasi Class
9.3.3 Variabel class dan Method
9.4 Methods
9.4.1 Apakah method itu dan mengapa menggunakan method?
9.4.2 Memanggil instance dari Method dan Passing variabel
9.4.3 Passing Variabel dalam Method
9.4.3.1 Pass-by-value
9.4.3.2 Pass-by-reference
9.4.4 Memanggil method Static
9.4.5 Lingkup variabel
9.5 Casting, Converting dan Comparing Objects
9.5.1 Casting Tipe Primitive
9.5.2 Casting Objects
9.5.3 Converting Tipe Primitive ke object dan sebaliknya
9.5.4 Comparing Objects
9.5.5 Menentukan class dari sebuah object
Pengenalan Pemrograman 1
J.E.N.I
9.6 Latihan
9.6.1 Mendefinisikan Istilah
9.6.2 Java Scavenger Hunt
10 Membuat Class Sendiri
10.1 Tujuan
10.2 Mendefinisikan Class Anda
10.3 Deklarasi Atribut
10.3.1 Instance Variable
10.3.2 Class Variable atau Static Variable
10.4 Deklarasi Methods
10.4.1 Accessor Methods
10.4.2 Mutator Methods
10.4.3 Multiple Return statements
10.4.4 Static Methods
10.4.5 Contoh Kode Program Dari Class StudentRecord
10.5 Referensi this
10.6 Overloading Methods
10.7 Deklarasi Construktor
10.7.1 Default Constructor
10.7.2 Overloading Constructor
10.7.3 Menggunakan Constructors
10.7.4 Pemanggilan Constructor Dengan this()
10.8 Packages
10.8.1 Mengimport Packages
10.8.2 Membuat Package
10.8.3 Pengaturan CLASSPATH
10.9 Access Modifiers
10.9.1 Akses Default(package accessibility)
10.9.2 Akses Public
10.9.3 Akses Protected
10.9.4 Akses Private
10.10 Latihan
10.10.1 Entry Buku Alamat
10.10.2 Buku Alamat
11 Pewarisan, Polimorfisme dan Interface
11.1 Tujuan
11.2 Pewarisan
11.2.1 Mendefinisikan Superclasses dan Subclasses
11.2.2 Kata Kunci Super
11.2.3 Overriding Method
11.2.4 Method Final dan Class Final
11.3 Polimorfisme
11.4 Abstract Class
Pengenalan Pemrograman 1
J.E.N.I
11.5 Interface
11.5.1 Kenapa Kita Memakai Interface?
11.5.2 Interface vs. Class Abstract
11.5.3 Interface vs. Class
11.5.4 Membuat Interface
11.5.5 Hubungan dari Interface ke Class
11.5.6 Pewarisan Antar Interface
11.6 Latihan
11.6.1 Extend StudentRecord
11.6.2 Bentuk Abstract Class
12 Dasar Exception Handling
12.1 Tujuan
12.2 Apa itu Exceptions?
12.3 Menangani Exceptions
12.4 Latihan
12.4.1 Menangkap Exception 1
12.4.2 Menangkap Exception 2
Pengenalan Pemrograman 1
J.E.N.I.
BAB 1
Pengenalan Pemrograman Komputer
1.1 Tujuan
Bagian ini akan membahas dasar dasar komponen dari komputer meliputi hardware
(perangkat keras) dan software (perangkat lunak). Kami juga akan menyertakan
gambaran global tentang bahasa pemrograman dan sirkulasi pemrograman. Akan
dibahas pula pada akhir pembahasan ini mengenai sistem dan konversi numerik.
Pada akhir pembahasan, diharapkan pembaca dapat :
Mengidentifikasi perbedaan komponen pada komputer
Mengetahui tentang bahasa pemrograman komputer dan kategorinya
Mengetahui alur kerja pembuatan program dan mengaplikasikannya
pemecahan masalah
Mempelajari tentang berbagai sistem numerik dan metode konversinya.
pada
1.2 Pendahuluan
Kata komputer berasal dari bahasa Latin yaitu Computare yang artinya menghitung.
Dalam bahasa Inggris disebut to compute. Secara definisi komputer diterjemahkan
sebagai sekumpulan alat elektronik yang saling bekerja sama, dapat menerima data
(input), mengolah data (proses) dan memberikan informasi (output) serta terkoordinasi
dibawah kontrol program yang tersimpan di memorinya. Jadi cara kerja komputer dapat
kita gambarkan sebagai berikut :
Pengenalan Pemrograman 1
J.E.N.I.
Komputer memiliki dua komponen utama. Yang pertama adalah hardware (perangkat
keras) yang tersusun atas komponen elektronik dan mekanik.
Komponen utama yang lain yaitu software (perangkat lunak). Komponen ini terdiri atas
data dan aplikasi aplikasi komputer.
1.3.1.2 Memori
Memori adalah media penyimpan data pada komputer. Memori, berdasarkan fungsinya
dibagi menjadi dua yaitu :
a.
Primary Memory
Dipergunakan untuk menyimpan data dan instruksi dari program yang sedang
dijalankan. Seringkali disebut juga sebagai RAM. Karakteristik dari memori primer
adalah :
o
o
o
b.
Secondary Memory
Dipergunakan untuk menyimpan data atau program biner secara permanen.
Karakteristik dari memori sekunder adalah
o
o
o
Contoh memori sekunder : floppy, harddisk, CD ROM, magnetic tape, optical disk,
dll. Dari seluruh contoh tersebut, yang memiliki mekanisme akses sekuensial
adalah magnetic tape
Pengenalan Pemrograman 1
J.E.N.I.
Memori Utama
(RAM)
Memori Sekunder
(ROM)
Kategori
Cepat
Lambat
Kecepatan
Mahal
Murah
Harga
Kecil
Besar
Kapasitas
Ya
Tidak
Volatile
b.
Keyboard
Mouse
Touch screen
Scanner
Camera
Monitor
Printer
Speaker
Plotter
1.3.2 Software
Merupakan program-program komputer yang berguna untuk menjalankan suatu
pekerjaan sesuai dengan yang dikehendaki. Program tersebut ditulis dengan bahasa
khusus yang dimengerti oleh komputer. Program dapat dianalogikan sebagai instruksi
yang akan dijalankan oleh prosessor. Software terdiri dari beberapa jenis, yaitu :
1. Sistem Operasi, seperti DOS, Unix, Novell, OS/2, Windows.
Adalah software yang berfungsi untuk mengaktifkan seluruh perangkat yang
terpasang pada komputer sehingga masing-masing dapat saling berkomunikasi.
Tanpa ada sistem operasi maka komputer tidak dapat difungsikan sama sekali.
Pengenalan Pemrograman 1
J.E.N.I.
5. Compiler.
Komputer hanya memahami satu bahasa, yaitu bahasa mesin. Bahasa mesin adalah
terdiri dari nilai 0 dan 1. Sangatlah tidak praktis dan efisien bagi manusia untuk
membuat program yang terdiri dari nilai 0 dan 1, maka dicarilah suatu cara untuk
menterjemahkan sebuah bahasa yang dipahami oleh manusia menjadi bahasa mesin.
Dengan tujuan inilah, diciptakan compiler.
Pengenalan Pemrograman 1
J.E.N.I.
J.E.N.I.
memecahkan masalah
tersebut menjadi
Contoh masalah :
Menampilkan jumlah kemunculan sebuah nama pada daftar
J.E.N.I.
1.
2.
3.
4.
=
=
=
Daftar Nama
Nama yang dicari
0
Pengenalan Pemrograman 1
J.E.N.I.
Flowchart adalah representasi grafis dari langkah langkah yang harus diikuti dalam
menyelesaikan suatu permasalahan yang terdiri atas sekumpulan simbol, dimana
masing masing simbol merepresentasikan kegiatan tertentu. Flowchart diawali dengan
penerimaan input dan diakhiri dengan penampilan output.
Sebuah flowchart pada umumnya tidak menampilkan instruksi bahasa pemrograman,
namun menetapkan konsep solusi dalam bahasa manusia ataupun notasi matematis.
Berikut ini akan dibahas tentang simbolsimbol yang digunakan dalam menyusun
flowchart, kegiatan yang diwakili serta aturan yang diterapkan dalam penggunaan
simbol tersebut :
Simbol
Nama
Simbol Proses
Simbol Input
Output (IO)
Pengenalan Pemrograman 1
Pengertian
Simbol ini digunakan untuk melambangkan
kegiatan pemprosesan input. Dalam simbol ini, kita
dapat menuliskan operasi-operasi yang dikenakan
pada input, maupun operasi lainnya. Sama seperti
aturan pada simbol input, penulisan dapat
dilakukan secara satu per satu maupun secara
keseluruhan.
Simbol Anotasi
Simbol
Percabangan
J.E.N.I.
Simbol
Nama
Pengertian
harus dipilih adalah jalur yang berlabel Yes,
sedangkan
jika
pemeriksaan
menghasilkan
keadaan salah, maka jalur yang harus dipilih
adalah jalur yang berlabel No.
Simbol Konektor
Simbol Prosedur
Simbol
konektor
digunakan
pada
waktu
menghubungkan suatu langkah dengan langkah
lain dalam sebuah flowchart dengan keadaan on
page atau off page. Konektor on page digunakan
untuk menghubungkan suatu langkah dengan
langkah lain dari flowchart dalam satu halaman,
sedangkan konektor off page digunakan untuk
menghubungkan suatu langkah dengan langkah
lain dari flowchart dalam halaman yang berbeda.
Konektor ini biasanya dipakai saat media yang kita
gunakan untuk menggambar flowchart tidak cukup
luas untuk memuat gambar secara utuh, jadi perlu
dipisah-pisahkan.
Dalam
sepasang
konektor
biasanya diberi label tertentu yang sama agar lebih
mudah diketahui pasangannya.
J.E.N.I.
Pengenalan Pemrograman 1
10
J.E.N.I.
11111102
10112
1768
138
7E16
B16
Pengenalan Pemrograman 1
11
J.E.N.I.
Heksadesimal
10
11
12
13
14 15
Desimal
Biner
Oktal
Heksadesimal
12610
11111102
1768
7E16
1110
10112
138
B16
1.6.5 Konversi
1.6.5.1 Desimal ke Biner / Biner ke Desimal
Untuk mengubah angka desimal menjadi angka biner digunakan metode pembagian
dengan angka 2 sambil memperhatikan sisanya. Ambil hasil bagi dari proses pembagian
sebelumnya, dan bagi kembali bilangan tersebut dengan angka 2. Ulangi langkahlangkah tersebut hingga hasil bagi akhir bernilai 0 atau 1. Kemudian susun nilainilai
sisa dimulai dari nilai sisa terakhir sehingga diperoleh bentuk biner dari angka bilangan
tersebut.
Sebagai Contoh :
12610 = ?
Hasil Bagi
Nilai Sisa
126 / 2 =
63
63 / 2 =
31
15
15 / 2 =
7/2=
3/2=
31 / 2 =
1/2=
Pengenalan Pemrograman 1
Urutkan
12
J.E.N.I.
Dengan menuliskan nilai sisa mulai dari bawah ke atas, didapatkan angka biner
11111102.
Konversi bilangan biner ke desimal didapatkan dengan menjumlahkan perkalian semua
bit biner dengan perpangkatan 2 sesuai dengan posisi bit tersebut.
Sebagai Contoh :
110011012 = ?
10
Angka desimal 205 diperoleh dari penjumlahan angka yang diarsir. Setiap biner yang
bernilai 1 akan mengalami perhitungan, sedangkan yang bernilai 0 tidak akan dihitung
karena hanya akan menghasilkan nilai 0.
Hasil Bagi
Nilai Sisa
15
15 / 8 =
1/8=
126 / 8 =
Dengan menuliskan nilai sisa dari bawah ke atas, kita peroleh bilangan oktal 1768
Pengenalan Pemrograman 1
13
J.E.N.I.
12610 = ?
16
Hasil Bagi
Nilai Sisa
14 (E)
126 / 16 =
7 / 16 =
Dengan menuliskan nilai sisa dari bawah ke atas, kita peroleh bilangan Heksadesimal
7E16
Konversi bilangan Oktal dan Heksadesimal sama dengan konversi bilangan Biner ke
Desimal. Perbedaanya hanya terdapat pada penggunaan angka basis. Jika sistem Biner
menggunakan basis 2, maka pada bilangan Oktal, basis yang digunakan adalah 8 dan
pada bilangan Heksadesimal adalah angka 16.
Contoh konversi Oktal :
1768 = ?
10
Posisi
Digit Oktal
6
6 x 80 = 6
7 x 81 = 56
1 x 82 = 64
TOTAL: 126
Pengenalan Pemrograman 1
14
J.E.N.I.
7E16 = ?
10
Posisi
Digit Heksadesimal
E
14 x 160 = 14
7 x 161 = 112
TOTAL: 126
Representasi Biner
000
001
010
011
100
101
110
111
Pengenalan Pemrograman 1
15
J.E.N.I.
Sebagai contoh :
11111102 = ?
Mengubah sistem bilangan oktal menjadi bilangan biner dilakukan dengan cara kebalikan
dari konversi biner ke oktal. Dalam hal ini masingmasing digit bilangan oktal diubah
langsung menjadi bilangan biner dalam kelompok tiga bit, kemudian merangkai
kelompok bit tersebut sesuai urutan semula.
Sebagai contoh :
1768 = ?
Digit Heksadesimal
Representasi Biner
0000
0001
0010
0011
0100
Pengenalan Pemrograman 1
16
J.E.N.I.
Digit Heksadesimal
Representasi Biner
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Sebagai contoh :
11111102 = ?
16
Konversi bilangan Heksadesimal ke Biner dilakukan dengan membalik urutan dari proses
pengubahan Biner ke Heksadesimal. Satu digit Heksadesimal dikonversi menjadi 4 bit
Biner.
Sebagai contoh :
7E16 = ?
Pengenalan Pemrograman 1
17
J.E.N.I.
1.7 Latihan
1.7.1 Menyusun Algoritma
Dari permasalahanpermasalahan di bawah ini, susunlah sebuah algoritma untuk
menyelesaikannya. Anda dapat menyusunnya dengan menggunakan pseudocode
ataupun flowchart.
1. Memasak Roti
2. Menggunakan Komputer di Laboratorium
3. Menghitung ratarata dari 3 buah bilangan
Pengenalan Pemrograman 1
18
J.E.N.I.
BAB 2
Pengenalan Bahasa JAVA
2.1 Tujuan
Pada bab ini akan dibahas secara singkat tentang sejarah JAVA dan definisi teknologi
JAVA. Bab ini juga akan sedikit menyinggung tentang fasefase dalam program
JAVA.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Menjelaskan fiturfitur teknologi dari Java meliputi Java Virtual Machine
(JVM), garbage collection, dan code security.
2. Menjelaskan perbedaan fase pada pemrograman JAVA
J.E.N.I.
Produk pertama proyek Green adalah Star 7 (*7), sebuah kendali jarak jauh yang
sangat cerdas. Dikarenakan pasar masih belum tertarik dengan produk konsumer
cerdas maka proyek Green harus menemukan pasar lain dari teknologi yang
diciptakan. Pada saat yang sama, implementasi WWW dan Internet sedang
mengalami perkembangan pesat. Di lain pihak, anggota dari proyek Green juga
menyadari bahwa Java dapat digunakan pada pemrograman internet, sehingga
penerapan selanjutnya mengarah menjadi teknologi yang berperan di web.
Pengenalan Pemrograman 1
J.E.N.I.
Sebagai sebuah bahasa pemrograman, Java dapat membuat seluruh bentuk aplikasi,
desktop, web dan lainnya, sebagaimana dibuat dengan menggunakan bahasa
pemrograman konvensional yang lain.
Java adalah bahasa pemrograman yang berorientasi objek (OOP) dan dapat
dijalankan pada berbagai platform sistem operasi. Perkembangan Java tidak hanya
terfokus pada satu sistem operasi, tetapi dikembangkan untuk berbagai sistem
operasi dan bersifat open source.
2.2.2.2
2.2.2.3
Sebuah Aplikasi
Aplikasi dengan teknologi Java secara umum adalah aplikasi serba guna yang dapat
dijalankan pada seluruh mesin yang memiliki Java Runtime Environment (JRE).
2.2.2.4
Terdapat dua komponen utama dari Deployment Environment. Yang pertama adalah
JRE, yang terdapat pada paket J2SDK, mengandung kelaskelas untuk semua paket
teknologi Java yang meliputi kelas dasar dari Java, komponen GUI dan sebagainya.
Komponen yang lain terdapat pada Web Browser. Hampir seluruh Web Browser
komersial menyediakan interpreter dan runtime environment dari teknologi Java.
Pengenalan Pemrograman 1
J.E.N.I.
Sederhana
Bahasa pemrograman Java menggunakan sintaks mirip dengan C++ namun
sintaks pada Java telah banyak diperbaiki terutama menghilangkan
penggunaan pointer yang rumit dan multiple inheritance. Java juga
menggunakan automatic memory allocation dan memory garbage collection.
2.
3.
4.
Interpreter
Program Java dijalankan menggunakan interpreter yaitu Java Virtual Machine
(JVM). Hal ini menyebabkan source code Java yang telah dikompilasi menjadi
Java bytecodes dapat dijalankan pada platform yang berbeda-beda.
5.
Robust
Java mempuyai reliabilitas yang tinggi. Compiler pada Java mempunyai
kemampuan mendeteksi error secara lebih teliti dibandingkan bahasa
pemrograman lain. Java mempunyai runtime-Exception handling untuk
membantu mengatasi error pada pemrograman.
6.
Aman
Sebagai bahasa pemrograman untuk aplikasi internet dan terdistribusi, Java
memiliki beberapa mekanisme keamanan untuk menjaga aplikasi tidak
digunakan untuk merusak sistem komputer yang menjalankan aplikasi
tersebut.
7.
Architecture Neutral
Program Java merupakan platform independent. Program cukup mempunyai
satu buah versi yang dapat dijalankan pada platform yang berbeda dengan
Java Virtual Machine.
8.
Portabel
Source code maupun program Java dapat dengan mudah dibawa ke platform
yang berbeda-beda tanpa harus dikompilasi ulang.
9.
Performance
Performance pada Java sering dikatakan kurang tinggi. Namun performance
Java dapat ditingkatkan menggunakan kompilasi Java lain seperti buatan
Inprise, Microsoft ataupun Symantec yang menggunakan Just In Time
Compilers (JIT).
Pengenalan Pemrograman 1
J.E.N.I.
10.
Multithreaded
Java mempunyai kemampuan untuk membuat suatu program yang dapat
melakukan beberapa pekerjaan secara sekaligus dan simultan.
11.
Dinamis
Java didesain untuk dapat dijalankan pada lingkungan yang dinamis. Perubahan
pada suatu class dengan menambahkan properties ataupun method dapat
dilakukan tanpa menggangu program yang menggunakan class tersebut.
JVM adalah sebuah mesin imajiner (maya) yang bekerja dengan menyerupai aplikasi
pada sebuah mesin nyata. JVM menyediakan spesifikasi hardware dan platform
dimana kompilasi kode Java terjadi. Spesifikasi inilah yang membuat aplikasi
berbasis Java menjadi bebas dari platform manapun karena proses kompilasi
diselesaikan oleh JVM.
Aplikasi program Java diciptakan dengan file teks berekstensi .java. Program ini
dikompilasi menghasilkan satu berkas bytecode berekstensi .class atau lebih.
Bytecode adalah serangkaian instruksi serupa instruksi kode mesin. Perbedaannya
adalah kode mesin harus dijalankan pada sistem komputer dimana kompilasi
ditujukan, sementara bytecode berjalan pada java interpreter yang tersedia di
semua platform sistem komputer dan sistem operasi.
2.2.4.2
Garbage Collection
Pengenalan Pemrograman 1
J.E.N.I.
2.2.4.3
Code Security
Pengenalan Pemrograman 1
J.E.N.I.
Proses
Tool
Hasil
Text editor
Kompilasi program
Java Compiler
Menjalankan program
Java Interpreter
Program Output
Pengenalan Pemrograman 1
J.E.N.I.
BAB 3
Mengenali Lingkup Pemrograman Anda
3.1 Tujuan
Dalam bagian ini, kita akan membahas tentang bagaimana menulis, mengkompilasi dan
menjalankan program Java. Terdapat dua cara dalam melakukannya, yang pertama
menggunakan console dan text editor. Sedangkan cara kedua adalah dengan
menggunakan NetBeans yang merupakan Integrated Development Environment
atau yang disebut IDE.
Pada akhir pembahasan, diharapkan pembaca dapat :
Membuat program Java menggunakan text editor dan console dalam Linux (Ubuntu
Dapper)
3.2 Pendahuluan
IDE adalah sebuah peralatan dalam pemrograman yang diintegrasikan ke dalam aplikasi
software yang mendukung pembangunan GUI, teks atau penulisan kode, compiler dan
debugger.
Tutorial ini menggunakan Ubuntu Dapper sebagai sistem operasinya. Sebelum
menggunakan tutorial ini, pastikan bahwa telah menginstal Java dan NetBeans dalam
sistem yang Anda gunakan. Untuk instruksi bagaimana cara menginstal Java dan
NetBeans, dapat dilihat pada Appendix A. Untuk versi Windows XP dalam bagian ini,
dapat dilihat pada Appendix B.
Sebelum membahas lebih terperinci, pada awalnya akan kita lihat program Java pertama
yang akan Anda tulis.
J.E.N.I.
Sebelum menjelaskan apa arti dari program tersebut, cobalah untuk menulis program
ini di dalam file dan kemudian menjalankannya.
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Sekarang, dalam textbox Selection, ketiklah nama file dari program Anda, yaitu
''Hello.java'', kemudian klik pada tombol SAVE.
Pengenalan Pemrograman I
J.E.N.I.
Sekarang Anda telah menyimpan file Anda, ingatlah cara bagaimana nama frame dapat
berubah dari ''Untitled Document 1 (modified) gedit'' menjadi "Hello.java
(~/MYJAVAPROGRAMS) gedit". Jika Anda ingin melakukan perubahan pada file Anda,
Anda hanya perlu mengeditnya, kemudian menyimpannya kembali dengan mengklik
pada File->Save.
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Setelah berada di dalam folder yang berisi program Java Anda, sudah saatnya untuk
memulai meng-compile program Java tersebut. Sebagai catatan, bahwa file yang Anda
maksud harus ada didalam folder yang Anda pilih. Periksalah dengan menjalankan
perintah ''ls'' lagi untuk melihat bahwa file Anda ada didalam folder tersebut.
J.E.N.I.
Pengenalan Pemrograman I
10
J.E.N.I.
3.4.1 Errors
Apa yang telah ditunjukan sejauh ini adalah program Java dimana kita tidak menemukan
berbagai masalah dalam proses kompilasi maupun pada saat menjalankannya.
Bagaimanapun juga, hal ini tidak selalu terjadi. Seperti yang telah kita diskusikan pada
bagian pertama dari latihan ini, biasanya kita juga akan menemukan permasalahan
selama proses berlangsung.
Seperti yang telah didiskusikan sebelumnya, ada 2 macam error. Pertama adalah
compile-time error atau yang disebut juga sebagai syntax error. Kedua adalah runtime
errors.
Pengenalan Pemrograman I
11
J.E.N.I.
Jika Anda menemukan banyak pesan error, cobalah untuk mengoreksi kesalahan yang
pertama pada daftar error satu per satu, dan mencoba untuk mengkompilasinya
kembali. Dengan melakukan hal tersebut maka, dapat mengurangi total error yang ada.
Pengenalan Pemrograman I
12
J.E.N.I.
Pengenalan Pemrograman I
13
J.E.N.I.
Cara kedua untuk menjalankan NetBeans, adalah dengan mengklik shortcut icon yang
terdapat pada desktop Anda.
Pengenalan Pemrograman I
14
J.E.N.I.
Setelah Anda membuka NetBeans IDE, Anda akan melihat graphical user interface (GUI)
seperti yang ditunjukkan dibawah ini.
Pengenalan Pemrograman I
15
J.E.N.I.
Pengenalan Pemrograman I
16
J.E.N.I.
Pengenalan Pemrograman I
17
J.E.N.I.
Cobalah untuk mengubah lokasi aplikasi, dengan mengklik pada tombol BROWSE.
Kemudian dialog lokasi project akan muncul. Klik dua kali pada home folder Anda.
Kemudian isi dari folder root akan ditampilkan. Lalu klik dua kali pada folder
MYJAVAPROGRAMS dan klik tombol OPEN.
Pengenalan Pemrograman I
18
J.E.N.I.
Gambar 18: Window setelah Mengatur Lokasi Project ke MYJAVAPROGRAMS/Mengatur kelas utama project
menjadi Hello
Pengenalan Pemrograman I
19
J.E.N.I.
Pengenalan Pemrograman I
20
J.E.N.I.
Sekarang, cobalah memodifikasi kode yang dihasilkan oleh NetBeans. Untuk saat ini
abaikan bagian-bagian lain dari program, detail dari kode tersebut akan dijelaskan pada
bagian berikutnya. Masukkan kode :
System.out.println("Hello world!");
Setelah pernyataan, //TODO code application logic here.
Pengenalan Pemrograman I
21
J.E.N.I.
Pengenalan Pemrograman I
22
J.E.N.I.
Jika tidak terdapat error pada program Anda, Anda dapat melihat pesan sukses build
pada jendela yang dihasilkan.
Pengenalan Pemrograman I
23
J.E.N.I.
Pengenalan Pemrograman I
24
J.E.N.I.
Pengenalan Pemrograman I
25
J.E.N.I.
3.6 Latihan
3.6.1 Hello World!
Menggunakan NetBeans, membuat class dengan nama : [NamaAnda]. Hasil dari
program yang harus tampil di layar :
Welcome to Java Programming [NamaAnda]!!!
Pengenalan Pemrograman I
26
J.E.N.I.
BAB 4
Dasar-Dasar Pemrograman
4.1 Tujuan
Pada bagian ini, kita akan mendiskusikan mengenai bagian dasar pemrograman Java. Kita
akan memulai dengan mencoba menjelaskan bagian dasar dari program Hello.java yang
telah diperkenalkan pada bab sebelumnya. Kita juga akan mendiskusikan beberapa
pedoman cara menulis script atau petunjuk penulisan kode dalam penulisan program yang
lebih efektif dan mudah dibaca.
Pada akhir pembahasan, diharapkan pembaca dapat :
Membedakan mana yang termasuk ke dalam Java literals, tipe data dasar, tipe variabel,
pengidentifikasian dan operator
J.E.N.I.
merupakan kumpulan class-class). Kita akan membahas lebih dalam mengenai package dan
access specifier pada pembahasan selanjutnya.
Baris berikutnya yaitu yang terdiri atas kurung kurawal { menandakan awal blok. Pada kode
ini, kita menempatkan kurung kurawal pada baris selanjutnya setelah deklarasi class,
bagaimanapun, kita dapat juga meletakkan kurung kurawal ini setelah baris pertama dari
kode yang kita tulis. Jadi, kita dapat menulis kode kita sebagai berikut :
public class Hello
{
atau
public class Hello {
Tiga baris selanjutnya menandakan adanya komentar Java. Komentar adalah sesuatu yang
digunakan untuk mendokumentasikan setiap bagian dari kode yang ditulis. Komentar bukan
merupakan bagian dari program itu sendiri, tetapi digunakan untuk tujuan dokumentasi.
Komentar itu sendiri dapat ditambahkan pada kode yang Anda tulis sebagai petunjuk yang
dapat membantu proses pembelajaran pemrograman yang baik.
/**
* My first java program
*/
Komentar dinyatakan dengan tanda /* dan */. Segala sesuatu yang ada diantara tanda
tersebut diabaikan oleh compiler Java, dan mereka hanya dianggap sebagai komentar.
Baris selanjutnya,
public static void main(String[] args) {
atau dapat juga ditulis sebagai berikut,
public static void main(String[] args)
{
mengindikasikan nama suatu method dalam class Hello yang bertindak sebagai method
utama. Method utama adalah titik awal dari suatu program Java. Semua program kecuali
applet yang ditulis dalam bahasa Java dimulai dengan method utama. Yakinkan untuk
mengikuti kaidah penulisan tanda yang benar.
Baris selanjutnya juga merupakan komentar,
//Menampilkan string "Hello world" pada layar
Sekarang kita mempelajari 2 cara untuk membuat komentar. Cara pertama adalah dengan
menempatkan komentar dalam /* dan */, dan cara yang lain adalah dengan menuliskan
tanda // pada awal komentar
Baris selanjutnya,
Pengenalan Pemrograman I
J.E.N.I.
System.out.println("Hello world!");
menampilkan teks Hello World! pada layar. Perintah System.out.println(), menampilkan
teks yang diapit oleh tanda double pute ( ) pada layar.
Dua baris terakhir yang terdiri atas dua kurung kurawal digunakan untuk menutup method
utama dan masing-masing class secara berurutan.
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Kita akan berdiskusi tentang semua arti dari masing-masing kata kunci dan bagaimana
mereka digunakan dalam proses penulisan program Java.
Catatan: true, false, dan null bukan termasuk kata kunci akan tetapi mereka termasuk
kata-kata khusus, jadi Anda tidak dapat menggunakan mereka sebagai nama variabel pada
program Anda.
Pengenalan Pemrograman I
J.E.N.I.
Untuk angka desimal, kita tidak memerlukan notasi khusus. Kita hanya menulis angka
desimal seperti apa adanya. untuk angka heksadesimal, hal itu harus ditandai oleh 0x
atau 0X. untuk oktal, ditandai oleh0.
Sebagai contoh, mewakili angka 12. Penulisan dalam bentuk desimalnya adalah 12,
Sementara dalam heksadesimal, menjadi 0xC, dan dalam oktal, nilai tersebut sama dengan
014.
Default tipe data untuk integer literals adalah int. Int adalah signed 32-bit value. Pada
kasus-kasus tertentu Anda dapat berharap untuk memaksa integer literal untuk menjadi
tipe data long dengan menambahkan karakter l or L. tipe data long ditandai oleh
ditampilkannya data dalam 64-bit. Kita akan membahas mengenai tipe data pada
kesempatan selanjutnya.
J.E.N.I.
//Huruf a
//A tab
Untuk menampilkan karakter khusus seperti ' (single quotes) atau " (double quotes),
menggunakan karakter escape \. Sebagai contoh,
'\''
'\"'
Meskipun String bukan merupakan tipe data primitif (namun merupakan suatu Class),kita
akan memperkenalkan mengenai pada bagian ini. String mewakili tipe data yang terdiri atas
beberapa karakter. Mereka tidak termasuk tipe data primitif, melainkan suatu class.
Mereka memiliki literal yang terdapat diantara tanda double quotes().
Sebagai contoh,
String message=Hello world!
Pengenalan Pemrograman I
J.E.N.I.
Integer Length
Name or Type
Range
8 bits
byte
-27
16 bits
short
-215
32 bits
int
-231 to 231-1
64 bits
long
-263
to 27-1
to 215-1
to 263-1
Pengenalan Pemrograman I
10
J.E.N.I.
Pada contoh yang ditunjukkan diatas, 23 setelah E pada contoh kedua bernilai positif.
Contoh tersebut sama dengan 6.02E+23. Tipe data Floating-point memiliki range sebagai
berikut:
Panjang Float
Range
32 bits
float
-231 to 231-1
64 bits
double
-263
to 263-1
Pengenalan Pemrograman I
11
J.E.N.I.
4.9. Variabel
Variabel adalah item yang digunakan data untuk menyimpan pernyataan objek.
Variabel memiliki tipe data dan nama. Tipe data menandakan tipe nilai yang dapat
dibentuk oleh variabel itu sendiri. Nama variabel harus mengikuti aturan untuk identifier.
Pengenalan Pemrograman I
12
J.E.N.I.
double grade = 0;
Bentuk yang lebih disukai ketika melakukan deklarasi adalah,
double exam=0, quiz=10, grade=0;
}
Program tersebut akan mengeluarkan teks berikut pada layar,
10
The value of x=A
13
J.E.N.I.
Pengenalan Pemrograman I
14
J.E.N.I.
Memory
Address
Variable
Name
Data
1001
num
10
:
1563
:
:
2000
:
name
Address(2000)
:
:
"Hello"
Seperti yang dapat Anda lihat, untuk variable primitif num, datanya berada dalam lokasi
dimana variabel berada. Untuk reference variable name, variabel hanya menunjuk alamat
dimana data tersebut benar-benar ada.
Pengenalan Pemrograman I
15
J.E.N.I.
4.10 Operator
Dalam Java, ada beberapa tipe operator. Ada operator aritmatika, operator relasi, operator
logika, dan operator kondisi. Operator ini mengikuti bermacam-macam prioritas yang pasti
sehingga compilernya akan tahu yang mana operator untuk dijalankan lebih dulu dalam
kasus beberapa operator yang dipakai bersama-sama dalam satu pernyataan.
Operator
Penggunaan
Keterangan
op1 + op2
op1 * op2
op1 / op2
op1 % op2
Menghitung
dengan op2
op1 - op2
sisa
dari
pembagian
op1
Pengenalan Pemrograman I
16
J.E.N.I.
* j));
* y));
/ j));
/ y));
17
J.E.N.I.
x = 27.475
y = 7.22
i + j = 79
Adding...
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 tipes...
j + y = 49.22
i * x = 1016.58
Catatan: Ketika integer dan floating-point number digunakan sebagai operand untuk
operasi aritmatika tunggal, hasilnya berupa floating point. Integer adalah converter secara
implisit ke bentuk angka floating-point sebelum operasi berperan mengambil tempat.
Pengenalan Pemrograman I
18
J.E.N.I.
Operator
Penggunaan
Keterangan
++
op++
Menambahkan
nilai
1
pada
op;
mengevaluasi
nilai
op
sebelum
diincrementasi/ditambahkan
++
++op
Menambahkan
nilai
1
pada
op;
mengevaluasi
nilai
op
setelah
diincrementasi/ditambahkan
--
op--
Mengurangkan
nilai
1
pada
op;
mengevaluasi
nilai
op
sebelum
didecrementasi/dikurangkan
--
--op
Mengurangkan
nilai
1
pada
op;
mengevaluasi
nilai
op
setelah
didecrementasi/dikurangkan
Operator increment dan decrement dapat ditempatkan sebelum atau sesudah operand.
Ketika digunakan sebelum operand, akan menyebabkan variabel diincrement atau
didecrement dengan nilai 1, dan kemudian nilai baru digunakan dalam pernyataan dimana
dia ditambahkan. Sebagai contoh,
int i = 10,
int j = 3;
int k = 0;
k = ++j + i; //akan menghasilkan k = 4+10 = 14
Ketika operator increment dan decrement ditempatkan setelah operand, nilai variabel yang
lama akan digunakan lebih dulu dioperasikan lebih dulu terhadap pernyataan dimana dia
ditambahkan. Sebagai contoh,
Pengenalan Pemrograman I
19
J.E.N.I.
int i = 10,
int j = 3;
int k = 0;
k = j++ + i; //akan menghasilkan k = 3+10 = 13
Petunjuk Penulisan Program:
Selalu membuat pernyataan yang mengandung operator increment dan decrement untuk
tetap dipahami secara mudah dan sederhana.
Operator
Penggunaan
Keterangan
>
>=
<
<=
==
op1 == op2
!=
op1 != op2
Pengenalan Pemrograman I
20
J.E.N.I.
besar
> j =
> i =
> j =
besar dari
>= j = " +
>= i = " +
>= j = " +
kecil
< j =
< i =
< j =
dari...");
" + (i > j)); //false
" + (j > i)); //true
" + (k > j)); //false
dari...");
" + (i < j)); //true
" + (j < i)); //false
" + (k < j)); //false
kecil dari
<= j = " +
<= i = " +
<= j = " +
//sama dengan
System.out.println("Sama dengan...");
System.out.println("
i == j = " + (i == j)); //false
System.out.println("
k == j = " + (k == j)); //true
//tidak sama dengan
System.out.println("Tidak sama dengan...");
System.out.println("
i != j = " + (i != j)); //true
System.out.println("
k != j = " + (k != j)); //false
}
}
Berikut adalah hasil keluaran dari program ini :
Pengenalan Pemrograman I
21
J.E.N.I.
Nilai variabel...
i = 37
j = 42
k = 42
Lebih besar dari...
i > j = false
j > i = true
k > j = false
Lebih besar dari atau sama dengan...
i >= j = false
j >= i = true
k >= j = true
Lebih kecil dari...
i < j = true
j < i = false
k < j = false
Lebih kecil dari atau sama dengan...
i <= j = true
j <= i = false
k <= j = true
Sama dengan...
i == j = false
k == j = true
Tidak sama dengan...
i != j = true
k != j = false
Pengenalan Pemrograman I
22
J.E.N.I.
x1 op x2
Dimana x1, x2 dapat menjadi pernyataan boolean. Variabel atau konstanta, dan op adalah
salah satu dari operator &&, &, ||, | atau ^. Tabel kebenaran yang akan ditunjukkan
selanjutnya, merupakan kesimpulan dari hasil dari setiap operasi untuk semua kombinasi
yang mungkin dari x1 dan x2.
Pengenalan Pemrograman I
23
J.E.N.I.
x2
Hasil
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
TRUE
FALSE
FALSE
FALSE
FALSE
Perbedaan dasar antara operator && dan & adalah bahwa && mensupports short-circuit
evaluations (atau evaluasi perbagian), sementara operator & tidak. Apa arti dari
pernyataan tersebut?
Diberikan suatu pernyataan,
exp1 && exp2
&& akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai false dan
menyatakan bahwa exp1 bernilai false. Jika exp1 bernilai false, operator tidak akan pernah
mengevaluasi exp2 karena hasil operasi operator akan menjadi false tanpa memperhatikan
nilai dari exp2. Sebaliknya, operator & selalu mengevaluasi kedua nilai dari exp1 dan exp2
sebelum mengembalikan suatu nilai jawaban.
Berikut ini adalah suatu contoh source code yang menggunakan logika dan boolean AND,
public class TestAND
{
public static void main( String[] args ){
int
i
= 0;
int
j
= 10;
boolean test= false;
//demonstrasi &&
test = (i > 10) && (j++ > 9);
System.out.println(i);
System.out.println(j);
System.out.println(test);
//demonstrasi &
test = (i > 10) & (j++ > 9);
System.out.println(i);
System.out.println(j);
System.out.println(test);
}
}
Pengenalan Pemrograman I
24
J.E.N.I.
Pengenalan Pemrograman I
25
J.E.N.I.
x2
Hasil
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
Pengenalan Pemrograman I
26
J.E.N.I.
Pengenalan Pemrograman I
27
J.E.N.I.
x2
Hasil
TRUE
TRUE
FALSE
TRUE
FALSE
TRUE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
Hasil operasi operator exclusive OR adalah TRUE, jika dan hanya jika satu operand bernilai
TRUE dan yang lain bernilai False. Catatan jika kedua operand harus selalu dievaluasi untuk
menjumlahkan hasil dari suatu exclusive OR.
Berikut ini adalah contoh source code yang menggunakan operator logika exclusive OR,
public class TestXOR
{
public static void main( String[] args ){
boolean val1 = true;
boolean val2 = true;
System.out.println(val1 ^ val2);
val1 = false;
val2 = true;
System.out.println(val1 ^ val2);
val1 = false;
val2 = false;
System.out.println(val1 ^ val2);
val1 = true;
val2 = false;
System.out.println(val1 ^ val2);
}
}
Hasil keluaran program tersebut adalah,
false
true
false
true
Pengenalan Pemrograman I
28
J.E.N.I.
Hasil
TRUE
FALSE
FALSE
TRUE
Tabel 9: Tabel Kebenaran untuk !
Berikut ini adalah contoh source code yang menggunakan operator logika NOT,
public class TestNOT
{
public static void main( String[] args ){
boolean val1 = true;
boolean val2 = false;
System.out.println(!val1);
System.out.println(!val2);
}
}
Hasil keluaran program adalah sebagai berikut,
false
true
Pengenalan Pemrograman I
29
J.E.N.I.
Pengenalan Pemrograman I
30
J.E.N.I.
Gambar 2: Flowchart
score = 0;
answer = 'a';
Pengenalan Pemrograman I
31
J.E.N.I.
6%2*5+4/2+88-10
Kita dapat menuliskan kembali pernyataan diatas dan menambahkan beberapa tanda
kurung terhadap operator precedence,
((6%2)*5)+(4/2)+88-10;
Pengenalan Pemrograman I
32
J.E.N.I.
4.11 Latihan
4.11.1 Mendeklarasikan dan mencetak variabel
Diberikan tabel dibawah ini, deklarasikan variabel yang terdapat didalamnya dengan tipe
data yang sesuai dan berikan nilai inisialisasi. Tampilkan hasil outputnya yaitu nama
variabel dan nilainya.
Nama Variabel
Tipe Data
Nilai Awal
number
integer
10
letter
character
result
boolean
true
str
String
hello
Berikut ini merupakan tampilan yang diharapkan sebagai hasil eksekusi program,
Number = 10
letter = a
result = true
str = hello
Pengenalan Pemrograman I
33
J.E.N.I.
Pengenalan Pemrograman I
34
J.E.N.I.
BAB 5
Mendapatkan Input dari Keyboard
5.1 Tujuan
Kita telah mempelajari konsep dasar pada Java dan menulis beberapa program
sederhana. Sekarang kita akan mencoba membuat program kita lebih interaktif dengan
menggunakan input dari keyboard. Pada bab ini, kita akan mempelajari dua cara
memberikan input, yang pertama adalah menggunakan class BufferedReader dan
melalui GUI (Graphical User Interface) dengan menggunakan class JOptionPane.
Pada akhir pembahasan, diharapkan pembaca dapat :
Membuat program Java yang interaktif yang bisa mendapatkan input dari keyboard
Menggunakan class BufferedReader untuk mendapatkan input dari keyboard
melalui layar console
Menggunakan class JOptionPane untuk mendapatkan input dari keyboard
menggunakan GUI
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Pengenalan Pemrograman I
J.E.N.I.
Statement pertama,
import javax.swing.JOptionPane;
Menjelaskan bahwa kita mengimpor class JoptionPane dari package javax.swing.
Bisa juga ditulis seperti,
import javax.swing.*;
Pernyataan,
name = JOptionPane.showInputDialog("Please enter your name");
membuat sebuah input dialog JOptionPane, yang akan menampilkan dialog dengan
sebuah pesan, sebuah textfield dan tombol OK seperti pada gambar. Hasil dari dialog
tersebut adalah String dan disimpan ke dalam variabel name.
Sekarang kita membuat pesan selamat datang, yang akan disimpan ke dalam variabe
msg,
String msg = "Hello " + name + "!";
Baris selanjutnya adalah menampilkan sebuah dialog yang berisi sebuah pesan dan
tombol OK,
JOptionPane.showMessageDialog(null, msg);
Pengenalan Pemrograman I
J.E.N.I.
5.1 Latihan
5.1.1 Kata Terakhir (versi BufferedReader)
Menggunakan BufferedReader, tanyakan tiga kata dari user dan tampilkan output dari
input user tersebut ke layar. Contoh,
Enter word1:Goodbye
Enter word2:and
Enter word3:Hello
Goodbye and Hello
Pengenalan Pemrograman I
J.E.N.I.
BAB 6
Struktur Kontrol
6.1 Tujuan
Pada bab sebelumnya, kita sudah mendapatkan contoh dari program terstruktur,
dimana setiap pernyataan dieksekusi setelah pernyataan sebelumnya sesuai dengan
urutannya. Pada bagian ini, kita akan mempelajari tentang struktur kontrol dimana
kita dapat mengubah cara eksekusi pada pernyataan yang dibuat di program kita.
Pada akhir pembahasan, diharapkan pembaca dapat :
6.2.1 Statement if
Pernyataan if akan menentukan sebuah pernyataan (atau blok kode) yang akan eksekusi
jika dan hanya jika persyaratan bernilai benar(true).
Bentuk dari pernyataan if,
if( boolean_expression )
statement;
atau
if( boolean_expression ){
statement1;
statement2;
. . .
}
dimana, boolean_expression adalah sebuah penyataan logika (true/false) atau variabel
bertipe boolean.
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
//
//block 1
//
//
//block 2
//
//
//block n
//
}
switch_expression adalah ekspresi integer atau karakter dan case_selector1,
case_selector2 dan seterusnya
adalah
konstanta
uni k dari nilai
integer atau
karakter.
Ketika pernyataan switch ditemukan pada potongan kode program, java pertama kali akan
memeriksa switch_expression, dan menuju ke case yang akan menyamakan nilai yang
dimiliki oleh switch_expression. Selanjutnya program akan mengeksekusi pernyataan
pada dari kode setelah case yang ditemukan sampai menemui pernyataan break,
selanjutnya akan mengabaikan pernyataan yang lainnya hingga akhir dari struktur dari
pernyataan switch.
Jika tidak ditemui case yang cocok, maka program akan mengeksekusi blok default.
Sebagai catatan, bahwa bagian blok default adalah opsional. Sebuah pernyataan switch
bisa jadi tidak memiliki blok kode default.
CATATAN:
Tidak seperti pada pernyataan if, beberapa pernyataan pada struktur pernyataan switch
akan dieksekusi tanpa memerlukan tanda kurung kurawal ({}).
Ketika sebuah case pada pernyataan switch menemui kecocokan, semua pernyataan
pada case tersebut akan dieksekusi. Tidak hanya demikian, pernyataan lain
yang berada pada case yang sesuai juga akan dieksekusi.
Untuk menghindari program mengeksekusi pernyataan pada case berikutnya,
kita menggunakan pernyataan break sebagai pernyataan akhir pada setiap blok case.
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
10
J.E.N.I.
dieksekusi
berulang-ulang
selama
kondisi
Pengenalan Pemrograman 1
11
J.E.N.I.
Contoh 3:
//no loops
// statement is not even executed
while (false)
System.out.println(hello);
Pengenalan Pemrograman 1
12
J.E.N.I.
do-while
loop
Perbedaan antara while dan do-while loop adalah dimana pernyataan di dalam do-while
loop akan dieksekusi sedikitnya satu kali.
Bentuk pernyataan do-while,
do{
statement1;
statement2;
. . .
}while( boolean_expression );
Pernyataan di dalam do-while loop akan dieksekusi pertama kali, dan akan dievaluasi
kondisi dari boolean_expression. Jika nilai pada boolean_expression tersebut bernilai
true, pernyataan di dalam do-while loop akan dieksekusi lagi.
Berikut ini beberapa contoh do-while loop:
Contoh 1:
int x = 0;
do
{
System.out.println(x);
x++;
}while (x<10);
Contoh di atas akan melakukan pengulangan terus menerus yang menulis kat a hello
pada layar.
Contoh 3:
//one loop
// statement is executed once
do
System.out.println(hello);
while (false);
Contoh di atas akan memberikan output hello pada layar.
Pengenalan Pemrograman 1
13
J.E.N.I.
Panduan pemrograman:
1. Kesalahan pemrograman yang biasa terjadi ketika menggunakan do-while loop adalah
lupa untuk menulis titik koma (;) setelah ekspresi while.
do{
...
}while(boolean_expression)//- salah>tidak ada titik koma(;)
2. Seperti pada while loop, pastikan do-while loop anda berhenti pada suatu kondisi.
Pengenalan Pemrograman 1
14
J.E.N.I.
searchName = "Yza";
foundName = false;
Pengenalan Pemrograman 1
15
J.E.N.I.
6.4.1.2
P e rn y a ta a n break berlabel
Bentuk label dari pernyataan break akan menghentikan pernyataan d i luarnya, dimana
sebelumnya harus diberikan label yang sudah di spesifikasikan pada program pada
pernyataan break. Program berikut ini akan mencari nilai dalam array dua dimensi.
Terdapat dua pengulangan bersarang (nested loop). Ketika sebuah nilai ditemukan,
brea akan menghentikan pernyataan yang diberi label searchLabel yang terletak di luar
pernyataan for loop.
int[][] numbers = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
int searchNum = 5;
boolean foundNum = false;
searchLabel:
for( int i=0; i<numbers.length; i++ ){
for( int j=0; j<numbers[i].length; j++ ){
if( searchNum == numbers[i][j] ){
foundNum = true;
break searchLabel;
}
}
}
if( foundNum ){
System.out.println( searchNum + " found!" );
}
else{
System.out.println( searchNum + " not found!" );
}
Pernyataan break menghentikan pern yataan yang diberi label; dan tidak menjalankan
aliran kon trol apapun pada label. Aliran kontrol pada label akan diberikan secara
otomatis pada pernyataan yang terletak dibawah label.
Pengenalan Pemrograman 1
16
J.E.N.I.
Pengenalan Pemrograman 1
17
J.E.N.I.
Pengenalan Pemrograman 1
18
J.E.N.I.
6.5 Latihan
6.5.1 Nilai
Ambil tiga nilai ujian dari user dan hitung nilai rata-rata dari nilai tersebut.
Berikan output rata-rata dari tiga ujian. Berikan juga smiley face pada output jika nilai
rata-rata lebih besar atau sama dengan 60, selain itu beri output :-(.
1. Gunakan BufferedReader untuk mendapat input dari user, dan System.out untuk
output hasilnya.
2. Gunakan JOptionPane untuk mendapat input dari user dan output hasilnya.
6.5.4 Perpangkatan
Hitung pangkat sebuah nilai berdasarkan angka dan nilai pangkatnya. Buat tiga versi
dari program ini menggunakan while loop, do-while dan for-loop.
Pengenalan Pemrograman 1
19
J.E.N.I.
BAB 7
Java Array
7.1 Tujuan
Dalam bab ini, kita akan mendiskusikan mengenai array dalam Java. Pertama, kita
akan mendefinisikan apa yang dimaksud dengan array, kemudian kita juga
akan mendiskusikan bagaimana mendeklarasikannya dan menggunakannya dalam Java.
Pada akhir pembahasan, diharapkan pembaca dapat :
-
Pengenalan Pemrograman 1
J.E.N.I.
Sebuah array akan menyimpan beberapa item data yang memiliki tipe data
sama didalam sebuah blok memori yang berdekatan yang kemudian dibagai menjadi
beberapa ruang. A rray adalah sebuah variabel/sebuah lokasi tertentu yang memiliki
satu nama sebagai identifier, namun identifier ini dapat menyimpan lebih dari sebuah
nilai.
Pengenalan Pemrograman 1
J.E.N.I.
Setelah pendeklarasian array , kita harus membuat array dan menentukan berapa
panjangnya dengan sebuah konstruktor. Proses ini di Java disebut sebagai
instantiation (istilah dalam Java yang berarti membuat). Untuk meng-instantiate
sebuah obyek, kita membutuhkan sebuah konstruktor. Kita akan membicarakan
lagi mengenai instantiate obyek dan pembuatan konstruktor pada bagian selanjutnya.
Sebagai catatan bahwa ukuran dari array tidak dapat diubah setelah anda
menginisialisasinya. Sebagai contoh,
//deklarasi
int ages[];
//instantiate obyek
ages = new int[100];
atau bisa juga ditulis dengan,
//deklarasi dan instantiate
obyek
int ages[] = new
int[100];
Pada
contoh diatas,
pendeklarasian
tersebut akan memberitahukan kepada
compiler Java, bahwa identifier ages akan
digunakan sebagai
nama
array
yang
berisi data bertipe integer, dan dilanjutkan
dengan membuat atau meng-instantiate
sebuah array baru yang terdiri dari 100
elemen.
Selain menggunakan sebuah pernyataan
new untuk meng-instantiate array, Anda
juga dapat mendeklarasikan, membangun,
kemudian memberikan sebuah nilai pada
array sekaligus dalam sebuah pernyataan.
Sebagai contoh,
//membuat sebuah array yang berisi variabel-variabel
//boolean pada sebuah identifier. Array ini terdiri dari 4
//elemen yang diinisilisasikan sebagai value
//{true,false,true,false}
boolean results[] ={ true, false, true, false };
//Membuat sebuah array yang terdiri dari penginisialisasian
//4variabel double bagi value {100,90,80,75}
double []grades = {100, 90, 80, 75};
//Membuat sebuah array String dengan identifier days. Array
//ini terdiri dari 7 elemen.
String days[] = { Mon, Tue, Wed, Thu, Fri, Sat,
Sun};
Pengenalan Pemrograman 1
J.E.N.I.
Pada saat memasukkan nilai ke dalam array, sebuah nomor indeks atau subscript
telah diberikan kepada tiap anggota array, sehingga program dan programmer
dapat mengakses setiap nilai pada array apabila dibutuhkan. Nilai indeks selalu
dalam tipe integer, dimulai dari angka nol dan dilanjutkan ke angka berikutnya
sampai akhir array. Sebagai catatan bahwa indeks didalam array dimulai dari 0
sampai dengan (ukuranArray-1).
Sebagai contoh, pada array yang kita deklarasikan tadi, kita mempunyai,
//memberikan nilai 10 kepada elemen pertama array
ages[0] = 10;
//mencetak elemen array yang terakhir
System.out.print(ages[99]);
Perlu diperhatikan bahwa sekali array dideklarasikan dan dikonstruksi, nilai
yang disimpan dalam setiap anggota array akan diinisialisasi sebagai nol. Oleh
karena itu, apabila Anda menggunakan tipe data seperti String, arr ay tidak akan
diinisalisasi menjadi string kosong . Untuk itu Anda tetap harus membuat String array
secara eksplisit.
Berikut ini adalah contoh kode untuk mencetak seluruh elemen didalam array. Dalam
contoh ini digunakanlah pernyataan for loop, sehingga kode kita menjadi lebih pendek.
public class ArraySample{
public static void main( String[] args ){
int[] ages = new int[100];
for( int i=0; i<100; i++ ){
System.out.print( ages[i] );
}
}
}
Petunjuk penulisan program:
1. Biasanya, lebih baik menginisialisasi atau meng-instantiate array
Anda mendeklarasikannya. Sebagai contoh pendeklarasiannya
setelah
Pengenalan Pemrograman 1
J.E.N.I.
//pendeklarasian constant
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
7.7 Latihan
7.7.1 Hari dalam seminggu
Buatlah sebuah String array yang akan menginisialisasi 7 hari dalam seminggu. Sebagai
contoh,
String days[] = {Monday, Tuesday.};
Gunakan while-loop, kemudian print semua nilai dari array (Gunakan juga untuk dowhile dan for-loop)Using a while-loop.
Pengenalan Pemrograman 1
J.E.N.I.
BAB 8
Argumen dari Command-line
8.1 Tujuan
Pada bab ini, kita akan mempelajari bagaimana untuk memproses sebuah input dari
command-line dengan menggunakan argumen yang diberikan kepada program Java.
Pada akhir pembahasan, diharapkan pembaca dapat :
Pengenalan Pemrograman 1
J.E.N.I.
Perlu diperhatikan bahwa sebuah argumen dapat dipisahkan oleh ruang spasi. Pada
bahasa pemrogr aman Java, jika kita akan memanggil sebuah aplikasi, sistem runtime
akan memberikan argumen command-line ke method main yang dimiliki oleh aplikasi
menggunakan sebuah array dari String. Lalu, setiap String di dalam array mewakili
sebuah argumen commmand-line. Perhatikan deklarasi dari main method,
public static void main( String[] args )
Argumen yang diberikan kepada program Anda akan disimpan kedalam sebuah array
String dengan identifier args.
Pada contoh sebelumnya, argumen dari command-line yang akan diberikan
kepada aplikasi sort command adalah sebuah array dengan lima buah String yaitu
5,4,3,2, dan 1. Anda dapat mengetahaui berapa banyak argumen dari
command-line dengan cara melihat panjang dari attribute array.
Sebagai contoh,
int numberOfArgs = args.length;
Jika program Anda membutuhkan argumen command-line yang bertipe angka. Anda
harus mengkonversi argumen String tersebut untuk merepresantasikan sebuah angka,
misalnya 34 menjadi sebuah angka 34. Kode dibawah ini adalah sebuah potongan
program untuk mengkonversi sebuah argumen command-line menjadi tipe integer.
int firstArg = 0;
if (args.length > 0){
Pengenalan Pemrograman 1
J.E.N.I.
firstArg = Integer.parseInt(args[0]);
}
parseInt akan melempar eksepsi NumberFormatException (ERROR) jika format args[0]
tidak valid (bukan sebuah angka).
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
Klik kanan icon CommanLineExample dan akan keluar sebuah pop-up menu. Lalu klik pada
properties.
Pengenalan Pemrograman 1
J.E.N.I.
Pada kolom bernama Arguments, tuliskan argumen yang Anda ingin masukkan
kedalam program. Dalam kasus ini kita akan mengetikkan 5 4 3 2 1. Kemudian, klik pada
tombol OK.
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
Seperti yang dapat Anda lihat, keluaran dari program Anda adalah jumlah dari argumen
yaitu 5, dimana argumen pertama juga memiliki nilai 5.
Pengenalan Pemrograman 1
J.E.N.I.
8.4 Latihan
8.4.1 Mencetak Argumen
Dapatkan input dari user dengan menggunakan argumen command line dan cetak
semua argumen ke layar. Sebagai contoh, jika user memasukkan
java
Hello
world
that
is
all
ArithmeticOperation
20
Pengenalan Pemrograman 1
J.E.N.I.
BAB 9
Bekerja dengan Java Class Library
9.1 Tujuan
Pada bab ini, kita akan mengantarkan beberapa konsep dasar dari Pemrograman
berorientasi obyek (Object Oriented Porgramming). Selanjutnya, kita akan membahas
konsep dari class dan obyek, serta penggunaan class dan anggota-anggotanya termasuk
perbandingan, konversi dan pengubahan obyek. Untuk saat ini, kita memfokuskan dalam
penggunaan class yang telah dijabarkan dalam Java Class library, lalu akan kita lanjutkan
tentang pembuatan class anda sendiri.
Pada akhir pembahasan, diharapkan pembaca dapat :
1.
2.
3.
4.
Atribut
Tingkah Laku
Mobil
Berbelok
Mengerem
Mempercepat
Singa
Berat
Warna
Lapar atau tidak lapar
Jinak atau liar
roaring
Tidur
Berburu
J.E.N.I.
Dengan deskripsi ini, obyek pada dunia nyata dapat secara mudah asumsikan sebagai obyek
perangkat lunak menggunakan atribut sebagai data dan tingkah laku sebagai method. Data
dan method dapat digunakan dalam pemrograman game atau perangkat lunak interaktif
untuk membuat simulasi obyek pada dunia nyata. Contohnya adalah perangkat lunak obyek
mobil dalam permainan balap mobil atau perangkat lunak obyek singa dalam sebuah
perangkat lunak pendidikan interaktif pada kebun binatang untuk anak anak.
Obyek mobil A
Obyek Mobil B
ABC 111
XYZ 123
Biru
Merah
Manufaktur
Mitsubishi
Toyota
Kecepatan
50 km/h
100 km/h
Variabel Warna
Intsance
Method
Instance
Method Akselerasi
Method Belok
Method Rem
Table 2: Contoh class car dan object-object nya
Pengenalan Pemrograman 1
J.E.N.I.
Ketika diinisialisi, setiap obyek mendapat satu set variabel yang baru. Bagaimanapun,
implementasi dari method dibagi diantara objek pada class yang sama.
Class menyediakan keuntungan dari reusability. Programmer perangkat lunak dapat
menggunakan sebuah kelas beberapa kali untuk membuat banyak objek.
9.4 Method
9.4.1 Apakah Method itu dan mengapa menggunakan Method?
Pada contoh yang telah kita diskusikan sebelumnya, kita hanya memiliki satu method, dan itu
adalah method main(). Di dalam Java, kita dapat mendefinisikan banyak method yang akan
kita panggil dari method yang berbeda.
Sebuah method adalah bagian-bagian kode yang dapat dipanggil oleh program utama atau
dari method lainnya untuk menjalankan fungsi yang spesifik.
Berikut adalah karakteristik dari method :
1. dapat mengembalikan satu nilai atau tidak sama sekali
2. dapat diterima beberapa parameter yang dibutuhkan atau tidak ada parameter sama
sekali. Parameter bisa juga disebut sebagai argumen dari fungsi
3. setelah method telah selesai dieksekusi, dia akan kembali pada method yang
memanggilnya.
Pengenalan Pemrograman 1
J.E.N.I.
Sekarang mengapa kita butuh untuk membuat banyak method? Mengapa kita tidak menuliskan
semua kode pada sebuah method? Hal ini karena penyelesaian masalah yang sangat efektif adalah
memecah masalah-masalah tersebut menjadi beberapa bagian. Kita juga dapat melakukan hal ini di
Java dengan membuat method untuk mengatasi bagian tertentu dari masalah. Sebuah
permasalahan dapat dipecah-pecah menjadi beberapa bagian kecil. Hal ini sangat baik sekali untuk
membuat program yang sangat besar.
nameOfObject.nameOfMethod( parameters );
mari kita mengambil dua contoh method yang ditemukan dalam class String.
Deklarasi method
Definisi
Menggunakan method :
String
str1 = "Hello";
char
x = str2.charAt(0); //will return the
character H
//simpan pada variabel x
String
str2 = "hello";
//return boolean
boolean result = str1.equalsIgnoreCase( str1 );
Pengenalan Pemrograman 1
J.E.N.I.
9.4.3.1 Pass-by-Value
Ketika pass-by-values terjadi, method membuat sebuah salinan dari nilai variable yang
dikirimkan ke method. Walaupun demikian, method tidak dapat secara langsung
memodifikasi nilai variabel pengirimnya meskipun parameter salinannya sudah dimodifikasi
nilainya di dalam method.
Contoh :
Pass i as parameter
which is copied to j
//Mencetak nilai i
System.out.println( i );
}
public static void test( int j ){
//merubah nilai parameter j
j = 33;
}
}
Pada contoh diatas, kita memanggil method tes dan melewatkan nilai variabel i sebagai
parameter. Nilai pada i disalinkan ke variable j pada method. Pada kondisi ini variabel j
adalah merupakan variabel pengganti pada method tes, jika nilai j berubah maka nilai
variabel i yang terletak pada main tidak akan ikut berubah walaupun awalnya variabel j
merupakan salinan dari variabel i.
Secara default, semua tipe data primitif ketika dilewatkan pada sebuah method adalah
pass-by-value.
Pengenalan Pemrograman 1
J.E.N.I.
9.4.3.2 Pass-by-reference
Ketika sebuah pass-by-reference terjadi, alamat memori dari nilai pada sebuah variabel
dilewatkan pada saat pemanggilan method. Hal ini berarti bahwa method menyalin alamat
memori dari variabel yang dilewatkan pada method. Ini tidak seperti pada pass-by-value,
method dapat memodifikasi variabel asli dengan menggunakan alamat memori tersebut,
meskipun berbeda nama variabel yang digunakan dalam method dengan variabel aslinya,
kedua variabel ini menunjukkan lokasi dari data yang sama.
contoh :
class TestPassByReference
{
public static void main( String[] args ){
//membuat array integer
int []ages
= {10, 11, 12};
//mencetak nilai array
for( int i=0; i<ages.length; i++ ){
System.out.println( ages[i] );
}
test( ages );
Pass ages as parameter
which is copied to
variable arr
}
public static void test( int[] arr ){
//merubah nilai array
for( int i=0; i<arr.length; i++ ){
arr[i] = i + 50;
}
}
}
Pengenalan Pemrograman 1
J.E.N.I.
Classname.staticMethodName(params);
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
B
int k = 0;
int m = 0;
E
int n = 0;
}
}
Pengenalan Pemrograman 1
J.E.N.I.
Kode yang kita miliki disini mempunyai lima jangkauan yang ditandai oleh baris dan
keterangan yang mewakili jangkauan itu, dengan variable i,j,k,m dan n, dan 5 jangkauan
A,B,C,D dan E, kita mempunyai beberapa jangkauan variable berikut:
Jangkauan
Jangkauan
Jangkauan
Jangkauan
Jangkauan
variable i adalah A.
variable j adalah B.
variable k adalah C.
variable m adalah D.
variable n adalah E.
Contoh lain, jika terdapat dua method, yaitu main dan test,
class TestPassByReference
{
public static void main( String[] args ){
//membuat array integer
int []ages
= {10, 11, 12};
//mencetak nilai array
for( int i=0; i<ages.length; i++ ){
E
A
}
test( ages );
ages[ ]
i in B
i in C
- scope A
- scope B
scope C
Pengenalan Pemrograman 1
10
J.E.N.I.
arr[ ]
i in E
- scope D
- scope E
Pada saat variabel di deklarasikan, hanya boleh terdapat sebuah variabel dengan
identifier/nama dapat di deklarasikan di dalam sebuah jangkauan. Hal ini maksudnya jika
kamu mempunyai deklarasi berikut,
{
int test = 10;
int test = 20;
}
Compiler akan menghasilkan error karena compiler mendeteksi nama yang lain dari variabel
di satu blok, namun compiler tidak akan menghasilkan error jika menumukan dua variabel
dengan nama yang sama jika kedua variabel tersebut tidak dideklarasikan pada blok yang
sama, Contoh :
int test = 0;
System.out.print( test );
//..some code here
{
int test = 20;
System.out.print( test );
}
Manakala System.out.print (baris 2) pertama dipanggil, dia mencetak nilai dari variabel test
pertama (nilai 0) pada saat variabel terlihat pada jangkauan. Pernyataan System.out.print
yang kedua (baris6), nilai 20 dicetak mengambil nilai variabel test terdekat (baris 6)pada
jangkauan blok kode tersebut.
Petunjuk Penulisan program :
Hindari pemberian nama yang sama kepada variabel supaya Anda tidak kebingungan.
Pengenalan Pemrograman 1
11
J.E.N.I.
Ketika kita mengkonversi data yang bertipe besar ke tipe data yang lebih kecil, kita harus
menggunakan explicit cast. Explicit casts mengikuti bentuk sebagai berikut :
(dataType)value
dimana,
dataType, adalah nama dari tipe data yang Anda konversi
value, adalah pernyataan yang dihasilkan pada nilai dari the source type.
Sebagai contoh,
double
valDouble = 10.12;
int
valInt = (int)valDouble; //men-convert valDouble ke tipe int
double x = 10.2;
int
y = 2;
int
Pengenalan Pemrograman 1
12
J.E.N.I.
Untuk kebalikannya pun bisa dilakukan, Anda dapat menggunakan superclass ketika
sebuah
subclass
dibentuk.
Akan tetapi error akan ditemukan karena subclass
kemungkinan memiliki lebih banyak tingkah laku daripada superclassnya, maka
mungkin akan terjadi hilangnya kendali dari superclass untuk method tertentu. Superclass object
mungkin tidak memiliki semua kemungkinan tingkah laku yang dapat dilakukan subclass
object. Sebagai contoh jika anda memiliki operasi yang memanggil method dalam obyek
dari class integer, mengunakan object dari class Number tidak a k a n d i d a p a t k a n method
l e b i h b a n y a k d a r i yang dispesifikasikan dalam integer. E rror akan terjadi jika Anda
mencoba untuk memanggil method yang tidak dimiliki oleh obyek tujuan.
Untuk
mengunakan
obyek-obyek
superclass
dimana
obyek-obyek
subclass
ditentukan terlebih dahulu, anda harus mengkonversi mereka secara eksplisit. Anda
tidak
akan
kehilangan
informasi sebelumnya setelah proses konversi, tapi anda
mendapatkan semua method dan
Pengenalan Pemrograman 1
13
J.E.N.I.
variabel yang didefinisikan oleh subclass. Untuk konversi sebuah obyek ke class yang
lain, Anda dapat menggunakan operasi yang sama seperti konversi untuk tipe-tipe primitif :
Untuk memilih,
(classname)object
dimana,
classname, adalah nama dari class tujuan.
object, adalah sesuatu yang mengarah pada obyek sumber.
Catatan: casting akan membuat pengalamatan ke obyek yang lama dari classname
yang dituliskan; obyek yang lama akan dapat tetap dipakai seperti sebelumnya.
Contoh berikut konversi sebuah instance dari class VicePresident ke sabuah instance
dari class Employee; VicePresident adalah sebuah subclass dari Employee dengan
lebih banyak informasi, disini didefinisikan bahwa VicePresident memiliki akses menuju
executive washroom,
Employee emp = new Employee();
VicePresident veep = new VicePresident();
emp = veep; // tidak adah konversi yang diperlukan untuk penggunaan
yang cenderung naik
veep = (VicePresident)emp; // Harus memilih dengan pemilihan secara
eksplisit
Pengenalan Pemrograman 1
14
J.E.N.I.
Java merepresentasikan tipe data pri mi ti f dan versi classnya dengan sangat berbeda.
Sebuah program tidak akan berhasil tercompile jika Anda menggunakan hanya satu ketika
yang lain juga diperlukan.
Menggunakan class-class yang berhubungan untuk
membuat sebuah obyek yang memiliki nilai yang sama.
setiap
tipe
primitif,
anda
dapat
Contoh :
//Pernyataan berikut membentuk sebuah instance bertipe Integer
// class dengan nilai integer 7801 (primitif -> Object)
Integer dataCount = new Integer(7801);
//Pernyataan berikut meng-konversi sebuah obyek Integer ke
//tipe data primitif int nya. Hasilnya adalah sebuah int
//dengan nilai 7801
int newCount = dataCount.intValue();
// Anda perlu suatu translasi biasa pada program
// yang mengkonversi sebuah String ke sebuah tipe numeric,
//seperti suatu int
// Obyek->primitif
String pennsylvania = "65000";
int penn = Integer.parseInt(pennsylvania);
PERHATIAN: class Void tidak mewakili apapun dalam Java, jadi class ini tidak akan
digunakan ketika melakukan konversi antara nilai primitif dan obyek. Kata void
digunakan dalam definisi method untuk mengindikasikan bahwa method tidak memiliki
sebuah nilai yang dihasilkan.
Pengenalan Pemrograman 1
15
J.E.N.I.
menghasilkan hasil yang tidak sama. Walaupun isinya ternyata sama akan tetapi pada
kenyataannya mereka bukan merupakan obyek yang sama.
Untuk melihat jika dua object String memiliki nilai yang sama, sebuah method dari class
yaitu equals() digunakan. Method ini akan memeriksa setiap karakter dalam string dan
mengembalikan nilai true jika dua obyek string memiliki nilai yang sama.
Kode berikut mengilustrasikan hal tersebut,
class EqualsTest {
public static void main(String[] arguments) {
String str1, str2;
str1 = "Free the bound periodicals.";
str2 = str1;
System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("Same object? " + (str1 == str2));
str2 = new String(str1);
System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("Same object? " + (str1 == str2));
System.out.println("Same value? " + str1.equals(str2));
}
}
Output program ini adalah sebagai berikut ,
OUTPUT:
String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? true
String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? false
Same value? True
Sekarang mari mendiskusikan tentang dua baris kode dari program sebagai berikut.
String str1, str2;
str1 = "Free the bound periodicals.";
Pengenalan Pemrograman 1
16
J.E.N.I.
Bagian pertama dari program mendeklarasikan dua variabel (str1 dan str2), memberikan
kalimat "Free the bound periodicals." untuk str1, dan kemudian memberi nilai tersebut untuk
str2. Seperti yang Anda pelajari sebelumnya, str1 dan str2 sekarang menunjuk ke alamat
obyek yang sama, dan uji kesamaan membuktikan hal tersebut.
str2 = new String(str1);
Pada bagian yang kedua dari program ini, anda membuat obyek String baru dengan nilai
yang sama dari str1 dan memberikkanya ke str2. Sekarang Anda memiliki dua obyek string
yang berbeda yaitu str1 dan str2, keduanya memilki nilai yang sama. Ketika dilakukan
pengujian untuk melihat jika mereka obyek yang sama dengan menggunakan operator ==,
akan dihasilkan nilai: false kedua obyek bukan obyek yang sama dalam memory. ketika
dilakukan pengujian menggunakan method equals() maka akan dihasilkan : true kedua
obyek tersebut memiliki nilai yang sama.
Catatan: Mengapa kita tidak dapat hanya menggunakan literal yang lain ketika ingin
mengubah str2, selain menggunakan new? String literals sudah dioptimasi dalam Java; jika
Anda membuat sebuah string menggunakan literal dan kemudian menggunakan literal
yang lain dengan character yang sama, Java cukup memberikan Anda obyek String yang
pertama kembali. Jadi kedua String tadi adalah obyek yang sama; Anda harus
menghidari langkah anda untuk membuat dua obyek terpisah.
J.E.N.I.
Pengenalan Pemrograman 1
18
J.E.N.I.
9.6
Latihan
Class
Object
Instantiate
Instance Variable
Instance Method
Class Variables atau static member variables
Constructor
Pengenalan Pemrograman 1
19
J.E.N.I.
Pengenalan Pemrograman 1
20
J.E.N.I.
BAB 10
Membuat Class Sendiri
Tujuan
Setelah kita mempelajari penggunaan class dari Java Class Library, kita akan mempelajari
bagaimana menuliskan sebuah class sendiri. Pada bagian ini, untuk mempermudah
pemahaman pembuatan class, kita akan membuat contoh class dimana akan ditambahkan
beberapa data dan fungsifungsi lain.
Kita akan membuat class yang mengandung informasi dari Siswa dan operasioperasi yang
dibutuhkan pada record siswa.
Beberapa hal yang perlu diperhatikan pada syntax yang digunakan pada bab ini dan bagian
lainnya :
*
<description>
[]
- Menandakan bahwa terjadi lebih dari satu kejadian dimana elemen tersebut
diimplementasikan
- Menandakan bahwa Anda harus memberikan nilai pasti pada bagian ini
- Indikasi bagian optional
Pengenalan Pemrograman 1
J.E.N.I.
dimana :
<modifier> adalah sebuah access modifier, yang dapat dikombinasikan dengan tipe modifier
lain.
Pada bagian ini, kita akan membuat sebuah class yang berisi record dari siswa. Jika kita
telah mengidentifikasikan tujuan dari pembuatan class, maka dapat dilakukan pemberian
nama yang sesuai. Nama yang tepat pada class ini adalah StudentRecord.
Untuk mendefinisikan class, kita tuliskan :
dimana,
Public
Class
Pengenalan Pemrograman 1
J.E.N.I.
Public
StudentRecord
Deklarasi Atribut
Dalam pendeklarasian atribut, kita tuliskan :
<modifier> <type> <name> [= <default_value>];
Langkah selanjutnya adalah mengurutkan atribut yang akan diisikan pada class. Untuk
setiap informasi, urutkan juga tipe data yang yang tepat untuk digunakan. Contohnya, Anda
tidak mungkin menginginkan untuk menggunakan tipe data integer untuk nama siswa, atau
tipe data string pada nilai siswa.
Berikut ini adalah contoh informasi yang akan diisikan pada class StudentRecord :
name
address
age
math grade
english grade
science grade
average grade
String
String
Int
double
double
double
double
Pengenalan Pemrograman 1
J.E.N.I.
10.3.1
Instance Variable
Jika kita telah menuliskan seluruh atribut yang akan diisikan pada class, selanjutnya kita
akan menuliskannya pada kode. Jika kita menginginkan bahwa atribut atribut tersebut
adalah unik untuk setiap object (dalam hal ini untuk setiap siswa), maka kita harus
mendeklarasikannya sebagai instance variable :
Sebagai contoh :
public class StudentRecord
{
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
//area penulisan kode selanjutnya
}
dimana,
private disini menjelaskan bahwa variabel tersebut hanya dapat diakses oleh class itu
sendiri. Object lain tidak dapat menggunakan variabel tersebut secara langsung. Kita akan
membahas tentang kemampuan akses pada pembahasan selanjutnya.
Pengenalan Pemrograman 1
J.E.N.I.
10.3.2
Disamping instance variable, kita juga dapat mendeklarasikan class variable atau variabel
yang dimiliki class sepenuhnya. Nilai pada variabel ini sama pada semua object di class
yang sama. Anggaplah kita menginginkan jumlah dari siswa yang dimiliki dari seluruh class,
kita dapat mendeklarasikan satu static variable yang akan menampung nilai tersebut. Kita
beri nama variabel tersebut dengan nama studentCount.
Berikut penulisan static variable :
public class StudentRecord
{
//area deklarasi instance variables
private static int studentCount;
//area penulisan kode selanjutnya
}
Kita gunakan keyword : static untuk mendeklarasikan bahwa variabel tersebut adalah
static.
Maka keseluruhan kode yang dibuat terlihat sebagai berikut :
public class StudentRecord
{
private String name;
private String address;
private int
age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
private static int studentCount;
//area penulisan kode selanjutnya
}
Pengenalan Pemrograman 1
J.E.N.I.
dimana,
<modifier> dapat menggunakan beberapa modifier yang berbeda
<returnType> dapat berupa seluruh tipe data, termasuk void
<name> identifier atas class
<parameter> ::= <tipe_parameter> <nama_parameter>[,]
10.4.1
Accessor Methods
Pengenalan Pemrograman 1
J.E.N.I.
dimana,
public
String
getName
()
Menjelaskan bahwa method tersebut dapat diakses dari object luar class
Tipe data return value dari method tersebut bertipe String
Nama dari method
Menjelaskan bahwa method tidak memiliki parameter apapun
Pernyataan berikut,
return name;
dalam program kita menandakan akan ada pengembalian nilai dari nama instance variable
ke pemanggilan method. Perhatikan bahwa return type dari method harus sama dengan
tipe data seperti data pada pernyataan return. Anda akan mendapatkan pesan kesalahan
sebagai berikut bila tipe data yang digunakan tidak sama :
StudentRecord.java:14: incompatible types
found : int
required: java.lang.String
return age;
^
1 error
Method getAverage() menghitung rata rata dari 3 nilai siswa dan menghasilkan nilai
return value dengan nama result.
Pengenalan Pemrograman 1
J.E.N.I.
10.4.2
Mutator Methods
Bagaimana jika kita menghendaki object lain untuk mengubah data? Yang dapat kita
lakukan adalah membuat method yang dapat memberi atau mengubah nilai variable dalam
class, baik itu berupa instance maupun static. Method semacam ini disebut dengan mutator
methods. Sebuah mutator method umumnya tertulis set<namaInstanceVariabel>.
Mari kita perhatikan salah satu dari implementasi mutator method :
public class StudentRecord
{
private String name;
:
:
public void setName( String temp ){
name = temp;
}
}
dimana,
public
void
setName
(String temp)
Pernyataan berikut :
name = temp;
mengidentifikasi nilai dari temp sama dengan name dan mengubah data pada instance
variable name.
Perlu diingat bahwa mutator methods tidak menghasilkan return value. Namun berisi
beberapa argumen dari program yang akan digunakan oleh method.
Pengenalan Pemrograman 1
J.E.N.I.
10.4.3
Anda dapat mempunyai banyak return values pada sebuah method selama mereka tidak
pada blok program yang sama. Anda juga dapat menggunakan konstanta disamping
variabel sebagai return value.
Sebagai contoh, perhatikan method berikut ini :
10.4.4
Static Methods
dimana,
public
static
Int
Pengenalan Pemrograman 1
- Menjelaskan bahwa method ini dapat diakses dari object luar class
- Method ini adalah static dan pemanggilannya menggunakan
[namaclass].[namaMethod]. Sebagai contoh :
studentRecord.getStudentCount
- Tipe return dari method. Mengindikasikan method tersebut harus
mempunyai return value berupa integer
J.E.N.I.
public
getStudentCount
()
- Menjelaskan bahwa method ini dapat diakses dari object luar class
- Nama dari method
- Method ini tidak memiliki parameter apapun
Pada deklarasi di atas, method getStudentCount() akan selalu menghasilkan return value 0
jika kita tidak mengubah apapun pada kode program untuk mengatur nilainya. Kita akan
membahas pengubahan nilai dari studentCount pada pembahasan constructor.
Pengenalan Pemrograman 1
10
J.E.N.I.
10.4.5
Pengenalan Pemrograman 1
11
J.E.N.I.
Berikut ini contoh kode dari class yang mengimplementasikan class StudentRecord :
10.5.
Reference this
Reference this digunakan untuk mengakses instance variable yang dibiaskan oleh
parameter. Untuk pemahaman lebih lanjut, mari kita perhatikan contoh pada method
setAge. Dimisalkan kita mempunyai kode deklarasi berikut pada method setAge.
Nama parameter pada deklarasi ini adalah age, yang memiliki penamaan yang sama
dengan instance variable age. Parameter age adalah deklarasi terdekat dari method,
sehingga nilai dari parameter tersebut akan digunakan. Maka pada pernyataan :
Pengenalan Pemrograman 1
12
J.E.N.I.
age = age;
kita telah menentukan nilai dari parameter age kepada parameter itu sendiri. Hal ini sangat
tidak kita kehendaki pada kode program kita. Untuk menghindari kesalahan semacam ini,
kita gunakan metode referensi this. Untuk menggunakan tipe referensi ini, kita tuliskan :
this.<namaInstanceVariable>
Sebagai contoh, kita dapat menulis ulang kode hingga tampak sebagai berikut :
public void setAge( int age ){
this.age = age;
}
Method ini akan mereferensikan nilai dari parameter age kepada instance variable dari
object StudentRecord.
Pengenalan Pemrograman 1
13
J.E.N.I.
Name:Anna
Address:Philippines
Age:15
Name:Anna
Math Grade:80.0
English Grade:95.5
Science Grade:100.0
Pengenalan Pemrograman 1
14
J.E.N.I.
10.7.
Deklarasi Constructor
Default Constructor
Setiap class memiliki default constructor. Sebuah default constructor adalah constructor
yang tidak memiliki parameter apapun. Jika sebuah class tidak memiliki constructor apapun,
maka sebuah default constructor akan dibentuk secara implisit :
Sebagai contoh, pada class StudentRecord, bentuk default constructor akan terlihat seperti
dibawah ini :
public StudentRecord()
{
//area penulisan kode
Pengenalan Pemrograman 1
15
J.E.N.I.
Overloading Constructor
Seperti telah kita bahas sebelumnya, sebuah constructor juga dapat dibentuk menjadi
overloaded. Dapat dilihat pada 4 contoh sebagai berikut :
public StudentRecord(){
//area inisialisasi kode;
}
public StudentRecord(String temp){
this.name = temp;
}
public StudentRecord(String name, String address){
this.name = name;
this.address = address;
}
Menggunakan Constructor
Untuk menggunakan constructor, kita gunakan kode kode sebagai berikut :
Sebelum kita lanjutkan, mari kita perhatikan kembali deklarasi variabel static studentCount
yang telah dibuat sebelumnya. Tujuan deklarasi studentCount adalah untuk menghitung
jumlah object yang dibentuk pada class StudentRecord. Jadi, apa yang akan kita lakukan
selanjutnya adalah menambahkan nilai dari studentCount setiap kali setiap pembentukan
object pada class StudentRecord. Lokasi yang tepat untuk memodifikasi dan menambahkan
Pengenalan Pemrograman 1
16
J.E.N.I.
nilai studentCount terletak pada constructor-nya, karena selalu dipanggil setiap kali objek
terbentuk.
Sebagai contoh :
public StudentRecord(){
//letak kode inisialisasi
studentCount++; //menambah student
}
public StudentRecord(String temp){
this.name = temp;
studentCount++; //menambah student
}
public StudentRecord(String name, String address){
this.name = name;
this.address = address;
studentCount++; //menambah student
}
17
J.E.N.I.
Dari contoh kode diatas, pada saat baris ke 13 dipanggil akan memanggil constructor dasar
pada baris pertama. Pada saat baris kedua dijalankan, baris tersebut akan menjalankan
constructor yang memiliki parameter String pada baris ke-6.
Beberapa hal yang patut diperhatikan pada penggunaan this() :
1. Harus dituliskan pada baris pertama pada sebuah constructor
2. Hanya dapat digunakan pada satu definisi constructor. Kemudian metode ini dapat
diikuti dengan kode kode berikutnya yang relevan
10.8.
Packages
Packages dalam JAVA berarti pengelompokan beberapa class dan interface dalam satu unit.
Fitur ini menyediakan mekanisme untuk mengatur class dan interface dalam jumlah banyak
dan menghindari konflik pada penamaan.
Mengimport Packages
Supaya dapat meggunakan class yang berada diluar package yang sedang dikerjakan, Anda
harus mengimport package dimana class tersebut berada. Pada dasarnya, seluruh program
JAVA mengimport package java.lang.*, sehingga Anda dapat menggunakan class seperti
String dan Integer dalam program meskipun belum mengimport package sama sekali.
Penulisan import package dapat dilakukan seperti dibawah ini :
import <namaPaket>;
Sebagai contoh, bila Anda ingin menggunakan class Color dalam package awt, Anda harus
menuliskan import package sebagai berikut :
import java.awt.Color;
import java.awt.*;
Baris pertama menyatakan untuk mengimport class Color secara spesifik pada package,
sedangkan baris kedua menyatakan mengimport seluruh class yang terkandung dalam
package java.awt.
Cara lain dalam mengimport package adalah dengan menuliskan referensi package secara
eksplisit. Hal ini dilakukan dengan menggunakan nama package untuk mendeklarasikan
object sebuah class :
Pengenalan Pemrograman 1
18
J.E.N.I.
java.awt.Color color;
Membuat Package
Untuk membuat package, dapat dilakukan dengan menuliskan :
package <packageName>;
Anggaplah kita ingin membuat package dimana class StudentRecord akan ditempatkan
bersama dengan class class yang lain dengan nama package schoolClasses.
Langkah pertama yang harus dilakukan adalah membuat folder dengan nama
schoolClasses. Salin seluruh class yang ingin diletakkan pada package dalam folder ini.
Kemudian tambahkan kode deklarasi package pada awal file. Sebagai contoh :
package schoolClasses;
public class StudentRecord
{
private String name;
private String address;
private int age;
}
Package juga dapat dibuat secara bersarang. Dalam hal ini Java Interpreter menghendaki
struktur direktori yang mengandung class eksekusi untuk disesuaikan dengan struktur
package.
Pengaturan CLASSPATH
Diasumsikan package schoolClasses terdapat pada direktori C:\. Langkah selanjutnya
adalah mengatur classpath untuk menunjuk direktori tersebut sehingga pada saat akan
dijalankan, JVM dapat mengetahui dimana class tersebut tersimpan.
Sebelum membahas cara mengatur classpath, perhatikan
menandakan kejadian bila kita tidak mengatur classpath.
contoh
dibawah
yang
Pengenalan Pemrograman 1
19
J.E.N.I.
at
at
at
at
at
at
at
at
at
java.net.URLClassLoader.defineClass(Unknown Source)
java.net.URLClassLoader.access$100(Unknown Source)
java.net.URLClassLoader$1.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
java.lang.ClassLoader.loadClassInternal(Unknown Source)
dimana C:\ adalah direktori dimana kita menempatkan package. Setelah mengatur
classpath, kita dapat menjalankan program di mana saja dengan mengetikkan :
Pada UNIX, asumsikan bahwa kita memiliki class - class yang terdapat dalam direktori
/usr/local/myClasses, ketikkan :
export classpath=/usr/local/myClasses
Perhatikan bahwa Anda dapat mengatur classpath dimana saja. Anda juga dapat mengatur
lebih dari satu classpath, kita hanya perlu memisahkannya dengan menggunakan ;
(Windows), dan : (UNIX). Sebagai contoh :
set classpath=C:\myClasses;D:\;E:\MyPrograms\Java
Pengenalan Pemrograman 1
20
J.E.N.I.
10.9.
Access Modifiers
Pada saat membuat, mengatur properties dan class methods, kita ingin untuk
mengimplementasikan beberapa macam larangan untuk mengakses data. Sebagai contoh,
jika Anda ingin beberapa atribut hanya dapat diubah hanya dengan method tertentu, tentu
Anda ingin menyembunyikannya dari object lain pada class. Di JAVA, implementasi tersebut
disebut dengan access modifiers.
Terdapat 4 macam access modifiers di JAVA, yaitu : public, private, protected dan default. 3
tipe akses pertama tertulis secara ekplisit pada kode untuk mengindikasikan tipe akses,
sedangkan yang keempat yang merupakan tipe default, tidak diperlukan penulisan keyword
atas tipe.
10.9.1
Tipe ini mensyaratkan bahwa hanya class dalam package yang sama yang memiliki hak
akses terhadap variabel dan methods dalam class. Tidak terdapat keyword pada tipe ini.
Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
int name;
//akses dasar terhadap metode
String getName(){
return name;
}
}
Pada contoh diatas, variabel nama dan method getName() dapat diakses dari object lain
selama object tersebut berada pada package yang sama dengan letak dari file
StudentRecord.
Pengenalan Pemrograman 1
21
J.E.N.I.
10.9.2
Akses Public
Tipe ini mengijinkan seluruh class member untuk diakses baik dari dalam dan luar class.
Object apapun yang memiliki interaksi pada class memiliki akses penuh terhadap member
dari tipe ini. Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
public int name;
//akses dasar terhadap metode
public String getName(){
return name;
}
}
Dalam contoh ini, variabel name dan method getName() dapat diakses dari object lain.
10.9.3
Akses Protected
Tipe ini hanya mengijinkan class member untuk diakses oleh method dalam class tersebut
dan elemen elemen subclass. Sebagai contoh :
public class StudentRecord
{
//akses pada variabel
protected int name;
//akses pada metode
protected String getName(){
return name;
}
}
Pada contoh diatas, variabel name dan method getName() hanya dapat diakses oleh
method internal class dan subclass dari class StudentRecord. Definisi subclass akan dibahas
pada bab selanjutnya.
Pengenalan Pemrograman 1
22
J.E.N.I.
10.9.4
Akses Private
Tipe ini mengijinkan pengaksesan class hanya dapat diakses oleh class dimana tipe ini
dibuat. Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
private int name;
//akses dasar terhadap metode
private String getName(){
return name;
}
}
Pada contoh diatas, variabel name dan method getName() hanya dapat diakses oleh
method internal class tersebut.
Pengenalan Pemrograman 1
23
J.E.N.I.
10.10. Latihan
Entry Buku Alamat
Tugas Anda adalah membuat sebuah class yang memuat data-data pada buku alamat.
Tabel berikut mendefinisikan informasi yang dimiliki oleh buku alamat.
Attribut
Deskripsi
Nama
Alamat
Alamat Lengkap
Nomor Telepon
Alamat E-Mail
Buku Alamat
Buat sebuah class buku alamat yang dapat menampung 100 data. Gunakan class yang telah
dibuat pada nomor pertama. Anda harus mengimplementasikan method berikut pada buku
alamat :
1. Memasukkan data
2. Menghapus data
3. Menampilkan seluruh data
4. Update data
Pengenalan Pemrograman 1
24
J.E.N.I.
BAB 11
Pewarisan, Polimorfisme, dan Interface
11.1 Tujuan
Dalam bagian ini, kita akan membicarakan bagaimana suatu class dapat mewariskan sifat
dari class yang sudah ada. Class ini dinamakan subclass dan induk class dinamakan
superclass. Kita juga akan membicarakan sifat khusus dari Java dimana kita dapat secara
otomatis memakai method yand tepat untuk setiap object tanpa memperhatikan asal dari
subclass object. Sifat ini dinamakan polimorfisme. Pada akhirnya, kita akan mendiskusikan
tentang interface yang membantu mengurangi penulisan program.
Pada akhir pembahasan, diharapkan pembaca dapat :
11.2 Pewarisan
Dalam Java, semua class, termasuk class yang membangun Java API, adalah subclasses
dari superclass Object. Contoh hirarki class diperlihatkan di bawah ini.
Beberapa class di atas class utama dalam hirarki class dikenal sebagai superclass.
Sementara beberapa class di bawah class pokok dalam hirarki class dikenal sebagai
subclass dari class tersebut.
Pewarisan adalah keuntungan besar dalam pemrograman berbasis object karena suatu
sifat atau method didefinisikan dalam superclass, sifat ini secara otomatis diwariskan dari
semua subclasses. Jadi, Anda dapat menuliskan kode method hanya sekali dan mereka
dapat digunakan oleh semua subclass. Subclass hanya perlu mengimplementasikan
Pengenalan Pemrograman 1
J.E.N.I.
11.2.1
Untuk memperoleh suatu class, kita menggunakan kata kunci extend. Untuk
mengilustrasikan ini, kita akan membuat contoh class induk. Dimisalkan kita mempunyai
class induk yang dinamakan Person.
public class Person
{
protected String
protected String
name;
address;
/**
* Default constructor
*/
public Person(){
System.out.println(Inside Person:Constructor);
name = "";
address = "";
}
/**
* Constructor dengan dua parameter
*/
public Person( String name, String address ){
this.name = name;
this.address = address;
}
/**
* Method accessor
*/
public String getName(){
return name;
}
public String getAddress(){
return address;
}
public void setName( String name ){
this.name = name;
}
public void setAddress( String add ){
this.address = add;
}
}
Pengenalan Pemrograman 1
J.E.N.I.
Perhatikan bahwa atribut name dan address dideklarasikan sebagai protected. Alasannya
kita melakukan ini yaitu, kita inginkan atribut-atribut ini untuk bisa diakses oleh subclasses
dari superclassess. Jika kita mendeklarasikannya sebagai private, subclasses tidak dapat
menggunakannya. Catatan bahwa semua properti dari superclass yang dideklarasikan
sebagai public, protected dan default dapat diakses oleh subclasses-nya.
Sekarang, kita ingin membuat class lain bernama Student. Karena Student juga sebagai
Person, kita putuskan hanya meng-extend class Person, sehingga kita dapat mewariskan
semua properti dan method dari setiap class Person yang ada. Untuk melakukan ini, kita
tulis,
public class Student extends Person
{
public Student(){
System.out.println(Inside Student:Constructor);
//beberapa kode di sini
}
// beberapa kode di sini
}
Ketika object Student di-instantiate, default constructor dari superclass secara mutlak
meminta untuk melakukan inisialisasi yang seharusnya. Setelah itu, pernyataan di dalam
subclass dieksekusi. Untuk mengilustrasikannya, perhatikan kode berikut,
public static void main( String[] args ){
Student anna = new Student();
}
Dalam kode ini, kita membuat sebuah object dari class Student. Keluaran dari program
adalah,
Inside Person:Constructor
Inside Student:Constructor
J.E.N.I.
11.2.2
Subclass juga dapat memanggil constructor secara eksplisit dari superclass terdekat. Hal ini
dilakukan dengan pemanggil construktor super. Pemanggil constructor super dalam
constructor dari subclass akan menghasilkan eksekusi dari superclass constructor yang
bersangkutan, berdasar dari argumen sebelumnya.
Sebagai contoh, pada contoh class sebelumnya. Person dan Student, kita tunjukkan contoh
dari pemanggil constructor super. Diberikan kode berikut untuk Student,
public Student(){
super( "SomeName", "SomeAddress" );
System.out.println("Inside Student:Constructor");
}
Kode ini memanggil constructor kedua dari superclass terdekat (yaitu Person) dan
mengeksekusinya. Contoh kode lain ditunjukkan sebagai berikut,
public Student(){
super();
System.out.println("Inside Student:Constructor");
Pengenalan Pemrograman 1
J.E.N.I.
Kode ini memanggil default constructor dari superclass terdekat (yaitu Person) dan
mengeksekusinya.
Ada beberapa hal yang harus diingat ketika menggunakan pemanggil constuktor super:
1. Pemanggil super() HARUS DIJADIKAN PERNYATAAN PERTAMA DALAM constructor.
2. Pemanggil super() hanya dapat digunakan dalam definisi constructor.
3. Termasuk constructor this() dan pemanggil super() TIDAK BOLEH TERJADI DALAM
constructor YANG SAMA.
Pemakaian lain dari super adalah untuk menunjuk anggota dari superclass(seperti
reference this). Sebagai contoh,
public Student()
{
super.name = somename;
super.address = some address;
}
J.E.N.I.
return name;
}
:
}
Jadi, ketika kita meminta method getName dari object class Student, method overridde
akan dipanggil, keluarannya akan menjadi,
Student: getName
11.2.4
Dalam Java, juga memungkinkan untuk mendeklarasikan class-class yang tidak lama
menjadi subclass. Class ini dinamakan class final. Untuk mendeklarasikan class untuk
menjadi final kita hanya menambahkan kata kunci final dalam deklarasi class. Sebagai
contoh, jika kita ingin class Person untuk dideklarasikan final, kita tulis,
public final class Person
{
//area kode
}
Beberapa class dalam Java API dideklarasikan secara final untuk memastikan sifatnya tidak
dapat di-override. Contoh-contoh dari class ini adalah Integer, Double, dan String.
Ini memungkinkan dalam Java membuat method yang tidak dapat di-override. Method ini
dapat kita panggil method final. Untuk mendeklarasikan method untuk menjadi final, kita
tambahkan kata kunci final ke dalam deklarasi method. Contohnya, jika kita ingin method
getName dalam class Person untuk dideklarasikan final, kita tulis,
public final String getName(){
return name;
}
Method static juga secara otomatis final. Ini artinya Anda tidak dapat membuatnya
override.
Pengenalan Pemrograman 1
J.E.N.I.
11.3
Polimorfisme
Sekarang, class induk Person dan subclass Student dari contoh sebelumnya, kita
tambahkan subclass lain dari Person yaitu Employee. Di bawah ini adalah hierarkinya,
Person
Student
Employee
Dalam Java, kita dapat membuat referensi yang merupakan tipe dari superclass ke sebuah
object dari subclass tersebut. Sebagai contohnya,
public static main( String[] args )
{
Person
ref;
Student
Employee
J.E.N.I.
J.E.N.I.
11.4
Abstract Class
Misalnya kita ingin membuat superclass yang mempunyai method tertentu yang berisi
implementasi, dan juga beberapa method yang akan di-overridden oleh subclasses nya.
Sebagai contoh, kita akan membuat superclass bernama LivingThing. class ini mempunyai
method tertentu seperti breath, eat, sleep, dan walk. Akan tetapi, ada beberapa method di
dalam superclass yang sifatnya tidak dapat digeneralisasi. Kita ambil contoh, method walk.
Tidak semua kehidupan berjalan(walk) dalam cara yang sama. Ambil manusia sebagai
misal, kita manusia berjalan dengan dua kaki, dimana kehidupan lainnya seperti anjing
berjalan dengan empat kaki. Akan tetapi, beberapa ciri umum dalam kehidupan sudah
biasa, itulah kenapa kita inginkan membuat superclass umum dalam hal ini.
Kita dapat membuat superclass yang mempunyai beberapa method dengan implementasi
sedangkan yang lain tidak. Class jenis ini yang disebut dengan class abstract.
Sebuah class abstract adalah class yang tidak dapat di-instantiate. Seringkali muncul di
atas hirarki class pemrograman berbasis object, dan mendefinisikan keseluruhan aksi yang
mungkin pada object dari seluruh subclasses dalam class.
Method ini dalam class abstract yang tidak mempunyai implementasi dinamakan method
abstract. Untuk membuat method abstract, tinggal menulis deklarasi method tanpa tubuh
class dan digunakan menggunakan kata kunci abstract. Contohnya,
public abstract void someMethod();
Pengenalan Pemrograman 1
J.E.N.I.
Pengenalan Pemrograman 1
10
J.E.N.I.
11.5
Interface
Interface adalah jenis khusus dari blok yang hanya berisi method signature(atau constant
). Interface mendefinisikan sebuah(signature) dari sebuah kumpulan method tanpa tubuh.
Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat dari
class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam hirarki
class, untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwa
interface-interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil
method interface dan versi yang tepat dari method yang akan dieksekusi tergantung dari
tipe object yang melewati pemanggil method interface.
11.5.1
Kita akan menggunakan interface jika kita ingin class yang tidak berhubungan
mengimplementasikan method yang sama. Melalui interface-interface, kita dapat
menangkap kemiripan diantara class yang tidak berhubungan tanpa membuatnya seolaholah class yang berhubungan.
Mari kita ambil contoh class Line dimana berisi method yang menghitung panjang dari
garis dan membandingkan object Line ke object dari class yang sama. Sekarang, misalkan
kita punya class yang lain yaitu MyInteger dimana berisi method yang membandingkan
object MyInteger ke object dari class yang sama. Seperti yang kita lihat disini, kedua
class-class mempunyai method yang mirip dimana membandingkan mereka dari object lain
dalam tipe yang sama, tetapi mereka tidak berhubungan sama sekali. Supaya dapat
menjalankan cara untuk memastikan bahwa dua class-class ini mengimplementasikan
beberapa method dengan tanda yang sama, kita dapat menggunakan sebuah interface
untuk hal ini. Kita dapat membuat sebuah class interface, katakanlah interface Relation
dimana mempunyai deklarasi method pembanding. Relasi interface dapat dideklarasikan
sebagai,
public interface Relation
{
public boolean isGreater( Object a, Object b);
public boolean isLess( Object a, Object b);
public boolean isEqual( Object a, Object b);
}
Alasan lain dalam menggunakan interface pemrograman object adalah untuk menyatakan
sebuah interface pemrograman object tanpa menyatakan classnya. Seperti yang dapat kita
lihat nanti dalam bagian Interface vs class, kita dapat benar-benar menggunakan interface
sebagai tipe data.
Pada akhirnya, kita perlu menggunakan interface untuk pewarisan model jamak dimana
menyediakan class untuk mempunyai lebih dari satu superclass. Pewarisan jamak tidak
ditunjukkan di Java, tetapi ditunjukkan di bahasa berorientasi object lain seperti C++.
Pengenalan Pemrograman 1
11
J.E.N.I.
11.5.2
Berikut ini adalah perbedaan utama antara sebuah interface dan sebuah class abstract:
method interface tidak punya tubuh, sebuah interface hanya dapat mendefinisikan
konstanta dan interface tidak langsung mewariskan hubungan dengan class istimewa
lainnya, mereka didefinisikan secara independent.
11.5.3
Satu ciri umum dari sebuah interface dan class adalah pada tipe mereka berdua. Ini artinya
bahwa sebuah interface dapat digunakan dalam tempat-tempat dimana sebuah class dapat
digunakan. Sebagai contoh, diberikan class Person dan interface PersonInterface, berikut
deklarasi yang benar:
PersonInterface
Person
pi = new Person();
pc = new Person();
11.5.4
Membuat Interface
Pengenalan Pemrograman 1
12
J.E.N.I.
Pengenalan Pemrograman 1
13
J.E.N.I.
Ketika class Anda mencoba mengimplementasikan sebuah interface, selalu pastikan bahwa
Anda mengimplementasikan semua method dari interface, jika tidak, Anda akan
menemukan kesalahan ini,
Line.java:4: Line is not abstract and does not override abstract
method
isGreater(java.lang.Object,java.lang.Object) in
Relation
public class Line implements Relation
^
1 error
11.5.5
Seperti yang telah kita lihat dalam bagian sebelumnya, class dapat mengimplementasikan
sebuah interface selama kode implementasi untuk semua method yang didefinisikan dalam
interface tersedia.
Hal lain yang perlu dicatat tentang hubungan antara interface ke class-class yaitu, class
hanya dapat mengEXTEND SATU superclass, tetapi dapat mengIMPLEMENTASIkan BANYAK
interface. Sebuah contoh dari sebuah class yang mengimplementasikan interface adalah,
public class Person implements PersonInterface,
LivingThing,
WhateverInterface {
//beberapa kode di sini
}
Contoh lain dari class yang meng-extend satu superclass dan mengimplementasikan
sebuah interface adalah,
public class ComputerScienceStudent extends Student
implements PersonInterface,
LivingThing {
//beberapa kode di sini
}
Catatan bahwa sebuah interface bukan bagian dari hirarki pewarisan class. Class yang tidak
berhubungan dapat mengimplementasikan interface yang sama.
Pengenalan Pemrograman 1
14
J.E.N.I.
11.5.6
Interface bukan bagian dari hirarki class. Bagaimanapun, interface dapat mempunyai
hubungan pewarisan antara mereka sendiri. Contohnya, misal kita punya dua interface
StudentInterface
dan
PersonInterface.
Jika
StudentInterface
meng-extend
PersonInterface, maka ia akan mewariskan semua deklarasi method dalam PersonInterface.
public interface PersonInterface {
. . .
}
public interface StudentInterface extends PersonInterface {
. . .
}
Pengenalan Pemrograman 1
15
J.E.N.I.
11.6
Latihan
11.6.1
Extend StudentRecord
Dalam latihan ini, kita ingin untuk membuat catatan siswa yang lebih khusus yang berisi
informasi tambahan tentang pengetahuan komputer siswa. Tugasnya adalah meng-extend
class StudentRecord yang mengimplementasikan pelajaran sebelumnya. Cobalah untuk
meng-override beberapa method yang ada dalam superclass StudentRecord, jika Anda
benar-benar membutuhkannya.
11.6.2
Cobalah untuk membuat class abstract yang dinamai Shape dengan method abstract
getArea() dan getName(). Tulis dua subclasses-nya yaitu Circle dan Square. Anda dapat
menambahkan method tambahan ke dalam subclasses jika diinginkan.
Pengenalan Pemrograman 1
16
J.E.N.I.
BAB 12
Dasar Exception Handling
12.1 Tujuan
Dalam bagian ini, kita akan mempelajari teknik yang dipakai dalam Java dalam menangani kondisi
yang tidak biasa dalam menjalankan operasi normal dalam program. Teknik ini dinamakan
exception handling.
Pada akhir pembahasan, diharapkan pembaca dapat :
Mendefinisikan exception
12.2
Exception adalah sebuah peristiwa yang menjalankan alur proses normal pada program. Peristiwa
ini biasanya berupa kesalahan(error) dari beberapa bentuk. Ini disebabkan program kita berakhir
tidak normal.
Beberapa contoh dari exception yang Anda mungkin jumpai pada latihan-latihan sebelumnya
adalah: exception ArrayIndexOutOfBounds, yang terjadi jika kita mencoba mengakses elemen
array yang tidak ada, atau NumberFormatException, yang terjadi ketika kita mencoba melalui
parameter bukan angka dalam method Integer.parseInt.
J.E.N.I.
Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan ditangani dalam blok
catch. Kode dalam blok finally selalu di-eksekusi.
Berikut ini adalah aspek kunci tentang sintak dari konstruksi try-catch-finally:
Notasi blok bersifat perintah
Setiap blok try, terdapat satu atau lebih blok catch, tetapi hanya satu blok finally.
Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas
urutan
Blok try harus diikuti oleh paling sedikit satu blok catch ATAU satu blok finally, atau
keduanya.
Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch
harus membawa satu argumen, dimana exception pada blok tersebut akan ditangani.
Exception harus menjadi class pelempar atau satu dari subclassesnya.
Pengenalan Pemrograman 1
J.E.N.I.
Marilah mengambil contoh kode yang mencetak argumen kedua ketika kita mencoba menjalankan
kode menggunakan argumen command-line. Perkirakan, tidak ada pengecekan dalam kode Anda
untuk angka dari argumen dan kita hanya mengakses argumen kedua args[1] segera, kita akan
mendapatkan exception berikut.
Untuk mencegah kejadian ini, kita dapat menempatkan kode ke dalam blok try-catch. Blok finally
hanya sebagai pilihan lain saja. Sebagai contoh, kita tidak akan menggunakan blok finally.
public class ExceptionExample
{
public static void main( String[] args ){
try{
System.out.println( args[1] );
}catch( ArrayIndexOutOfBoundsException exp ){
System.out.println("Exception caught!");
}
}
}
Jadi kita akan menjalankan program lagi tanpa argumen, keluarannya akan menjadi,
Exception caught!
Pengenalan Pemrograman 1
J.E.N.I.
12.4 Latihan
12.4.1
Menangkap Exception 1
Ubah program TestExceptions untuk menangani exception, keluaran program setelah ditangkap
exception-nya akan seperti ini:
javac TestExceptions one two three
args[0]=one
args[1]=two
args[2]=three
Exception caught:
java.lang.ArrayIndexOutOfBoundsException: 3
Quiting...
Pengenalan Pemrograman 1
J.E.N.I
Pengenalan Pemrograman 2
Versi 1.1
Juni 2007
Sumber JEDI
Pengenalan Pemrograman 2
J.E.N.I
Penulis
Joyce Avestro
Team
Joyce Avestro
Florence Balagtas
Rommel Feria
Reginald Hutcherson
Rebecca Ong
John Paul Petines
Sang Shin
Raghavan Srinivas
Matthew Thompson
NetBeans IDE 5.5 berjalan pada sistem operasi yang mendukung Java VM.
Dibawah ini merupakan daftar dari platform-platform yang digunakan:
Team Translator
Frans Thamura
Joko Pitono
Eko Subiyantoro
Cahya Kusuma Ratih
Dwi Martha Sari
Miratul Khusna Mufida
Khansa Fitriannisa
Sulistyaningtyas
Allin Junikhah
Bagus Chandra
Rizzatama N.S
Badar Agung Nugroho
Kadek Surya Pranata
Pengenalan Pemrograman 2
J.E.N.I
Solaris OS (SPARC):
o Prosesor: UltraSPARC IIIi 1 GHz
o Memori: 1 GB
o Disk space: 850 MB dari free disk space
o
o
o
http://java.sun.com/j2se/1.5.0/download.htm
l
Untuk Mac OS X, memerlukan Java 2 Platform Standard Edition
(J2SE) 5.0 Release 4. Anda dapat mendownload JDK dari Apple's
Developer Connection site. Pada:
http://developer.apple.com/java (untuk
mendownload JDK Anda harus melakukan register terlebih dahulu).
Pengenalan Pemrograman 2
J.E.N.I
Daftar Isi
1 Review Konsep Dasar Dalam Java
1.1 Tujuan
1.2 Konsep Berorientasi Object
1.2.1 Desain Berorientasi Object
1.2.2 Kelas
1.2.3 Obyek
1.2.4 Atribut
1.2.5 Method
1.2.6 Konstruktor
1.2.7 Package
1.2.8 Enkapsulasi
1.2.9 Abstraksi
1.2.10 Pewarisan
1.2.11 Polimorfisme
1.2.12 Interface
1.3 Struktur Program Java
1.3.1 Mendeklarasikan Class Java
1.3.2 Mendeklarasikan Atribut
1.3.3 Mendeklarasikan Method
1.3.4 Mendeklarasikan Sebuah Konstruktor
1.3.5 Meng-instansiasi Sebuah Class
1.3.6 Mengakses Anggota Object
1.3.7 Package
1.3.8 Acces Modifier
1.3.9 Enkapsulasi
1.3.10 Pewarisan
1.3.11 Metode Overriding
1.3.12 Kelas Abstract dan Method
1.3.13 Interface
1.3.14 Kata Kunci This
1.3.15 Kata Kunci Super
1.3.16 Kata Kunci Static
1.3.17 Kata Kunci Final
1.3.18 Inner Classes
1.4 Latihan
1.4.1 Tabel Perkalian
1.4.2 Greatest Comman Factor(GCF)
1.4.3 Shape
1.4.4 Binatang
2 Exceptions dan Assertions
2.1 Tujuan
2.2 Apa Itu Exception?
Pengenalan Pemrograman 2
J.E.N.I
2.2.1 Pendahuluan
2.2.2 Error dan Excetion Classes
2.2.3 Sebuah Contoh
2.3 Menangkap Exception
2.3.1 Try-Catch
2.3.2 Keyword Finally
2.4 Melempar Exception
2.4.1 Keyword Throw
2.4.2 Keyword Throws
2.5 Kategori Exception
2.5.1 Exception Classes dan Hierarchy
2.5.2 Checked dan Unchecked Exceptions
2.5.3 User Defined Exceptions
2.6 Assertions
2.6.1 User Defined Exceptions
2.6.2 Mengaktifkan dan Menonaktifkan Exceptions
2.6.3 Sintax Assertions
2.7 Latihan
2.7.1 Heksadesimal ke Desimal
2.7.2 Menampilkan Sebuah Berlian
3 Teknik Pemrograman Lanjut
3.1 Tujuan
3.2 Rekusif
3.2.1 Apa yang dimaksud dengan Recursif?
3.2.2 Recursif vs Iterasi
3.2.3 Factorials : contoh
3.2.4 Print n any Base :contoh yang lain
3.3 Abstract Data Tipe
3.3.1 Apa yang dimaksud dengan Abstrak Data Type?
3.3.2 Stacks
3.3.3 Queues
3.3.4 Sequential dan Linked representation
3.3.5 Sequential representation dari Integer stack
3.3.6 Linked list
3.3.7 Linked representation dari Integer stack
3.3.8 Java Collections
3.4 Latihan
3.4.1 Faktor Persekutuan Terbesar
3.4.2 Sequential representation dari Integer Queues
3.4.3 Linked representation dari Integer Queues
3.4.4 Address Book
4 Tour dari Package java.lang
4.1 Tujuan
4.2 Class Math
4.3 Class String dan StringBuffer
4.3.1 Constructor String
4.3.2 Method-method String
4.3.3 Class StringBuffer
4.4 Class-class Wrapper
Pengenalan Pemrograman 2
J.E.N.I
Pengenalan Pemrograman 2
J.E.N.I
Pengenalan Pemrograman 2
J.E.N.I
Pengenalan Pemrograman 2
J.E.N.I
Pengenalan Pemrograman 2
J.E.N.I.
BAB 1
Review Konsep Dasar dalam Java
1.1 Tujuan
Sebelum melangkah pada fitur-fitur menarik yang ada pada Java, mari kita melihat kembali
beberapa hal yang telah Anda pelajari pada pelajaran pemograman pertama Anda. Pembelajaran
kali ini menyajikan diskusi tentang perbedaan konsep-konsep berorientasi object dalam Java.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Mengetahui dan menggunakan konsep dasar beorientasi object.
class
object
atribut
method
cnstructor
2. Mengetahui dengan jelas tentang konsep lanjutan berorientasi object dan menggunakannya
dengan baik
package
enkapsulasi
abstraksi
pewarisan
polimorfisme
interface
3. Mengetahui dengan jelas penggunaan kata kunci this, super, final dan static
4. Membedakan antara method overloading dan method overridding
1.2.2 Class
Pengenalan Pemrograman 2
J.E.N.I.
Class mengizinkan Anda dalam mendeklarasikan tipe data baru. Ia dijalankan sebagai blueprint,
dimana model dari object yang Anda buat berdasarkan pada tipe data baru ini.
1.2.3 Object
Sebuah object adalah sebuah entiti yang memiliki keadaan, behaviour dan identitas yang yang
tugasnya dirumuskan dalam suatu lingkup masalah dengan baik. Inilah instance sebenarnya dari
sebuah class. Ini juga dikenal sebagai instance. Instance dibuat sewaktu Anda meng-instantiate
class menggunakan kata kunci new. Dalam sistem registrasi siswa, contoh dari sebuah object
yaitu entiti Student.
1.2.4 Atribut
Atribut menunjuk pada elemen data dari sebuah object. Atribut menyimpan informasi tentang
object. Dikenal juga sebagai member data, variabel instance, properti atau sebuah field data.
Kembali lagi ke contoh sistem registrasi siswa, atribut dari sebuah siswa adalah nomor siswa.
1.2.5 Method
Sebuah method menjelaskan behaviour dari sebuah object. Method juga dikenal sebagai fungsi
atau prosedur. Sebagai contoh, method yang mungkin tersedia untuk entiti siswa adalah method
register.
1.2.6 Constructor
Constructor adalah sebuah tipe khusus dari method yang digunakan untuk membuat dan
menginisialisasi sebuah object baru. Ingat bahwa constructor bukan member (yaitu atribut,
method atau inner class dari sebuah object).
1.2.7 Package
Package menunjuk pada pengelompokkan class dan/atau subpackages. Strukturnya dapat
disamakan dengan direktorinya.
1.2.8 Enkapsulasi
Enkapsulasi menunjuk pada prinsip dari menyembunyikan desain atau mengimplementasikan
informasi yang tidak sesuai pada object yang ada.
1.2.9 Abstraksi
Sementara enkapsulasi menyembunyikan detail, abstraksi mengabaikan aspek dari subyek yang
tidak sesuai dengan tujuan yang ada supaya lebih banyak mengkonsentrasikan yang ada.
1.2.10 Pewarisan
Pewarisan adalah hubungan antara class dimana dalam satu class ada superclass atau class induk
dari class yang lain. Pewarisan menunjuk pada properti dan behaviour yang diterima dari nenek
moyang dari class. Ini dikenal juga sebagai hubungan is-a. Perhatikan pada hirarki berikut.
Pengenalan Pemrograman 2
J.E.N.I.
SuperHero
UnderwaterSuperHero
FlyingSuperHero
1.2.11 Polimorfisme
Polimorfisme adalah kemampuan dari sebuah object untuk membolehkan mengambil beberapa
bentuk yang berbeda. Secara harfiah, poli berarti banyak sementara morph berarti bentuk.
Menunjuk pada contoh sebelumnya pada pewarisan, kita lihat bahwa object SuperHero dapat juga
menjadi object FlyingSuperHero atau object UnderwaterSuperHero.
1.2.12 Interface
Sebuah interface adalah sebuah contract dalam bentuk kumpulan method dan deklarasi
konstanta. Ketika sebuah class implements sebuah interface, ini mengimplementasikan semua
method yang dideklarasikan dalam interface.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Sebagai contoh:
class MethodDemo {
int data;
int getData() {
return data;
}
void setData(int data) {
this.data = data;
}
void setMaxData(int data1, int data2) {
data = (data1>data2)? data1 : data2;
}
}
J.E.N.I.
//di-instantiate
}
}
1.3.7 Package
Untuk menunjukkan bahwa file asal termasuk package khusus, kita gunakan syntax berikut:
<packageDeclaration> ::=
package <packageName>;
Untuk mengimpor package lain, kita gunakan syntax berikut:
<importDeclaration> ::=
import <packageName.elementAccessed>;
Pengenalan Pemrograman 2
J.E.N.I.
Sebagai contoh.
package registration.reports;
import registration.processing.*;
import java.util.List;
import java.lang.*;
//imported by default
class MyClass {
/* rincian dari MyClass */
Yes
default/package
protected
public
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
package yang
berbeda (nonsubclass)
Yes
1.3.9 Enkapsulasi
Menyembunyikan elemen dari penggunaan sebuah class dapat dilakukan dengan pembuatan
anggota yang ingin Anda sembunyikan secara private.
Contoh berikut menyembunyikan field secret. Catatan bahwa field ini tidak langsung diakses oleh
program lain menggunakan method getter dan setter.
class Encapsulation {
private int secret; //field tersembunyi
public boolean setSecret(int secret) {
if (secret < 1 || secret > 100) {
return false;
}
this.secret = secret;
return true;
}
public getSecret() {
return secret;
}
}
1.3.10 Pewarisan
Pengenalan Pemrograman 2
J.E.N.I.
Untuk membuat class anak atau subclass berdasarkan class yang telah ada, kita gunakan kata
kunci extend dalam mendeklarasikan class. Sebuah class hanya dapat meng-extend satu class
induk.
Sebagai contoh, class Point di bawah ini adalah superclass dari class ColoredPoint.
import java.awt.*;
class Point {
int x;
int y;
}
class ColoredPoint extends Point {
Color color;
}
Acces modifier untuk method yang dibutuhkan tidak harus sama. Bagaimanapun, acces modifier
Pengenalan Pemrograman 2
J.E.N.I.
dari method overridding mengharuskan salah satunya punya acces modifier yang sama seperti itu
dari method overridden atau acces modifier yang kurang dibatasi.
Perhatikan contoh selanjutnya. Periksa yang mana dari method overridding berikut akan
menyebabkan waktu meng-compile akan menyebabkan error.
class Superclass {
void overriddenMethod() {
}
}
class Subclass1 extends Superclass {
public void overriddenMethod() {
}
}
class Subclass2 extends Superclass {
void overriddenMethod() {
}
}
class Subclass3 extends Superclass {
protected void overriddenMethod() {
}
}
class Subclass4 extends Superclass {
private void overriddenMethod() {
}
}
Pengenalan Pemrograman 2
J.E.N.I.
Sebagai contoh:
abstract class SuperHero {
String superPowers[];
void setSuperPowers(String superPowers[]) {
this.superPowers = superPowers;
}
void printSuperPowers() {
for (int i = 0; i < superPowers.length; i++) {
System.out.println(superPowers[i]);
}
}
abstract void displayPower();
}
class UnderwaterSuperHero extends SuperHero {
void displayPower() {
System.out.println("Communicate with sea creatures...");
System.out.println("Fast swimming ability...");
}
}
class FlyingSuperHero extends SuperHero {
void displayPower() {
System.out.println("Fly...");
}
}
1.3.13 Interface
Mendeklarasikan sebuah interface pada dasarnya mendeklarasikan sebuah class tetapi sebagai
penggantinya menggunakan kata kunci class, kata kunci interface digunakan. Berikut syntax-nya.
<interfaceDeclaration> ::=
<modifier> interface <name> {
<attributeDeclaration>*
[<modifier> <returnType> <name>(<parameter>*);]*
}
dan
Class mengimplementasikan sebuah interface yang telah ada dengan menggunakan kata kunci
implements. Class ini dibuat untuk mengimplementasikan semua method interface. Sebuah class
boleh mengimplementasikan lebih dari satu interface.
10
J.E.N.I.
interface MyInterface {
void iMethod();
}
class MyClass1 implements MyInterface {
public void iMethod() {
System.out.println("Interface method.");
}
void myMethod() {
System.out.println("Another method.");
}
}
class MyClass2 implements MyInterface {
public void iMethod() {
System.out.println("Another implementation.");
}
}
class InterfaceDemo {
public static void main(String args[]) {
MyClass1 mc1 = new MyClass1();
MyClass2 mc2 = new MyClass2();
mc1.iMethod();
mc1.myMethod();
mc2.iMethod();
}
}
Contoh berikut menunjukkan bagaimana object this secara mutlak menunjuk ketika anggota nonPengenalan Pemrograman 2
11
J.E.N.I.
static dipanggil.
class ThisDemo2 {
int data;
void method() {
System.out.println(data);
//this.data
}
void method2() {
method();
//this.method();
}
Sebelum melihat ke contoh yang lain, mari pertama meninjau pengertian method overloading.
Constructor seperti juga method dapat juga menjadi overload. Method yang berbeda dalam class
dapat memberi nama yang sama asalkan list parameter juga berbeda. Method overloaded harus
berbeda dalam nomor dan/atau tipe dari parameternya. Contoh selanjutnya memiliki constructor
overloaded dan referensi this yang dapat digunakan untuk menunjuk versi lain dari constructor.
class ThisDemo3 {
int data;
ThisDemo3() {
this(100);
}
ThisDemo3(int data) {
this.data = data;
}
}
Petunjuk Penulisan Program:
Memanggil this() harus ada pernyataan pertama dalam constructor.
class Person {
String firstName;
String lastName;
Person(String fname, String lname) {
firstName = fname;
lastName = lname;
}
}
class Student extends Person {
String studNum;
Student(String fname, String lname, String sNum) {
super(fname, lname);
Pengenalan Pemrograman 2
12
J.E.N.I.
studNum = sNum;
}
}
Pengenalan Pemrograman 2
13
J.E.N.I.
14
J.E.N.I.
data++;
Method final tidak dapat di-override dalam class anak.
final void myMethod() { //in a parent class
}
myMethod tidak dapat lama di-override dalam class anak.
class final tidak dapat diwariskan tidak seperti class yang biasanya.
final public class MyClass {
}
Petunjuk Penulisan Program:
Perintah penulisan kata kunci final dan public memungkinkan bertukar tempat.
Pernyataan ini akan menyebabkan kesalahan compilation terjadi karena MyClass dapat tidak lama
di-extended.
public WrongClass extends MyClass {
}
Pengenalan Pemrograman 2
15
J.E.N.I.
1.4 Latihan
1.4.1 Tabel Perkalian
Tulis program yang mempunyai masukkan size dari user dan mencetak tabel perkalian dengan
size yang ditetapkan.
Size untuk tabel perkalian : 5
Tabel perkalian dari size 5:
1
12
16
10
15
20
25
Input 1: 1
Input 1: 9
Input 2: 15
Input 2: 2
Input 2: 27
Input 3: 35
Input 3: 3
Input 3: 12
GCF: 5
GCF: 1
GCF: 3
1.4.3 Shape
Buatlah class Shape. class memiliki dua field String: name dan size. class mempunyai method
printShapeInfo, dimana hanya mengeluarkan nilai name dan field size dari object Shape. Juga
memiliki method printShapeName dan printShapeSize, dimana mencetak nama dan size dari
object, berturut-turut.
Menggunakan pewarisan, buat class Square dengan field yang sama dan method seperti itu dari
class Shape. Class ini mempunyai dua tambahan field integer: length dan width. Method
printShapeLength dan printShapeWidth yang mencetak panjang dan lebar object yang juga
termasuk dalam class ini. Anda juga harus meng-override printShapeInfo untuk mencetak
keluaran field tambahan dalam subclass juga.
1.4.4 Binatang
Buatlah interface Animal yang mempunyai tiga method:eat dan move. Semua method ini tidak
punya argumen atau nilai return. Method ini hanya mengeluarkan bagaimana object Animal
makan dan bergerak. Sebagai contoh, seekor kelinci memakan wortel dan bergerak dengan
melompat. Buat class Fish dan Bear yang menggunakan interface Animal. Terserah kepada Anda
bagaimana menggunakan method eat dan move.
Pengenalan Pemrograman 2
16
J.E.N.I.
BAB 2
Exceptions dan Assertions
2.1 Tujuan
Dasar penanganan exception telah dikenalkan pada Anda di pelajaran pemrograman
pertama. Bab ini membahas secara lebih dalam mengenai exception dan sedikit
menyinggung tentang assertion.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Menangani exception dengan menggunakan try, catch dan finally
2. Membedakan penggunaan antara throw dengan throws
3. Menggunakan exception class yang berbeda beda
4. Membedakan antara checked exceptions dan unchecked exceptions
5. Membuat exception class tersendiri
6. Menjelaskan keunggulan penggunaan assertions
7. Menggunakan assertions
Pengenalan Pemrograman 2
J.E.N.I.
Error class digunakan oleh Java run-time untuk menangani error yang muncul pada
saat dijalankan. Secara umum hal ini di luar control user karena kemunculannya
disebabkan oleh run-time environment. Sebagai contoh adalah out of memory dan
harddisk crash.
Jika kode tersebut dijalankan, akan didapatkan pesan kesalahan sebagai berikut :
Exception in thread "main" java.lang.ArithmeticException: / by
zero at DivByZero.main(DivByZero.java:3)
Pesan tersebut menginformasikan tipe exception yang terjadi pada baris dimana
exception itu berasal. Inilah aksi default yang terjadi bila terjadi exception yang tidak
tertangani. Jika tidak terdapat kode yang menangani exception yang terjadi, aksi
default akan bekerja otomatis. Aksi tersebut pertama-tama akan menampilkan
deskripsi exception yang terjadi. Kemudian akan ditampilkan stack trace yang
mengindentifikasi method dimana exception terjadi. Pada bagian akhir, aksi default
tersebut akan menghentikan program secara paksa.
Bagaimana jika Anda ingin melakukan penanganan atas exception dengan cara yang
berbeda? Untungnya, bahasa pemrograman Java memiliki 3 keywords penting dalam
penanganan exception, yaitu try, catch dan finally.
Pengenalan Pemrograman 2
J.E.N.I.
try {
<code to be monitored for exceptions>
} catch (<ExceptionType1> <ObjName>) {
<handler if ExceptionType1 occurs>
}
...
} catch (<ExceptionTypeN> <ObjName>) {
<handler if ExceptionTypeN occurs>
}
Gunakan contoh kode tersebut pada program DivByZero yang telah dibuat
sebelumnya :
class DivByZero {
public static void main(String args[]) {
try {
System.out.println(3/0);
System.out.println(Cetak.);
} catch (ArithmeticException exc) {
//Reaksi atas kejadian
System.out.println(exc);
}
System.out.println(Setelah Exception.);
}
}
Pengenalan Pemrograman 2
J.E.N.I.
Bagian kode yang terdapat pada blok try dapat menyebabkan lebih dari satu tipe
exception. Dalam hal ini, terjadinya bermacam tipe kesalahan dapat ditangani
menggunakan beberapa blok catch. Perlu dicatat bahwa blok try dapat hanya
menyebabkan sebuah exception pada satu waktu, namun dapat pula menampikan
tipe exception yang berbeda di lain waktu.
Berikut adalah contoh kode yang menangani lebih dari satu exception :
class MultipleCatch {
public static void main(String args[]) {
try {
int den = Integer.parseInt(args[0]); //baris 4
System.out.println(3/den); //baris 5
} catch (ArithmeticException exc) {
System.out.println(Nilai Pembagi 0.);
} catch (ArrayIndexOutOfBoundsException exc2) {
System.out.println(Missing argument.);
}
System.out.println(After exception.);
}
}
Pada
contoh
ini,
baris
ke-4
akan
menghasilkan
kesalahan
berupa
ArrayIndexOutOfBoundsException bilamana seorang user alpa dalam memasukkan
argument, sedang baris ke-5 akan menghasilkan kesalahan ArithmethicException
jika pengguna memasukkan nilai 0 sebagai sebuah argument.
Pelajari apakah yang akan terjadi terhadap program bila argumen argumen berikut
dimasukkan oleh user :
a) Tidak ada argument
b) 1
c) 0
Penggunaan try bersarang diperbolehkan dalam pemrograman Java.
class NestedTryDemo {
public static void main(String args[]){
try {
int a = Integer.parseInt(args[0]);
try {
int b = Integer.parseInt(args[1]);
System.out.println(a/b);
} catch (ArithmeticException e) {
System.out.println(Divide by zero error!");
}
} catch (ArrayIndexOutOfBoundsException) {
System.out.println(2 parameters are required!");
}
}
Pengenalan Pemrograman 2
J.E.N.I.
}
Pelajari apa yang akan terjadi pada program jika argument argument berikut dimasukkan :
a) Tidak ada argumen
b) 15
c) 15
3
d) 15
0
Pengenalan Pemrograman 2
J.E.N.I.
Blok finally mengandung kode penanganan setelah penggunaan try dan catch. Blok
kode ini selalu tereksekusi walaupun sebuah exception terjadi atau tidak pada blok
try. Blok kode tersebut juga akan menghasilkan nilai true meskipun return, continue
ataupun break tereksekusi. Terdapat 4 kemungkinan skenario yang berbeda dalam
blok try-catch-finally. Pertama, pemaksaan keluar program terjadi bila control
program dipaksa untuk melewati blok try menggunakan return, continue ataupun
break. Kedua, sebuah penyelesaian normal terjadi jika try-catch-finally tereksekusi
secara normal tanpa terjadi error apapun. Ketiga, kode program memiliki spesifikasi
tersendiri dalam blok catch terhadap exception yang terjadi. Yang terakhir, kebalikan
skenario ketiga. Dalam hal ini, exception yang terjadi tidak terdefinisikan pada blok
catch manapun. Contoh dari skenario skenario tersebut terlihat pada kode berikut
ini :
class FinallyDemo {
static void myMethod(int n) throws Exception{
try {
switch(n) {
case 1: System.out.println("case pertama");
return;
case 3: System.out.println("case ketiga");
throw new RuntimeException("demo case
ketiga");
case 4: System.out.println("case keempat");
throw new Exception("demo case
keempat");
case 2: System.out.println("case Kedua");
}
} catch (RuntimeException e) {
System.out.print("RuntimeException terjadi: ");
System.out.println(e.getMessage());
} finally {
System.out.println("try-block entered.");
}
}
public static void main(String args[]){
for (int i=1; i<=4; i++) {
try {
FinallyDemo.myMethod(i);
} catch (Exception e){
System.out.print("Exception terjadi: ");
System.out.println(e.getMessage());
}
System.out.println();
}
}
}
Pengenalan Pemrograman 2
J.E.N.I.
Sebuah method perlu untuk menangkap ataupun mendaftar seluruh exceptions yang
mungkin terjadi, namun hal itu dapat menghilangkan tipe Error, RuntimeException,
ataupun subclass-nya.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Sekarang Anda sudah cukup familiar dengan beberapa exception classes, saatnya
untuk mengenalkan aturan : catch lebih dari satu harus berurutan dari subclass ke
superclass.
class MultipleCatchError {
public static void main(String args[]){
try {
int a = Integer.parseInt(args [0]);
int b = Integer.parseInt(args [1]);
System.out.println(a/b);
} catch (Exception e) {
System.out.println(e);
} catch (ArrayIndexOutOfBoundsException e2) {
System.out.println(e2);
}
System.out.println("After try-catch-catch.");
}
}
Setelah mengkompilasi kode tersebut akan menghasilkan pesan error jika Exception
class adalah superclass dari ArrayIndexOutOfBoundsException class.
MultipleCatchError.java:9: exception
java.lang.ArrayIndexOutOfBoundsException has already been caught
} catch (ArrayIndexOutOfBoundsException e2) {
Pengenalan Pemrograman 2
J.E.N.I.
2.6 Assertions
2.6.1 User Defined Exceptions
Assertions mengijinkan programmer untuk menentukan asumsi yang dihadapi.
Sebagai contoh, sebuah tanggal dengan area bulan tidak berada antara 1 hingga 12
dapat diputuskan bahwa data tersebut tidak valid. Programmer dapat menentukan
bulan harus berada diantara area tersebut. Meskipun hal itu dimungkinkan untuk
menggunakan contructor lain untuk mensimulasikan fungsi dari assertions, namun
sulit untuk dilakukan karena fitur assertion dapat tidak digunakan. Hal yang menarik
dari assertions adalah seorang user memiliki pilihan untuk digunakan atau tidak pada
saat runtime.
Assertion dapat diartikan sebagai extensi atas komentar yang menginformasikan
pembaca kode bahwa sebagian kondisi harus terpenuhi. Dengan menggunakan
assertions, maka tidak perlu untuk membaca keseluruhan kode melalui setiap
komentar untuk mencari asumsi yang dibuat dalam kode. Namun, menjalankan
program tersebut akan memberitahu Anda tentang assertion yang dibuat benar atau
salah. Jika assertion tersebut salah, maka AssertionError akan terjadi.
Pengenalan Pemrograman 2
10
J.E.N.I.
tambahan
java MyProgram
Namun, jika Anda ingin mengaktifkan assertions, Anda perlu menggunakan
parameter enableassertions atau ea.
class AgeAssert {
public static void main(String args[]) {
int age = Integer.parseInt(args[0]);
assert(age>0);
/* jika masukan umur benar (misal, age>0) */
if (age >= 18) {
System.out.println(Congrats! You're an adult!
=));
}
}
}
Pengenalan Pemrograman 2
11
J.E.N.I.
2.7 Latihan
2.7.1 Heksadesimal ke Desimal
Tentukan sebuah angka heksadesimal sebagai input. Konversi angka tersebut
menjadi bilangan desimal. Tentukan exception class Anda sendiri dan lakukan
penanganan jika input dari user bukan berupa bilangan heksadesimal.
*
***
*****
***
*
Pengenalan Pemrograman 2
12
J.E.N.I.
BAB 3
Teknik Pemrograman Lanjut
3.1 Tujuan
Modul ini mengenalkan suatu teknik pemrograman yang lebih tinggi. Dalam bagian ini
Anda akan mempelajari rekursif dan tipe data abstrak.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Memahami dan menggunakan rekursif
2. Mengetahui perbedaan antara stacks dan queues
2. Mengimplementasikan suatu implementasi sequensial dari stacks dan queues
3. Mengimplementasikan suatu implementasi linked dari stacks and queues
4. Menggunakan class-class Collection yang ada
3.2 Rekursif
3.2.1 Apa yang dimaksud dengan Rekursif?
Rekursif adalah teknik pemecahan masalah yang powerful dan dapat digunakan ketika
inti dari masalah terjadi berulang kali. Tentu saja, tipe dari masalah ini dapat dipecahkan
mengunakan perkataan berulang-ulang (yaitu, menggunakan konstruksi looping seperti
for, while dan do-while).
Sesungguhnya, iterasi atau perkataan berulang-ulang merupakan peralatan yang lebih
efisien jika dibandingkan dengan rekursif tetapi rekursif menyediakan solusi yang lebih
baik untuk suatu masalah. Pada rekursif, method dapat memanggil dirinya sendiri. Data
yang berada dalam method tersebut seperti argument disimpan sementara ke dalam
stack sampai method pemanggilnya diselesaikan.
Pengenalan Pemrograman 2
J.E.N.I.
Dengan iterasi, proses diakhiri ketika kondisi loop gagal atau salah. Dalam kasus dari
penggunaan rekursif, proses yang berakhir dengan kondisi tertentu disebut
permasalahan dasar yang telah tercukupi oleh suatu pembatasan kondisi. Permasalahan
yang mendasar merupakan kejadian yang paling kecil dari sebuah masalah. Sebagai
contoh, dapat dilihat pada kondisi rekursif pada faktorial, kasus yang mudah adalah
ketika masukannya adalah 1. 1 dalam kasus ini merupakan dasar dari masalah.
Penggunaan dari iterasi dan rekursif dapat bersama-sama memandu loops jika hal ini
tidak digunakan dengan benar.
Keuntungan iterasi dibandingkan rekursif adalah performance yang lebih baik. Hal
tersebut lebih cepat untuk rekursif sejak terbentuknya sebuah parameter pada sebuah
method yang menyebabkan adanya suatu CPU time. Bagaimanapun juga, rekursif
mendorong pelatihan perancangan software yang lebih baik, sebab teknik ini biasanya
dihasilkan dalam kode yang singkat yang lebih mudah untuk dimengerti dan juga
mempromosikan reusability pada suatu solusi yang sebelumnya telah diterapkan.
Memilih antara iterasi dan rekursif merupakan permasalahan dari menjaga
keseimbangan antara baiknya sebuah performance dan baiknya perancangan software.
J.E.N.I.
return result;
}
public static void main(String args[]) {
int n = Integer.parseInt(args[0]);
System.out.println(factorial(n));
}
}
Dibawah ini merupakan listing program yang sama tetapi menggunakan rekursif.
class FactorialRecur {
static int factorial(int n) {
if (n == 1) {
/* The base case */
return 1;
}
/* Recursive definition; Self-invocation */
return factorial(n-1)*n;
}
public static void main(String args[]) {
int n = Integer.parseInt(args[0]);
System.out.println(factorial(n));
}
}
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
3.3.2 Stacks
Stack adalah satu set atau urutan elemen data dimana manipulasi data dari elemenelemen hanya diperbolehkan pada tumpukan teratas dari stack. Hal ini merupakan
perintah pengumpulan data secara linier yang disebut last in, first out (LIFO). Stacks
berguna untuk bermacam-macam aplikasi seperti pattern recognition dan
pengkonversian antar notasi infix, postfix dan prefix.
Dua operasi yang dihubungkan dengan stacks adalah operasi push dan pop. Push berarti
memasukkan data ke dalam stacks yang paling atas dimana pop sebagai
penunjuk/pointer untuk memindahkan elemen ke atas stacks. Untuk memahami
bagaimana cara kerja stacks, pikirkan bagaimana Anda dapat menambah atau
memindakan sebuah data dari tumpukan data. Pikiran Anda akan memberitahu Anda
untuk menambah atau memindahkan data hanya pada stack yang paling atas karena
jika menggunakan cara lain, dapat menyebabkan tumpukan stack akan terjatuh.
Dibawah ini merupakan ilustrasi bagaimana tampilan dari stacks.
n-1
...
6
5
Jayz
KC
Jojo
Toto
Kyla
DMX
top
bottom
Stack akan berarti penuh jika jangkauan sel teratas disimbolkan dengan n-1. Jika nilai
teratas / top sama dengan -1, stack berarti kosong.
Pengenalan Pemrograman 2
J.E.N.I.
3.3.3 Queues
Queues adalah contoh lain dari ADT. Hal ini merupakan perintah pengumpulan data yang
disebut first-in, first-out. Aplikasi ini meliputi tugas penjadwalan dalam sistem operasi,
topological sorting dan graph traversal.
Enqueue dan dequeue merupakan operasi yang berhubungan dengan queues. Enqueue
menunjuk pada memasukkan data pada akhir queue sedangkan dequeue berarti
memindahkan elemen dari queue tersebut. Untuk mengingat bagaimana queue bekerja,
ingatlah arti khusus dari queue yaitu baris. Berikut ini bagaimana cara kerja queue.
Siapa yang akan mendapatkan kesempatan pertama untuk bertemu bintang idolanya
dari mereka yang sedang menunggu dalam sebuah barisan? Seharusnya orang pertama
yang berada pada barisan tersebut. Orang ini mendapat kesempatan pertama untuk
meninggalkan barisan. Hubungkan hal tersebut dengan bagaimana queue bekerja.
Berikut ini merupakan ilustrasi dari bagaimana tampilan dari queue.
0
Eve
Jayz
KC
Jojo
Toto
Kyla
DMX
front
end
...
n-1
Insert
Delete
Queue akan kosong jika nilai end kurang dari front. Sementara itu, akan penuh jika end
sama dengan n-1.
J.E.N.I.
SeqStack() {
memSpace = new int[10];
limit = 10;
}
SeqStack(int size) {
memSpace = new int[size];
limit = size;
}
boolean push(int value) {
top++;
/* memeriksa apakah stack penuh */
if (top < limit) {
memSpace[top] = value;
} else {
top--;
return false;
}
return true;
}
int pop() {
int temp = -1;
/* memeriksa apakah stack kosong */
if (top >= 0) {
temp = memSpace[top];
top--;
} else {
return -1;
}
return temp;
}
public static void main(String args[]) {
SeqStack myStack = new SeqStack(3);
myStack.push(1);
myStack.push(2);
myStack.push(3);
myStack.push(4);
System.out.println(myStack.pop());
System.out.println(myStack.pop());
System.out.println(myStack.pop());
System.out.println(myStack.pop());
}
}
Pengenalan Pemrograman 2
J.E.N.I.
Berikut ini merupakan contoh dari non-empty linked list dengan 3 node.
Berikut ini bagaimana class node diimplementasikan. Class ini dapat digunakan untuk
membuat linked list.
class Node {
int data;
Node nextNode;
}
class TestNode {
public static void main(String args[]) {
Node emptyList = null;
/* membuat list kosong */
/* head points untuk node pertama dalam list */
Node head = new Node();
/* inisialisasi node pertama dalam list */
head.data = 5;
head.nextNode = new Node();
head.nextNode.data = 10;
/* null menandai akhir dari list */
head.nextNode.nextNode = null;
/* mencetak elemen list */
Node currNode = head;
while (currNode != null) {
System.out.println(currNode.data);
currNode = currNode.nextNode;
}
}
}
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
<root interface>
Collection
<interface>
Set
<implementing classes>
HashSet
LinkedHashSet
TreeSet
<interface>
List
<implementing classes>
ArrayList
LinkedList
Vector
Berikut ini adalah daftar dari beberapa methods Collections yang disediakan dalam
Collection API dari Java 2 Platform SE v1.4.1. Dalam Java 2 Platform SE v.1.5.0,
methods ini telah dimodifikasi untuk menampung generic types. Karena generic types
masih belum selesai dibahas, sebaiknya mempertimbangkan method ini terlebih dahulu.
Pengenalan Pemrograman 2
10
J.E.N.I.
Disarankan bahwa Anda mengacu pada Collection methods yang terbaru dimana Anda
lebih mudah mengerti generic types, yang akan didiskusikan pada chapter berikutnya.
Collection Methods
public boolean add(Object o)
Memasukkan Object o ke dalam collection ini. Mengembalikan nilai true jika o telah
sukses ditambahkan ke dalam collection.
public void clear()
Menghapus semua elemen dari collection ini.
public boolean remove(Object o)
Menghapus single instance dari Object o pada collection ini, jika hal tersebut telah
diinputkan. Mengembalikan nilai true jika o telah ditemukan dan dihapus dari
collection.
public boolean contains(Object o)
Mengembalikan nilai true jika collection ini berisi Object o.
public boolean isEmpty()
Mengembalikan nilai true jika collection ini tidak berisi object atau elemen apapun.
public int size()
Mengembalikan jumlah dari elemen pada collection ini.
public Iterator iterator()
Mengembalikan sebuah iterator yang menunjukkan kita pada isi collection ini.
public boolean equals(Object o)
Mengembalikan nilai true jika Object o sama dengan yang ada pada collection ini.
public int hashCode()
Mengembalikan nilai hash code (yaitu ID) untuk collection ini. Objects atau collections
yang sama memiliki nilai hash code atau ID yang sama.
Tabel 1.2.8b: Methods dari class Collection
Anda diharapkan mengacu pada dokumentasi API untuk mengetahui daftar lengkap dari
methods dalam interface Collection, List dan Set.
Saat ini kita akan melihat beberapa classes collection. Harap mengacu pada API untuk
daftar dari methods yang dimasukkan ke dalam class ini.
Pada bagian sebelumnya, Anda telah melihat bagaimana mengimplementasikan linked
list dengan cara Anda sendiri. Java SDK juga telah menyediakan built-implementation
dari linked list untuk kita. Class LinkedList berisi methods yang memperbolehkan linked
list digunakan seperti stacks, queue atau ADT yang lain. Listing program berikut ini
menunjukan bagaimana menggunakan class LinkedList.
Pengenalan Pemrograman 2
11
J.E.N.I.
import java.util.*;
class LinkedListDemo {
public static void main(String args[]) {
LinkedList list = new LinkedList();
list.add(new Integer(1));
list.add(new Integer(2));
list.add(new Integer(3));
list.add(new Integer(1));
System.out.println(list + ", size = " + list.size());
list.addFirst(new Integer(0));
list.addLast(new Integer(4));
System.out.println(list);
System.out.println(list.getFirst() + ", " +
list.getLast());
System.out.println(list.get(2) + ", " + list.get(3));
list.removeFirst();
list.removeLast();
System.out.println(list);
list.remove(new Integer(1));
System.out.println(list);
list.remove(3);
System.out.println(list);
list.set(2, "one");
System.out.println(list);
}
}
ArrayList merupakan versi fleksibel dari array biasa. Yang mengimplementasikan List
interface. Telitilah kode berikut ini.
import java.util.*;
class ArrayListDemo {
public static void main(String args[]) {
ArrayList al = new ArrayList(2);
System.out.println(al + ", size = " + al.size());
al.add("R");
al.add("U");
al.add("O");
System.out.println(al + ", size = " + al.size());
al.remove("U");
System.out.println(al + ", size = " + al.size());
ListIterator li = al.listIterator();
while (li.hasNext())
System.out.println(li.next());
Object a[] = al.toArray();
for (int i=0; i<a.length; i++)
System.out.println(a[i]);
}
}
Pengenalan Pemrograman 2
12
J.E.N.I.
HashSet merupakan sebuah implementasi dari interface Set yang mempergunakan hash
table. Penggunaan suatu hash table lebih mudah dan cepat untuk melihat lebih detail
elemen-elemen yang ada. Tabel tersebut menggunakan suatu rumusan untuk
menentukan dimana suatu objek disimpan. Teliti program ini, yang menggunakan class
HashSet.
import java.util.*;
class HashSetDemo {
public static void main(String args[]) {
HashSet hs = new HashSet(5, 0.5f);
System.out.println(hs.add("one"));
System.out.println(hs.add("two"));
System.out.println(hs.add("one"));
System.out.println(hs.add("three"));
System.out.println(hs.add("four"));
System.out.println(hs.add("five"));
System.out.println(hs);
}
}
TreeSet merupakan sebuah implementasi dari interface Set yang menggunakan tree.
Class ini memastikan bahwa yang disortir akan diurutkan secara ascending. Perhatikan,
bagaimana class TreeSet telah digunakan dalam listing program berikut ini.
import java.util.*;
class TreeSetDemo {
public static void main(String args[]) {
TreeSet ts = new TreeSet();
ts.add("one");
ts.add("two");
ts.add("three");
ts.add("four");
System.out.println(ts);
}
}
Pengenalan Pemrograman 2
13
J.E.N.I.
3.4 Latihan
3.4.1 Faktor Persekutuan Terbesar
Faktor persekutuan terbesar (FPB) dari dua angka adalah angka yang terbesar selalu
dibagi oleh angka yang satunya, kemudian modulus atau sisa pembagian membagi
angka kedua dan seterusnya hingga sisa pembagian dari kedua angka tersebut sama
dengan nol. Menggunakan metode Euclid, buatlah dua kode untuk penghitungan dua
angka. Gunakan iterasi untuk kode program yang pertama dan rekursif untuk kode
program berikutnya.
Catatan pada algoritma Euclid :
1. Sebagai masukkan integers x dan y.
2. Ulangi step dibawah ini while y != 0
a. y = x % y;
b. x = Nilai lama y;
3. Return x.
Contoh, x = 14 dan y = 6.
y = x % y = 14 % 6 = 2
x=6
y=x%y=6%2=0
x = 2 (FPB)
Pengenalan Pemrograman 2
14
J.E.N.I.
BAB 4
Tour dari Package java.lang
4.1 Tujuan
Java datang dengan beberapa class built-in yang bermanfaat. Mari kita membahas classclass tersebut.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Menggunakan class-class Java yang telah ada
Math
String
StringBuffer
Wrapper
Process
System
Method-Method Math
public static double abs(double a)
Menghasilkan nilai mutlak a. Sebuah method yang di-overload. Dapat juga
menggunakan nilai float atau integer atau juga long integer sebagai parameter,
dengan kondisi tipe kembaliannya juga menggunakan float atau integer atau long
integer, secara berturut-turut.
public static double random()
Menghasilkan nilai positif bilangan acak (random) yang lebih besar atau sama dengan
0.0 tetapi kurang dari 1.0.
public static double max(double a, double b)
Menghasilkan nilai maksimum, diantara dua nilai double, a and b. Sebuah method
yang di-overload. Dapat juga menggunakan nilai float atau integer atau juga long
integer sebagai parameter, dengan kondisi tipe kembalinya juga menggunakan float
atau integer atau long integer, secara berturut-turut.
public static double min(double a, double b)
Menghasilkan nilai minimum diantara dua nilai double, a and b. Sebuah method yang
Pengenalan Pemrograman 2
J.E.N.I.
di-overload. Dapat juga menggunakan nilai float atau integer atau juga long integer
sebagai parameter, dengan kondisi tipe kembaliannya juga menggunakan float atau
integer atau long integer, secara berturut-turut.
public static double ceil(double a)
Menghasilkan bilangan bulat terkecil yang lebih besar atau sama dengan a.
public static double floor(double a)
Menghasilkan bilangan bulat terbesar yang lebih kecil atau sama dengan a.
public static double exp(double a)
Menghasilkan angka Euler, e pangkat a.
public static double log(double a)
Menghasilkan logaritma natural dari a.
public static double pow(double a, double b)
Menghasilkan a pangkat b.
public static long round(double a)
Menghasilkan pembulatan ke atas ke long terdekat. Sebuah method yang di-overload.
Dapat juga menggunakan float pada argument dan akan menghasilkan pembulatan
ke atas ke int terdekat.
public static double sqrt(double a)
Menghasilkan akar kuadrat a.
public static double sin(double a)
Menghasilkan sinus sudut a dalam radian.
public static double toDegrees(double angrad)
Menghasilkan nilai derajat yang kira-kira setara dengan nilai radian yang diberikan.
public static double toRadians(double angdeg)
Menghasilkan nilai radian yang kira-kira setara dengan nilai derajat yang diberikan.
Tabel 1.1: Beberapa method dari class Math
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
4.3.1
Constructor String
Class String mempunyai 11 constructor. Untuk melihat bagaimana constructorconstructor ini, perhatikan contoh berikut.
/* Contoh ini diambil dari catatan Dr. Encarnacion. */
class StringConstructorsDemo {
public static void main(String args[]) {
String s1 = new String(); // membuat string kosong
char chars[] = { 'h', 'e', 'l', 'l', 'o'};
String s2 = new String(chars); // s2 = "hello";
byte bytes[] = { 'w', 'o', 'r', 'l', 'd' };
String s3 = new String(bytes);
// s3 = "world"
String s4 = new String(chars, 1, 3);
String s5 = new String(s2);
String s6 = s2;
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
System.out.println(s5);
System.out.println(s6);
}
}
4.3.2
Method-method String
J.E.N.I.
Method-Method String
dengan objek tempat Anda memanggil equals. Sedangkan jika parameter yang
ditentukan bukan sebuah objek String atau jika tidak cocok dengan urutan simbol pada
string, method akan dikembalikan dengan nilai false.
public boolean equalsIgnoreCase(String anotherString)
Serupa dengan equals tetapi case insensitivity.
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
Mendapatkan characters dari string yang dimulai pada index srcBegin hingga index
srcEnd dan menyalin karakter-karakter tersebut pada array dst dimulai pada index
dstBegin.
public int length()
Menghasilkan panjang String.
public String replace(char oldChar, char newChar)
Mengganti karakter, semua yang kemunculan oldChar diganti newChar.
public String substring(int beginIndex, int endIndex)
Mengirim substring dimulai dari indeks beginIndex yang ditentukan dan berakhir
dengan indeks endIndex yang ditentukan.
public char[] toCharArray()
Mengembalikan array karakter yang sama dengan string ini.
public String trim()
Menghilangkan whitespace di awal dan akhir objek String.
public static String valueOf(-)
Dapat menggunakan tipe data sederhana seperti boolean, integer atau character, atau
juga menggunakan sebuah objek sebagai parameter. Mengirim objek String yang
merepresentasikan tipe tertentu yang dilewatkan sebagai parameter.
Tabel 1.2.1: Beberapa method dari class String
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
4.3.3
Class StringBuffer
Ketika objek String diciptakan, objek String tidak bisa lagi dimodifikasi. Objek
StringBuffer serupa dengan objek String, kecuali kenyataan bahwa objek StringBuffer
bersifat dapat berubah atau dapat dimodifikasi, sedangkan pada object String bersifat
konstan. Panjang dan isi dapat diubah hingga beberapa pemanggilan method.
Ini adalah beberapa method pada class StringBuffer. Lihatlah acuan pada dokumentasi
Java API.
Method-Method StringBuffer
public int capacity()
Mengirim jumlah memori yang dialokasikan untuk StringBuffer.
public StringBuffer append(-)
Appends merepresentasikan string dari argument untuk objek StringBuffer.
Menggunakan parameter tunggal seperti tipe-tipe data berikut: boolean, char, char [],
double, float, int, long, Object, String and StringBuffer. Masih mempunyai versi yang
di-overload lainnya.
public char charAt(int index)
Mengirim character di lokasi tertentu di StringBuffer yang ditentukan parameter index.
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
Mendapatkan characters dari objek yang dimulai pada indeks srcBegin hingga indeks
srcEnd dan menyalin karakter-karakter tersebut pada array dst dimulai pada indeks
dstBegin.
public StringBuffer delete(int start, int end)
Menghapus karakter-karakter pada range yang ditentukan.
public StringBuffer insert(int offset, -)
Menyisipkan beragam tipe data di offset tertentu di StringBuffer. Sebuah method yang
di-overload. Tipe data yang mungkin digunakan: boolean, char, char [], double, float,
int, long, Object and String. Masih mempunyai versi yang di-overload lainnya.
public int length()
Memperoleh panjang atau jumlah karakter di objek StringBuffer.
public StringBuffer replace(int start, int end, String str)
Mengganti bagian dari objek, seperti yang ditentukan oleh argumen kedua pertama,
dengan string str yang ditentukan.
public String substring(int start, int end)
Substring menyaring bagian tertentu dari string, dimulai pada penentuan indeks start
hingga indeks the end.
public String toString()
Mengkonversi objek ke representasi string.
Tabel 1.2.2: Beberapa method dari class StringBuffer
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Boolean
Boolean
Char
Character
Byte
Byte
Short
Short
Int
Integer
Long
Long
Float
Float
Double
Double
Tabel 1.3: Tipe data primitif dan class wrappernya yang sesuai
Nama-nama class wrapper cukup mudah untuk diingat selama nama-nama itu sama
dengan tipe data primitive. Dan juga sebagai catatan, bahwa class-class wrapper diawali
dengan huruf besar dan versi yang ditunjukkan dari tipe data primitive.
Di bawah ini contoh penggunaan class wrapper untuk boolean.
class BooleanWrapper {
public static void main(String args[]) {
boolean booleanVar = 1>2;
Boolean booleanObj = new Boolean("TRue");
/* primitif ke objek; dapat juga menggunakan method
valueOf */
Boolean booleanObj2 = new Boolean(booleanVar);
System.out.println("booleanVar = " + booleanVar);
System.out.println("booleanObj = " + booleanObj);
System.out.println("booleanObj2 = " + booleanObj2);
System.out.println("compare 2 wrapper objects: " +
booleanObj.equals(booleanObj2));
/* objek ke primitif */
booleanVar = booleanObj.booleanValue();
System.out.println("booleanVar = " + booleanVar);
}
}
Pengenalan Pemrograman 2
J.E.N.I.
Class Process
4.5.2
Class Runtime
Di sisi lain, class Runtime merepresentasikan lingkungan runtime. Dua method penting
pada class Runtime adalah method getRuntime dan exec.
Method-Method Runtime
public static Runtime getRuntime()
Mengirim objek runtime yang merepresentasikan
berhubungan dengan aplikasi Java saat itu.
lingkungan
runtime
yang
4.5.3
Berikut program untuk membuka registry editor tanpa harus mengetikkan perintah dari
command prompt.
class RuntimeDemo {
public static void main(String args[]) {
Runtime rt = Runtime.getRuntime();
Process proc;
try {
proc = rt.exec("regedit");
proc.waitFor();
//cobalah menghapus baris ini
} catch (Exception e) {
System.out.println("regedit is an unknown command.");
}
Pengenalan Pemrograman 2
10
J.E.N.I.
}
}
11
J.E.N.I.
Method-Method System
mengacu pada console.
Tabel 1.5: Beberapa method dari class System
Pengenalan Pemrograman 2
12
J.E.N.I.
4.7 Latihan
4.7.1
Evaluasi Ekspresi
4.7.2
10
72.35939938935488
11
87.20864179427238
Palindrome
Palindrome adalah sebuah string yang membaca sama ketika mengarah ke depan atau
sebaliknya. Beberapa contoh dari palindrome : hannah, ana, and bib. Menggunakan
String atau class StringBuffer, buatlah sebuah program yang menggunakan satu string
sebagai inputan dan tentukan jika ini sebuah palindrome atau bukan.
4.7.3
Notepad
Menggunakan class Process and Runtime, bukalah aplikasi notepad dari program java.
Pengenalan Pemrograman 2
13
J.E.N.I.
BAB 5
Aplikasi Berbasis Teks
5.1 Tujuan
Pembahasan kali ini akan menitikberatkan pada bahasan penggunaan argument
command-line. Selebihnya, Anda akan mempelajari mengenai penggunaan streams
untuk mendapatkan nilai input dari user pada saat runtime, sekaligus dalam proses
manipulasi file.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Mendapatkan input dari command-line
2. Mengetahui cara untuk memanipulasi properties dari sistem
3. Membaca standart input
4. Membaca dan menulis file
Pengenalan Pemrograman 2
J.E.N.I.
Kita tidak dapat cukup berhenti pada detail dari system properties, namun
dilanjutkan dengan memanipulasi system properties yang digunakan. Jika Anda
tertarik mempelajari lebih lanjut tentang system properties, Anda dapat menelusuri
dokumentasi API yang disediakan.
Anda dapat menggunakan argument opsional D pada perintah Java dalam
command-line untuk menambahkan property baru.
java -D<name>=value
Sebagai contoh, untuk mengatur system property dengan nama user.home bernilai
phillipines, gunakan perintah berikut :
java -Duser.home=philippines
Untuk menampilkan daftar system properties yang tersedia pada sistem Anda,
gunakan method getProperties seperti yang ditunjukkan sebagai berikut :
System.getProperties().list(System.out);
Pengenalan Pemrograman 2
J.E.N.I.
Method read dari object BufferedReader selanjutnya digunakan untuk membaca nilai
input dari perangkat input.
ch=(int)br.read(); //method read menghasilkan nilai integer
import java.io.*;
class FavoriteCharacter {
public static void main(String args[]) throws IOException {
System.out.println("Hi, what's your favorite character?");
char favChar;
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
favChar = (char) br.read();
System.out.println(favChar + " is a good choice!");
}
}
Jika Anda lebih memilih untuk membaca keseluruhan baris daripada membaca satu
karakter tiap waktu, gunakan method readLine :
str = br.readLine();
Berikut ini sebuah program yang hampir menyerupai contoh sebelumnya, namun
membaca keseluruhan string, bukan satu karakter.
import java.io.*;
class GreetUser {
public static void main(String args[]) throws IOException {
System.out.println("Hi, what's your name?");
String name;
Pengenalan Pemrograman 2
J.E.N.I.
Pada saat menggunakan streams, jangan lupa untuk mengimport package java.io
seperti yang ditunjukkan dibawah ini :
import java.io.*;
Satu hal lagi yang perlu untuk diingat, pembacaan dari streams dapat menyebabkan
terjadinya exception. Jangan lupa untuk menangani exception tersebut
menggunakan perintah try-catch atau dengan mengindikasikan exception pada
klausa throws dalam method.
Constructor tersebut membuat sebuah koneksi terhadap file dimana nama dari file
tersebut
ditunjukkan
sebagai
sebuah
argument.
Exception
berupa
FileNotFoundException akan muncul jika file tidak ditemukan atau tidak dapat dibuka
dan kemudian dibaca.
Setelah membuat sebuah input stream, Anda kemudian dapat menggunakannya
untuk membaca sebuah file dengan menggunakan method read. Method read
menghasilkan sebuah nilai integer, dan akan menunjukkan nilai 1 jika telah
mencapai batas akhir file.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Contructor tersebut menyediakan jalur output stream terhadap sebuah file yang
akan ditulis. Sebuah Exception berupa FileNotFoundException akan muncul jika file
yang dimaksud tidak dapat dibuka untuk ditulis.
Jika output stream telah dibuat, Anda dapat menggunakannya untuk menulis file
yang dituju menggunakan method write. Method tersebut menggunakan penandaan
sebagai berikut :
void write(int b)
Parameter b mereferensikan data yang akan dituliskan pada file sesuai dengan hasil
output stream.
import java.io.*;
class WriteFile {
public static void main(String args[]) throws IOException {
System.out.println("What is the name of the file to be
written
to?");
String filename;
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
filename = br.readLine();
System.out.println("Enter data to write to " + filename +
"...");
System.out.println("Type q$ to end.");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(filename);
} catch (FileNotFoundException ex) {
System.out.println("File cannot be opened for
writing.");
}
try {
boolean done = false;
int data;
do {
data = br.read();
if ((char)data == 'q') {
data = br.read();
if ((char)data == '$') {
done = true;
} else {
fos.write('q');
fos.write(data);
}
} else {
fos.write(data);
}
} while (!done);
} catch (IOException ex) {
System.out.println("Problem in reading from the
file.");
}
Pengenalan Pemrograman 2
J.E.N.I.
}
}
5.5 Latihan
5.5.1 Spasi menjadi Underscore ( _ )
Buatlah sebuah program yang memuat dua String sebagai argument, sumber dan
nama file tujuan. Kemudian, baca file sumber dan tuliskan isi dari file tersebut
terhadap file tujuan, seluruh spasi yang ada ( ) diubah menjadi underscore ( _ ).
Pengenalan Pemrograman 2
J.E.N.I.
BAB 6
Algoritma Sorting
6.1 Tujuan
Sorting adalah proses menyusun elemen elemen dengan tata urut tertentu dan
proses tersebut terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada
aplikasi perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif.
Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan
secara ascending demi kenyamanan dalam penelusuran data.
Beberapa macam algoritma sorting telah dibuat karena proses tersebut sangat
mendasar dan sering digunakan. Oleh karena itu, pemahaman atas algoritma
algoritma yang ada sangatlah berguna.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Memahami dan menjelaskan algoritma dari insertion sort, selection sort,
merge sort dan quick sort.
2. Membuat implementasi pribadi menggunakan algoritma yang ada
Pengenalan Pemrograman 2
J.E.N.I.
6.2.1 Algoritma
void insertionSort(Object array[], int startIdx, int endIdx) {
for (int i = startIdx; i < endIdx; i++) {
int k = i;
for (int j = i + 1; j < endIdx; j++) {
if (((Comparable) array[k]).compareTo(array[j])>0) {
k = j;
}
}
swap(array[i],array[k]);
}
}
1st Pass
2nd Pass
3rd Pass
4th Pass
Mango
Mango
Apple
Apple
Apple
Apple
Apple
Mango
Mango
Banana
Peach
Peach
Peach
Orange
Mango
Orange
Orange
Orange
Peach
Orange
Banana
Banana
Banana
Banana
Peach
Pada akhir modul ini, anda akan diminta untuk membuat implementasi bermacam
algoritma sorting yang akan dibahas pada bagian ini.
Pengenalan Pemrograman 2
J.E.N.I.
Ide utama dari algoritma selection sort adalah memilih elemen dengan nilai paling
rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai dari i dimulai
dari 1 ke n, dimana n adalah jumlah total elemen dikurangi 1.
6.3.1 Algoritma
void selectionSort(Object array[], int startIdx, int endIdx) {
int min;
for (int i = startIdx; i < endIdx; i++) {
min = i;
for (int j = i + 1; j < endIdx; j++) {
if (((Comparable)array[min]).compareTo(array[j])>0) {
min = j;
}
}
swap(array[min], array[i]);
}
}
1st Pass
2nd Pass
3rd Pass
4th Pass
Maricar
Hannah
Hannah
Hannah
Hannah
Vanessa
Vanessa
Margaux
Margaux
Margaux
Margaux
Margaux
Vanessa
Maricar
Maricar
Hannah
Maricar
Maricar
Vanessa
Rowena
Rowena
Rowena
Rowena
Rowena
Vanessa
Pengenalan Pemrograman 2
J.E.N.I.
6.4.3 Algoritma
void mergeSort(Object array[], int startIdx, int endIdx) {
if (array.length != 1) {
//Membagi rangkaian data, rightArr dan leftArr
mergeSort(leftArr, startIdx, midIdx);
mergeSort(rightArr, midIdx+1, endIdx);
combine(leftArr, rightArr);
}
}
Pengenalan Pemrograman 2
J.E.N.I.
7 2
5 6
Mengkombinasikan
2
7
Gambar 1.3.4: Contoh merge sort
6.5 Quicksort
Quicksort ditemukan oleh C.A.R Hoare. Seperti pada merge sort, algoritma ini juga
berdasar pada pola divide-and-conquer. Berbeda dengan merge sort, algoritma ini
hanya mengikuti langkah langkah sebagai berikut :
1. Divide
Memilah rangkaian data menjadi dua sub-rangkaian A[pq-1] dan A[q+1r]
dimana setiap elemen A[pq-1] adalah kurang dari atau sama dengan A[q]
dan setiap elemen pada A[q+1r] adalah lebih besar atau sama dengan
elemen pada A[q]. A[q] disebut sebagai elemen pivot. Perhitungan pada
elemen q merupakan salah satu bagian dari prosedur pemisahan.
Pengenalan Pemrograman 2
J.E.N.I.
2. Conquer
Mengurutkan elemen pada sub-rangkaian secara rekursif
Pada algoritma quicksort, langkah kombinasi tidak di lakukan karena telah terjadi
pengurutan elemen elemen pada sub-array
6.5.1 Algoritma
void quickSort(Object array[], int leftIdx, int rightIdx) {
int pivotIdx;
/* Kondisi Terminasi */
if (rightIdx > leftIdx) {
pivotIdx = partition(array, leftIdx, rightIdx);
quickSort(array, leftIdx, pivotIdx-1);
quickSort(array, pivotIdx+1, rightIdx);
}
}
Inisialisasi elemen kiri sebagai elemen kedua dan elemen kanan sebagai elemen
akhir.
kiri
3
kanan
4
Geser elemen kiri kearah kanan sampai ditemukan nilai yang lebih besar dari elemen
pivot tersebut. Geser elemen kanan ke arah kiri sampai ditemukan nilai dari elemen
yang tidak lebih besar dari elemen tersebut.
kiri
3
kanan
1
Pengenalan Pemrograman 2
kanan
1
J.E.N.I.
kanan
9
kanan
9
kanan
kiri
Terlihat bahwa titik kanan dan kiri telah digeser sehingga mendapatkan nilai elemen
kanan < elemen kiri. Dalam hal ini tukarkan elemen pivot dengan elemen kanan.
pivot
2
Kemudian urutkan elemen sub-rangkaian pada setiap sisi dari elemen pivot.
6.6 Latihan
6.6.1 Insertion Sort
Impelementasikan algoritma insertion sort dalam Java untuk mengurutkan
serangkaian data integer. Lakukan percobaan terhadap hasil implementasi anda
terhadap rangkaian data integer yang dimasukkan oleh pengguna melalui command
line.
Pengenalan Pemrograman 2
J.E.N.I.
class MergeSort {
static void mergeSort(int array[], int startIdx,
int endIdx) {
if(startIdx == _____) {
return;
}
int length = endIdx-startIdx+1;
int mid = _____;
mergeSort(array, _____, mid);
mergeSort(array, _____, endIdx);
int working[] = new int[length];
for(int i = 0; i < length; i++) {
working[i] = array[startIdx+i];
}
int m1 = 0;
int m2 = mid-startIdx+1;
for(int i = 0; i < length; i++) {
if(m2 <= endIdx-startIdx) {
if(m1 <= mid-startIdx) {
if(working[m1] > working[m2]) {
array[i+startIdx] = working[m2++];
} else {
array[i+startIdx] = _____;
}
} else {
array[i+startIdx] = _____;
}
} else {
array[_____] = working[m1++];
}
}
}
public static void main(String args[]) {
int numArr[] = new int[args.length];
for (int i = 0; i < args.length; i++) {
numArr[i] = Integer.parseInt(args[i]);
}
mergeSort(numArr, 0, numArr.length-1);
for (int i = 0; i < numArr.length; i++) {
System.out.println(numArr[i]);
}
}
}
6.6.4 Quicksort
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
BAB 7
Abstract Windowing Toolkit dan Swing
7.1 Tujuan
Tanpa mempelajari tentang grapichal user interface (GUI) API, Anda masih tetap bisa
membuat suatu program. Tetapi, program Anda akan kelihatan tidak menarik dan tidak
nyaman digunakan bagi para user. Memiliki GUI yang baik dapat memberi efek pada
penggunaan aplikasi. Java menyediakan banyak tool seperti Abstract Windowing Toolkit dan
Swing untuk mengembangkan aplikasi GUI yang interaktif.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Memahami persamaan dan perbedaan antara AWT dan Swing
2. Perbedaan antara komponen dan kontainer.
3. Mendesain aplikasi GUI menggunakan AWT.
4. Mendesain aplikasi GUI menggunakan Swing.
5. Menjelaskan tentang flow layout, border layout, dan grid layout dalam komponen GUI
6. Membuat tampilan yang komplek dalam mendesain aplikasi GUI.
Pengenalan Pemrograman 2
J.E.N.I.
Class AWT
Deskripsi
Komponen
Abstract Class untuk object yang dapat ditampilkan pada console dan
berinteraksi dengang user. Bagian utama dari semua class AWT.
Kontainer
Panel
Turunan dari Container Class. Sebuah frame atau window tanpa titlebar,
menubar tidak termasuk border. Superclass dari applet class.
Window
Turunan dari Container class. Top level window, dimana berarti tidak bisa
dimasukkan dalam object yang lainnya.Tidak memiliki border dan menubar.
Frame
Turunan dari window class. Window dengan judul, menubar, border dan
pengatur ukuran di pojok. Memiliki empat constructor , dua diantaranya
memiliki penulisan seperti dibawah ini :
Frame()
Frame(String title)
Pengenalan Pemrograman 2
J.E.N.I.
}
}
perhatikan bahwa tombol tutup pada frame tidak akan bekerja karena tidak ada mekanisme
event handling yang ditambahkan di dalam aplikasi. Anda akan belajar tentang event handling
pada modul selanjutnya.
7.3.2 Grafik
Beberapa method grafik ditemukan dalam class Graphic. Dibawah ini adalah daftar dari
beberapa method.
drawLine()
drawPolyline()
setColor()
fillRect()
drawPolygon()
getFont()
drawRect()
fillPolygon()
setFont()
clearRect()
getColor()
drawString()
Hubungan dari class ini adalah class Color, dimana memiliki tiga constructor.
Format Constructor
Deskripsi
Color(int rgbValue)
Dibawah ini adalah contoh program yang menggunakan beberapa method di dalam class
Graphic.
import java.awt.*;
public class GraphicPanel extends Panel {
GraphicPanel() {
setBackground(Color.black); //Konstanta dalam class Color
}
public void paint(Graphics g) {
g.setColor(new Color(0,255,0));
//hijau
g.setFont(new Font("Helvetica",Font.PLAIN,16));
g.drawString("Hello GUI World!", 30, 100);
g.setColor(new Color(1.0f,0,0));
//red
g.fillRect(30, 100, 150, 10);
}
public static void main(String args[]) {
Frame f = new Frame("Testing Graphics Panel");
Pengenalan Pemrograman 2
J.E.N.I.
Button
Choice
TextField
Checkbox
List
TextArea
CheckboxGroup
Scrollbar
Berikut adalah aplikasi membuat sebuah frame dengan kontrol yang telah dimasukkan di
dalamnya.
import java.awt.*;
class FrameWControls extends Frame {
public static void main(String args[]) {
FrameWControls fwc = new FrameWControls();
fwc.setLayout(new FlowLayout()); //akan dibahas lebih detail
pada pembahasan berikutnya
fwc.setSize(600, 600);
fwc.add(new Button("Test Me!"));
fwc.add(new Label("Labe"));
fwc.add(new TextField());
CheckboxGroup cbg = new CheckboxGroup();
fwc.add(new Checkbox("chk1", cbg, true));
fwc.add(new Checkbox("chk2", cbg, false));
fwc.add(new Checkbox("chk3", cbg, false));
List list = new List(3, false);
list.add("MTV");
list.add("V");
fwc.add(list);
Choice chooser = new Choice();
chooser.add("Avril");
chooser.add("Monica");
chooser.add("Britney");
fwc.add(chooser);
fwc.add(new Scrollbar());
Pengenalan Pemrograman 2
J.E.N.I.
fwc.setVisible(true);
}
}
Pengenalan Pemrograman 2
J.E.N.I.
FlowLayout Constructors
FlowLayout(int align, int hgap, int vgap)
Membuat object baru FlowLayout dengan argumen pertama sebagai posisi pada komponen
dan hgap untuk horizontal dan vgap untuk vertikal pada komponen
Gap dapat dikatakan sebagai jarak antara komponen dan biasanya diukur dengan satuan
pixel. Posisi argumen mengikuti penulisan sebagai berikut :
1.FlowLayout.LEFT
2.FlowLayout.CENTER
3.FlowLayout.RIGHT
7.4.2.BorderLayout Manager
BorderLayout membagi kontainer menjadi lima bagian diantaranya utara, selatan, timur,
Pengenalan Pemrograman 2
J.E.N.I.
barat, dan tengah. Setiap komponen dimasukkan ke dalam region yang spesifik. Region utara
dan selatan membentuk jalur horizontal sedangkan region timur dan barat membentuk jalur
vertikal. Dan region tengah berada pada perpotongan jalur horizontal dan vertikal. Tampilan
ini adalah bersifat default untuk object Window, termasuk object dari subclass Window yaitu
tipe Frame dan Dialog.
Constructor BorderLayout
BorderLayout()
Membuat object BorderLayout baru tanpa spasi yang diaplikasikan diantara komponen yang
berbeda.
BorderLayout(int hgap, int vgap)
Membuat object BorderLayout baru dengan spasi unit hgap horizontal dan unit vgap vertikal
yang diaplikasikan diantara komponen yang berbeda.
Seperti pada FlowLayout Manager, parameter hgap dan vgap disini juga menjelaskan jarak
antara komponen dengan kontainer.
BorderLayout.NORTH
BorderLayout.SOUTH
BorderLayout.EAST
BorderLayout.WEST
BorderLayout.CENTER
Berikut ini adalah contoh program yang menunjukkan bagaimana BorderLayout bekerja.
import java.awt.*;
class BorderLayoutDemo extends Frame {
public static void main(String args[]) {
BorderLayoutDemo bld = new BorderLayoutDemo();
bld.setLayout(new BorderLayout(10, 10)); //may remove
bld.add(new Button("NORTH"), BorderLayout.NORTH);
bld.add(new Button("SOUTH"), BorderLayout.SOUTH);
bld.add(new Button("EAST"), BorderLayout.EAST);
bld.add(new Button("WEST"), BorderLayout.WEST);
bld.add(new Button("CENTER"), BorderLayout.CENTER);
bld.setSize(200, 200);
bld.setVisible(true);
}
}
Berikut ini adalah hasil dari contoh program tersebut. Gambar kedua menunjukkan efek dari
mengubah bentuk dari frame.
Pengenalan Pemrograman 2
J.E.N.I.
J.E.N.I.
gld.add(new Button("THREE"));
gld.add(new Button("FOUR"));
gld.add(new Button("FIVE"));
gld.setSize(200, 200);
gld.setVisible(true);
}
}
Berikut ini adalah output dari program.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
10
J.E.N.I.
Komponen
Swing
Penjelasan
JComponent
JButton
JCheckBox
Item yang dapat dipilih atau tidak oleh pengguna. Berhubungan dengan
class checkbox dalam package AWT
JFileChooser
Pengenalan Pemrograman 2
11
J.E.N.I.
Komponen
Swing
Penjelasan
JTextField
JFrame
Turunan dan Berhubungan dengan class frame dalam package AWT tetapi
keduanya sedikit tidak cocok dalam kaitannya dengan menambahkan
komponen pada kontainer. Perlu mendapatkan content pane yang terbaru
sebelum menambah sebuah komponen.
JPanel
JApplet
Turunan dan Berhubungan dengan class Applet dalam package AWT. Juga
sedikit tidak cocok dengan class applet dalam kaitannya dengan
menambahkan komponen pada container
JOptionPane
JDialog
JColorChooser
Untuk daftar yang lengkap dari komponen Swing, Anda dapat melihatnya di dokumentasi API.
Pengenalan Pemrograman 2
12
J.E.N.I.
Pengenalan Pemrograman 2
13
J.E.N.I.
System.exit(0);
}
public static void main(String args[]) {
new JOptionPaneDemo().launchFrame();
}
}
7.6 Latihan
7.6.1 Tic-Tac-Toe
Buatlah tampilan GUI untuk program tic-tac-toe. Papannya terdiri dari enam kotak. Ingatlah
bahwa Anda akan menambahkan kode ini pada tahap akhir untuk mengatasi interaksi antar
pengguna. Jadi, desainlah papan Anda dengan benar. Pastikanlah Anda memilih komponen
yang pantas untuk papan tersebut. keluarkan semua sisi artistik Anda. Anda dapat
menggunakan AWT atau Swing untuk latihan ini.
Pengenalan Pemrograman 2
14
J.E.N.I.
BAB 8
GUI Event Handling
8.1 Tujuan
Pada modul ini, Anda akan belajar bagaimana mengendalikan events triggered ketika
user berinteraksi dengan aplikasi GUI Anda. Setelah menyelesaikan modul ini, Anda
akan dapat mengembangkan aplikasi GUI yang dapat merespon interaksi user.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Menerangkan komponen-komponen delegation event model
2. Mengerti bagaimana delegation event model bekerja
3. Menciptakan aplikasi GUI yang berinteraksi dengan user
4. Mendiskusikan manfaat dari class-class adapter
5. Mendiskusikan keuntungan-keuntungan dari menggunakan inner dan anonymous
class
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Class Event
Deskripsi
ComponentEvent Extends
AWTEvent.
Dijalankan
ketika
sebuah
dipindahkan, di-resize, dibuat visible atau hidden.
komponen
InputEvent
ActionEvent
ItemEvent
Extends AWTEvent. Dijalankan ketika sebuah item dipilih atau dideselect oleh user, seperti sebuah list atau checkbox.
KeyEvent
MouseEvent
TextEvent
Extends AWTEvent. Dijalankan ketika nilai dari text field atau text
area dirubah.
WindowEvent
J.E.N.I.
Deskripsi
ActionListener
MouseListener
MouseMotionListener
WindowListener
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
J.E.N.I.
}
public void mouseDragged(MouseEvent me) {
String msg = "Mouse dragged at " + me.getX() + "," +
me.getY();
tf.setText(msg);
}
public void mouseMoved(MouseEvent me) {
String msg = "Mouse moved at " + me.getX() + "," +
me.getY();
tf.setText(msg);
}
public static void main(String args[]) {
MouseEventsDemo med = new MouseEventsDemo("Mouse Events
Demo");
med.launchFrame();
}
}
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
10
J.E.N.I.
8.7 Latihan
8.7.1 Tic-Tac-Toe
Extend program papan Tic-Tac-Toe yang telah Anda kembangkan sebelumnya dan
tambahkan event handlers ke kode tersebut untuk membuat program berfungsi penuh.
Permainan Tic-Tac-Toe dimainkan dengan dua pemain. Pemain mengambil giliran
mengubah. Setiap giliran, pemain dapat memilih kotak pada papan. Ketika kotak dipilih,
kotak ditandai oleh simbol pemain (O dan X biasanya digunakan sebagai simbol).
Pemain yang sukses menaklukkan 3 kotak membentuk garis horisontal, vertikal, atau
diagonal, memenangkan permainan. Permainan akan berakhir ketika pemain menang
atau ketika semua kotak telah terisi.
Pengenalan Pemrograman 2
11
J.E.N.I.
BAB 9
Threads
9.1 Tujuan
Pada bab-bab sebelumnya Anda terbiasa untuk membuat program yang
berururutan/sekuensial. Sebuah program sekuensial berarti sebuah program yang hanya
memiliki satu aliran eksekusi. Setiap eksekusi, ia memiliki sebuah titik awal eksekusi,
kemudian sebuah sekuen eksekusi, dan kemudian berakhir. Selama runtime, pasti hanya
satu proses yang telah dieksekusi.
Bagaimanapun juga, di dunia nyata, pasti dibutuhkan sesuatu yang dapat mengatur
proses yang terjadi dan berjalan bersama-sama.Oleh karena itu, thread hadir untuk
menjadi solusi dalam mengatasi permasalahan tersebut.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Mendefiniskan threads
2. Mengerti perbedaan state dalam threads
3. Mengerti konsep prioritas dalam threads
4. Mengetahui bagaimana menggunakan method didalam class Thread
5. Membuat sendiri sebuah thread
6. Menggunakan sinkronisasi pada thread yang bekerja bersama-sama dan saling
bergantung satu dengan yang lainya
7. Memungkinkan thread untuk dapat berkomunikasi dengan thread lain yang
sedang berjalan
8. Mengerti dan menggunakan kemampuan concurency
Pengenalan Pemrograman 2
J.E.N.I.
9.2.3 Prioritas
Untuk menentukan thread mana yang akan menerima control dari CPU dan akan
dieksekusi pertama kali, setiap thread akan diberikan sebuah prioritas. Sebuah prioritas
adalah sebuah nilai integer dari angka 1 sampai dengan 10, dimana semakin tinggi
prioritas dari sebuah thread, berarti semakin besar kesempatan dari thread tersebut
untuk dieksekusi terlebih dahulu.
Sebagai contoh, asumsikan bahwa ada dua buah thread yang berjalan bersama-sama.
Thread pertama akan diberikan prioritas nomor 5, sedangkan thread yang kedua
memiliki prioritas 10. Anggaplah bahwa thread pertama telah berjalan pada saat thread
kedua dijalankan. Thread kedua akan menerima control dari CPU dan akan dieksekusi
pada saat thread kedua tersebut memiliki prioritas yang lebih tinggi dibandingkan thread
yang pada saat itu tengah berjalan. Salah satu contoh dari skenario ini adalah context
switch.
Sebuah context switch terjadi apabila sebagian dari thread telah dikontrol oleh CPU dari
Pengenalan Pemrograman 2
J.E.N.I.
thread yang lain. Ada beberapa skenario mengenai bagaimana cara kerja dari context
switch. Salah satu skenario adalah sebuah thread yang sedang berjalan memberikan
kesempatan kepada CPU untuk mengontrol thread lain sehingga ia dapat berjalan.
Dalam kasus ini, prioritas tertinggi dari thread adalah thread yang siap untuk menerima
kontrol dari CPU. Cara yang lain dari context switch adalah pada saat sebuah thread
yang sedang berjalan diambil alih oleh thread yang memiliki prioritas tertinggi seperti
yang telah dicontohkan sebelumnya.
Hal ini juga mungkin dilakukan apabila lebih dari satu CPU tersedia, sehingga lebih dari
satu prioritas thread yang siap untuk dijalankan. Untuk menentukan diantara dua thread
yang memiliki prioritas sama untuk menerima kontrol dari CPU, sangat bergantung
kepada sistem operasi yang digunakan. Windows 95/98/NT menggunakan time-slicing
dan round-robin untuk menangani kasus ini. Setiap thread dengan prioritas yang sama
akan diberikan sebuah jangka waktu tertentu untuk dieksekusi sebelum CPU mengontrol
thread lain yang memiliki prioritas yang sama. Sedangkan Solaris, ia akan membiarkan
sebuah thread untuk dieksekusi sampai ia menyelesaikan tugasnya atau sampai ia
secara suka rela membiarkan CPU untuk mengontrol thread yang lain.
9.3.2 Constants
Class Thread juga menyediakan beberapa constants sebagai nilai prioritas. Tabel berikut
Pengenalan Pemrograman 2
J.E.N.I.
9.3.3 Methods
Method-method inilah yang disediakan dalam class Thread.
Method-method Thread
public static Thread currentThread()
Mengembalikan sebuah reference kepada thread yang sedang berjalan.
public final String getName()
Mengembalikan nama dari thread.
public final void setName(String name)
Mengulang pemberian nama thread sesuai dengan argument name. Hal ini dapat
menyebabkan SecurityException.
public final int getPriority()
Mengembalikan nilai prioritas yang telah diberikan kepada thread tersebut.
public final boolean isAlive()
Menunjukkan bahwa thread tersebut sedang berjalan atau tidak.
public final void join([long millis, [int nanos]])
Sebuah overloading method. Sebuah thread yang sedang berjalan, harus menunggu
sampai thread tersebut selesai (jika tidak ada parameter-parameter spesifik), atau
sampai waktu yang telah ditentukan habis.
public static void sleep(long millis)
Menunda thread dalam
InterruptedException.
jangka
waktu
milis.
Hal
ini
dapat
menyebabkan
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
PrintNameThread(String name) {
super(name);
// menjalankan thread dengan satu kali instantiate
start();
}
public void run() {
String name = getName();
for (int i = 0; i < 100; i++) {
System.out.print(name);
}
}
}
class TestThread {
public static void
PrintNameThread
PrintNameThread
PrintNameThread
PrintNameThread
}
}
main(String args[]) {
pnt1 = new PrintNameThread("A");
pnt2 = new PrintNameThread("B");
pnt3 = new PrintNameThread("C");
pnt4 = new PrintNameThread("D");
Perhatikan bahwa variable reference pnt1, pnt2, pnt3, dan pnt4 hanya digunakan satu
kali. Untuk aplikasi ini, variabel yang menunjuk pada tiap thread pada dasarnya tidak
dibutuhkan. Anda dapat mengganti body dari main tersebut dengan pernyataan berikut
ini:
new
new
new
new
PrintNameThread("A");
PrintNameThread("B");
PrintNameThread("C");
PrintNameThread("D");
Program akan memberikan keluaran yang berbeda pada setiap eksekusi. Berikut ini
adalah salah satu contoh dari output-nya.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCDABCDABCDA
BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD
ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABC
DABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDBC
DBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBC
DBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBC
DBCDBCDBCDBCDBCDBCDBCD
J.E.N.I.
thread.start();
}
public void run() {
String name = thread.getName();
for (int i = 0; i < 100; i++) {
System.out.print(name);
}
}
}
class TestThread {
public static void main(String args[]) {
new PrintNameThread("A");
new PrintNameThread("B");
new PrintNameThread("C");
new PrintNameThread("D");
}
}
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
9.5 Sinkronisasi
Sampai sejauh ini, Anda telah melihat contoh-contoh dari thread yang berjalan bersamasama tetapi tidak bergantung satu dengan yang lainnya. Thread tersebut adalah thread
yang berjalan sendiri tanpa memperhatikan status dan aktifitas dari thread lain yang
sedang berjalan. Pada contoh tersebut, setiap thread tidak membutuhkan resource atau
method dari luar sehingga ia tidak membutuhkan komunikasi dengan thread lain.
Didalam situasi-situasi tertentu, bagaimanapun sebuah thread yang berjalan bersamasama kadang-kadang membutuhkan resource atau method dari luar. Oleh karena itu,
mereka butuh untuk berkomunikasi satu dengan yang lain sehingga dapat mengetahui
status dan aktifitas mereka. Contohnya adalah pada permasalahan produsen-konsumen.
Kasus ini membutuhkan dua object utama, yaitu produsen dan konsumen. Kewajiban
yang dimiliki oleh produsen adalah untuk membangkitkan nilai atau stream data yang
diinginkan oleh konsumen.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
10
J.E.N.I.
System.out.println(str2);
}
}
class PrintStringsThread implements Runnable {
Thread thread;
String str1, str2;
PrintStringsThread(String str1, String str2) {
this.str1 = str1;
this.str2 = str2;
thread = new Thread(this);
thread.start();
}
public void run() {
TwoStrings.print(str1, str2);
}
}
class TestThread {
public static void main(String args[]) {
new PrintStringsThread("Hello ", "there.");
new PrintStringsThread("How are ", "you?");
new PrintStringsThread("Thank you ", "very much!");
}
}
Program tersebut saat ini memberikan keluaran yang benar.
Hello there.
How are you?
Thank you very much!
Pengenalan Pemrograman 2
11
J.E.N.I.
this.str1 = str1;
this.str2 = str2;
this.ts = ts;
thread = new Thread(this);
thread.start();
}
public void run() {
synchronized (ts) {
ts.print(str1, str2);
}
}
}
class TestThread {
public static void main(String args[]) {
TwoStrings ts = new TwoStrings();
new PrintStringsThread("Hello ", "there.", ts);
new PrintStringsThread("How are ", "you?", ts);
new PrintStringsThread("Thank you ", "very much!", ts);
}
}
Program ini juga memiliki keluaran pernyataan-pernyataan yang benar.
Untuk mendapatkan penjelasan dari method ini, perhatikanlah skenario pelayanpelanggan. Pada skenario di sebuah restoran, seorang pelayan tidak akan menanyakan
ke setiap orang apakah mereka akan memesan atau membutuhkan sesuatu, akan tetapi
ia akan menunggu sampai pelanggan datang ke restoran tersebut. Pada saat seseorang
datang, hal ini mengindikasikan bahwa ia mempunyai keinginan untuk memesan
makanan dari restaurant tersebut. Atau juga dapat kita nyatakan bahwa pelanggan yang
memasuki restaurant mengindikasikan (notify) bahwa pelayan dibutuhkan untuk
memberikan pelayanan. Akan tetapi,dalam kondisi sepert ini, seorang pelanggan belum
Pengenalan Pemrograman 2
12
J.E.N.I.
Pengenalan Pemrograman 2
13
J.E.N.I.
class SharedData {
int data;
synchronized void set(int value) {
System.out.println("Generate " + value);
data = value;
}
synchronized int get() {
System.out.println("Get " + data);
return data;
}
}
class Producer implements Runnable {
SharedData sd;
Producer(SharedData sd) {
this.sd = sd;
new Thread(this, "Producer").start();
}
public void run() {
for (int i = 0; i < 10; i++) {
sd.set((int)(Math.random()*100));
}
}
}
class Consumer implements Runnable {
SharedData sd;
Consumer(SharedData sd) {
this.sd = sd;
new Thread(this, "Consumer").start();
}
public void run() {
for (int i = 0; i < 10 ; i++) {
sd.get();
}
}
}
class TestProducerConsumer {
public static void main(String args[]) throws Exception {
SharedData sd = new SharedData();
new Producer(sd);
new Consumer(sd);
}
}
Dibawah ini adalah contoh dari keluaran program :
Generate
Generate
Generate
Generate
Get 65
Generate
Get 23
Generate
Pengenalan Pemrograman 2
8
45
52
65
23
49
14
J.E.N.I.
Get 49
Generate
Get 35
Generate
Get 39
Generate
Get 85
Get 85
Get 85
Generate
Get 35
Get 35
35
39
85
35
Hasil tersebut bukanlah hasil yang kita harapkan. Kita berharap bahwa setiap nilai yang
diproduksi oleh produser dan juga kita akan mengansumsikan bahwa konsumen akan
mendapatkan nilai tersebut. Dibawah ini adalah keluaran yang kita harapkan.
Generate
Get 76
Generate
Get 25
Generate
Get 34
Generate
Get 84
Generate
Get 48
Generate
Get 29
Generate
Get 26
Generate
Get 86
Generate
Get 65
Generate
Get 38
Generate
Get 46
76
25
34
84
48
29
26
86
65
38
46
Untuk memperbaiki kode diatas, kita akan menggunakan method untuk komunikasi
interthread. Implementasi dibawah ini adalah implementasi dari permasalahan produsen
konsumen dengan menggunakan method untuk komunikasi interthread.
class SharedData {
int data;
boolean valueSet = false;
synchronized void set(int value) {
if (valueSet) { //baru saja membangkitkan sebuah nilai
try {
wait();
} catch (InterruptedException ie) {
}
}
System.out.println("Generate " + value);
data = value;
Pengenalan Pemrograman 2
15
J.E.N.I.
valueSet = true;
notify();
}
synchronized int get() {
if (!valueSet) { //produsen belum men-set sebuah nilai
try {
wait();
} catch (InterruptedException ie) {
}
}
System.out.println("Get " + data);
valueSet = false;
notify();
return data;
}
}
/* Bagian kode ini tidak ada yang berubah*/
class Producer implements Runnable {
SharedData sd;
Producer(SharedData sd) {
this.sd = sd;
new Thread(this, "Producer").start();
}
public void run() {
for (int i = 0; i < 10; i++) {
sd.set((int)(Math.random()*100));
}
}
}
class Consumer implements Runnable {
SharedData sd;
Consumer(SharedData sd) {
this.sd = sd;
new Thread(this, "Consumer").start();
}
public void run() {
for (int i = 0; i < 10 ; i++) {
sd.get();
}
}
}
class TestProducerConsumer {
public static void main(String args[]) throws Exception {
SharedData sd = new SharedData();
new Producer(sd);
new Consumer(sd);
}
}
Pengenalan Pemrograman 2
16
J.E.N.I.
Pengenalan Pemrograman 2
17
J.E.N.I.
Pada saat sebuah tugas dari Runnable telah dieksekusi dan diselesaikan dengan control
sebuah interface Executor. Untuk memberhentikan thread ini, kita dapat dengan mudah
memanggil method shutdown dari interface tersebut seperti berikut ini:
executor.shutdown();
18
J.E.N.I.
sebuah instance variable untuk menyimpan hasilnya. Kode berikut ini akan menunjukkan
bagaimana hal tersebut dilakukan.
public MyRunnable implements Runnable {
private int result = 0;
public void run() {
...
result = someValue;
}
/* Hasil dari attribute ini dijaga dari segala sesuatu
perubahan yang dilakukan oleh kode-kode lain yang
mengakses class ini */
public int getResult() {
return result;
}
}
Tulislah interface Callable, kemudian dapatkanlah hasil sesederhana yang ditampilkan
pada contoh dibawah ini.
import java.util.concurrent.*;
public class MyCallable implements Callable {
public Integer call() throws java.io.IOException {
...
return someValue;
}
}
Method call memiliki penulisan seperti berikut ini:
V call throws Exception
V adalah sebuah tipe generic yang berarti nilai pengembalian dari pemanggilan method
tersebut adalah tipe data reference apapun. Anda akan mempelajari tentang tipe data
generic di bab selanjutnya.
Masih ada lagi fitur-fitur concurrency dalam J2SE 5.0. Lihatlah lagi didalam dokumentasi
API untuk mendapatkan informasi lebih detail lagi mengenai fitur-fitur yang lain.
9.8 Latihan
9.8.1 Banner
Dengan menggunakan AWT atau Swing, buatlah sebuah banner sederhana yang akan
Pengenalan Pemrograman 2
19
J.E.N.I.
mencetak string yang dituliskan oleh user. String ini akan ditampilkan secara terus
menerus dan program Anda harus memberikan ilustrasi bahwa string tersebut bergerak
dari kiri ke kanan. Untuk memastikan bahwa proses perpindahannya tidak terlalu cepat,
Anda sebaiknya menggunakan method sleep dari class Thread.
Berikut ini adalah sebuah contoh dimana Anda menuliskan Your name here!.
Pengenalan Pemrograman 2
20
J.E.N.I.
BAB 10
Jaringan
Java memperbolehkan Anda dalam mempermudah pengembangan aplikasi yang mengerjakan
berbagai pekerjaan melalui jaringan. Ini adalah suatu cita-cita pembuatan Java yang menjadi
salah satu kekuatan Java sejak dapat dibuat untuk ditampilkan melalui internet. Sebelum
mempelajari tentang jaringan dalam Java. Pertama-tama Anda akan diperkenalkan kepada
beberapa konsep dasar jaringan.
Pada akhir pembahasan, diharapkan pembaca dapat :
1.Mengerti konsep dasar jaringan
IP address
protokol
ports
paradigma client/server
socket
2.Membuat aplikasi menggunakan package jaringan Java
ServerSocket
Socket
MulticastSocket
DatagramPacket
10.1.1 IP Address
Pada setiap komputer yang tersambung dengan internet memiliki alamat IP yang unik. Alamat
IP secara logika hampir sama dengan alamat pengiriman surat tradisional dimana memiliki arti
bahwa alamat yang bersifat unik tersebut mewakili dari keterangan sebuah object. Alamat
tersebut diwakilkan dalam 32-bit nomor yang digunakan sebagai pengenal yang bersifat unik
dari setiap komputer yang tersambung dengan internet. 192.1.1.1 adalah contoh dari sebuah
alamat IP. Mereka juga bisa ditulis dengan bentuk simbol seperti docs.rinet.ru.
10.1.2 Protokol
Karena terdapat jenis komunikasi yang berbeda-beda yang mungkin terjadi pada internet, di
sana harus terdapat suatu jumlah yang sama untuk mekanisme penangangan komunikasi.
Setiap jenis komunikasi membutuhkan protokol yang spesifik dan unik.
Protokol mengatur peraturan dan standar yang menetapkan jenis komunikasi internet yang
khusus. Hal tersebut menjelaskan format data yang dikirim lewat internet, seiring dengan
bagaimana dan kapan itu dikirim.
Konsep dari protokol tentunya tidak terlalu asing untuk kita. Mengingat sudah beberapa kali
Anda telah menggunakan jenis percakapan ini :
Pengenalan Pemrograman 2
J.E.N.I.
"Hallo."
"Hallo. Selamat siang. Bolehkah saya berbicara dengan Joan?"
"Okay, mohon tunggu sebentar."
"terima kasih."
...
Ini adalah protokol sosial yang digunakan ketika dalam pembicaraan melalui telepon. Jenis
protokol tipe ini memberikan kita kepercayaan untuk mengetahui apa yang harus dilakukan
dalam situasi tersebut. Mari kita lihat beberapa protokol penting yang digunakan pada
internet. Hypertext Transfer Protocol (HTTP) adalah salah satu protokol yang sering
digunakan. Digunakan untuk mentransfer dokumen HTML pada Web. Kemudian, ada juga File
Transfer Protocol (FTP) dimana lebih umum dibandingkan dengan HTTP dan memperbolehkan
Anda untuk mentransfer file biner lewat intenet. Kedua protokol tersebut memiliki peraturan
masing-masing dan standar dalam pengiriman data. Java juga mendukung kedua protokol
tersebut.
10.1.3 Port
Sekarang, protokol hanya bisa dipertimbangkan jika digunakan dalam konteks suatu jasa.
Sebagai contoh, protokol HTTP digunakan ketika Anda menyediakan isi Web melalui layanan
HTTP. Setiap komputer pada internet dapat menyediakan berbagai jenis layanan melalui
berbagai jenis protokol yang mendukung. Masalahnya, bagaimanapun juga, kita harus
mengetahui jenis layanan sebelum sebuah informasi dapat ditransfer. Untuk itulah port
digunakan.
Port adalah 16-bit nomor dimana mengenal setiap layanan yang ditawarkan oleh server
jaringan. Untuk menggunakan layanan khusus dan oleh karena itu, jalur komunikasi yang
melewati protokol tertentu, Anda perlu menyambungkan pada port yang sesuai. Port
dihubungkan dengan nomor dan beberapa nomor bersifat spesifik yang berhubungan dengan
jenis layanan khusus. Port dengan layanan pekerjaan tertentu disebut port standar. Sebagai
contoh, layanan FTP terletak pada port 21 sedangkan layanan HTTP terletak pada port 80. Jika
Anda ingin menggunakan file transfer FTP, Anda perlu terhubung dengan port 21 pada
komputer Anda. Sekarang, semua standar layanan tertentu diberikan nilai port dibawah 1024.
port dengan nilai diatas 1024 disediakan untuk komunikasi custom. Jika terdapat kasus
dimana port dengan nilai diatas 1024 telah digunakan oleh beberapa komunikasi custom, Anda
harus mencari nilai lain yang tidak digunakan.
Pengenalan Pemrograman 2
J.E.N.I.
10.1.5 sockets
Konsep umum jaringan yang terakhir sebelum kita membahas lebih dalam tentang Java
networking adalah dengan memperhatikan sockets. Kebanyakan pemrograman Java network
menggunakan jenis khusus dari komunikasi jaringan yang diketahui sebagai sockets.
Socket adalah software abstrak untuk media input atau output komunikasi. Socket digunakan
oleh Java untuk mengatasi komunikasi pada jaringan level rendah. Jalur komunikasi ini
memungkinkan untuk mentransfer data melalui port khusus. Singkatnya, socket adalah point
terakhir untuk komunikasi antara dua mesin.
Pengenalan Pemrograman 2
J.E.N.I.
Constructor ServerSocket
ServerSocket(int port)
Ketika sebuah server menetapkan suatu port tertentu, sebuah port 0 menugaskan sebuah
server kepada port bebas manapun. Panjang antrian maksimum untuk koneksi yang akan
datang diatur sebanyak 50 sebagai defaultnya.
ServerSocket(int port, int backlog)
Ketika sebuah server menetapkan suatu port tertentu, panjang antrian maksimum untuk
koneksi yang akan datang berdasarkan pada parameter backlog.
Tabel 1.2.1a: Constructor ServerSocket
Method ServerSocket
public Socket accept()
Menyebabkan server untuk menunggu dan mendengarkan dari koneksi client, kemudian
menerimanya.
public void close()
Menutup socket server. Client tidak dapat lagi terhubung ke server hingga dibuka kembali
public int getLocalPort()
Mengembalikan port dimana socket juga membatasi
public boolean isClosed()
Mendeteksi apakah socket tertutup atau belum
Tabel 1.2.1b: Method ServerSocket
Contoh yang berhasil melakukan implementasi sebuah server sederhana, dimana sebuah
informasi sederhana dikirim oleh client dapat dilihat pada listing program berikut ini :
import java.net.*;
import java.io.*;
public class EchoingServer {
public static void main(String [] args) {
ServerSocket server = null;
Socket client;
try {
server = new ServerSocket(1234);
Pengenalan Pemrograman 2
J.E.N.I.
Method Socket
public void close()
Menutup socket client
public InputStream getInputStream()
Menerima kembali input stream yang berhubungan dengan socket ini.
public OutputStream getOutputStream()
Menerima kembali output stream yang berhubungan dengan socket ini.
public InetAddress getInetAddress()
Pengenalan Pemrograman 2
J.E.N.I.
Method Socket
Mengembalikan alamat IP kepada socket ini pada saat masih terhubung.
public int getPort()
Mengembalikan remote port kepada socket ini pada saat masih terhubung.
public boolean isClosed()
Mendeteksi apakah socket telah tertutup atau tidak
Tabel 1.2.1d: Method Socket
Contoh yang berhasil melakukan implementasi sebuah client sederhana, dimana mengirim
data kepada server dapat dilihat pada listing program dibawah ini :
import java.io.*;
import java.net.*;
public class MyClient {
public static void main(String args[]) {
try {
//Socket client = new Socket("133.0.0.1", 1234);
Socket client = new Socket(InetAddress.getLocalHost(),
1234);
InputStream clientIn = client.getInputStream();
OutputStream clientOut = client.getOutputStream();
PrintWriter pw = new PrintWriter(clientOut, true);
BufferedReader br = new BufferedReader(new
InputStreamReader(clientIn));
BufferedReader stdIn = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Type a message for the server: ");
pw.println(stdIn.readLine());
System.out.println("Server message: ");
System.out.println(br.readLine());
pw.close();
br.close();
client.close();
} catch (ConnectException ce) {
System.out.println("Cannot connect to the server.");
} catch (IOException ie) {
System.out.println("I/O Error.");
}
}
}
Pengenalan Pemrograman 2
J.E.N.I.
Constructor MulticastSocket
MulticastSocket(int port)
Membuat multicast socket dibatasi dengan pemberian nomor port
Method MulticastSocket
public void joinGroup(InetAddress mcastaddr)
Bergabung dengan kelompok multicast pada alamat tertentu
public void leaveGroup(InetAddress mcastaddr)
Meninggalkan kelompok multicast pada alamat tertentu
public void send(DatagramPacket p)
Metode turunan dari class DatagramSocket. Mengirim p dari socket ini.
Tabel 1.2.2b:Method MulticastSocket
Sebelum seseorang dapat mengirim pesan kepada suatu kelompok, pertama kali yang harus
dilakukan oleh orang tersebut adalah harus menjadi anggota dari multicast kelompok dengan
menggunakan method joinGroup. Sekarang seorang anggota dapat mengirim pesan melalui
method send. Jika Anda telah selesai berbicara dengan kelompok, Anda dapat menggunakan
method leaveGroup untuk melepaskan keanggotaan Anda.
Sebelum melihat contoh dalam menggunakan class multicastSocket, pertama-tama mari kita
lihat pada class DatagramPacket. Perhatikan bahwa dalam method send dari class multiSocket,
dibutuhkan parameter yaitu object DatagramPacket. Sehingga, kita harus mengerti object
jenis ini sebelum menggunakan method send.
Class DatagramPacket digunakan untuk mengirim data melalui protokol connectionless seperti
multicast. Masalah yang ditimbulkan bahwa pengiriman packet tidak terjamin. Mari kita
perhatikan dua dari enam constructor.
Constructor DatagramPacket
DatagramPacket(byte[] buf, int length)
Constructor dari datagramPacket untuk menerima paket dengan panjang length. Seharusnya
kurang dari atau sama dengan ukuran dari buffer buf.
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
Constructor dari datagramPacket untuk mengirim paket dengan panjang length dengan
nomor port tertentu dan host tertentu.
Tabel 1.2.2c: Constructor DatagramPacket
Pengenalan Pemrograman 2
J.E.N.I.
Method-method DatagramPacket
public byte[] getData()
Mengembalikan buffer dimana data telah disimpan
public InetAddress getAddress()
Mengembalikan alamat IP mesin dimana paket yang dikirim atau yang diterima
public int getLength()
Mengembalikan panjang data yang dikirim atau diterima
public int getPort()
Mengembalikan nomor port pada remote host dimana paket yang dikirim atau yang diterima
Table 1.2.2d: Method DatagramPacket
Contoh multicast kita juga mengandung dua class, server dan client. Server menerima pesan
dari client dan mencetak pesan tersebut.
Berikut adalah class server
import java.net.*;
public class ChatServer {
public static void main(String args[]) throws Exception {
MulticastSocket server = new MulticastSocket(1234);
InetAddress group = InetAddress.getByName("234.5.6.7");
//getByName Mengembalikan alamat IP yang diberikan oleh Host
server.joinGroup(group);
boolean infinite = true;
/* Server terus-menerus menerima data dan mencetaknya*/
while(infinite) {
byte buf[] = new byte[1024];
DatagramPacket data = new DatagramPacket(buf,
buf.length);
server.receive(data);
String msg = new String(data.getData()).trim();
System.out.println(msg);
}
server.close();
}
}
Berikut adalah class client
import java.net.*;
import java.io.*;
public class ChatClient {
public static void main(String args[]) throws Exception {
MulticastSocket chat = new MulticastSocket(1234);
Pengenalan Pemrograman 2
J.E.N.I.
10.3 Latihan
10.3.1 Trivia Server
Buatlah sebuah server yang berisi satu set pertanyaan yang mudah. Secara sederhana, akan
ada sekitar 5-10 pertanyaan.
Client yang terhubung ke server mengirim sebuah permintaan untuk sebuah pertanyaan atau
jawaban sebuah pertanyaan, Client mengirim pesan permintaan. Untuk jawaban dari sebuah
pertanyaan, client mengirim pesan jawaban. Ketika menerima pesan permintaan, secara
acak server akan memilih satu pertanyaan dari koleksi yang ada. Dia mengirimkan pertanyaan
yang dipilih sesuai dengan nomor yang bersangkutan kepada client.
Ketika server menerima pesan jawaban dari client, dia menginformasikan user bahwa user
perlu mengirimkan jawaban sesuai dengan nomor pertanyaan kepada server. Jawaban itu
harus dalam format <no pertanyaan>#<jawaban Anda>.
Berikut adalah contoh skenario :
Client: "permintaan"
Server: "3#Siapa pembuat Java?"
Client: "jawaban"
Server: "Berikan jawabanmu dengan format: <nomor pertanyaanr>#<jawaban Anda>"
Client: "3#James Gosling"
Server: Kerja yang bagus!
...
Pengenalan Pemrograman 2
J.E.N.I.
BAB 11
Applet
11.1 Tujuan
Applet adalah satu fitur yang paling menarik dalam java. Applet merupakan program
yang Anda jalankan melalui web browser. Pada pembelajaran ini Anda akan belajar
tentang membuat sebuah applet.
init
start
stop
destroy
paint
showStatus
11.2
Membentuk Applet
Sebuah applet adalah tipe yang spesial dari program java yang dieksekusi melalui
internet. Secara khusus berjalan pada suatu web browser seperti Netscape Navigator,
Mozilla, atau Microsoft Internet Explorer. Bagaimanapun juga, jika dibandingkan dengan
aplikasi Java yang normal, tidak diperbolehkan mengakses applet pada komputer yang
dijalankan untuk alasan keamanan. Applet ini cukup terbatas jika dibandingkan dengan
aplikasi Java.
Pada module ini, Anda akan mempelajari tentang membuat applet menggunakan AWT.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Ketika membuat applet, sedikitnya beberapa dari method ini telah meng-override.
contoh applet berikut meng-override method berikut.
import java.applet.*;
import java.awt.*;
/*
<applet code="LifeCycleDemo" width=300 height=100>
</applet>
*/
class LifeCycleDemo extends Applet {
String msg ="";
public void init() {
msg += "initializing... ";
repaint();
}
public void start() {
msg += "starting... ";
repaint();
}
public void stop() {
msg += "stopping... ";
repaint();
}
public void destroy() {
msg += "preparing for unloading...";
repaint();
}
public void paint(Graphics g) {
g.drawString(msg, 15, 15);
}
}
Contoh dokumen html berikut tergabung dalam applet LifeCycleDemo .
<HTML>
<TITLE>Life Cycle Demo</TITLE>
<applet code="LifeCycleDemo" width=300 height=100>
</applet>
</HTML>
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Contoh dibawah ini mendemokan bagaimana untuk mengakses parameter tertentu pada
HTML tag.
import java.awt.*;
import java.applet.*;
/*
<applet code="ParamDemo" width=300 height=100>
<param name="myParam" value="Hello world!">
</applet>
*/
public class ParamDemo extends Applet {
public void paint(Graphics g) {
g.drawString(getParameter("myParam"), 80, 25);
}
}
Output dari program ini sama seperti applet Hello World.
Pengenalan Pemrograman 2
J.E.N.I.
11.5 Latihan
11.5.1 Tic-Tac-Toe Applet satu-player
Buat game satu-player Tic-Tac-Toe. User memainkannya melawan komputer. Untuk
setiap giliran, pemain harus menggeser kotak dari papan. Sekali sebuah kotak terpilih,
kotak tersebut ditandai oleh symbol pemain (O dan X yang selalu digunakan sebagai
simbol). pemain yang berhasil mengatasi 3 kotak membentuk baris horizontal, vertical
atau diagonal memenangkan game ini. Game ini berakhir ketika pemain menang atau
ketika semua kotak sudah berhasil dibentuk. Desain dan gerakan komputer seakan-akan
user akan memenangkan pertandingan melawan komputer.
Pengenalan Pemrograman 2
J.E.N.I.
BAB 12
Stream I/O Lanjut
12.1 Tujuan
Dalam module sebelumnya, Anda telah mempelajari bagaimana untuk mendapatkan
input user dan memanipulasi file-file menggunakan strea. Kini Anda akan mempelajari
lebih banyak tentang stream dan class-class stream yang lain.
Pada akhir pembahasan, diharapkan pembaca dapat :
1. Tahu tipe-tipe stream yang umum digunakan
2. Menggunakan class File dan methodnya
Karakter dan Stream byte
Input dan Output Streams
Node dan Filter Streams
3. Menggunakan class-class Input/Output yang berbeda
Reader
Writer
InputStream
OutputStream
4. Memahami konsep dari stream chaining
5. Mendefinisikan serialisasi
6. Memahami penggunaan dari kata kunci transient
7. Menulis dan membaca dari sebuah object stream
Pengenalan Pemrograman 2
J.E.N.I.
dari input stream tapi tidak menulisnya. Di lain pihak, Anda diperbolehkan untuk menulis
output streams tapi tidak membacanya.
Class InputStream dan class Reader adalah superclass-superclass dari semua input
stream. Class OutputStream dan class Writer adalah class-class root dari semua output
stream.
Input stream juga dikenal sebagai stream sumber (source stream) sejak kita
memperoleh informasi dari stream ini. sementara itu output stream disebut juga stream
hasil(sink stream).
Pengenalan Pemrograman 2
J.E.N.I.
Class File menyediakan beberapa method untuk memanipulasi file dan direktori. Berikut
ini beberapa dari method-method tersebut.
Method-method File
public String getName()
Mengembalikan nilai nama file atau nama direktori dari object File ini.
public boolean exists()
Menguji apakah sebuah file atau sebuah direktori masih ada atau tidak
public long length()
Mengembalikan nilai ukuran dari file.
public long lastModified()
Mengembalikan nilai tanggal dalam milidetik ketika file terakhir kali dimodifikasi.
public boolean canRead()
Mengembalikan nilai true jika dijinkan untuk membaca dari file. Sebaliknya, nilai
pengembaliannya bernilai false.
public boolean canWrite()
mengembalikan nilai true jika diijinkan untuk menulis ke sebuah file. Sebaliknya, nilai
pengembaliannya bernilai false.
public boolean isFile()
Menguji apakah object ini berupa sebuah file, yaitu persepsi normal kita tentang apa itu
sebuah file (bukan sebuah direktori) atau bukan.
public boolean isDirectory()
menguji apakah object ini adalah sebuah direktori atau bukan.
public String[] list()
Pengenalan Pemrograman 2
J.E.N.I.
Method-method File
Mengembalikan nilai daftar file dan subdirektori yang ada dalam object ini. Object ini
haruslah berupa sebuah direktori.
public void mkdir()
Membuat sebuah direktori yang merupakan abstraksi nama path ini.
public void delete()
Membuang file atau direktori yang sebenarnya diwakili oleh object File tersebut.
Table 1.2a: method-method File
Mari kita melihat bagaimana method ini bekerja berdasarkan contoh berikut ini :
import java.io.*;
public class FileInfoClass {
public static void main(String args[]) {
String fileName = args[0];
File fn = new File(fileName);
System.out.println("Name: " + fn.getName());
if (!fn.exists()) {
System.out.println(fileName + " does not exists.");
/* membuat sebuah temporary directory . */
System.out.println("Creating temp directory...");
fileName = "temp";
fn = new File(fileName);
fn.mkdir();
System.out.println(fileName +
(fn.exists()? "exists": "does not exist"));
System.out.println("Deleting temp directory...");
fn.delete();
System.out.println(fileName +
(fn.exists()? "exists": "does not exist"));
return;
}
System.out.println(fileName + " is a " +
(fn.isFile()? "file." :"directory."));
if (fn.isDirectory()) {
String content[] = fn.list();
System.out.println("The content of this directory:");
for (int i = 0; i < content.length; i++) {
System.out.println(content[i]);
}
}
if (!fn.canRead()) {
System.out.println(fileName + " is not readable.");
return;
}
System.out.println(fileName + " is " + fn.length() +
" bytes long.");
System.out.println(fileName + " is " + fn.lastModified()
+ " bytes long.");
if (!fn.canWrite()) {
Pengenalan Pemrograman 2
J.E.N.I.
public abstract int read(char[] cbuf, int offset, int length)- Membaca
karakter sejumlah panjang karakter tertentu dan menyimpannya dalam karakter cbuf
dimulai pada tanda offset khusus yang telah ditentukan.
public abstract void close() throws IOException
Menutup Stream ini. Memanggil method Reader yang lain setelah menutup stream akan
menyebabkan suatu IOException dijalankan.
public void mark(int readAheadLimit) throws IOException
Menandai posisi tertentu pada stream. Setelah menandai, panggil untuk melakukan
reset() kemudian stream akan mencoba mengatur posisinya kembali pada titik ini.
Tidak semua stream input karakter mendukung operasi ini.
public boolean markSupported()
mengindikasikan apakah sebuah stream mendukung operasi pemberian tanda (mark)
atau tidak Tidak didukung oleh default. Seharusnya bersifat overid subclass.
public void reset() throws IOException
Reposisi stream ke posisi akhir stream yang telah ditandai
Table 1.3.1: Method Reader
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
}
public static void main(String args[]) {
String inputFile = args[0];
String outputFile = args[1];
CopyFile cf = new CopyFile();
cf.copy(inputFile, outputFile);
}
}
Cobalah program tersebut sendiri dan amatilah apa ang terjadi pada file yang
dimanipulasi.
Pengenalan Pemrograman 2
J.E.N.I.
Pengenalan Pemrograman 2
10
J.E.N.I.
Pengenalan Pemrograman 2
11
J.E.N.I.
Pengenalan Pemrograman 2
12
J.E.N.I.
Pengenalan Pemrograman 2
13
J.E.N.I.
Pengenalan Pemrograman 2
14
J.E.N.I.
Pengenalan Pemrograman 2
15
J.E.N.I.
12.12 Serialisasi
Java Virtual Machine (JVM) mendukung kemampuan untuk membaca atau menulis
sebuah object ke bentuk stream. kemampuan ini disebut dengan serialisasi, proses
"flattening" sebuah object sehingga data tersebut dapat disimpan ke beberapa
penyimpanan permanen atau dilewatkan ke object lain melalui class OutputStream.
Ketika menulis sebuah object, ini merupakan hal yang penting bahwa keadaan tersebut
sudah tertulis dan telah diserialisasi dari setiap objectnya dapat dibangun kembali
sebagaimana dtaa tersebut dibaca. Menyimpan sebuah objectke beberapa tipe
penyimpanan permanen yang dikenal sebagai persistence.
Stream yang digunakan untuk deserialisasi dan serialisasi secara berurutan adalah class
ObjectInputStream dan ObjectOutputStream .
Untuk memungkinkan sebuah object diserialisasi (sebagai contoh dapat disimpan dan
diurutkan), Class tersebut harus mengimplementasikan interface yang dapat
diserialisasi. Class ini seharusnya juga menyediakan default constructor atau sebuah
constructor tanpa argumen. Satu hal yang baik mengenai kemampuan untuk melakukan
serialisasiyang dapat diturunkan, yang berarti kita tidak
memiliki implementasi
serialisasi pada setiap class. Ini berarti mengurangi pekrjaan untuk programmer. Anda
hanya dapat mengimplementasikan serialisasi sekali sepanjang hirarki class.
Pengenalan Pemrograman 2
16
J.E.N.I.
17
J.E.N.I.
}
System.out.println("Unserialized Boolean from " +
"boolean.ser");
System.out.println("Boolean data: " + booleanData);
System.out.println("Compare data with true: " +
booleanData.equals(new Boolean("true")));
}
public static void main(String args[]) {
UnserializeBoolean usb = new UnserializeBoolean();
}
}
12.13 Latihan
12.13.1 Enkripsi Sederhana
Baca dari sebuah file khusus oleh user dan encrypt isi file menggunakan teknik
penggeseran yang sederhana. Juga, tanyakan pada user untuk menginput ukuran
pergeseran. Output dari pesan yang telah di encrypt pada file yang lain yang memiliki
nama yang juga dibuat oleh user sendiri.
Sebagai contoh,
Ukuran pergeseran: 1
Pesan yang dibaca dari file: Hello
Pesan ter-encrypt: Ifmmp
Pengenalan Pemrograman 2
18
J.E.N.I.
BAB 13
Pengenalan Generics
13.1 Tujuan
Release Java terbaru menyediakan langkah terbesar dalam pemrograman Java
dibandingkan dengan versi-versi lain sebelumnya. Ini terdiri atas ekstensi yang cukup
signifikan terhadap source language syntax. Bagian yang paling terlihat yaitu
penambahan generic types.
Modul ini mengenalkan Anda konsep dasar mengenai Java generic types.
Pada akhir pembahasan, diharapkan pembaca dapat :
1.
2.
3.
4.
Pengenalan Pemrograman 2
J.E.N.I.
tipe class. Sama seperti, dia juga mempertahankan manfaat dari pengecekan tipe (type
checking). Kita dapat melanjutkannya dengan keperluan memiliki typecast elemen yang
kita dapatkan dari list dan memiliki pernyataan berikut terhadap pernyataan sebelumnya
:
String myString = myArrayList.get(0);
Walaupun downcasting sudah terhapus, ini bukan berarti bahwa Anda dapat menandai
segala sesuatu sebagai return value dari method get dan melanjutkannya dengan
typecasting semuanya. Jika Anda menandai sesuatu yang lain disamping sebuah String
untuk output dari method get, Anda akan menghadapi sebuah waktu mengcompile type
tidak sesuai seperti pesan berikut ini :
found: java.lang.String
required: java.lang.Integer
Integer data = myArrayList.get(0);
Agar hanya memiliki ide bagaimana type-type generic digunakan sebelum materi ini
dibahas lebih dalam, sebaiknya Anda pertimbangkan potongan kode berikut ini :
ArrayList <String> genArrList = new ArrayList <String>();
genArrList.add("A generic string");
String myString = genArrList.get(0);
JoptionPane.showMessageDialog(this, myString);
Amatilah melalui pernyataan, anda mungkin mengamati kata <String> segera terlihat
setelah referensi tipe data arraylist. Anda dapat menerjemahkan pernyataan pertama
sebagai instantiasi sebuah versi generic dari class ArrayList dan versi generic ini terdiri
dari object-object dari tipe String. genArrList adalah batas dari tipe String. Oleh sebab
itu, mengikat sebuah Integer atau beberapa tipe lain bukan String untuk hasil dari get
function akan menjadi illegal. Pernyataan berikut ini adalah illegal.
int myInt = genArrList.get();
Pengenalan Pemrograman 2
J.E.N.I.
Sekarang mari kita melalui bagian dari kode yang menggunakan syntax untuk type
generic.
Untuk deklarasi dari class BasicGeneric,
class BasicGeneric <A>
nama class diikuti oleh sepasang kurung yang didalamnya terdapat huruf kapital A:
<A>. Ini disebut dengan sebuah parameter tipe. Penggunaan kurung ini
mengindikasikan bahwa class yang dideklarasikan adalah class generic. Ini berarti bahwa
class tidak bekerja dengan beberapa type referensi khusus.
kemudian, amati bahwa sebuah field dari class dideklarasikan menjadi tipe A
private A data;
Deklarasi ini mengelompokkan bahwa field data adalah dari tipe generic, tergantung
pada tipe data yang telah didesain untuk bekerja dengan object BasicGeneric.
Ketika mendeklarasikan sebuah instance dari class, anda harus mengelompokkan tipe
referensi dengan yang mana yang anda inginkan untuk bekerja sama.
BasicGeneric <String> basicGeneric = new
BasicGeneric <String>(data1);
Syntax <String> setelah mendeklarasi BasicGeneric mengelompokkan bahwa instance
dari class ini akan bekerja dengan variabel-variabel bertipe String.
Anda juga dapat bekerja denga variabel-variabel bertipe Integer atau referensi tipe yang
lain. Untuk bekrja dengan Integer, potongan kode memiliki pernyataan berikut ini :
BasicGeneric <Integer> basicGeneric = new
Pengenalan Pemrograman 2
J.E.N.I.
BasicGeneric <Integer>(data1);
Anda mungkin dapat menerjemahkan sisa dari kode dengan pemahaman anda sendiri.
Mempertimbangkan deklarasi dari method getData .
public A getData() {
return data;
}
Method getData mengembalikan sebuah nilai dari tipe A, Sebuah Tipe type. Ini bukan
berarti bahwa method tidak akan memiliki tipe data runtime, atau even pada waktu
meng-compile. Setelah Anda mendeklarasikan sebuah object yang bertipe BasicGeneric,
A adalah pengikat ke sebuah tipe data yang spesifik. Instance ini akan berlaku sebagai
jika ini dideklarasikan untuk memiliki tipe data spesifik ini dan tipe ini hanya dari bagian
sangat awal.
Pada kode yang diberikan, dua instances dari class BasicGeneric terbentuk.
BasicGeneric <String> basicGeneric = new
BasicGeneric <String>(data1);
String data2 = basicGeneric.getData();
BasicGeneric <Integer> basicGeneric = new
BasicGeneric <Integer>(data1);
Integer data2 = basicGeneric.getData();
Perlu diperhatikan perhatian bahwa instantiasi dari class generic adalah hanya sama
dengan instantiasi sebuah class normal kecuali bahwa tipe data khusus berada dalam
<> menggantikan nama konstruktor. Informasi tambahan ini mengindikasikan tipe dari
data anda akan bekerja dengan siapa untuk bagian instance ini dari class
BasicGeneric.Setelah instantiasi, anda dapat mengakses anggota dari class melalui
instance sekarang. Tidak ada yang lebih diperlukan untuk typecast nilai pengembalian
dari method getData sejak diputuskan bahwa ini akan bekerja dengan sebuah referensi
tipe data yang spesifik.
13.3.1 Pembatasan"Primitive"
Sebuah pembatasan type generic dalam Java adalah mereka dibatasi oleh tipe referensi
dan tidak akan bekerja dengan tipe data primitive.
Sebagai contoh, pernyataan berikut akan menjadi illegal sejak int adalah sebuah tipe
data primitive.
BasicGeneric <int> basicGeneric = new
BasicGeneric <int>(data1);
Petama-tama Anda akan menyelesaikan type primitive sebelum menggunakan mereka
sebagai arguments ke sebuah type generic.
Pengenalan Pemrograman 2
J.E.N.I.
generic
Pengenalan Pemrograman 2
constrained
yang
dapat
memberikan
kita
penambahan
5
J.E.N.I.
Pengenalan Pemrograman 2
J.E.N.I.
13.6 Latihan
13.6.1 Swapping
Membentuk sebuah class dengan sebuah versi generic dari method printSwapped.
Method ini menukar secara sederhana nilai dari parameternya secara lokal dan mencetak
nilainya. Catatan bahwa pencetakan harus dilakukan pada method ini. Mencetak nilai
dari argument dalam method lain tidak akan bekerja karena Java melewatkan object ke
method melalui suatu nilai. Uji method ini pada object Integer, object String dan object
ArrayList.
Pengenalan Pemrograman 2