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
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. Memory, berdasarkan fungsinya
dibagi menjadi dua yaitu : a. Primary Memory Dipergunakan untuk menyimpan data dan
instruksi dari program yang sedang dijalankan. Biasa juga disebut sebagai RAM.
Karakteristik dari memori primer adalah : o o o Volatil (informasi ada selama
komputer bekerja. dipadamkan, informasi yang disimpannya juga hilang) Berkecepatan
tinggi Akses random (acak) Ketika komputer
b.
Secondary Memory Dipergunakan untuk menyimpan data atau program biner secara
permanen. Karakteristik dari memori sekunder adalah o o o Non volatil atau
persisten Kecepatan relatif rendah (dibandingkan memori primer) Akses random atau
sekuensial
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
2
J.E.N.I.
Output Device (Piranti Keluaran) Berfungsi sebagai media komputer untuk memberikan
keluaran. Beberapa contoh piranti keluaran : o o o o 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-
masingnya dapat saling berkomunikasi.
Pengenalan Pemrograman 1 3
J.E.N.I.
Tanpa ada sistem operasi maka komputer tidak dapat difungsikan sama sekali. 2.
Program Utility, seperti Norton Utility, Scandisk, PC Tools. Program utility
berfungsi untuk membantu atau mengisi kekurangan/kelemahan dari system operasi,
misalnya PC Tools dapat melakukan perintah format sebagaimana DOS, tapi PC Tools
mampu memberikan keterang dan animasi yang bagus dalam proses pemformatan. File
yang telah dihapus oleh DOS tidak dapat dikembalikan lagi tapi dengan program bantu
hal ini dapat dilakukan. 3. Program Aplikasi, seperti GL, MYOB, Payroll. Merupakan
program yang khusus melakukan suatu pekerjaan tertentu, seperti program gaji pada
suatu perusahaan. Maka program ini hanya digunakan oleh bagian keuangan saja tidak
dapat digunakan oleh departemen yang lain. Umumnya program aplikasi ini dibuat oleh
seorang programmer komputer sesuai dengan permintaan/kebutuhan
seseorang/lembaga/perusahaan guna keperluan interennya. 4. Program Paket Merupakan
program yang dikembangkan untuk kebutuhan umum, seperti : o o o o Pengolah kata
/editor naskah : Wordstar, MS Word, Word Perfect, AmiPro Pengolah angka / lembar
kerja : Lotus123, MS Excell, QuattroPro, dll Presentasi : MS PowerPoint Desain
grafis : CorelDraw, PhotoShop
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.
permasalahan, masalah – masalah yang terjadi harus dapat diketahui dan terdefinisi
dengan baik untuk mendapatkan detail persyaratan input dan output. Sebuah
pendefinisan yang jelas adalah sebagian dari penyelesaian masalah. Pemrograman
komputer mempersyaratkan untuk mendefiniskan program terlebih dahulu sebelum
membuat suatu penyelesaian masalah. Mari kita definisikan sebuah contoh
permasalahan :
”Buatlah sebuah program yang akan menampilkan berapa kali sebuah nama tampil pada
sebuah daftar”
1.5.2
Analisa Permasalahan
Setelah sebuah permasalahan terdefinisi secara memadai, langkah paling ringkas dan
efisien dalam penyelesaian harus dirumuskan. Umumnya, langkah berikutnya meliputi
beberapa bagian kecil dan ringkas. memecahkan masalah tersebut menjadi
Contoh masalah : Menampilkan jumlah kemunculan sebuah nama pada daftar Input
Terhadap Program : Daftar Nama, Nama yang akan dicari Output Dari Program : Jumlah
kemunculan nama yang dicari
Pengenalan Pemrograman 1
6
J.E.N.I.
Untuk setiap nama pada Daftar Nama lakukan : Jika nama == keyNama Hitung = Hitung +
1 Tampilkan Hitung
Pengenalan Pemrograman 1
7
J.E.N.I.
Simbol
Nama
Pengertian
Simbol ini digunakan untuk melambangkan kegiatan pemrosesan 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 Proses
Merepresentasikan fungsi I/O yang membuat data dapat diproses (input) atau – sebuah
ditampilkan (output) setelah mengalami eksekusi informasi Simbol ini digunakan
untuk menghubungkan setiap langkah dalam flowchart dan menunjukkan kemana arah
aliran diagram. Anak panah ini harus mempunyai arah dari kiri ke kanan atau dari
atas ke bawah. Anak panah ini juga dapat diberi label, khususnya jika keluar dari
symbol percabangan.
Simbol Anotasi
Pengenalan Pemrograman 1
8
J.E.N.I.
Simbol
Nama
Pengertian
Simbol ini digunakan untuk melambangkan percabangan, yaitu pemeriksaan terhadap
suatu kondisi. Dalam simbol ini, kita menuliskan keadaan yang harus dipenuhi. Hasil
dari pemeriksaan dalam simbol ini adalah YES atau NO. Jika pemeriksaan menghasilkan
keadaan benar, maka jalur yang harus dipilih adalah jalur yang berlabel Yes,
sedangkan jika pemeriksaan menghasilkan keadaan salah, maka jalur yang harus
dipilih adalah jalur yang berlabel No.
Simbol Percabangan
Terminator berfungsi untuk menandai awal dan akhir dari suatu flowchart. Simbol ini
biasanya diberi label START untuk menandai awal dari flowchart, dan label STOP
untuk menandai akhir Simbol Terminator dari flowchart. Jadi dalam sebuah flowchart
pasti terdapat sepasang terminator yaitu terminator start dan stop.
Simbol Konektor
Simbol konektor digunakan pada waktu menghubungkan suatu langkah dengan langkah
lain dalam sebuah flowchart dengan keadaan on page atau off page. On page connector
digunakan untuk menghubungkan suatu langkah dengan langkah lain dari flowchart
dalam satu halaman, sedangkan off page connector digunakan untuk menghubungkan
suatu langkah dengan langkah lain dari flowchart dalam halaman yang berbeda.
Connector ini biasanya dipakai saat media yang kita gunakan untuk menggambar
flowchart tidak cukup luas untuk memuat gambar secara utuh, jadi perlu
dipisahpisahkan. Dalam sepasang connector biasanya diberi label tertentu yang sama
agar lebih mudah diketahui pasangannya.
Simbol Prosedur
Simbol ini berperan sebagai blok pembangun dari suatu program. Prosedur memiliki
suatu flowchart yang berdiri sendiri diluar flowchart utama. Jadi dalam simbol ini,
kita cukup menuliskan nama prosedurnya saja, jadi sama seperti jika kita melakukan
pemanggilan suatu prosedur pada program utama (main program). Sama dengan aturan
pada simbol percabangan, penulisan nama prosedur dilakukan secara satu per satu.
Pengenalan Pemrograman 1
9
J.E.N.I.
Pengenalan Pemrograman 1
10
J.E.N.I.
11111102 10112
1768 138
7E16
Pengenalan Pemrograman 1
11
J.E.N.I.
B16
B
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
A 10
B 11
C 12
D 13
E 14
F 15
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 langkah –
langkah tersebut hingga hasil bagi akhir bernilai 0 atau 1. Kemudian susun nilai –
nilai sisa dimulai dari nilai sisa terakhir sehingga diperoleh bentuk biner dari
angka bilangan tersebut.
Pengenalan Pemrograman 1
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 di arsir. Setiap biner yang
bernilai 1 akan mengalami perhitungan, sedangkan yang bernilai 0 tidak akan
dihitung karena hanya akan menghasilkan nilai 0.
Nilai Sisa 6 7 1
Dengan menuliskan nilai sisa dari bawah ke atas, kita peroleh bilangan oktal 1768
Pengenalan Pemrograman 1
13
J.E.N.I.
12610 = ?
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
2 1
1 7
0 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
1 7
Pengenalan Pemrograman 1
15
J.E.N.I.
Mengubah sistem bilangan oktal menjadi bilangan biner dilakukan dengan cara
kebalikan dari konversi biner ke oktal. Dalam hal ini masing – masing digit
bilangan oktal diubah langsung menjadi bilangan biner dalam kelompok tiga bit,
kemudian merangkai kelompok bit tersebut sesuai urutan semula. Sebagai contoh :
1768 = ?
2
0
1.6.5.4 Biner ke Heksadesimal dan Heksadesimal ke Biner
Pengubahan bilangan Biner ke Heksadesimal dilakukan dengan pengelompokan setiap
empat bit Biner dimulai dari bit paling kanan. Kemudian konversikan setiap kelompok
menjadi satu digit Heksadesimal. Tabel berikut menunjukkan representasi bilangan
Biner terhadap digit Heksadesimal :
Digit Heksadesimal 0 1 2 3 4
Pengenalan Pemrograman 1
Digit Heksadesimal 5 6 7 8 9 A B C D E F
Representasi Biner 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
7E16 = ?
0
Pengenalan Pemrograman 1
17
J.E.N.I.
1.7 Latihan
1.7.1 Menyusun Algoritma
Dari permasalahan – permasalahan 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
rata – rata dari 3 buah bilangan
Pengenalan Pemrograman 1
18
J.E.N.I.
Pengenalan Pemrograman 1
1
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.
Java telah mengakomodasi hampir seluruh fitur penting bahasa – bahasa pemrograman
yang ada semenjak perkembangan komputasi modern manusia : 1. Dari SIMULA, bahasa
pada tahun 65-an, bahasa yang paling mempengaruhi Java sekaligus C++. Dari bahasa
ini diadopsi bentukan – bentukan dasar dari pemrograman berorientasi objek. 2. Dari
LISP – bahasa tahun 55-an. Diadopsi fasilitas garbage collection, serta kemampuan
untuk meniru generic list processing, meski fasilitas ini jarang yang
memanfaatkannya. 3. Dari Algol – bahasa pada tahun 60-an, diambil struktur kendali
yang dimilikinya. 4. Dari C++, diadopsi sintaks, sebagian semantiks dan exception
handling 5. Dari bahasa Ada, diambil strongly type, dan exception handling. 6. Dari
Objective C, diambil fasilitas interface. 7. Dari bahasa SmallTalk, diambil
pendekatan single-root class hiérarchie, dimana objek adalah satu kesatuan hirarki
pewarisan 8. Dari bahasa Eiffel, fasilitas assertion yang mulai diterapkan di
sebagian JDK 1.4
Pengenalan Pemrograman 1
2
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 oada 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 serbt a 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 kelas – kelas 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
3
J.E.N.I.
2.
3.
4.
5.
6.
7.
8.
9.
Pengenalan Pemrograman 1
4
J.E.N.I.
Inprise, Microsoft ataupun Symantec yang menggunakan Just In Time Compilers (JIT).
10. Multithreaded Java mempunyai kemampuan untuk membuat suatu program yang dapat
melakukan beberapa pekerjaan secara sekaligus dan simultan. Dynamic 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.
11.
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
5
J.E.N.I.
2.2.4.3
Code Security
Code Security terimplementasi pada Java melalui penggunaan Java Runtime Environment
(JRE). Java menggunakan model pengamanan 3 lapis untuk melindungi sistem dari
untrusted Java Code. 1. Pertama, class-loader menangani pemuatan kelas Java ke
runtime interpreter. Proses ini menyediakan pengamanan dengan memisahkan kelas –
kelas yang berasal dari local disk dengan kelas – kelas yang diambil dari jaringan.
Hal ini membatasi aplikasi Trojan karena kelas – kelas yang berasal dari local disk
yang dimuat terlebih dahulu. 2. Kedua, bytecode verifier membaca bytecode sebelum
dijalankan dan menjamin bytecode memenuhi aturan – aturan dasar bahasa Java. 3.
Ketiga, manajemen keamanan menangani keamanan tingkat aplikasi dengan mengendalikan
apakah program berhak mengakses sumber daya seperti sistem file, port jaringan,
proses eksternal dan sistem windowing. Setelah seluruh proses tersebut selesai
dijalankan, barulah kode program di eksekusi. Java juga menyediakan beragam teknik
pengamanan lain : 1. Bahasa dirancang untuk mempersulit eksekusi kode perusak.
Peniadaan pointer merupakan langkah besar pengamanan. Java tidak mengenal operasi
pointer. Di tangan pemrogram handal, operasi pointer merupakan hal yang luar biasa
untuk optimasi dan pembuatan program yang efisien serta mengagumkan. Namun mode ini
dapat menjadi petaka di hadapan pemrogram jahat. Pointer merupakan sarana luar
biasa untuk pengaksesan tak diotorisasi. Dengan peniadaan operasi pointer, Java
dapat menjadi bahasa yang lebih aman. 2. Java memiliki beberapa pengaman terhadap
applet. Untuk mencegah program bertindak mengganggu media penyimpanan, maka applet
tidak diperbolehkan melakukan open, read ataupun write terhadap berkas secara
sembarangan. Karena Java applet dapat membuka jendela browser yang baru, maka
jendela mempunyai logo Java dan teks identifikasi terhadap jendela yang dibuka. Hal
ini mencegah jendela pop-up menipu sebagai permintaan keterangan username dan
password.
Pengenalan Pemrograman 1
6
J.E.N.I.
Langkah pertama dalam pembuatan sebuah program berbasis Java adalah menuliskan kode
program pada text editor. Contoh text editor yang dapat digunakan antara lain :
notepad, vi, emacs dan lain sebagainya. Kode program yang dibuat kemudian tersimpan
dalam sebuah berkas berekstensi .java. Setelah membuat dan menyimpan kode program,
kompilasi file yang berisi kode program tersebut dengan menggunakan Java Compiler.
Hasil dari adalah berupa berkas bytecode dengan ekstensi .class. Berkas yang
mengandung bytecode tersebut kemudian akan dikonversikan oleh Java Interpreter
menjadi bahasa mesin sesuai dengan jenis dan platform yang digunakan.
Proses Menulis kode program Kompilasi program Menjalankan program Text editor
Tool
Hasil Berkas berekstensi .java Berkas berekstensi .class (Java Bytecodes) Program
Output
Pengenalan Pemrograman 1
7
J.E.N.I.
3.2 Pendahuluan
IDE adalah sebuah peralatan dalam pemrograman "ang diintegrasikan kedalam aplikasi
so)t*are "ang mendukung pembangunan +(I, te#t atau penulisan kode, compiler dan
debugger. utorial ini menggunakan (buntu Dapper sebagai sistem operasin"a. $ebelum
menggunakan tutorial ini, pastikan bah*a telah menginstal Java dan Net%eans dalam
sistem "ang anda gunakan. (ntuk instruksi dalam bagaimana cara menginstal Java dan
Net%eans, dapat dilihat pada Appendix A. (ntuk versi ,indo*s -p dalam sesi ini,
dapat dilihat pada Appendix B. $ebelum membahas lebih detail, pada a*aln"a akan
kita lihat program Java pertama "ang akan anda tulis.
.engenalan .emrograman I
1
J.E.N.I.
$ebelum menjelaskan apa arti dari program tersebut, cobalah untuk menulis program
ini didalam )ile dan kemudian menjalankann"a.
.engenalan .emrograman I
2
J.E.N.I.
.engenalan .emrograman I
3
J.E.N.I.
Langkah !% 'impanlah program ava anda .rogram ini akan disimpan dalam )ile "ang
bernama 112ello.java11, dan disimpan dalam sebuah )older "ang bernama
'3J/4/.56+5/'$. (ntuk membuka 'ave dialog bo#, klik pada 7ile menu "ang terdapat
pada menubar dan kemudian klik save. $etelah melakukan instruksi tersebut, dialog
bo# akan tampil seperti gambar diba*ah ini.
.engenalan .emrograman I
4
J.E.N.I.
.engenalan .emrograman I
5
J.E.N.I.
Nama )older baru, '3J/4/.56+5/'$. $ekarang, klik pada )older '3J/4/.56+5/'$ untuk
mengetahui isi )older "ang ada didalamn"a. /nda akan melihat gambar "ang
ditampilkan seperti berikut ini setelah anda klik pada )older tersebut. (ntuk saat
ini )older tersebut harus kosong sampai terbuatn"a )older baru dan kita akan
men"impan semuan"a didalam )older tersebut.
$aat ini, dalam pilihan te#tbo#, ketiklah nama )ile dari program anda, "aitu
112ello.java11, kemudian klik pada tombol $/4E.
.engenalan .emrograman I
6
J.E.N.I.
$ekarang anda telah men"impan )ile anda, ingatlah cara bagaimana nama )rame dapat
berubah dari 11(ntitled Document : (modi)ied) ; gedit11 menjadi <2ello.java
(=>'3J/4/.56+5/'$) ; gedit<. Jika anda ingin melakukan perubahan pada )ile anda,
anda han"a perlu mengeditn"a, kemudian men"impann"a kembali dengan mengklik pada
7ile-0$ave.
.engenalan .emrograman I
7
J.E.N.I.
erminal ,indo*
8etika anda membuka terminal *indo*, terminal tersebut menampilkan *indo* "ang
disebut sebagai home +older /nda. (ntuk melihat isi dari )older tersebut, ketik l#
dan kemudian tekan EN E5. /pa "ang akan anda temukan adalah da)tar )ile-)ile dan )
older didalamn"a. Disinilah /nda dapat melihat )older dengan nama <'3J/4/.56+5/'$<
"ang telah kita buat sebelumn"a, dan merupakan tempat dimana kita men"impan program
2ello.java kita. 8emudian masuklah kedalam direktori tersebut. (ntuk masuk kedalam
sebuah direktori, ketiklah perintah & *d ,dire*tor- name.. .erintah 11cd11
digunakan untuk merubah direktori. Dalam hal ini, nama dari direktori kita adalah
'3J/4/.56+5/', maka anda harus mengetik & *d M/ A0AP1231AM'.
Gambar 6: Merubah
irektori
.engenalan .emrograman I
8
J.E.N.I.
$etelah berada didalam )older "ang berisi program Java /nda, sudah saatn"a untuk
memulai meng-compile program Java tersebut. $ebagai catatan, bah*a )ile "ang /nda
maksud harus ada didalam )older "ang /nda pilih. .eriksalah dengan menjalankan
perintah 11ls11 lagi untuk melihat bah*a )ile /nda ada didalam )older tersebut.
Gambar 7:
(ntuk meng-compile program Java, gunakanlah perintah & java* ,+ilename.. Dalam hal
ini, /nda mengetikan perintah & java* 4ello. ava.
.engenalan .emrograman I
10
J.E.N.I.
3.4.1 Errors
/pa "ang telah ditunjukan sejauh ini adalah program Java dimana kita tidak
menemukan berbagai masalah dalam proses compiling maupun pada saat menjalankann"a.
%agaimanapun juga, hal ini tidak selalu terjadi. $eperti "ang telah kita diskusikan
pada bagian pertama dari latihan ini, biasan"a kita juga akan menemukan
permasalahan selama proses berlangsung. (eperti yang telah didiskusikan sebelumnya)
ada * ma#am error+ ,ertama adalah #ompile"time error atau yang disebut &uga sebagai
syntax error+ -edua adalah runtime errors+ 3.!.$.$ '-ntax Error# $"nta# errors
biasan"a terjadi karena kesalahan penulisan. 'ungkin /nda kekurangan sebuah
perintah di Java atau lupa untuk menulis tanda titik-koma pada akhir pern"ataan.
Java mencoba untuk mengisolasi error tersebut dengan cara menunjukkan baris dari
kode dan terlebih dahulu menunjuk karakter "ang salah dalam baris tersebut.
%agaimanapun juga, error belum tentu berada pada titik "ang ditunjuk. 8esalahan
umum lainn"a adalah dalam kapitalisasi, ejaan, penggunaan dari karakter khusus "ang
tidak benar, dan penghilangan dari pemberian tanda baca "ang sebenarn"a. 'ari kita
mengambil contoh, pada program 2ello.java kita, dimana dengan sengaja kita
hilangkan titik-koma pada akhir pern"ataan dan juga mencoba untuk mengetikkan ejaan
"ang salah pada sebuah perintah.
.engenalan .emrograman I
11
J.E.N.I.
Jika anda menemukan ban"ak pesan error, cobalah untuk mengoreksi kesalahan "ang
pertama pada da)tar error satu per satu, dan mencoba untuk meng-compile-n"a
kembali. Dengan melakukan hal tersebut maka, dapat mengurangi total error "ang ada.
3.!.$.2 1un)time Error# 5un-time error merupakan error "ang tidak akan ditampilkan
sampai anda menjalankan program anda. %ahkan program "ang dicompile dengan sukses
dapat menampilkan ja*aban "ang salah jika programmer belum berpikir sampai struktur
dan proses logis dari program tersebut.
.engenalan .emrograman I
12
J.E.N.I.
.engenalan .emrograman I
13
J.E.N.I.
9ara kedua untuk menjalankan Net%eans, adalah dengan mengklik shortcut icon "ang
terdapat pada desktop /nda.
.engenalan .emrograman I
14
J.E.N.I.
$etelah /nda membuka Net%eans IDE, /nda akan melihat graphical user inter)ace (+(I)
seperti "ang ditunjukkan diba*ah ini.
.engenalan .emrograman I
15
J.E.N.I.
Langkah 2% Mem&uat #e&uah Proje*t .ertama, mari kita buat sebuah project. 8lik pada
7ile-0Ne* .roject. $etelah melakukann"a, akan ditampilkan kotak dialog project "ang
baru. 8emudian klik pada Java /pplication dan klik tombol NE- .
.engenalan .emrograman I
16
J.E.N.I.
.engenalan .emrograman I
17
J.E.N.I.
9obalah untuk mengubah lokasi aplikasi, dengan mengklik pada tombol %56,$E.
8emudian dialog lokasi project akan muncul. 8lik dua kali pada home )older /nda.
8emudian isi dari )older root akan ditampilkan. ?alu klik dua kali pada )older
'3J/4/.56+5/'$ dan klik tombol 6.EN.
.engenalan .emrograman I
18
J.E.N.I.
)older
project
telah
berubah
menjadi
3ang terakhir, pada te#t)ield 9reate 'ain 9lass, tulislah 2ello sebagai nama kelas
utama, dan kemudian klik tombol 7INI$2.
.engenalan .emrograman I
19
J.E.N.I.
Langkah 3 % Menuli# Program Anda $ebelum menulis program, pertama akan dijelaskan
*indo* utama setelah membuat project. $eperti ditunjukkan diba*ah, secara otomatis
Net%eans membuat kode dasar untuk program Java /nda. /nda han"a dapat menambah
pern"ataan /nda pada kode "ang dihasilkan itu. .ada sisi kiri *indo*, /nda dapat
melihat da)tar )older dan )ile-)ile "ang dihasilkan Net%eans setelah membuat sebuah
project. $emua ini dapat /nda temukan dalam )older '3J/4/.56+5/'$ /nda, dimana /nda
menetapkan lokasi project tersebut.
.engenalan .emrograman I
20
J.E.N.I.
$ekarang, mencoba memodi)ikasi kode "ang dihasilkan oleh Net%eans. (ntuk saat ini
abaikan bagian-bagian lain dari program, detail dari kode tersebut akan dijelaskan
pada bagian berikutn"a. 'asukkan kode & System#out#println(!Hello "orld$!)% $etelah
pern"ataan, >> 6D6 code application logic here.
.engenalan .emrograman I
21
J.E.N.I.
.engenalan .emrograman I
22
J.E.N.I.
Jika tidak terdapat error pada program /nda, /nda dapat melihat pesan sukses build
pada *indo* "ang dihasilkan.
.engenalan .emrograman I
23
J.E.N.I.
Langkah ( % Menjalankan Program Anda (ntuk menjalankan program /nda, klik pada 5un-
05un 'ain .roject. /tau /nda juga dapat menggunakan tombol shortcut untuk
menjalankan program /nda.
.engenalan .emrograman I
24
J.E.N.I.
.engenalan .emrograman I
25
J.E.N.I.
3.6 Latihan
3.6.1 Hello World!
'enggunakan Net%eans, membuat class dengan nama & BNama/ndaC. 2asil dari program
"ang harus tampil dila"ar & 'elcome to (ava )rogramming [*ama+nda]$$$
, t-in t-at , s-all never see. a poem as lovely as a tree# + tree "-ose -ungry
mout- is pressed +gainst t-e /art-0s s"eet flo"ing breast#
.engenalan .emrograman I
26
J.E.N.I.
public class Hello { /** * My first java program */ public static void
main(String[] args) { //menampilkan string”Hello world” pada screen
System.out.println("Hello world!"); } }
Pengenalan Pemrograman I
1
J.E.N.I.
Pengenalan Pemrograman I
2
J.E.N.I.
mengikuti kaidah penulisan tanda yang benar. Baris selanjutnya juga merupakan
komentar,
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.
Pedoman Penulisan Program: 1. Program Java yang anda buat harus selalu diakhiri
dengan ekstensi file .java. 2. Nama File seharusnya sesuai/sama dengan nama class
public nya. Sebagai contoh, jika nama class public anda adalah Hello, anda harus
menyimpan file tersebut dengan nama Hello.java. 3. Anda harus menulis komentar
sebagai penjelasan pada kode yang anda tulis, yaitu komentar yang berisi keterangan
mengenai baris perintah pada class atau apa yang dijalankan oleh method yang anda
tulis tersebut.
Pengenalan Pemrograman I
3
J.E.N.I.
// This is a C++ style or single line comments 4.3.2. Penulisan Komentar pada C
Komentar C-style atau juga disebut komentar beberapa baris diawali dengan /* dan
diakhiri dengan */. Semua teks yang ada diantara dua tanda tersebut dianggap
sebagai komentar. Tidak seperti komentar C++ style, itu dapat menjangkau beberapa
baris. Sebagai contoh,
/** This is an example of special java doc comments used for \n generating an html
documentation. It uses tags like: @author Florence Balagtas @version 1.2 */
Pengenalan Pemrograman I
4
J.E.N.I.
System.out.println(“Hello world”);
Block adalah satu atau lebih pernyataan yang terbentang antara kurung kurawal buka
dan kurung kurawal tutup yaitu sekumpulan pernyataan sebagai satu unit kesatuan.
Block pernyataan dapat dikumpulkan akan tetapi tidak secara pasti mempunyai
keterkaitan fungsi. beberapa jumlah spasi kosong diijinkan terdapat didalamnya,
sebagai contoh dari suatu block adalah :
Pengenalan Pemrograman I
5
J.E.N.I.
Pengenalan Pemrograman I
6
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
7
J.E.N.I.
Pengenalan Pemrograman I
8
J.E.N.I.
Pengenalan Pemrograman I
9
J.E.N.I.
Pengenalan Pemrograman I
10
J.E.N.I.
2 //nilai desimal 2 077 //angka 0 pada awal nilai oktal 0xBACC //karakter 0x
heksadesimal
pernyataan
mengindikasikan nilai
mengindikasikan
tipe-tipe terintegrasi memiliki default tipe data yaitu int. Anda dapat merubahnya
ke bentuk long dengan menambahkan huruf l atau L. tipe data terintegrasi memiliki
range sebagai berikut :
Integer Length
Name or Type
Range
-27 -215
to 27-1 to 215-1
Dalam mendefinisikan suatu nilai long, a lowercase L tidak dianjurkan karena sangat
sulit untuk membedakan dari digit 1.
Pengenalan Pemrograman I
11
J.E.N.I.
Range
Pengenalan Pemrograman I
12
J.E.N.I.
4.9. Variabel
Variabel adalah item yang digunakan data untuk menyimpan pernyataan object.
variabel memiliki tipe data dan nama. tipe data mengindikasikan tipe dari nilai
yang dapat dibentuk oleh variabel itu sendiri. nama variabel harus mengikuti aturan
untuk pengidentifikasian.
di
Petunjuk Penulisan Program: 1. Hal ini selalu baik untuk menginisialisasi variabel
yang anda buat seperti anda mendeklarasikannya. 2. Gunakan nama yang bersifat
menggambarkan object untuk variabel yang anda buat., jika anda ingin mempunyai
variabel yang terdiri atas nilai pelajar, beri nama dengan nama nilai dan jangan
hanya beberapa huruf random yang anda pilih.
Pengenalan Pemrograman I 13
J.E.N.I.
3. Deklarasikan satu variabel tiap baris kode. Sebagai contoh , deklarasi variabel
adalah sebagai berikut, double exam=0; double quiz=10; double grade = 0; Bentuk
yang lebih disukai ketika melakukan deklarasi adalah, double exam=0, quiz=10,
grade=0;
System.out.println() System.out.print()
Berikut ini adalah contoh program,
public class OutputVariable { public static void main( String[] args ){ int value =
10; char x; x = ‘A’; System.out.println( value ); System.out.println( “The value of
x=“ + x ); } }
Program tersebut akan mengeluarkan teks berikut pada layar,
Pengenalan Pemrograman I
14
J.E.N.I.
Hello world!
Sekarang perthatikan pernyataan berikut,
Hello world!
Pengenalan Pemrograman I
15
J.E.N.I.
Data 10 : Address(2000)
: : 2000
: : "Hello"
Seperti yang dapat anda lihat, untuk primitif variable 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
16
J.E.N.I.
4.10 Operators
Dalam Java, ada beberapa tipe operator. Ada operator arithmatika, operator relasi,
operator logika, dan operator kondisi. Operator ini mengikuti macam-macam prioritas
yang pasti jadi compilernya akan tahu yang mana operator untuk dijalankan lebih
dulu dalam kasus beberapa operator yang dipakai bersama-sama dalam satu pernyataan.
Operator + * / % -
Use op1 + op2 op1 * op2 op1 / op2 op1 % op2 op1 - op2
Description Adds op1 and op2 Multiplies op1 by op2 Divides op1 by op2 Computes the
remainder of dividing op1 by op2 Subtracts op2 from op1
Pengenalan Pemrograman I
17
J.E.N.I.
* j)); * y));
/ j)); / y));
System.out.println(" System.out.println(" } }
Pengenalan Pemrograman I
19
J.E.N.I.
nilai
count
dengan
count++;
Operator ++
Use op++
++
++op
--
op--
--
--op
Operator increment dan decrement dapat ditempatkan sebelum atau sesudah operand.
Ketika digunakan sebelum operand, akan menyebabkan variabel diincrement atau
didecrement oleh nilai 1, dan kemudian nilai baru digunakan dalam pernyataan dimana
dia ditambahkan. Sebagai contoh,
lama akan digunakan lebih dulu dioperasikan lebih dulu terhadap pernyataan dimana
dia ditambahkan. Sebagai contoh,
Selalu jaga pernyataan yang mengandung operator increment dan decrement untuk
dipahami secara mudah dan sederhana.
Pengenalan Pemrograman I
21
J.E.N.I.
public class RelasiDemo { public static void main(String[] args) { //a few numbers
int i = 37; int j = 42; int k = 42; System.out.println("Variable values...");
System.out.println(" i = " + i); System.out.println(" j = " + j);
System.out.println(" k = " + k); //lebih besar dari System.out.println("Greater
System.out.println(" i > System.out.println(" j > System.out.println(" k >
than..."); j = " + (i > j)); //false i = " + (j > i)); //true j = " + (k > j));
//false
or equal to..."); " + (i >= j)); //false " + (j >= i)); //true " + (k >= j));
//true
System.out.println(" System.out.println(" } }
Pengenalan Pemrograman I
23
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
24
J.E.N.I.
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,
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);
Pengenalan Pemrograman I 25
J.E.N.I.
System.out.println(test); } }
The output of the program is,
0 10 false 0 11 false
Catatan, Bahwa j++ pada baris yang mengandung operator && tidak dievaluasi sejak
pernyataan pertama (i>10) yaitu telah bernilai sama dengan false.
Pengenalan Pemrograman I
26
J.E.N.I.
exp1 || exp2
|| akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai true dan
menyatakan bahwa exp1 bernilai true. Jika exp1 bernilai true, operator tidak akan
pernah mengevaluasi exp2 karena hasil dari operasi operator akan bernilai true
tanpa memperhatikan nilai dari exp2. Sebaliknya,operator | selalu mengevaluasi
kedua nilai dari exp1 and exp2 sebelum mengembalikan suatu jawaban suatu nilai.
Berikut ini sebuah contoh source code yang menggunakan operator logika dan boolean
OR,
public class TestOR { 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);
Pengenalan Pemrograman I 27
J.E.N.I.
System.out.println(test); } }
Hasil keluaran dari program ini adalah,
0 10 true 0 11 true
Catatan, bahwa j++ pada baris yang terdiri atas operator || tidak dievaluasi sejak
pernyataan pertama (i<10) yaitu telah bernilai sama dengan true.
Pengenalan Pemrograman I
28
J.E.N.I.
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,
Pengenalan Pemrograman I
29
J.E.N.I.
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
30
J.E.N.I.
exp1?exp2:exp3
Dimana nilai exp1 adalah suatu pernyataan boolean yang memiliki hasil yang salah
satunya harus berupa nilai true atau false. Jika exp1 bernilai true, exp2 merupakan
hasil operasi . Jika bernilai false, kemudian exp3 merupakan hasil operasinya.
Sebagai contoh, diberikan code sebagai berikut,
public class kondisiOperator { public static void main( String[] args ){ String
status = ""; int grade = 80; //mendapatkan status pelajar status = (grade >=
60)?"Passed":"Fail"; //print status System.out.println( status ); } }
Hasil keluaran dari program ini akan menjadi,
Passed
Pengenalan Pemrograman I
31
J.E.N.I.
Gambar2: Flowchart
class kondisiOperator { public static void main( String[] args ){ int score = 0;
char answer = 'a'; score = (answer == 'a') ? 10 : 0; System.out.println("Score = "
+ score ); } }
Hasil keluaran program adalah,
Score = 10
Pengenalan Pemrograman I
32
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
33
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.
Berikut ini merupakan tampilan yang diharapkan sebagai hasil eksekusi program,
Number = 10 letter = a result = true str = hello 4.11.2. Mendapatkan nilai rata-
rata dari tiga angka
Buatlah program yang menghasilkan output nilai rata-ratadari tiga angka. Nilai dari
masingmasing tiga angka tersebut adalah 10, 20 dan 45. Tampilan Output yang
diharapkan adalah,
10 20 45 = 25
Pengenalan Pemrograman I
34
J.E.N.I.
Pengenalan Pemrograman I
35
J.E.N.I.
Pengenalan Pemrograman I
1
J.E.N.I.
Pengenalan Pemrograman I
2
J.E.N.I.
Pengenalan Pemrograman I
3
J.E.N.I.
Pengenalan Pemrograman I
4
J.E.N.I.
Pengenalan Pemrograman I
5
J.E.N.I.
Pengenalan Pemrograman I
6
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
7
J.E.N.I.
6.2.1 Statement if
Statement-if menentukan sebuah statement (atau blok kode) yang akan dieksekusi jika
dan hanya jika persyaratan boolean (boolean statement) bernilai true. Bentuk dari
statement if, if( boolean_expression ) statement; atau if( boolean_expression )
{ statement1; statement2; . . . }
Pengenalan Pemrograman 1
1
J.E.N.I.
Pengenalan Pemrograman 1
2
J.E.N.I.
Pengenalan Pemrograman 1
3
J.E.N.I.
Pengenalan Pemrograman 1
4
J.E.N.I.
Pengenalan Pemrograman 1
5
J.E.N.I.
Berikut ini contoh code statement if-else-if int grade = 68; if( grade > 90 )
{ System.out.println("Very good!"); } else if( grade > 60 )
{ System.out.println("Very good!"); } else{ System.out.println("Sorry you failed");
}
Pengenalan Pemrograman 1
6
J.E.N.I.
Pengenalan Pemrograman 1
7
J.E.N.I.
// //block 1 //
// //block 2 //
// //block n //
Pengenalan Pemrograman 1
8
J.E.N.I.
Pengenalan Pemrograman 1
9
J.E.N.I.
Pengenalan Pemrograman 1
10
J.E.N.I.
Pengenalan Pemrograman 1
11
J.E.N.I.
Berikut ini adalah beberapa contoh while loop, Contoh 1: int x = 0; while (x<10)
{ System.out.println(x); x++; } Contoh 2: //infinite loop while(true)
System.out.println(“hello”); Contoh 3: //no loops // statement is not even executed
while (false) System.out.println(“hello”);
Pengenalan Pemrograman 1
12
J.E.N.I.
Berikut ini adalah contoh dari for loop, int i; for( i = 0; i < 10; i++ )
{ System.out.print(i); } Pada contoh ini, statement i=0 merupakan inisialisasi dari
variabel. Selanjutnya, kondisi i<10 diperiksa. Jika kondisi bernilai true,
statement di dalam for loop dieksekusi. Kemudian, statement i++ dieksekusi, dan
dilakukan pengecekan kondisi. Kondisi ini akan dilakukan berulang-ulang sampai
mencapai nilai yang salah (false). Contoh tadi, adalah contoh yang sama dari while
loop, int i = 0; while( i < 10 ){ System.out.print(i); i++; }
Pengenalan Pemrograman 1
14
J.E.N.I.
for( int i=0; i< names.length; i++ ){ if( names[i].equals( searchName )){ foundName
= true; break; } } if( foundName ){ System.out.println( searchName + " found!" ); }
else{ System.out.println( searchName + " not found." ); } Pada contoh ini, jika
string “Yza” ditemukan, pengulangan pada for loop akan dihentikan dan akan
melanjutkan ke proses berikutnya.
Pengenalan Pemrograman 1
15
J.E.N.I.
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.
Pengenalan Pemrograman 1
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 slot.
Bayangkanlah array adalah sebuah variabel – sebuah lokasi memori tertentu yang
memiliki satu nama sebagai identifier, akan tetapi ia dapat menyimpan lebih dari
sebuah value.
Pengenalan Pemrograman 1
2
J.E.N.I.
Setelah pendeklarasian, kita harus membuat array dan menentukan berapa panjangnya
dengan sebuah konstruktor. Proses ini di Java disebut sebagai instantiation ( Kata
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. Perlu dicatat, 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, deklarasi akan memberitahukan kepada compiler Java, bahwa
identifier ages akan digunakan sebagai nama array yang berisi data-data integer,
dan kemudian untuk membuat atau meng-instantiate sebuah array baru yang terdiri
dari 100 elemen. Selain menggunakan sebuah keyword baru untuk meng-instantiate
array, Anda juga dapat secara otomatis mendeklarasikan array, membangunnya,
kemudian memberikan sebuah value. Sebagai contoh,
Pengenalan Pemrograman 1
3
J.E.N.I.
Berikut ini adalah contoh, bagaimana untuk mencetak seluruh elemen didalam array.
Dalam contoh ini digunakanlah 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 setelah Anda mendeklarasikannya. Sebagai contoh pendeklarasiannya int []arr =
new int[100]; lebih disarankan daripada, int []arr; arr = new int[100]; 2. Elemen-
elemen dalam n-elemen array memiliki index dari 0 sampai n-1. Perhatikan disini
bahwa tidak ada elemen array arr[n]. Hal ini akan menyebabkan array-index outof-
bounds exception. 3. Anda tidak dapat mengubah ukuran dari sebuah array
Pengenalan Pemrograman 1
4
J.E.N.I.
Pengenalan Pemrograman 1
5
J.E.N.I.
Pengenalan Pemrograman 1
6
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
7
J.E.N.I.
Pengenalan Pemrograman 1
1
J.E.N.I.
Perhatikan bahwa sebuah argumen akan dipisahkan oleh spasi. Di bahasa Java, apabila
Anda akan memanggil sebuah aplikasi, sebuah runtime system akan memberikan argumen
command-line ke main method lewat array dari String, dimana tiap String dalam array
terdiri dari 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 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 support sebuah argumen command-line yang numeric. Anda harus
mengkonversi String argumen tersebut untuk merepresantasikan sebuah nomor, misalnya
“34” menjadi sebuah nomor. Kode dibawah ini adalah sebuah potongan untuk
mengkonversi sebuah argumen command-line menjadi integer. int firstArg = 0; if
(args.length > 0){
Pengenalan Pemrograman 1 2
J.E.N.I.
Pengenalan Pemrograman 1
3
J.E.N.I.
Pengenalan Pemrograman 1
4
J.E.N.I.
Klik kanan icon CommanLineExample dan akan keluar sebuah pop-up menu.
Pengenalan Pemrograman 1
5
J.E.N.I.
Kemudian, klik Run -> Running Project Pada argument textbox, tuliskan tipe 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
6
J.E.N.I.
Pengenalan Pemrograman 1
7
J.E.N.I.
Seperti yang dapat Anda lihat, keluaran dari program Anda adalah jumlah dari
argumen yaitu 5, dimana argumen pertama juga memiliki value 5.
Pengenalan Pemrograman 1
8
J.E.N.I.
8.4 Latihan
8.4.1 Mencetak Argument
Dapatkan input dari user dengan menggunakan argument command line dan cetak semua
argumen ke layar. Sebagai contoh, jika user memasukkan java Hello world that is all
Pengenalan Pemrograman 1
9
J.E.N.I.
Pada sesi ini, kita akan mengantarkan beberapa konsep dasar dari Object-Oriented
objcts, dan Programming (OOP). Selanjutnya kita akan membahas konsep dari classes
dan bagaimana menggunakan class dan anggotanya. Perubahan dan pemilihan object juga
akan dibahas. Sekarang, kita akan focus dalam menggunakan class yang telah
dijabarkan dalam Java Class library, kita akan membahas nanti tentang bagaimana
membikin class anda sendiri. Pada akhir pelajaran, siswa seharusnya dapat : 1.
menjelaskan OOP dan beberapa konsepnya 2. perbedaan antara class dan object 3.
pebedaan antara instance variables/method dan class (static) variable/method 4.
menjelaskan method apa dan bagaimana memanggil method parameter 5. mengidentifikasi
beberapa jangkauan dari sebuah variable 6. memilih tipe data primitive dan object
7. membandingkan objects dan menjabarkan class dari objects.
9.2
OOP berputar pada konsep dari object sebagai dasar element dari program anda.
Ketika kita membandingkan dengan dunia nyata, kita dapat menemukan beberapa objek
disekitar kita, seperti mobil, singa, manusia dan seterusnya. Object ini
dikarakterisasi oleh sifat / attributnya dan tingkah lakunya. Contohnya, objek
sebuah mobil mempunyai sifat tipe transmisi, warna dan manufaktur. Mempunyai
kelakuan berbelok, mengerem dan berakselerasi. Dengan cara yang sama pula kita
dapat mendefinisikan perbedaan sifat dan tingkah laku dari singa. Coba perhatikan
table dibawah ini sebagai contoh perbandingan :
Object Car Properties type of transmission manufacturer color Weight Color hungry
or not hungry tamed or wild Table 1: Example of Real-life Objects
Pengenalan Pemrograman 1 1
Lion
J.E.N.I.
Dengan deskripsi ini, objek pada dunia nyata dapat secara mudah dimodelisasi
sebagai objek software menggunakan sifat sebagai data dan tingkah laku sebagai
method. Data disini dan method dapat digunakan dalam pemrograman game atausoftware
interaktif untuk menstimulasi objek dunia nyata. Contohnya adalah sebagai software
objek mobil dalam permainan balap mobil atau software objek singadalam sebuah
software pendidikan interaktif pada kebun binatang untuk anak anak.
9.3
Pengenalan Pemrograman 1
2
J.E.N.I.
Ketika diinisialisi, tiap objek mendapat satu set baru dari state variable.
Bagaimanapun, implementasi dari method dibagi diantara objek pada kelas yang sama.
Kelas menyediakan keuntungan dari reusability. Software programmers dapat digunakan
dari sebuah kelas lagi dan lagi untuk membuat beberapa 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 main() method. Didalam Java, kita dapat mendefinisikan beberapa
method yang akan kita panggil dari method yang berbeda. Sebuah method adalah bagian
terpisah dari kode yang akan dipanggil oleh program utama dan beberapa method
lainnya untuk menunjukkan beberapa fungsi spesifik. Berikut adalah karakteristik
dari method : 1. dapat mengembalikan satu atau tidak ada nilai 2. dia mungkin dapat
diterima sebagai beberapa parameter yang dibutuhkan atau tidak ada arameter sama
sekali. Parameter juga disebut sebagai fungsi argument 3. setelah method telah
selesai dieksekusi, dia akan kembali pada method yang memanggilnya.
Pengenalan Pemrograman 1
3
J.E.N.I.
Sekarang mengapa kita butuh untuk membuat method? Mengapa kita tidak meletakkan
semua kode pada sebuah method yang sangat besar? Pemecahan masalah disini alah
dekomposisi. Kita juga dapat melakukan ini di Java dengan mmbuat method untuk
mengatasi bagian spesifik dari masalah. Mengambil sebuah permasalahan dan
memecahkannya menjadi bagian kecil, bagian dapat diatur adalah penting untuk
menulis program yang besar.
nameOfObject.nameOfMethod( parameters );
mari kita mengambil dua contoh yang ditemukan dalam kelas String.
Definition Mengambil karakter pada index. Membandingkan antar String, tidak case
sensitive.
Menggunakan method :
Pengenalan Pemrograman 1
4
J.E.N.I.
public class TestPassByValue { public static void main( String[] args ){ int i =
10; //mencetak nilai i System.out.println( i ); //memanggil method test //passing i
pada method test test( i ); //Mencetak nilai i System.out.println( i ); } public
static void test( int j ){ //merubah nilai parameter j j = 33; } }
Pada contoh diatas yang telah diberikan, kita memanggil method tes dan melewatkan
nilai i sebagai parameter. Nilai pada i dikopikan pada variable pada method j.
sejak j adalah variable pengganti pada method tes, dia tidak akan berdampak pada
nilai variable jika i pada main semenjak memiliki perbedaan kopy pada variable.
Secara default, semua tipe data primitive ketika dilewatkan pada sebuah method
adalah pass-by-values
Pengenalan Pemrograman 1
5
J.E.N.I.
} public static void test( int[] arr ){ //merubah nilai array for( int i=0;
i<arr.length; i++ ){ arr[i] = i + 50; } } }
Pengenalan Pemrograman 1
6
J.E.N.I.
Petunjuk Penulisan Program : Keadaan yang salah tentang nilai oleh referensi di
java adalah ketika membuat method swap menggunakan referensi Java, mencatat tentang
manipulasi object Java ‘by reference’ tetapi nilai objeck dari referensi dari
method ‘by value,’” adalah hasil, anda tidak dapat menulis standart swap method ke
swap objek.
Classname.staticMethodName(params);
Pengenalan Pemrograman 1
7
J.E.N.I.
Pengenalan Pemrograman 1
8
J.E.N.I.
int i = 0;
D
int k = 0;
int
m = 0;
E
int } } n = 0;
Pengenalan Pemrograman 1
9
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 variable variable
variable variable i adalah A. j adalah B. k adalah C. m adalah D. n adalah E.
Sekarang, memberi kedua method utama dan menguji di contoh kita sebelumnya,
B A
ages[ ] i in B i in C
Pengenalan Pemrograman 1
J.E.N.I.
arr[ ] i in E
- scope D - scope E
int test = 0; System.out.print( test ); //..some code here { int test = 20;
System.out.print( test ); }
Manakala system pertama out.print itu memanggil, dia mencetak nilai dari variable
ujian pertama sejak terdapat pada variable jangkauan itu. Yang kedua, system.out
print, nilai 20 dicetak sejak tertutup ujian jangkauan variable itu. Petunjuk
Penulisan program : Hindari pemberian nama yang sama kepada variabel supaya Anda
tidak kebingungan.
Pengenalan Pemrograman 1
11
J.E.N.I.
Pengenalan Pemrograman 1
J.E.N.I.
Ini dibenarkan dalam kasus yang berkebalikan, dan Anda dapat menggunakan superclass
ketika sebuah subclass dibentuk. Ada yang didapatkan dalam kasus ini, bagaimanapun:
Karena subclass terdiri dari lebih banyak kemungkinan aksi daripada superclassnya,
terdapat kehilangan dalam keseimbangan keterlibatan. Object superclass itu mungkin
tidak memiliki semua kemungkinan aksi yang diperlukan untuk aksi pada tempat dari
object subclass berada. Sebagai contoh jika anda memiliki operasi yang memanggil
methode dalam object dari class integer, mengunakan object dari class Number tidak
akan terdiri dari benyak methode yang dispesifikasikan dalam integer. error terjadi
jika Anda mencoba untuk memanggil methode yang tidak memiliki object tujuan. Untuk
mengunakan object-object superclass dimana object-object subclass diharapkan, anda
harus memilih mereka secara eksplisit. Anda tidak akan kehilangan beberapa
informasi dalam pemilihan, tapi anda memperoleh keuntungan dari semua method dan
Pengenalan Pemrograman 1
13
J.E.N.I.
variabel yang mendefinisikan subclass. Untuk memilih sebuah object ke class yang
lain, Anda menggunakan operasi yang sama sebagaimana untuk tipe-tipe primitive :
Untuk memilih, (classname)object dimana, classname, adalah nama dari class tujuan.
object, adalah sesuatu yang mengarah pada sumber object. Catatan: pemilihan ini
membuat referensi ke object yang lama dari tipe namaclass; object yang lama
melanjutkan aksi seperti yang telah ada sebelumnya.
Contoh berikut memilih sebuah instance dari class VicePresident ke sabuah instance
dari class Employee; VicePresident adalah sebuah dari Employee dengan lebih banyak
information, dimana disini mendefinisikan bahwa VicePresident memilihi executive
washroom privileges, Employee emp = new Employee(); VicePresident veep = new
VicePresident(); emp = veep; // tidak adah pemilihan 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 type data dan versi classnya dengan sangat berbeda, dan
sebuah program tidak akan berhasil tercompile jika Anda menggunakan hanya satu
ketika yang lain juga diperlukan. Menggunakan class-class yang sesuai untuk setiap
tipe primitive, anda dapat membuat sebuah object yang memiliki nilai yang sama.
Contoh : //Pernyataan berikut membentuk sebuah instance bertype Integer // class
dengan nilai integer 7801 (primitive -> Object) Integer dataCount = new
Integer(7801); //Pernyataan berikut meng-converts sebuah object Integer ke //tipe
data primitive int nya. Hasilnya adalah sebuah int //dengan nilai 7801 int newCount
= dataCount.intValue(); // Anda perlu suatu translasi biasa pada program // yang
meng-convert sebuah String ke sebuah tipe numeric, //seperti suatu int // Object-
>primitive String pennsylvania = "65000"; int penn =
Integer.parseInt(pennsylvania);
•
PERHATIAN: class Void tidak mewakili sesuatu dalam Java, jadi disini tidak ada
alasan menggunakannya ketika melakukan translasi antara nilai primitive dan object.
Ini adalah penjelasan mengenai kata kunci void, dimana digunakan dalam definisi
method untuk mengindikasikan bahwa methode tidak memiliki sebuah nilai kembalian.
Pengenalan Pemrograman 1
15
J.E.N.I.
mempertimbangkan nilai yang tidak sama. Walaupun isinya sesuai mereka bukan
merupakan object yang sama. Untuk melihat jika dua object String memiliki nilai
yang sesuai, sebuah method dari class yang disebuat dengan equals() digunakan.
Method menguji setiap character dalam string dan mengembalikan nilai true jika dua
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
String2: Free the bound Same object? true String1: Free the bound String2: Free the
bound Same object? false Same value? True periodicals. periodicals. periodicals.
periodicals.
Sekarang mari mendiskusikan tentang kode. String str1, str2; str1 = "Free the bound
periodicals.";
Pengenalan Pemrograman 1
16
J.E.N.I.
Bagian pertama dari program ini mendeklarasikan dua variabel (str1 dan str2),
memberikan literal "Free the bound periodicals." untuk str1, dan kemudian memberi
nilai tersebut untuk str2. Seperti yang Anda pelajari sebelumnya, str1 dan str2
sekarang menunjuk ke object yang sama, dan uji kesamaan membuktikan hal tersebut.
str2 = new String(str1); Padabagian yang kedua dari program ini, anda membuat
object String baru dengan nilai yang sama sebagai str1 dan memberi str2 ke object
baru String tersebut. Sekarang Anda memiliki dua object string yang berbeda yaitu
str1 dan str2, keduanya memilki nilai yang sama.Test mereka untuk melihat jika
meeka object yang sama dengan menggunakan operator == mengembalikan nilai yang
diinginkan : false—mereka buka object yang sama dalam memory. Test mereka
menggunakan method equals() juga mengembalikan jawaban yang diinginkan: true—mereka
memiliki niali yang sama.
Catatan: Mengapa Anda tidak dapat hanya menggunakan literal yang lain ketika Anda
mengubah str2, lebih dari menggunakan new? String literals diandalkan dalam Java;
jika Anda membuat sebuah string menggunakan literal dan kemudian menggunakan
literal yang lain dengan character yang sama, Java cukup mengetahui untuk
memberikan Anda object String yang pertama kembali. kedua String adalah object yang
sama; Anda harus menghidari langkah anda untuk membuat dua object terpisah.
Pengenalan Pemrograman 1
17
J.E.N.I.
Pengenalan Pemrograman 1
18
J.E.N.I.
9.6
Latihan
Pengenalan Pemrograman 1
19
J.E.N.I.
Sekarang mari memulai pencarian! 1. Perhatikan sebuah method yang diuji jika String
pasti diakhiri suffix yang pasti. Sebagai contoh, jika diberikan string "Hello",
Method harus mengembalikan nilai true suffix yang diberikan adalah "lo", dan false
jika suffix yang diberikan adalah "alp". 2. Perhatikan untuk method yang mengenali
character yang mewakili sebuah digit yang spesifik dalam radix khusus. Sebagai
contoh, jika input digit adalah 15, dan the radix adalah 16, method akan
mengembalikan Character F, sejak F adalah representasi hexadecimal untuk angka 15
(berbasis 10). 3. Perhatikan untuk method yang mengakhiri running Java Virtual
Machine yang sedang berjalan 4. Perhatikan untuk method yang memperoleh lantai dari
sebuah nilai double. Sebagai contoh, jika Saya input a 3.13, method harus
mengembalikan nilai 3. 5. Perhatikan untuk method yang mengenali jika character
yang dipakai adalah sebuah digit. Sebagai contoh, jika Saya input '3', dia akan
mengembalikan nilai true.
Pengenalan Pemrograman 1
20
J.E.N.I.
Pada akhir pembahasan, diharapkan siswa dapat : • Membuat kelas mereka sendiri •
Mendeklarasikan atribut dan method pada class • Menggunakan referensi this untuk
mengakses instance data • Membuat dan memanggil overloaded method • Mengimport dan
membuat package • Menggunakan access modifiers untuk mengendalikan akses terhadap
class member
Pengenalan Pemrograman 1
1
J.E.N.I.
10.2
Sebelum menulis class Anda, pertama pertimbangkan dimana Anda akan menggunakan
class dan bagaimana class tersebut akan digunakan. Pertimbangkan pula nama yang
tepat dan tuliskan seluruh informasi atau properti yang ingin Anda isi pada class.
Jangan sampai terlupa untuk menuliskan secara urut method yang akan Anda gunakan
dalam class. Dalam pendefinisian class, dituliskan :
dimana :
<modifier> adalah sebuah access modifier, yang dapat dikombinasikan dengan tipe
modifier
lain.
Petunjuk Penulisan Program : Perhatikan bahwa pada class teratas, access modifier
yang diperbolehkan adalah public dan package (bila tidak terdapat penulisan keyword
access modifier pada kelas)
Pada bagian ini, kita akan membuat sebuah class yang berisi record dari siswa. Jika
kita telah mengidentifikasikan tujuan dari pembuatan kelas, maka dapat dilakukan
pemberian nama yang sesuai. Nama yang tepat pada class ini adalah StudentRecord.
Untuk mendefinisikan class, kita tuliskan :
dimana,
Class ini dapat diakses dari luar package Keyword yang digunakan di pembuatan class
Java Identifier yang menjelaskan class
Pengenalan Pemrograman 1
2
J.E.N.I.
Petunjuk Penulisan Program : 1. Pertimbangkan nama yang tepat untuk class. Jangan
gunakan nama acak dan singkat seperti XYZ. 2. Nama class harus dimulai dengan huruf
kapital 3. Nama file dari class harus sama dengan nama public class
10.3
Deklarasi Atribut
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
Pengenalan Pemrograman 1
3
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
4
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 kelas, kita dapat mendeklarasiakan 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 }
Pengenalan Pemrograman 1
5
J.E.N.I.
10.4.
Deklarasi Methods
Sebelum kita membahas method apa yang akan dipakai pada class, mari kita perhatikan
penulisan method secara umum. Dalam pendeklarasian method, kita tuliskan :
<modifier> <returnType> <name>(<parameter>*) { <statement>* }
10.4.1
Accessor Methods
Pengenalan Pemrograman 1
6
J.E.N.I.
dimana, public String getName () Menjelaskan bahwa method tersebut dapat diakses
object luar kelas Tipe data return value dari method tersebut Nama dari method
Menjelaskan bahwa method tidak memiliki parameter apapun
Pernyataan berikut,
return name;
dalam program kita menandakan akan ada pengembalian nilai dari instance variable
name pada pemanggilan method. Perhatikan bahwa return type dari method harus sama
dengan tipe data terhadap 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
7
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; } }
Menjelaskan bahwa method ini dapat dipanggil object luar kelas Method ini tidak
menghasilkan return value Nama dari method Parameter yang akan digunakan pada
method
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
8
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 :
public String getNumberInWords( int num ){ String defaultNum = "zero"; if( num == 1
){ return "one"; //mengembalikan sebuah konstanta } else if( num == 2){ return
"two"; //mengembalikan sebuah konstanta } // mengembalikan sebuah variabel return
defaultNum; }
10.4.4
Static Methods
public class StudentRecord { private static int studentCount; public static int
getStudentCount(){ return studentCount; } }
dimana, public static Int getStudentCount - Menjelaskan bahwa method ini dapat
diakses object luar kelas - Method ini adalah static dan pemanggilannya menggunakan
[namaKelas].[namaMethod]. Sebagai contoh : studentRecord.getStudentCount - Tipe
return dari method. Mengindikasikan method tersebut harus mempunyai return value
berupa integer - Nama dari method
Pengenalan Pemrograman 1
9
J.E.N.I.
public ()
- Menjelaskan bahwa method ini dapat diakses object luar kelas - Method ini tidak
memiliki parameter apapun
Petunjuk Penulisan Program : 1. Nama method harus dimulai dengan huruf kecil 2.
Nama method harus berupa kata kerja 3. Gunakan dokumentasi sebelum mendeklarasikan
sebuah method. Anda dapat Menggunakan JavaDoc.
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.
Referensi this
Referensi this digunakan untuk mengakses instance variable yang dibiaskan oleh
parameter. Untuk pemahaman lebih lanjut, mari kita perhatikan contoh pada method
setAge. Asumsikan kita mempunyai kode deklarasi berikut pada method setAge.
Pengenalan Pemrograman 1
12
J.E.N.I.
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 :
age = age;
kita telah mengidentifikasi nilai dari parameter age kepada parameter itu sendiri.
Hal ini sangat tidak kita hendaki 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. CATATAN : Anda hanya dapat menggunakan referensi tipe
ini terhadap instance variable dan BUKAN static ataupun class variabel.
10.6.
Overloading Methods
Dalam class yang kita buat, kadangkala kita menginginkan untuk membuat method
dengan nama yang sama namun mempunyai fungsi yang berbeda menurut parameter yang
digunakan. Kemampuan ini dimungkinkan dalam pemrograman Java, dan dikenal sebagai
overloading method. Overloading method mengijinkan sebuah method dengan nama yang
sama namun memiliki parameter yang berbeda sehingga mempunyai implementasi dan
return value yang berbeda pula. Daripada memberikan nama yang berbeda pada setiap
pembuatan method, overloading method dapat digunakan pada operasi yang sama namun
berbeda dalam implementasinya.
Pengenalan Pemrograman 1
13
J.E.N.I.
Sebagai contoh, pada class StudentRecord kita menginginkan sebuah method yang akan
menampilkan informasi tentang siswa. Namun kita juga menginginkan operasi
penampilan data tersebut menghasilkan output yang berbeda menurut parameter yang
digunakan. Jika pada saat kita memberikan sebuah parameter berupa string, hasil
yang ditampilkan adalah nama, alamat dan umur dari siswa, sedang pada saat kita
memberikan 3 nilai dengan tipe double, kita menginginkan method tersebut untuk
menampilkan nama dan nilai dari siswa. Untuk mendapatkan hasil yang sesuai, kita
gunakan overloading method di dalam deklarasi class StudentRecord.
Pengenalan Pemrograman 1
14
J.E.N.I.
10.7.
Deklarasi Constructor
Pengenalan Pemrograman 1
15
J.E.N.I.
10.7.1
Default Constructor
10.7.2
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; }
Pengenalan Pemrograman 1
16
J.E.N.I.
10.7.3
Menggunakan Constructor
Sebelum kita lanjutkan, mari kita perhatikan kembali deklarasi static variable
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 nilai studentCount terletak pada constructor-
nya, karena selalu dipanggil setiap kali objek terbentuk. Sebagai contoh :
Pengenalan Pemrograman 1
17
J.E.N.I.
10.7.4
Pemanggilan constructor dapat dilakukan secara berangkai, dalam arti Anda dapat
memanggil constructor di dalam constructor lain. Pemanggilan dapat dilakukan dengan
referensi this(). Perhatikan contoh kode sebagai berikut : 1: public
StudentRecord(){ 2: this("some string"); 3: 4: } 5: 6: public StudentRecord(String
temp){ 7: this.name = temp; 8: } 9: 10: public static void main( String[] args )
11: { 12: 13: StudentRecord annaRecord = new StudentRecord(); 14: } 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
Pengenalan Pemrograman 1
18
J.E.N.I.
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.
10.8.1
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 :
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 : java.awt.Color color;
10.8.2
Membuat Package
Pengenalan Pemrograman 1
19
J.E.N.I.
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 juga dapat dibuat secara bersarang. Dalam hal ini Java Interpreter
menghendaki struktur direktori yang mengandung class eksekusi untuk disesuaikan
dengan struktur package.
10.8.3
Pengaturan CLASSPATH
Kita akan mendapatkan pesan kesalahan berupa NoClassDefFoundError yang berarti JAVA
tidak mengetahui dimana posisi class. Hal tersebut disebabkan oleh karena class
Pengenalan Pemrograman 1 20
J.E.N.I.
StudentRecord berada pada package dengan nama studentClasses. Jika kita ingin
menjalankan kelas tersebut, kita harus memberi informasi pada JAVA bahwa nama
lengkap dari class tersebut adalah schoolClasses.StudentRecord. Kita juga harus
menginformasikan kepada JVM dimana posisi pencarian package, yang dalam hal ini
berada pada direktori C:\. Untuk melakukan langkah – langkah tersebut, kita harus
mengatur classpath. Pengaturan classpath pada Windows dilakukan pada command prompt
:
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
21
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 mempersyaratkan 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
22
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
23
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.
Petunjuk Penulisan Program : Instance variable dari class secara default akan
bertipe private sehingga class tersebut hanya akan menyediakan accessor dan mutator
methods terhadap variabel ini.
Pengenalan Pemrograman 1
24
J.E.N.I.
10.10. Latihan
10.10.1 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 Nama Alamat Nomor Telepon Alamat E-Mail Alamat Lengkap Nomor telepon
personal Alamat E-Mail personal
Buat implementasi dari method sebagai berikut : 1. Menyediakan accessor dan mutator
method terhadap seluruh atribut 2. Constructor
10.10.2
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
25
J.E.N.I.
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.
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;
Pengenalan Pemrograman 1
2
J.E.N.I.
Pengenalan Pemrograman 1
3
Gambar 2: Alur Program
J.E.N.I.
11.2.2
Subclass juga dapat memanggil constructor secara explicit 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 adalah Person) dan mengeksekusinya. Contoh kode lain ditunjukkan
sebagai berikut, public Student(){ super(); System.out.println("Inside
Student:Constructor"); }
Pengenalan Pemrograman 1
4
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
konstuktor 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 referensi this). Sebagai contoh, public Student() { super.name =
“somename”; super.address = “some address”; }
11.2.3
Overriding Method
: } 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.
Untuk contohnya, 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
6
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 studentObject = new Student();
employeeObject = new Employee();
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
9
J.E.N.I.
Sekarang mari membuat contoh class abstract. public abstract class LivingThing
{ public void breath(){ System.out.println("Living Thing breathing..."); } public
void eat(){ System.out.println("Living Thing eating..."); } /** * abstract method
walk * Kita ingin method ini di-overridden oleh subclasses */ public abstract void
walk(); } Ketika class meng-extend class abstract LivingThing, dibutuhkan untuk
override method abstract walk(), atau lainnya, juga subclass akan menjadi class
abstract, oleh karena itu tidak dapat di-instantiate. Contohnya, public class Human
extends LivingThing { public void walk(){ System.out.println("Human walks..."); } }
Jika class Human tidak dapat overridde method walk, kita akan menemui pesan error
berikut ini, Human.java:1: Human is not abstract and does not override abstract
method walk() in LivingThing public class Human extends LivingThing ^ 1 error
Petunjuk penulisan program: Gunakan class abstract untuk mendefinisikan secara luas
sifat-sifat dari class tertinggi pada hirarki pemrograman berbasis object, dan
gunakan subclassesnya untuk menyediakan rincian dari class abstract.
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();
Bagaimanapun, Anda tidak dapat membuat instance dari sebuah interface. Contohnya:
pi = new PersonInterface(); //COMPILE //ERROR!!! Ciri umum lain adalah baik
interface maupun class dapat mendefinisikan method. Bagaimanapun, sebuah interface
tidak punya sebuah kode implementasi sedangkan class memiliki salah satunya.
PersonInterface
11.5.4
Membuat Interface
Pengenalan Pemrograman 1
12
J.E.N.I.
Sekarang, penggunaan interface, kita gunakan kata kunci implements. Contohnya, /**
* Class ini mendefinisikan segmen garis */ public class Line implements Relation
{ private double x1; private double x2; private double y1; private double y2;
public Line(double x1, double x2, double y1, double y2){ this.x1 = x1; this.x2 =
x2; this.y1 = y1; this.y2 = y2; } public double getLength(){ double length =
Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1)); return length; } public boolean
isGreater( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen =
((Line)b).getLength(); return (aLen > bLen); } public boolean isLess( Object a,
Object b){ double aLen = ((Line)a).getLength(); double bLen =
((Line)b).getLength(); return (aLen < bLen); } public boolean isEqual( Object a,
Object b){ double aLen = ((Line)a).getLength(); double bLen =
((Line)b).getLength(); return (aLen == bLen); } }
Pengenalan Pemrograman 1
13
J.E.N.I.
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
11.6.1
Latihan
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.
12.2
E#$eption 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. (eberapa $ontoh dari e#$eption yang )nda
mungkin jumpai pada latihan%latihan sebelumnya adalah e#$eption )
rrayInde#*ut*"(ounds, yang terjadi jika kita men$oba mengakses elemen array yang
tidak ada, atau Number+ormatE#$eption, yang terjadi ketika kita men$oba melalui
parameter bukan angka dalam method Integer.parseInt.
} # # #
//tulis aksi apa dari program !nda yang di"alankan "ika ada //exception tipe
tertentu ter"adi
Pengenalan Pemrograman -
1
J.E.N.I.
catch( <exceptionTypen> <varNamen> { //tulis aksi apa dari program !nda yang
di"alankan "ika ada //exception tipe tertentu ter"adi } $inally{ //tambahkan kode
terakhir di sini } E#$eption dilemparkan selama eksekusi dari blok try dapat
ditangkap dan ditangani dalam blok catch. .ode dalam blok finally selalu di
%eksekusi. (erikut ini adalah aspek kun$i tentang sintak dari konstruksi try%$at$h
%"inally • Notasi blok bersi"at perintah • /etiap blok try, terdapat satu atau
lebih blok catch, tetapi hanya satu blok finally. • (lok catch dan blok finally
harus selalu mun$ul dalam konjungsi dengan blok try, dan diatas urutan • (lok try
harus diikuti oleh paling sedikit satu blok catch )T), satu blok finally, atau
keduanya. • /etiap blok catch mende"inisikan sebuah penanganan e#$eption. 0eader
dari blok catch harus membawa satu argumen, dimana e#$eption pada blok tersebut
akan ditangani. E#$eption harus menjadi $lass pelempar atau satu dari
sub$lassesnya.
Pengenalan Pemrograman -
2
J.E.N.I.
!arilah mengambil $ontoh kode yang men$etak argumen kedua ketika kita men$oba
menjalankan kode menggunakan argumen $ommand%line. Perkirakan, tidak ada penge$ekan
dalam kode )nda untuk angka dari argumen dan kita hanya mengakses argumen kedua
args1-2 segera, kita akan mendapatkan e#$eption berikut. %xception in thread &main&
"ava#lang#!rray'ndex(ut($)ounds%xception* 1 at %xception%xample#main(%xception
%xample#"ava*+
,ntuk men$egah kejadian ini, kita dapat menempatkan kode ke dalam blok try%$at$h.
(lok "inally hanya sebagai pilihan lain saja. /ebagai $ontoh, kita tidak akan
menggunakan blok "inally. public class %xception%xample { public static void
main( ,tring-. args try{
Pengenalan Pemrograman -
3
J.E.N.I.
12.
!atihan
Pengenalan Pemrograman -
4
J.E.N.I.
!la obje!t atribut method kon truktor tentang kon ep lanjutan berorienta i obje!t
dan menggunakannya
3. $engetahui dengan jela penggunaan kata kun!i this, super, final dan static 4.
$embedakan antara method overloading dan method overridding
Pengenalan Pemrograman %
1
J.E.N.I.
1.2.2 Class
+la mengi,inkan Anda dalam mendeklara ikan tipe data baru. Ia dijalankan ebagai
blueprint, dimana model dari obje!t yang Anda buat berda arkan pada tipe data baru
ini.
1.2.3 Object
Sebuah obje!t adalah ebuah entiti yang memiliki keadaan, behaviour dan identita
yang yang tuga nya dirumu kan dalam uatu lingkup ma alah dengan baik. Inilah in
tan!e ebenarnya dari ebuah !la . Ini juga dikenal ebagai instance. Instance dibuat
e&aktu Anda meng-instantiate !la menggunakan kata kun!i new. 'alam i tem regi tra i
i &a, !ontoh dari ebuah obje!t yaitu entiti Student.
1.2.4 Atribut
Atribut menunjuk pada elemen data dari ebuah obje!t. Atribut menyimpan informa i
tentang obje!t. 'ikenal juga ebagai member data, variabel in tan!e, properti atau
ebuah field data. -embali lagi ke !ontoh i tem regi tra i i &a, atribut dari ebuah
i &a adalah nomor i &a.
1.2.5 Method
Sebuah method menjela kan behaviour dari ebuah obje!t. $ethod juga dikenal ebagai
fung i atau pro edur. Sebagai !ontoh, method yang mungkin ter edia untuk entiti i
&a adalah method regi ter.
1.2.6 Konstruktor
-on truktor adalah ebuah tipe khu u dari method yang digunakan untuk membuat dan
mengini iali a i ebuah obje!t baru. Ingat bah&a kon truktor bukan member)yaitu
atribut, method atau inner !la dari ebuah obje!t*.
1.2.
!acka"e
dan.atau ubpa!kage . Strukturnya dapat
1.2.# $nka%sulasi
Enkap ula i menunjuk pada prin ip dari menyembunyikan de ain atau mengimplementa
ikan informa i yang tidak e uai pada obje!t yang ada.
1.2.& Abstraksi
Sementara enkap ula i menyembunyikan detail, ab trak i mengabaikan a pek dari ubyek
yang tidak e uai dengan tujuan yang ada upaya lebih banyak mengkon entra ikan yang
ada.
1.2.1' !e(arisan
Pe&ari an adalah hubungan antara !la dimana dalam atu !la ada uper!la atau !la
induk dari !la yang lain. Pe&ari an menunjuk pada properti dan behaviour yang
diterima dari nenek
Pengenalan Pemrograman % 2
J.E.N.I.
. Ini dikenal juga ebagai hubungan /i -a0. Perhatikan pada hirarki berikut.
SuperHero
FlyingSuperHero
UnderwaterSuperHero
1ambar #.1" +ontoh Pe&ari an
1.2.11 !oli)or*is)e
Polimorfi me adalah kemampuan dari ebuah obje!t untuk membolehkan mengambil
beberapa bentuk yang berbeda. Se!ara harfiah, /poli0 berarti banyak ementara
/morph0 berarti bentuk. $enunjuk pada !ontoh ebelumnya pada pe&ari an, kita lihat
bah&a obje!t SuperHero dapat juga menjadi obje!t FlyingSuperHero atau obje!t
UnderwaterSuperHero.
1.2.12 +nter*ace
Sebuah interfa!e adalah ebuah contract dalam bentuk kumpulan method dan deklara i
kon tanta. -etika ebuah !la implements ebuah interfa!e, ini mengimplementa ikan
emua method yang dideklara ikan dalam interfa!e.
1.3 Struktur
ro!ram Java
Pada bagian ini meringka kan syntax da ar yang digunakan dalam pembuatan aplika i
Java.
Pengenalan Pemrograman %
3
J.E.N.I.
!etunjuk !enulisan !ro"ra). / 0 berarti bahwa boleh ada 0 atau lebih ke adian dari
deret tersebut yang menggunakannya uga! "description# $ menun ukkan bahwa %nda
harus mengganti nilai sebenarnya untuk bagian ini daripada menguranginya
penulisannya! Ingat bahwa untuk class teratas, acces modifier yang valid hanyalah
public dan package&yakni ika tidak ada acces modifier mengawali kata kunci class'!
+ontoh berikut ini mendeklara ikan blueprint SuperHero! Class SuperHero { String
superPowers !" #oid setSuperPowers$String superPowers !% { this&superPowers =
superPowers" ' #oid printSuperPowers$% { for $int i = (" i < superPowers&length"
i))% { S*stem&out&println$superPowers i!%" ' ' '
Sebagai !ontoh" class 2ethodDemo { int data" int getData$% { return data" ' #oid
setData$int data% { this&data = data" ' #oid set2a3Data$int data41 int data5%
{ data = $data4>data5%6 data4 : data5" ' '
' public static #oid main$String args !% { Construct7b8 ob8 = new Construct7b8$%" '
'
99di:instantiate
1.3.
!acka"e
5ntuk menunjukkan bah&a file a al terma uk pa!kage khu u , kita gunakan syntax
berikut" <pac0ageDeclaration> ::= pac0age <pac0age.ame>" 5ntuk mengimpor pa!kage
lain, kita gunakan syntax berikut" <importDeclaration> ::= import
<pac0age.ame&element-ccessed>"
'engan ini, source code Anda haru memiliki format berikut" <pac0ageDeclaration>!
<importDeclaration>* <classDeclaration>)
Pengenalan Pemrograman %
6
J.E.N.I.
!etunjuk !enulisan !ro"ra). * menun ukkan bahwa boleh ada + atau lebih ke adian
pada baris ini dalam pengaplikasiannya! Sebagai !ontoh. pac0age
registration&reports" import registration&processing&*" import 8a#a&util&;ist"
import 8a#a&lang&*" 99imported b* default class 2*Class { 9* rincian dari 2*Class
*9
1.3.& $nka%sulasi
$enyembunyikan elemen dari penggunaan ebuah !la anggota yang ingin Anda embunyikan
e!ara private. dapat dilakukan dengan pembuatan
+ontoh berikut menyembunyikan field secret. +atatan bah&a field ini tidak lang ung
diak e oleh program lain menggunakan method getter dan etter. class <ncapsulation {
pri#ate int secret" 99field tersembun*i public boolean setSecret$int secret% { if
$secret < 4 ,, secret > 4((% { return false" ' this&secret = secret" return true" '
public getSecret$% { return secret" ' '
Pengenalan Pemrograman %
7
J.E.N.I.
1.3.1' !e(arisan
5ntuk membuat !la anak atau ub!la berda arkan !la yang telah ada, kita gunakan kata
kun!i extend dalam mendeklara ikan !la . Sebuah !la hanya dapat meng-extend atu !la
induk. Sebagai !ontoh, !la 0oint di ba&ah ini adalah uper!la dari !la 1olored0oint!
import 8a#a&awt&*" class Point { int 3" int *" ' class ColoredPoint e3tends Point {
Color color" '
Pengenalan Pemrograman %
8
J.E.N.I.
%cces modifier untuk method yang dibutuhkan tidak haru ama. 8agaimanapun, acces
modifier dari method overridding mengharu kan alah atunya punya acces modifier yang
ama eperti itu dari method overridden atau acces modifier yang kurang dibata i.
Perhatikan !ontoh elanjutnya. Perik a yang mana dari method overridding berikut
akan menyebabkan &aktu meng-compile akan menyebabkan error. class Superclass { #oid
o#erridden2ethod$% { ' ' class Subclass4 e3tends Superclass { public #oid
o#erridden2ethod$% { ' ' class Subclass5 e3tends Superclass { #oid
o#erridden2ethod$% { ' ' class Subclass> e3tends Superclass { protected #oid
o#erridden2ethod$% { ' ' class Subclass? e3tends Superclass { pri#ate #oid
o#erridden2ethod$% { ' '
'
1.3.13 +nter*ace
$endeklara ikan ebuah interfa!e pada da arnya mendeklara ikan ebuah !la tetapi
ebagai penggantinya menggunakan kata kun!i class, kata kun!i interface digunakan.
8erikut syntaxnya. <interfaceDeclaration> ::= <modifier> interface <name>
{ <attributeDeclaration>* <modifier> <return/*pe> <name>$<parameter>*%"!* '
Pengenalan Pemrograman %
10
J.E.N.I.
+ontoh berikut menunjukkan bagaimana mendeklara ikan dan menggunakan ebuah interfa!
e. interface 2*Bnterface { #oid i2ethod$%" ' class 2*Class4 implements 2*Bnterface
{ public #oid i2ethod$% { S*stem&out&println$=Bnterface method&=%" ' #oid m*2ethod$
% { S*stem&out&println$=-nother method&=%" '
'
' '
Pengenalan Pemrograman %
11
J.E.N.I.
+ontoh berikut menunjukkan bagaimana obje!t this e!ara mutlak menunjuk ketika
anggota nontati! dipanggil. class /hisDemo5 { int data" #oid method$%
{ S*stem&out&println$data%" 99this&data ' #oid method5$% { method$%" 99this&method$
%" ' Sebelum melihat ke !ontoh yang lain, mari pertama meninjau pengertian method
overloading. -on truktor eperti juga method dapat juga menjadi overload. $ethod
yang berbeda dalam !la dapat memberi nama yang ama a alkan li t parameter juga
berbeda. $ethod overloaded haru berbeda dalam nomor dan.atau tipe dari
parameternya. +ontoh elanjutnya memiliki kon truktor overloaded dan referen i this
yang dapat digunakan untuk menunjuk ver i lain dari kon truktor. class /hisDemo>
{ int data" /hisDemo>$% { this$4((%" ' /hisDemo>$int data% { this&data = data" '
' !etunjuk !enulisan !ro"ra). /emanggil this&' harus ada pernyataan pertama dalam
konstruktor!
class Person { String first.ame" String last.ame" Person$String fname1 String lname
% { first.ame = fname" last.ame = lname" ' ' class Student e3tends Person { String
stud.um" Student$String fname1 String lname1 String s.um% {
Pengenalan Pemrograman % 12
J.E.N.I.
!etunjuk !enulisan !ro"ra). super&' menun uk pada superclass dengan segera! Ini
harus berada pada pernyataan pertama dalam konstruktor superclass! -ata kun!i dapat
juga digunakan untuk menunjuk anggota pada !ontoh berikut. class Superclass{ int a"
#oid displa*+a$%{ S*stem&out&println$=a = = ) a%" ' ' class Subclass e3tends
Superclass { int a" #oid displa*+a$%{ S*stem&out&println$=a = = ) a%" ' #oid
set+super+a$int n%{ super&a = n" ' #oid displa*+super+a$%{ super&displa*+a$%" ' '
class SuperDemo { public static #oid main$String args !%{ Superclass Super7b8 = new
Superclass$%" Subclass Sub7b8 = new Subclass$%" Super7b8&a = 4" Sub7b8&a = 5"
Sub7b8&set+super+a$>%" Super7b8&displa*+a$%" Sub7b8&displa*+a$%"
Sub7b8&displa*+super+a$%" S*stem&out&println$Sub7b8&a%" ' ' Program ter ebut akan
menampilkan ha il berikut. a = 4 a = 5 a = > 5 uper!la eperti yang ditunjukkan
Pengenalan Pemrograman %
13
J.E.N.I.
ebuah obje!t dari !la ter ebut. tati! dari !la . 'itambahkan juga,
-ata kun!i static dapat juga diaplika ikan pada blok. Ini dinamakan dengan blok
tati!. 8lok ini diek eku i hanya ekali, ketika !la dii i. (al ini bia anya
digunakan untuk mengini iali a i variabel !la . class Demo { static int a = ("
static #oid static2ethod$int i% { S*stem&out&println$i%" ' static { 99blo0 static
S*stem&out&println$=/his is a static bloc0&=%" a )= 4" ' ' class StaticDemo
{ public static #oid main$String args !% { S*stem&out&println$Demo&a%"
Demo&static2ethod$C%" Demo d = new Demo$%" S*stem&out&println$d&a%" d&static2ethod$
(%" Demo e = new Demo$%" S*stem&out&println$e&a%" d&a )= >"
S*stem&out&println$Demo&a)=1 = )d&a )=1 = )e&a%" ' ' -eluaran dari our!e kode
ditunjukkan di ba&ah ini. /his is a static bloc0& 4 C 4 ( 4 ?1 ?1 ?
1.3.1
-ata kun!i final dapat diaplika ikan pada variabel, method dan !la . 5ntuk
mengingat fung i dari kata kun!i, ingat bah&a itu e!ara mudah dibata i apa yang
kita dapat lakukan dengan variabel, method dan !la . Nilai dari variabel final
dapat tidak lama diubah e udah nilainya telah diatur. Sebagai !ontoh,
Pengenalan Pemrograman %
14
J.E.N.I.
final int data = 4(" Pernyataan berikut akan menyebabkan terjadi compilation error"
data))" $ethod final tidak dapat di-override dalam !la anak. final #oid m*2ethod$%
{ 99in a parent class ' my/ethod tidak dapat lama di-override dalam !la !la final
tidak dapat di&ari kan tidak eperti !la final public class 2*Class { ' anak. yang
bia anya.
!etunjuk !enulisan !ro"ra). 0erintah penulisan kata kunci final dan public
memungkinkan bertukar tempat! Pernyataan ini akan menyebabkan ke alahan compilation
terjadi karena /y1lass dapat tidak lama di-extended. public DrongClass e3tends
2*Class { '
class 7uterClass { int data = C" class BnnerClass { int data5 = 4(" #oid method$% {
S*stem&out&println$data%" S*stem&out&println$data5%" ' ' public static #oid
main$String args !% { 7uterClass oc = new 7uterClass$%" BnnerClass ic = oc&new
BnnerClass$%" S*stem&out&println$oc&data%" S*stem&out&println$ic&data5%" ic&method$
%" ' ' 5ntuk mampu mengak e anggota dari inner !la , kita butuh ebuah in tan!e dari
inner !la $ethod-method dari inner !la dapat e!ara lang ung mengak e anggota dari
outer !la . .
Pengenalan Pemrograman %
15
J.E.N.I.
1." #ati$an
1.4.1 2abel !erkalian
6uli program yang mempunyai ma ukkan si3e dari u er dan men!etak tabel perkalian
dengan si3e yang ditetapkan. Si,e untuk tabel perkalian " ; 6abel perkalian dari
i,e ;" # # % 9 < ; # % 9 < ; < = ? #@ > #% #; #= %@ %; % 9 < ;
1.4.3 7ha%e
8uatlah !la Shape. !la memiliki dua field String" name dan si3e! !la mempunyai
method printShapeInfo, dimana hanya mengeluarkan nilai name dan field si3e dari
obje!t Shape! Juga memiliki method printShape(ame dan printShapeSi3e, dimana men!
etak nama dan i,e dari obje!t, berturut-turut. $enggunakan pe&ari an, buat !la
S4uare dengan field yang ama dan method eperti itu dari !la Shape. +la ini
mempunyai dua tambahan field integer" length dan width. $ethod printShape5ength dan
printShape6idth yang men!etak panjang dan lebar obje!t yang juga terma uk dalam !la
ini. Anda juga haru meng-override printShapeInfo untuk men!etak keluaran field
tambahan dalam ub!la juga.
1.4.4 Binatan"
8uatlah interfa!e %nimal yang mempunyai tiga method"eat dan move. Semua method ini
tidak punya argumen atau nilai return. $ethod ini hanya mengeluarkan bagaimana
obje!t %nimal makan dan bergerak. Sebagai !ontoh, eekor kelin!i memakan &ortel dan
bergerak dengan melompat. 8uat !la Fish dan 7ear yang menggunakan interfa!e %nimal.
6er erah kepada Anda bagaimana menggunakan method eat dan move!
Pengenalan Pemrograman %
16
J.E.N.I.
5engenalan 5emrograman $
1
J.E.N.I.
Error class digunakan oleh Ja.a run-time untuk menangani error yang muncul pada
saat dijalankan. Secara umum hal ini di luar control user karena kemunculannya
disebabkan oleh run-time en.ironment. Sebagai contoh adalah out of memory dan
harddisk crash.
Jika kode tersebut dijalankan, akan didapatkan pesan kesalahan sebagai berikut
'(ception in t)read *main* +ava.lang.,rit)metic'(ception- / by .ero at
DivByZero.main(DivByZero.+ava-3)
5esan tersebut mengin#ormasikan tipe exception yang terjadi pada baris dimana
exception itu berasal. Inilah aksi de#ault yang terjadi bila terjadi exception yang
tidak tertangani. Jika tidak terdapat kode yang menangani exception yang terjadi,
aksi de#ault akan bekerja otomatis. 6ksi tersebut pertama-tama akan menampilkan
deskripsi exception yang terjadi. /emudian akan ditampilkan stack trace yang
mengindenti#ikasi method dimana exception terjadi. 5ada bagian akhir, aksi de#ault
tersebut akan menghentikan program secara paksa. Bagaimana jika anda ingin
melakukan penanganan atas exception dengan cara yang berbeda7 ,ntungnya, bahasa
pemrograman Ja.a memiliki & key%ords penting dalam penanganan exception, yaitu try,
catch dan finally.
5engenalan 5emrograman $
2
J.E.N.I.
Blok catch dimulai setelah kurung kurawal dari kode try atau catch terkait.
Penulisan kode dalam blok mengikuti identasi
8unakan contoh kode tersebut pada program Di.By9ero yang telah dibuat sebelumnya
class DivByZero { public static void main(String args[]) { try
{ System.out.println(3/ )! System.out.println("#eta$.%)! & catc)
(,rit)metic'(ception e(c) { //6ea$si atas $e+adian System.out.println(e(c)! &
System.out.println("Setela) '(ception.%)! & &
5engenalan 5emrograman $
3
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. 5erlu dicatat bah%a blok try dapat hanya
menyebabkan sebuah exception pada satu %aktu, namun dapat pula menampikan tipe
exception yang berbeda di lain %aktu. Berikut adalah contoh kode yang menangani
lebih dari satu exception
class 7ultiple#atc) { public static void main(String args[]) { try { int den 8
9nteger.parse9nt(args[ ])! //baris : System.out.println(3/den)! //baris ; & catc)
(,rit)metic'(ception e(c) { System.out.println("5ilai <embagi .%)! & catc)
(,rray9nde(4ut40Bounds'(ception e(c=) { System.out.println("7issing argument.%)! &
System.out.println(",0ter e(ception.%)! & &
5ada contoh ini, baris ke-( akan menghasilkan kesalahan berupa Array ndex!ut!
fBoundsException bilamana seorang user alpa dalam memasukkan argument, sedang baris
ke-) akan menghasilkan kesalahan ArithmethicException jika pengguna memasukkan
nilai 3 sebagai sebuah argument. 5elajari apakah yang akan terjadi terhadap program
bila argumen ' argumen berikut dimasukkan oleh user a1 2idak ada argument b1 ! c1 3
5enggunaan try bersarang diperbolehkan dalam pemrograman Ja.a.
class 5ested2ryDemo { public static void main(String args[]){ try { int a 8
9nteger.parse9nt(args[ ])! try { int b 8 9nteger.parse9nt(args[3])!
System.out.println(a/b)! & catc) (,rit)metic'(ception e)
{ System.out.println("Divide by .ero error>*)! & & catc)
(,rray9nde(4ut40Bounds'(ception) { System.out.println("= parameters are re?
uired>*)! & &
5engenalan 5emrograman $
4
J.E.N.I.
& 5elajari apa yang akan terjadi pada program jika argument ' argument berikut
dimasukkan a1 2idak ada argumen b1 !) c1 !) & d1 !) 3
/ode berikut menggunakan try bersarang tergabung dengan penggunaan method. class
5ested2ryDemo= { static void nested2ry(String args[]) { try { int a 8
9nteger.parse9nt(args[ ])! int b 8 9nteger.parse9nt(args[3])!
System.out.println(a/b)! & catc) (,rit)metic'(ception e)
{ System.out.println(*Divide by .ero error>*)! & & public static void main(String
args[]){ try { nested2ry(args)! & catc) (,rray9nde(4ut40Bounds'(ception e)
{ System.out.println(*= parameters are re?uired>*)! & & &
5engenalan 5emrograman $
5
J.E.N.I.
"ekali lagi, coding con#ention $uga mengatur penggunaan finally seperti halnya pada
blok catch. Penggunaan finally dimulai setelah kurung kurawal penutup blok catch
terkait. Penulisan dalam blok tersebut $uga mengalami identasi. Blok finally
mengandung kode penanganan setelah penggunaan try dan catch. Blok kode ini selalu
tereksekusi %alaupun sebuah exception terjadi atau tidak pada blok try. Blok kode
tersebut juga akan menghasilkan nilai true meskipun return, continue ataupun break
tereksekusi. 2erdapat ( kemungkinan skenario yang berbeda dalam blok try-catch-
finally. 5ertama, pemaksaan keluar program terjadi bila control program dipaksa
untuk mele%ati blok try menggunakan return, continue ataupun break. /edua, sebuah
penyelesaian normal terjadi jika try-catch-finally tereksekusi secara normal tanpa
terjadi error apapun. /etiga, kode program memiliki spesi#ikasi tersendiri dalam
blok catch terhadap exception yang terjadi. ;ang terakhir, kebalikan skenario
ketiga. Dalam hal ini, exception yang terjadi tidak terde#inisikan pada blok catch
manapun. 4ontoh dari skenario ' skenario tersebut terlihat pada kode berikut ini
class @inallyDemo { static void my7et)od(int n) t)roAs '(ception{ try { sAitc)(n) {
case 3- System.out.println(*case pertama*)! return! case 3-
System.out.println(*case $etiga*)! t)roA neA 6untime'(ception(*demo case $etiga*)!
case :- System.out.println(*case $eempat*)! t)roA neA '(ception(*demo case
$eempat*)! case =- System.out.println(*case Bedua*)! & & catc) (6untime'(ception e)
{ System.out.print(*6untime'(ception ter+adi- *)!
System.out.println(e.get7essage())! & 0inally { System.out.println(*tryCbloc$
entered.*)! & & public static void main(String args[]){ 0or (int i83! i/8:! iDD)
{ try { @inallyDemo.my7et)od(i)! & catc) ('(ception e){ System.out.print(*'(ception
ter+adi- *)! System.out.println(e.get7essage())! & System.out.println()! & & &
5engenalan 5emrograman $
6
J.E.N.I.
Sebuah method perlu untuk menangkap ataupun menda#tar seluruh exceptions yang
mungkin terjadi, namun hal itu dapat menghilangkan tipe Error, >untimeException,
ataupun subclass-nya.
5engenalan 5emrograman $
7
J.E.N.I.
2.
!ategori Exception
5engenalan 5emrograman $
8
J.E.N.I.
Sekarang anda sudah cukup #amiliar dengan beberapa exception classes, saatnya untuk
mengenalkan aturan catch lebih dari satu harus berurutan dari subclass ke
superclass.
class 7ultiple#atc)'rror { public static void main(String args[]){ try { int a 8
9nteger.parse9nt(args [ ])! int b 8 9nteger.parse9nt(args [3])!
System.out.println(a/b)! & catc) ('(ception e) { System.out.println(e)! & catc)
(,rray9nde(4ut40Bounds'(ception e=) { System.out.println(e=)! &
System.out.println(*,0ter tryCcatc)Ccatc).*)! & &
Setelah mengkompilasi kode tersebut akan menghasilkan pesan error jika Exception
class adalah superclass dari Array ndex!ut!fBoundsException class.
7ultiple#atc)'rror.+ava-G- e(ception +ava.lang.,rray9nde(4ut40Bounds'(ception )as
already been caug)t & catc) (,rray9nde(4ut40Bounds'(ception e=) {
5engenalan 5emrograman $
9
J.E.N.I.
permasalahan yang akan diselesaikan. "embers dan constructors dapat dimasukkan pada
exception class milik anda. Berikut ini contohnya
class HateString'(ception e(tends 6untime'(ception{ /E 2ida$ perlu memasu$$an
member ataupun constru$tor E/ & class 2estHateString { public static void
main(String args[]) { String input 8 *invalid input*! try { i0 (input.e?
uals(*invalid input*)) { t)roA neA HateString'(ception()! &
System.out.println(*String accepted.*)! & catc) (HateString'(ception e)
{ System.out.println(*9 )ate t)is string- * D input D *.*)! & & &
2." Assertions
2.+.1 (ser )e*ined Exceptions
6ssertions mengijinkan programmer untuk menentukan asumsi yang dihadapi. Sebagai
contoh, sebuah tanggal dengan area bulan tidak berada antara ! hingga !$ dapat
diputuskan bah%a data tersebut tidak .alid. 5rogrammer dapat menentukan bulan harus
berada diantara area tersebut. "eskipun hal itu dimungkinkan untuk menggunakan
contructor lain untuk mensimulasikan #ungsi dari assertions, namun sulit untuk
dilakukan karena #itur assertion dapat tidak digunakan. @al yang menarik dari
assertions adalah seorang user memiliki pilihan untuk digunakan atau tidak pada
saat runtime. 6ssertion dapat diartikan sebagai extensi atas komentar yang
mengin#ormasikan pembaca kode bah%a 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.
5engenalan 5emrograman $
10
J.E.N.I.
ditulis oleh programmer yang memiliki akses terhadap methods tersebut. Sehingga
mereka menyadari bah%a saat menjalankannya, assertion harus dalam keadaan akti#.
,ntuk mengkompilasi #ile yang menggunakan assertions, parameter perintah diperlukan
seperti yang terlihat diba%ah ini
+avac Isource 3.: 7y<rogram.+ava
sebuah
tambahan
Jika anda ingin untuk menjalankan program tanpa menggunakan #itur assertions, cukup
jalankan program secara normal.
+ava 7y<rogram
assertions,
anda
perlu
menggunakan
5engenalan 5emrograman $
11
J.E.N.I.
2.# $ati%an
2...1 'eksadesi al ke )esi al
2entukan sebuah angka heksadesimal sebagai input. /on.ersi angka tersebut menjadi
bilangan decimal. 2entukan exception class anda sendiri dan lakukan penanganan jika
input dari user bukan berupa bilangan heksadesimal.
2...2 ,ena
2entukan nilai integer positi# sebagai input. 2ampilkan sebuah berlian menggunaakan
karakter asterisk 0A1 sesuai angka yang diinput oleh user. Jika user memasukkan
bilangan integer negati#, gunakan assertions untuk menanganinya. Sebagai contoh,
jika user memasukkan integer bernilai &, program anda harus menampilkan sebuah
berlian sesuai bentuk berikut
5engenalan 5emrograman $
12
J.E.N.I.
3.2 Rekursif
3.2.1 Apa yang dimaksud dengan Rekursif?
&ekursif adalah teknik peme#ahan masalah yang po'erful dan dapat digunakan ketika
inti dari masalah terjadi berulang kali. (entu saja, tipe dari masalah ini dapat
dipe#ahkan mengunakan perkataan berulang)ulang *i.e., menggunakan konstruksi
looping seperti for, while dan do-while+. Sesungguhnya, iterasi atau perkataan
berulang)ulang merupakan peralatan yang lebih efisien jika dibandingkan dengan
re#ursif tetapi re#ursion menyediakan solusi yang lebih baik untuk suatu
masalah. ,ada rekursif, method dapat memanggil dirinya sendiri. Data yang berada
dalam method tersebut seperti argument disimpan sementara kedalam sta#k sampai
method pemanggilnya diselesaikan.
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 ter#ukupi oleh suatu pembatasan kondisi. ,ermasalahan
yang mendasar merupakan kejadian yang paling ke#il dari sebuah masalah. Sebagai
#ontohnya, dapat dilihat pada kondisi rekursif pada faktorial, kasus yang mudah
adalah ketika inputnya adalah !. ! dalam kasus ini merupakan inti dari masalah.
,enggunaan dari iterasi dan rekursif dapat bersama)sama memandu loops jika hal ini
tidak digunakan dengan benar. 3euntungan iterasi dibandingkan re#ursion adalah
performan#e yang lebih baik. 4al tersebut lebih #epat untuk re#ursion sejak
terbentuknya sebuah parameter pada sebuah method yang disebabkan oleh suatu 5,-
time. 6agaimanapun juga, rekursif mendorong pra#ti#e soft'are engineering yang
lebih baik, sebab teknik ini biasanya dihasilkan pada kode yang singkat yang lebih
mudah untuk dimengerti dan juga mempromosikan reuseability pada suatu solusi yang
telah diterapkan. Memilih antara iterasi dan rekursif merupakan masalah dari
menjaga keseimbangan antara baiknya sebuah performan#e dan baiknya soft'are
engineering.
Diba'ah ini merupakan listing program yang sama tetapi menggunakan rekursif. class
Factorial&ecur { static int factorial(int n) { if (n == 1) { '* ()e base case *'
return 1; } '* &ecursive definition; Self-invocation *' return factorial(n-1)*n; }
public static void main(Strin ar s!") { int n = Inte er#parseInt(ar s!$"); S
%stem#out#println(factorial(n)); }
yang lain
Sekarang, pertimbangan dari masalah dalam pen#etakkan suatu angka desimal yang
nilai basenya telah ditetapkan oleh pengguna. Ingat bah'a solusi dalam hal ini
untuk menggunakan repetiti8e di8ision dan untuk menulis sisa perhitungannya. ,roses
akan berakhir ketika sisa hasil pembagian kurang dari base yang ditetapkan. Dapat
diasumsikan jika nilai input desimal adalah !9 dan kita akan mengkon8ersinya
menjadi base :. Inilah solusinya dengan perhitungan menggunakan pensil dan kertas.
Dari solusi diatas, !9 adalah sama dengan !" base :. 5ontoh berikutnya. Nilai input
desimalnya adalah !2; dan akan dikon8ersi ke base !2.
3
J.E.N.I.
!2; adalah sama dengan A; base !2. 5atatan A.!9. 6erikut ini merupakan solusi
iterati8e untuk masalah diatas. class *ec(o+t)ers { public static void main(Strin
ar s!") { int num = Inte er#parseInt(ar s!$"); int base = Inte er#parseInt(ar s!
1"); print,ase(num- base); } static void print,ase(int num- int base) { int rem =
1; Strin di its = .$1/0123456abcdef.; Strin result = ..; '* t)e iterative step *'
7)ile (num8=$) { rem = num9base; num = num'base; result = result#concat(di
its#c)ar:t(rem);..); } '* printin t)e reverse of t)e result *' for(int i =
result#len t)()-1; i >= $; i--) { S%stem#out#print(result#c)ar:t(i)); } } } 6erikut
ini merupakan re#ursion untuk masalah yang sama dengan solusi sebelumnya. class
*ec(o+t)ers&ecur { static void print,ase(int num- int base) { Strin di its = .
$1/0123456abcdef.; '* &ecursive step*' if (num >= base) { print,ase(num'base-
base); } '* ,ase case< num = base *' S%stem#out#print(di its#c)ar:t(num9base)); }
public static void main(Strin ar s!") { int num = Inte er#parseInt(ar s!$"); int
base = Inte er#parseInt(ar s!1"); print,ase(num- base); } }
4
J.E.N.I.
3.3.2 'tacks
Sta#k adalah satu set atau urutan elemen data dimana manipulasi data dari elemen)
elemen hanya diperbolehkan pada tumpukan teratas dari sta#k. 4al ini merupakan
perintah pengumpulan data se#ara linier yang disebut <last in, first out= *7I1>+.
Sta#ks berguna untuk berma#am)ma#am aplikasi seperti pattern re#ognition dan
pengkon8ersian antar notasi infi?, postfi? dan prefi? . Dua operasi yang
dihubungkan dengan sta#ks adalah operasi push dan pop. ,ush berarti memasukkan data
kedalam sta#ks yang paling atas dimana pop sebagai penunjuk@pointer untuk
memindahkan elemen ke atas sta#ks. -ntuk memahami bagaimana #ara kerja sta#ks,
pikirkan bagaimana Anda dapat menambah atau memindakan sebuah data dari tumpukan
data. ,ikiran Anda akan memberitahu Anda untuk menambah atau memindahkan data hanya
pada sta#k yang paling atas karena jika menggunakan #ara lain, dapat menyebabkan
tumpukan sta#k akan terjatuh. Diba'ah ini merupakan ilustrasi bagaimana tampilan
dari sta#ks. n)! ... 2 ; B % " ! 9 JayA 35 Jojo (oto 3yla DMC %ottom top
Sta#k akan berarti penuh jika jangkauan #ell teratas disimbolkan dengan n)!. Jika
nilai teratas @ top sama dengan )!, sta#k berarti kosong.
5
J.E.N.I.
3.3.3 (ueues
Dueues adalah #ontoh lain dari AD(. 4al ini merupakan perintah pengumpulan data
yang disebut <first)in, first)out=. Aplikasi ini meliputi jad'al pekerjaan dalam
operating system, topologi#al sorting dan graph tra8ersal. En$ueue dan de$ueue
merupakan operasi yang dihubungkan dengan $ueues. En$ueu menunjuk pada memasukkan
data pada akhir $ueue dimana de$ueue berarti memindahkan elemen dari $ueue
tersebut. -ntuk mengingat bagaimana $ueue bekerja, ingatlah arti khusus dari $ueue
yaitu baris. 6erikut ini bagaimana #ara kerja $ueue. Siapa yang akan mendapatkan
kesempatan pertama untuk bertemu bintang idolanya dari mereka yang sedang menunggu
dalam sebuah barisanE Seharusnya orang pertama yang berada pada barisan tersebut.
>rang ini mendapat kesempatan pertama untuk meninggalkan barisan. 4ubungkan hal
tersebut dengan bagaimana $ueue bekerja. 6erikut ini merupakan ilustrasi dari
bagaimana tampilan dari $ueue. 9 ! " E8e fron t
(abel !.".% Ilustrasi Dueue
% JayA
B 35
; Jojo
2 (oto
F 3yla
: DMC end
G
n)!
Dueue akan kosong jika nilai end kurang dari front. Sementara itu, akan penuh jika
end sama dengan n)!.
'* initiall%- t)e stac? is empt% *' '* stora e for inte ers *' '* si@e of memSpace
*'
6
J.E.N.I.
7
J.E.N.I.
6erikut ini merupakan #ontoh dari non)empty linked list dengan % node.
6erikut ini bagaimana #lass node diimplementasikan. 5lass ini dapat digunakan untuk
membuat linked list. class Aode { int data; Aode neBtAode; } '* inte er data
contained in t)e node *' '* t)e neBt node in t)e list *'
class (estAode { public static void main(Strin ar s!") { Aode empt%Cist = null; '*
create an empt% list *' '* )ead points to 1st node in t)e list *' Aode )ead = ne7
Aode(); '* initiali@e 1st node in t)e list *' )ead#data = 2; )ead#neBtAode = ne7
Aode(); )ead#neBtAode#data = 1$; '* null mar?s t)e end of t)e list *' )
ead#neBtAode#neBtAode = null; '* print elements of t)e list *' Aode currAode = )
ead; 7)ile (currAode 8= null) { S%stem#out#println(currAode#data); currAode =
currAode#neBtAode; } } }
8
J.E.N.I.
void pus)(int n){ '* no need to c)ec? for overflo7 *' IntStac?Aode node = ne7
IntStac?Aode(n); node#neBt = top; top = node; } int pop() { if (isDmpt%()) { return
-1; '* ma% t)ro7 a user-defined eBception *' } else { int n = top#data; top =
top#neBt; return n; } } boolean isDmpt%(){ return top == null; } public static void
main(Strin ar s!") { *%namicIntStac? m%Stac? = ne7 *%namicIntStac?(); m%Stac?#pus)
(2); m%Stac?#pus)(1$); '* print elements of t)e stac? *' IntStac?Aode currAode = m
%Stac?#top; 7)ile (currAode8=null) { S%stem#out#println(currAode#data); currAode =
currAode#neBt; } S%stem#out#println(m%Stac?#pop()); S%stem#out#println(m%Stac?
#pop()); } }
9
J.E.N.I.
6erikut ini adalah daftar dari beberapa Collections methods yang disediakan dalam
5olle#tion A,I dari Ja8a " ,latform SE 8!.B.!. ,ada Ja8a " ,latform SE 8.!.;.9,
methods ini telah dimodifikasi untuk menampung generi# types. Sejak generi# types
masih belum selesai dibahas, sebaiknya mempertimbangkan method ini terlebih dahulu.
Disarankan bah'a Anda menga#u pada Collection methods yang terbaru dimana Anda
lebih mudah
,engenalan ,emrograman " 10
J.E.N.I.
Anda diharapkan menga#u pada dokumentasi A,I untuk mengetahui daftar lengkap dari
methods dalam Collection, List dan Set interfa#e. Saat ini kita akan melihat
beberapa #olle#tion #lasses. 4arap menga#u pada A,I untuk daftar dari methods yang
dimasukkan kedalam #lass ini. ,ada bagian sebelumnya, Anda telah melihat bagaimana
mengimplementasikan linked list dengan #ara Anda sendiri. Ja8a SD3 juga telah
menyediakan built)implementation dari linked list untuk kita. LinkedList #lass
berisi methods yang memperbolehkan linked list digunakan seperti sta#ks, $ueue atau
AD( yang lain. 7isting program berikut ini menunjukan bagaimana menggunakan #lass
LinkedList.
11
J.E.N.I.
12
J.E.N.I.
$ashSet merupakan sebuah implementasi dari Set interfa#e yang berguna pada hash
table. ,enggunaan suatu hash table lebih mudah dan #epat untuk melihat lebih detail
elemen)elemen yang ada. (able menggunakan suatu rumusan untuk menentukan dimana
suatu objek disimpan. (eliti program ini, yang menggunakan #lass $ashSet. import
Eava#util#*; class Has)Set*emo { public static void main(Strin ar s!") { Has)Set )s
= ne7 Has)Set(2- $#2f); S%stem#out#println()s#add(.one.)); S
%stem#out#println()s#add(.t7o.)); S%stem#out#println()s#add(.one.)); S
%stem#out#println()s#add(.t)ree.)); S%stem#out#println()s#add(.four.)); S
%stem#out#println()s#add(.five.)); S%stem#out#println()s); } } TreeSet merupakan
sebuah implementasi dari Set interfa#e yang menggunakan tree. 5lass ini memastikan
bah'a yang disortir akan diurutkan se#ara as#ending. ,ertimbangkan, bagaimana #lass
TreeSet telah digunakan dalam listing program berikut ini# import Eava#util#*;
class (reeSet*emo { public static void main(Strin ar s!") { (reeSet ts = ne7
(reeSet(); ts#add(.one.); ts#add(.t7o.); ts#add(.t)ree.); ts#add(.four.); S
%stem#out#println(ts); } }
13
J.E.N.I.
3.& Lati$an
3.!.1 Faktor "ersekutuan &er%esar
1aktor persekutuan terbesar *1,6+ 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 Eu#lidKs method, buatlah dua kode untuk penghitungan dua angka.
Iunakan iterasi untuk kode program yang pertama dan rekursif untuk kode program
berikutnya. 5atatan pada algoritma Eu#lid !. Sebagai masukkan integers ? dan y. ".
-langi step diba'ah ini 'hile y L. 9 a. y . ? M y0 b. ? . Nilai lama y0 %.
&eturn ?. 5ontoh, ? . !B dan y . 2. y . ? M y . !B M 2 . " ?.2 y.?My.2M".9 / 0 2
1F234
14
J.E.N.I.
Pada contoh berikut ini, data " disimpan pada (ariabel args[0], begitu pula dengan
data $ yang disimpan pada args[1]. Sehingga, tujuan dari deklarasi String args[]
sebagai sebuah parameter pada method utama menjadi jelas. Selain mele*atkan
argument menuju method utama, Anda juga dapat memanipulasi system properties dari
command-line. System properties hampir menyamai en(ironment (ariables, namun tidak
memiliki ketergantungan pada spesi ikasi plat orm yang digunakan. Sebuah property
secara sederhana berupa pemetaan antara property name dan (alue yang dimilikinya.
+al ini ditunjukkan pada Ja(a dalam class Properties. )lass System menyediakan
sebuah method untuk menentukan system properties yang digunakan, method
getProperties yang menghasilkan sebuah object Properties. )lass yang sama juga
menyediakan method getProperty yang memiliki dua buah bentuk.
Pengenalan Pemrograman $
1
J.E.N.I.
/ita 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 01 pada
perintah Ja(a 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
2ntuk menampilkan da tar 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.
5.
1ibandingkan dengan mendapatkan masukan user dari command-line, sebagian user lebih
memilih untuk memasukkan data bilamana diminta oleh program pada saat eksekusi.
Satu cara dalam melakukan hal ini adalah dengan menggunakan stream. Sebuah stream
adalah abstraksi dari sebuah ile atau sebuah perangkat yang mengijinkan beberapa
set item untuk dibaca atau ditulisi. Streams terhubung dengan physical de(ices
seperti keyboards, consoles dan iles. 3erdapat dua bentuk umum dari streams, byte
streams dan character streams. .yte streams digunakan pada data biner, sedangkan
character streams digunakan pada karakter 2nicode. System.in dan System.out adalah
dua contoh dari byte streams yang digunakan dalam Ja(a. )ontoh pertama mere
erensikan pada keyboard, kemudian contoh kedua mere erensikan pada console. 2ntuk
membaca karakter dari keyboard, Anda dapat menggunakan byte stream System.in yang
terdapat pada object .u ered4eader. .aris berikut menunjukkan bagaimana untuk
melakukan hal tersebut !
#ethod read dari object .u ered4eader selanjutnya digunakan untuk membaca nilai
input dari perangkat input.
ch=(int &r.rea$( ! ))metho$ rea$ menghasil*an nilai integer
Jika Anda lebih memilih untuk membaca keseluruhan baris daripada membaca satu
karakter tiap *aktu, gunakan method read5ine !
str 6 br.read5ine,-7
Pengenalan Pemrograman $
3
J.E.N.I.
.erikut ini sebuah program yang hampir menyerupai contoh sebelumnya, namun membaca
keseluruhan string, bukan satu karakter.
import java.io.+! class ;reet<ser pu&lic static voi$ main(String args./ thro's
(012ception System.out.println(34i5 'hat6s your name73 ! String name! "u##ere$
%ea$er &r = ne' "u##ere$%ea$er(ne' (nputStream%ea$er(System.in ! name =
&r.rea$=ine( ! System.out.println(3>ice to meet you5 3 8 name 8 39 ? 3 ! : :
Pada saat menggunakan streams, jangan lupa untuk mengimport package java.io seperti
yang ditunjukkan diba*ah ini !
import java.io.+!
Satu hal lagi yang perlu untuk diingat, pembacaan dari streams dapat menyebabkan
terjadinya e8ception. Jangan lupa untuk menangani e8ception tersebut menggunakan
perintah try-catch atau dengan mengindikasikan e8ception pada klausa thro*s dalam
method.
Pengenalan Pemrograman $
4
J.E.N.I.
,ile(nputStream(String #ilename
)onstructor tersebut membuat sebuah koneksi terhadap ile dimana nama dari ile
tersebut ditunjukkan sebagai sebuah argument. E8ception berupa FileNotFoundE !
eption akan muncul jika ile tidak ditemukan atau tidak dapat dibuka dan kemudian
dibaca. Setelah membuat sebuah input stream, Anda kemudian dapat menggunakannya
untuk membaca sebuah ile dengan menggunakan method read. #ethod read menghasilkan
sebuah nilai integer, dan akan menunjukkan nilai " jika telah mencapai batas akhir
ile.
Pengenalan Pemrograman $
5
J.E.N.I.
)ontructor tersebut menyediakan jalur output stream terhadap sebuah ile yang akan
ditulisi. Sebuah E8ception berupa FileNotFoundE !eption akan muncul jika ile yang
dimaksud tidak dapat dibuka untuk ditulisi.
Jika output stream telah dibuat, Anda dapat menggunakannya untuk menulisi ile yang
dituju menggunakan method #rite. #ethod tersebut menggunakan penandaan sebagai
berikut !
voi$ 'rite(int &
Parameter $ mere erensikan data yang akan dituliskan pada ile sesuai dengan hasil
output stream.
Pengenalan Pemrograman $
6
J.E.N.I.
Pengenalan Pemrograman $
7
J.E.N.I.
5.5 Lati&an
5.5.1 Spasi menjadi Underscore ( _ )
.uatlah sebuah program yang memuat dua String sebagai argument, sumber dan nama ile
tujuan. /emudian, baca ile sumber dan tuliskan isi dari ile tersebut terhadap ile
tujuan, seluruh spasi yang ada ,9 9- diubah menjadi underscore ,9 : 9-.
Pengenalan Pemrograman $
8
J.E.N.I.
1
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 + ; j < endIdx; j++) { if
(((!o"#arab$e) array[k])%co"#are&o(array[j])'() { k = j; ) )
s*a#(array[i],array[k]); ) )
'ada akhir modul ini! anda akan diminta untuk membuat implementasi bermacam
algoritma sorting yang akan dibahas pada bagian ini.
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 / ke n! dimana n adalah %umlah total elemen dikurangi /.
6.3.1 Algoritma
void se$ectionSort(Object array[], int startIdx, int endIdx) { int "in; for (int i
= startIdx; i < endIdx; i++) { "in = i; for (int j = i + ; j < endIdx; j++) { if
(((!o"#arab$e)array["in])%co"#are&o(array[j])'() { "in = j; ) ) s*a#(array["in],
array[i]); ) )
3
J.E.N.I.
'ada setiap tingkatan rekursi! pola tersebut terdiri atas 3 langkah. /. 4i5ide
$emilah masalah men%adi sub masalah &. 6on7uer "elesaikan sub masalah tersebut
secara rekursif. Jika sub.masalah tersebut cukup ringkas dan sederhana! pendekatan
penyelesaian secara langsung akan lebih efektif 3. Kombinasi $engkombinasikan
solusi dari sub.masalah! yang akan membimbing menu%u penyelesaian atas permasalahan
utama
6.4.3 Algoritma
void "er+eSort(Object array[], int startIdx, int endIdx) { if (array%$en+t, -= )
{ ../e"ba+i ran+kaian data, ri+,t0rr dan $eft0rr "er+eSort($eft0rr, startIdx,
"idIdx); "er+eSort(ri+,t0rr, "idIdx+ , endIdx); co"bine($eft0rr, ri+,t0rr); ) )
4
J.E.N.I.
7 2
5 6
7
& 8
$engkombinasikan
6.5 !uic"sort
*uicksort ditemukan oleh 6.A.2 Hoare. "eperti pada merge sort! algoritma ini %uga
berdasar pada pola di5ide.and.con7uer. Berbeda dengan merge sort! algoritma ini
hanya mengikuti langkah – langkah sebagai berikut # /. 4i5ide $emilah rangkaian
data men%adi dua sub.rangkaian A;p<7./= dan A;7>/<r= dimana setiap elemen A;p<7./=
adalah kurang dari atau sama dengan A;7= dan setiap elemen pada A;7>/<r= adalah
lebih besar atau sama dengan elemen pada A;7=. A;7= disebut sebagai elemen pi5ot.
'erhitungan pada elemen 7 merupakan salah satu bagian dari prosedur pemisahan.
5
J.E.N.I.
&. 6on7uer $engurutkan elemen pada sub.rangkaian secara rekursif 'ada algoritma
quicksort! langkah ?kombinasi? tidak di lakukan karena telah ter%adi pengurutan
elemen – elemen pada sub.array
6.#.1 Algoritma
void 12ickSort(Object array[], int $eftIdx, int ri+,tIdx) { int #ivotIdx; .3
4ondisi &er"inasi 3. if (ri+,tIdx ' $eftIdx) { #ivotIdx = #artition(array, $eftIdx,
ri+,tIdx); 12ickSort(array, $eftIdx, #ivotIdx5 ); 12ickSort(array, #ivotIdx+ ,
ri+,tIdx); ) )
Inisialisasi elemen kiri sebagai elemen kedua dan elemen kanan sebagai elemen
akhir. kiri 3 / @ / 9 A & : 9 3 9 kanan B
Ceser elemen kiri kearah kanan sampai ditemukan nilai yang lebih besar dari elemen
pi5ot tersebut. Ceser elemen kanan ke arah kiri sampai ditemukan nilai dari elemen
yang tidak lebih besar dari elemen tersebut. kiri 3 / @ / 9 A & : 9 kanan 3 9 B
6
J.E.N.I.
&
,erlihat bah(a titik kanan dan kiri telah digeser sehingga mendapatkan nilai elemen
kanan D elemen kiri. 4alam hal ini tukarkan elemen pi5ot dengan elemen kanan. pi5ot
2 / 3 / 3 A 9 : 9 @ 9 B
Kemudian urutkan elemen sub.rangkaian pada setiap sisi dari elemen pi5ot.
6.6 $atihan
6.6.1 Insertion Sort
Impelementasikan algoritma insertion sort dalam Ja5a untuk mengurutkan serangkaian
data integer. +akukan percobaan terhadap hasil implementasi anda terhadap rangkaian
data integer yang dimasukkan oleh pengguna melalui command line.
7
J.E.N.I.
8
J.E.N.I.
6.6.4 !uic"sort
Cunakan implementasi quicksort berikut ini terhadap serangkaian data integer.
c$ass 82ickSort { static void 12ickSort (int[] array, int startIdx, int endIdx)
{ .. startIdx ada$a, index ba*a, .. endIdx is index atas .. dari array yan+ akan
di2r2tkan int i=startIdx, j=endIdx, ,; ..#i$i, e$e"en #erta"a seba+ai #ivot int
#ivot=array[66666]; .. "e"i$a, do { *,i$e (array[i]66666#ivot) { i++; ) *,i$e
(array[j]'66666) { j55; ) if (i<=j) { ,=66666; array[i]=66666; array[j]=66666; i++;
j55; ) ) *,i$e (i<=j); .. rek2rsi if (startIdx<j) { 12ickSort(array, 66666, j); )
if (i<endIdx) { 12ickSort(array, 66666, endIdx); ) ) #2b$ic static void "ain(Strin+
ar+s[]) { int n2"0rr[] = ne* int[ar+s%$en+t,]; for (int i = (; i < ar+s%$en+t,; i+
+) { n2"0rr[i] = Inte+er%#arseInt(ar+s[i]); ) 12ickSort(n2"0rr, (, n2"0rr%
$en+t,5 ); for (int i = (; i < n2"0rr%$en+t,; i++) { Syste"%o2t%#rint$n(n2"0rr[i]);
) ) )
9
J.E.N.I.
Pengenalan Pemrograman 3
1
J.E.N.I.
7.3 Ko
AWT Class
0omponen 0ontainer Panel (indo) -rame
Description
Abstra7t .lass untu obje !ang dapat ditampil an pada 7onsole dan berintera si
dengang user. 5agian utama dari semua elas A(T. Abstra7t %ub7lass dari .omponent
.lass. %ebuah menampung omponen !ang lainn!a. omponen !ang dapat
Turunan dari .ontainer .lass. %ebuah #rame atau )indo) tanpa titlebar, menubar tida
termasu border. %uper7lass dari applet 7lass. Turunan dari .ontainer 7lass. Top
le$el )indo), dimana berarti tida bisa dimasu an dalam obje !ang lainn!a.Tida
memili i border dan menubar. Turunan dari )indo) 7lass. (indo) dengan judul,
menubar, border dan pengatur u uran di pojo . "emili i empat onstru tor , dua
diantaran!a memili i penulisan seperti diba)ah ini & Frame() Frame(String title)
Tabel 1 ! 1" #elas kontainer AWT
void setSize(Dimension d)
void setVisible(boolean b)
/alam mendesain apli asi GUI, 9bje7t Fra%e selalu diguna an. /iba)ah ini adalah
7ontoh bagaimana membuat sebuah apli asi. import java.awt.*; publi lass SampleFrame
e!tends Frame "
Pengenalan Pemrograman 3
2
J.E.N.I.
: perhati an bah)a tombol tutup pada #rame tida a an be erja arena tida ada me
anisme event handling !ang ditambah an di dalam apli asi. Anda a an belajar tentang
event handling pada modul selanjutn!a.
publi stati void main(String args#$) " SampleFrame s% & new SampleFrame(); s
%.setSize('((, '((); ))*oba hilang+an baris ini s%.setVisible(true); ))*oba
hilang+an baris ini ,
7.3.2 Grafik
5eberapa metode gra#i beberapa metode. dra);ine() #ill<e7t() dra)<e7t() 7lear<e7t()
ditemu an dalam (raphic 7lass. /iba)ah ini adalah da#tar dari dra)Pol!line()
dra)Pol!gon() #illPol!gon() get.olor() set.olor() get-ont() set-ont() dra)%tring()
=ubungan dari elas ini adalah Color 7lass, dimana memili i tiga onstru tor.
Constructor Format
.olor(int r, int g, int b) .olor(#loat r, #loat g, #loat b) .olor(int rgb1alue)
Nilai integer > 4 322. Nilai #loat >.> 4 '.>.
Description
Panjang nilai & > e 33+4' (hitam e putih). <ed& bits ',43* Green& bits ?4'2 5lue&
bits >4@
/iba)ah ini adalah 7ontoh program !ang mengguna an beberapa metode di dalam (raphic
7lass. import java.awt.*; publi lass -raphi .anel e!tends .anel " -raphi .anel() "
set/a +ground(*olor.bla +); )) onstant in *olor , publi void paint(-raphi s g) "
g.set*olor(new *olor((,011,()); ))green g.setFont(new Font(23elveti
a2,Font..4567,'8)); g.drawString(23ello -96 :orld;2, <(, '((); g.set*olor(new
*olor('.(%,(,()); ))red
lass
Pengenalan Pemrograman 3
3
J.E.N.I.
g.%ill=e t(<(, '((, '1(, '(); , publi stati void main(String args#$) " Frame % &
new Frame(2>esting -raphi s .anel2); -raphi .anel gp & new -raphi .anel();
%.add(gp); %.setSize(8((, <((); %.setVisible(true); , an didalam )indo) !ang dapat
terlihat
Agar panel dapat terlihat atau visible, dia harus dileta seperti sebuah #rame.
5eri ut adalah apli asi membuat sebuah #rame dengan dalamn!a. import java.awt.*;
an di
lass Frame:*ontrols e!tends Frame " publi stati void main(String args#$) "
Frame:*ontrols %w & new Frame:*ontrols(); %w .set4a?out(new Flow4a?out()); ))more
on this later %w .setSize(8((, 8((); %w .add(new /utton(2>est @e;2)); %w .add(new
4abel(24abe2)); %w .add(new >e!tField()); *he +bo!-roup bg & new *he +bo!-roup();
%w .add(new *he +bo!(2 h+'2, bg, true)); %w .add(new *he +bo!(2 h+02, bg, %alse));
%w .add(new *he +bo!(2 h+<2, bg, %alse)); 4ist list & new 4ist(<, %alse);
list.add(2@>V2); list.add(2V2); %w .add(list); *hoi e hooser & new *hoi e();
hooser.add(25vril2); hooser.add(2@oni a2);
Pengenalan Pemrograman 3
4
J.E.N.I.
"etode ini mengatur posisi berdasar an pada argumen 6 dan !, dan u uran berdasar an
argumen width dan height =al ini a an 7u up men!ulit an dan membosan an untu apli
asi ji a Anda memili i beberapa obje omponen didalam obje ontainer. Anda a an
memanggil metode ini untu setiap omponen.
Pengenalan Pemrograman 3
5
J.E.N.I.
FlowLayout Constructors "embuat obje baru -lo);a!out dengan posisi spesi#i dan lima
unit hori8ontal dan $erti al gap dimasu an pada omponen sebagai de#ault. Flow4a?
out(int align, int hgap, int vgap) "embuat obje baru -lo);a!out dengan argumen
pertama sebagai posisi pada omponen dan hgap untu hori8ontal dan vgap untu $erti al
pada omponen
Gap dapat di ata an sebagai jara antara omponen dan biasan!a diu ur dengan satuan
pi6el. Posisi argumen mengi uti penulisan sebagai beri ut & '.-lo);a!out.;E-T 3.-
lo);a!out..ENTE< *.-lo);a!out.<IG=T 5agaimana ah output dari program beri utA
import java.awt.*; lass Flow4a?outDemo e!tends Frame " publi stati void main(String
args#$) " Flow4a?outDemo %ld & new Flow4a?outDemo(); %ld.set4a?out(new Flow4a?
out(Flow4a?out.=6-3>, '(, '()); %ld.add(new /utton(2A7B2)); %ld.add(new
/utton(2>:A2)); %ld.add(new /utton(2>3=BB2)); %ld.setSize('((, '(();
%ld.setVisible(true); ,
Gambar beri ut adalah 7ontoh dari hasil !ang berjalan pada plat#orm (indo).
Pengenalan Pemrograman 3
6
J.E.N.I.
%eperti pada -lo);a!out "anager, parameter hgap dan vgap disini juga menjelas an
jara antara omponen dengan ontainer. Untu menambah an omponen edalam region !ang
spesi#i , guna an metode menambah an dan mele)at an dua argumen !aitu & omponen !
ang ingin dimasu an e dalam region dan region mana !ang ingin dipa ai untu meleta
an omponen. Perlu diperhati an bah)a han!a satu omponen !ang dapat dimasu an dalam
satu region. "enambah an lebih dari satu omponen pada ontainer !ang bersang utan,
ma a omponen !ang tera hir ditambah an !ang a an ditampil an. 5eri ut ini adalah
da#tar dari elima region. '. 3. *. +. 2. 5order;a!out.N9<T= 5order;a!out.%9UT=
5order;a!out.EA%T 5order;a!out.(E%T 5order;a!out..ENTE< an bagaimana )order+ayout
be erja.
lass /order4a?outDemo e!tends Frame " publi stati void main(String args#$) "
/order4a?outDemo bld & new /order4a?outDemo(); bld.set4a?out(new /order4a?out('(,
'()); ))ma? remove bld.add(new /utton(27A=>32), /order4a?out.7A=>3); bld.add(new
/utton(2SA9>32), /order4a?out.SA9>3); bld.add(new /utton(2B5S>2), /order4a?
out.B5S>); bld.add(new /utton(2:BS>2), /order4a?out.:BS>); bld.add(new
/utton(2*B7>B=2), /order4a?out.*B7>B=); bld.setSize(0((, 0(();
bld.setVisible(true);
Pengenalan Pemrograman 3
7
J.E.N.I.
, : 5eri ut ini adalah hasil dari 7ontoh program tersebut. Gambar mengubah bentu
dari #rame.
edua menunju
an e#e
dari
"embuat obje Grid;a!out baru dengan jumlah baris dan olom sesuai dengan einginan
-rid4a?out(int rows, int ols, int hgap, int vgap)
"embuat obje Grid;a!out baru dengan jumlah baris dan olom !ang ditentu an. Unit
spasi hgap hori8ontal dan $gap $erti al diapli asi an e dalam omponen.
Tabel 1 * *" #onstruktor (rid+ayout
.obalah program ini. import ja$a.a)t.BC 7lass Grid;a!out/emo e6tends -rame D publi7
stati7 $oid main(%tring argsEF) D Grid;a!out/emo gld G ne) Grid;a!out/emo()C
Pengenalan Pemrograman 3 8
J.E.N.I.
Pengenalan Pemrograman 3
9
J.E.N.I.
Perhati an te ni !ang diguna an pada 7ontoh beri ut. import java.awt.*; lass
*omple!4a?out e!tends Frame " publi stati void main(String args#$) " *omple!4a?out
l & new *omple!4a?out(); .anel panel7orth & new .anel(); .anel panel*enter & new
.anel(); .anel panelSouth & new .anel(); )* 7orth .anel *) )).anels use Flow4a?out
b? de%ault panel7orth.add(new /utton(2A7B2)); panel7orth.add(new /utton(2>:A2));
panel7orth.add(new /utton(2>3=BB2)); )* *enter .anel *) panel*enter.set4a?out(new
-rid4a?out(C,C)); panel*enter.add(new >e!tField(2'st2)); panel*enter.add(new >e!
tField(20nd2)); panel*enter.add(new >e!tField(2<rd2)); panel*enter.add(new >e!
tField(2Cth2)); )* South .anel *) panelSouth.set4a?out(new /order4a?out());
panelSouth.add(new *he +bo!(2*hoose me;2), /order4a?out.*B7>B=); panelSouth.add(new
*he +bo!(26Dm here;2), /order4a?out.B5S>); panelSouth.add(new *he +bo!(2.i + me;2),
/order4a?out.:BS>); )* 5dding the .anels to the Frame ontainer *) ))Frames use
/order4a?out b? de%ault l.add(panel7orth, /order4a?out.7A=>3);
l.add(panel*enter, /order4a?out.*B7>B=); l.add(panelSouth, /order4a?out.SA9>3);
l.setSize(<((,<((); l.setVisible(true); , :
Pengenalan Pemrograman 3
10
J.E.N.I.
7.* Ko
!on"n Swing
%eperti pada pa7 age A(T, pa7 age dari %)ing men!edia an ban!a elas untu membuat
apli asi GUI. Pa7 age tersebut dapat ditemu an di /ava& swing. Perbedaan utama
antara eduan!a adalah omponen %)ing ditulis men!eluruh mengguna an Ja$a mengingat !
ang bela angan tida . 0esimpulann!a, program GUI ditulis mengguna an ban!a elas
dari pa7 age %)ing !ang mempun!ai tampilan loo and #eel !ang sama mes i dijalan an
pada beda palt#orm. ;ebih dari itu, %)ing men!edia an omponen !ang lebih menari
seperti color chooser dan option pane Nama dari omponen GUI mili %)ing hampir sama
persis dengan omponen GUI mili A(T. Perbedaan jelas terdapat pada penamaan omponen.
Pada dasarn!a, nama omponen %)ing sama dengan nama omponen A(T tetapi dengan
tambahan huru# J pada pre#i6n!a. %ebagai 7ontoh, satu omponen dalam A(T adalah
button 7lass. %edang an pada %)ing, nama omponen tersebut menjadi Jbutton 7lass.
5eri ut adalah da#tar dari omponen %)ing.
Komponen Swing
J.omponent J5utton J.he7 5o6
Penjelasan
0elas indu untu semua omponen %)ing, tida termasu top4le$el ontainer Tombol IpushJ.
0orespondesi pada button 7lass dalam pa7 age A(T Item !ang dapat dipilih atau tida
oleh pengguna. 0orespondensi pada 7he7 bo6 7lass dalam pa7 age A(T
Pengenalan Pemrograman 3
11
J.E.N.I.
Komponen Swing
J-ile.hooser JTe6t-ield J-rame
Penjelasan
"engijin an pengguna untu memilih sebuah #ile. 0orespondensi pada #ile7hooser 7lass
dalam pa7 age A(T "engijin an untu mengedit te6t satu baris. 0orespondensi pada
te6t#ield 7lass dalam pa7 age A(T. Turunan dan orepondensi pada #rame 7lass dalam
pa7 age A(T tetapi eduan!a sedi it tida 7o7o dalam aitann!a dengan menambah an
omponen pada ontainer. Perlu mendapat an 7ontent pane !ang terbaru sebelum menambah
sebuah omponen. Turunan J7omponent. 0ontainer 7lass sederhana tetapi bu an
top4le$el. 0orespondensi pada panel 7lass dalam pa7 age A(T. Turunan dan
orepondensi e Applet 7lass dalam pa7 age A(T. Juga sedi it tida 7o7o dengan applet
7lass dalam aitann!a dengan menambah an omponen pada ontainer Turunan
J7omponent. /isedia an untu mempermudah menampil an pop4 up ota dialog. Turunan dan
orespondensi pada dialog 7lass dalam pa7 age A(T. 5iasan!a diguna an untu
mengin#ormasi an sesuatu epada pengguna atau prompt pengguna untu input. Turunan
J7omponent. "engijin an pengguna untu memilih )arna
Tabel 1 -" )eberapa ko%ponen Swing
JPanel JApplet
J9ptionPane J/ialog
J.olor.hooser
Untu da#tar !ang leng ap dari omponen %)ing, Anda dapat melihatn!a di do umentasi
API.
)* initialization *) %rame & new EFrame(2@? First Swing 5ppli ation2); panel & new
E.anel(); te!tField & new E>e!tField(2De%ault te!t2); button & new E/utton(2*li +
me;2); ontent.ane & %rame.get*ontent.ane(); )* add omponents to panelF uses Flow4a?
out b? de%ault *) panel.add(te!tField); panel.add(button); )* add omponents to
ontent.aneF uses /order4a?out *) ontent.ane.add(panel, /order4a?out.*B7>B=);
%rame.pa +(); )) auses size o% %rame to be based on the omponents
%rame.setVisible(true); , publi stati void main(String args#$) " SwingDemo sd & new
SwingDemo(); sd.laun hFrame(); ,
Perlu diperhati an pada pa7 age /ava awt masih saja diimpor arena la!out manager !
ang diguna an terdapat pada pa7 age tersebut. Juga, memberi judul pada #rame dan
mengepa7 omponen di dalam #rame dapat juga dila u an untu #rame A(T.
Pengenalan Pemrograman 3
13
J.E.N.I.
;ihat, begitu mudahn!a memasu an input dari user. 5eri ut ini adalah hasil dari
7ontoh program diatas
7.+ 'ati,an
7...1 Ti/)Ta/)Toe
5uatlah tampilan GUI untu program ti74ta74toe. Papann!a terdiri dari enam ota .
Ingatlah bah)a Anda a an menambah an ode ini pada tahap a hir untu mengatasi intera
si antar pengguna. Jadi, desainlah papan Anda dengan benar. Pasti anlah Anda
memilih omponen !ang pantas untu papan tersebut. eluar an semua sisi artisti Anda.
Anda dapat mengguna an A(T atau %)ing untu latihan ini.
Pengenalan Pemrograman 3
14
J.E.N.I.
Pengenalan Pemrograman %
"
J.E.N.I.
Pengenalan Pemrograman %
%
J.E.N.I.
Class Event
Deskripsi komponen
E8tends #omponentEvent. Abstrak root 'lass event untuk semua komponen$level input
'lass$'lass event. E8tends $&TEvent. +ijalankan ketika sebuah tombol ditekan,
melakukan double$klik da)tar item, atau memilih sebuah menu. E8tends $&TEvent.
+ijalankan ketika sebuah item dipilih atau di$ deselect oleh user, seperti sebuah
list atau 'he'kbo8. E8tends )nputEvent. +ijalankan ketika sebuah *ey ditekan,
dilepas atau diketikkan. E8tends )nputEvent. +ijalankan ketika sebuah tombol mouse
ditekan, dilepas, atau di$klik 2tekan dan lepas3, atau ketika sebuah kursor mouse
masuk atau keluar dari bagian visible dari komponen. E8tends $&TEvent. +ijalankan
ketika nilai dari te8t )ield atau te8t area dirubah. E8tends #omponentEvent.
+ijalankan sebuah objek &indo+ dibuka, ditutup, diakti)kan, nonakti)kan, iconi,ied,
deiconi,ied, atau ketika ,ocus ditrans)er kedalam atau keluar 4indo4.
Tabel 1.-: #lass.#lass Event
,e8tEvent 7indo4Event
Pengenalan Pemrograman %
&
J.E.N.I.
7indo4-istener
Pengenalan Pemrograman %
(
J.E.N.I.
Pengenalan Pemrograman %
*
J.E.N.I.
4 public void mouse$ra%%ed(!ouseEvent me) . /trin% ms% 0 <!ouse dra%%ed at < = me)
%et>() = <-< = me)%et?()+ tf)setTe"t(ms%)+ 4 public void mouse!oved(!ouseEvent
me) . /trin% ms% 0 <!ouse moved at < = me)%et>() = <-< = me)%et?()+ tf)setTe"t(ms%)
+ 4 public static void main(/trin% ar%s@A) . !ouseEvents$emo med 0 ne& !
ouseEvents$emo(<!ouse Events $emo<)+ med)launc3,rame()+ 4 4
Pengenalan Pemrograman %
;
J.E.N.I.
8.5
da!ter Classes
#enerapkan semua method dari inter)a'e ang semuan a akan membutuhkan ban ak
pekerjaan. +i satu sisi, Anda terkadang lebih sering tertarik menerapkan han a
beberapa method dari inter)a'e saja. Untungn a, Java men ediakan untuk kita 'lass$
'lass adapter ang menerapkan semua method dari masing$masing listener inter)a'e
dengan lebih dari satu method. Implementasi dari method$method semuan a adalah
kosong.
Pengenalan Pemrograman %
<
J.E.N.I.
5agian ini memberi Anda tinjauan ulang atas konsep ang sudah Anda pelajari di
kursus pemrograman pertama. )nner class dan anonymous inner class sangatlah
berman)aat untuk GUI event handling.
Pengenalan Pemrograman %
=
J.E.N.I.
Pengenalan Pemrograman %
">
J.E.N.I.
8.& Lati'an
8.+.1 /ic /ac /oe
E8tend program papan ,i'$,a'$,oe ang telah Anda kembangkan sebelumn a dan tambahkan
event handlers ke kode tersebut untuk membuat program ber)ungsi penuh. Permainan
,i'$,a'$,oe dimainkan dengan dua pemain. Pemain mengambil giliran mengubah. Setiap
giliran, pemain dapat memilih kotak pada papan. 0etika kotak dipilih, kotak
ditandai oleh simbol pemain 21 dan ? biasan a digunakan sebagai simbol3. Pemain ang
sukses menaklukkan & kotak membentuk garis horisontal, vertikal, atau diagonal,
memenangkan permainan. Permainan akan berakhir ketika pemain menang atau ketika
semua kotak telah terisi.
Pengenalan Pemrograman %
""
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. agaimanapun !uga, di dunia nyata,
pasti dibutuhkan sesuatu yang dapat mengatur proses yang ter!adi dan ber!alan
bersama-sama."leh karena itu, thread hadir untuk men!adi solusi dalam mengatasi
permasalahan tersebut. Setelah menyelesaikan pela!aran ini, Anda diharapkan dapat#
$. %ende&iniskan threads '. %engerti perbedaan state dalam threads (. %engerti
konsep prioritas dalam threads ). %engetahui bagaimana menggunakan method didalam
*lass +hread ,. %embuat sendiri sebuah thread -. %enggunakan sinkronisasi pada
thread yang beker!a bersama-sama dan saling bergantung satu dengan yang lainya ..
%emperbolehkan thread untuk berkomunikasi dengan thread lain yang sedang ber!
alan /. %engerti dan menggunakan kemampuan *on*uren*y
$
J.E.N.I.
9.2.3 Prioritas
0ntuk menentukan thread mana yang akan menerima *ontrol dari 2P0 dan akan
dieksekusi pertama kali, setiap thread akan diberikan sebuah prioritas. Sebuah
prioritas adalah sebuah nilai integer dari angka $ sampai dengan $8, dimana semakin
tinggi prioritas dari sebuah thread, berarti semakin besar kesempatan dari thread
tersebut untuk dieksekusi terlebih dahulu. Sebagai *ontoh, asumsikan bahwa ada dua
buah thread yang ber!alan bersama-sama. +hread pertama akan diberikan prioritas
nomor ,, sedangkan thread yang kedua memiliki prioritas $8. Anggaplah bahwa thread
pertama telah ber!alan pada saat thread kedua di!alankan. +hread kedua akan
menerima *ontrol dari 2P0 dan akan dieksekusi pada saat thread kedua tersebut
memiliki prioritas yang lebih tinggi dibandingkan thread yang pada saat itu tengah
ber!alan. Salah satu *ontoh dari skenario ini adalah *onte1t swit*h.
'
J.E.N.I.
Sebuah *onte1t swit*h ter!adi apabila sebagian dari thread telah dikontrol oleh 2P0
dari thread yang lain. Ada beberapa skenario mengenai bagaimana *ara ker!a dari
*onte1t swit*h. Salah satu skenario adalah sebuah thread yang sedang ber!alan
memberikan kesempatan kepada 2P0 untuk mengontrol thread lain sehingga ia dapat
ber!alan. 9alam kasus ini, prioritas tertinggi dari thread adalah thread yang siap
untuk menerima kontrol dari 2P0. 2ara yang lain dari *onte1t swit*h adalah pada
saat sebuah thread yang sedang ber!alan diambil alih oleh thread yang memiliki
prioritas tertinggi seperti yang telah di*ontohkan sebelumnya. 5al ini !uga mungkin
dilakukan apabila lebih dari satu 2P0 tersedia, sehingga lebih dari satu prioritas
thread yang siap untuk di!alankan. 0ntuk menentukan diantara dua thread yang
memiliki prioritas sama untuk menerima kontrol dari 2P0, sangat bergantung kepada
sistem operasi yang digunakan. :indows ;,/;//N+ menggunakan time-sli*ing dan round-
robin untuk menangani kasus ini. Setiap thread dengan prioritas yang sama akan
diberikan sebuah !angka waktu tertentu untuk dieksekusi sebelum 2P0 mengontrol
thread lain yang memiliki prioritas yang sama. Sedangkan Solaris, ia akan
membiarkan sebuah thread untuk dieksekusi sampai ia menyelesaikan tugasnya atau
sampai ia se*ara suka rela membiarkan 2P0 untuk mengontrol thread yang lain.
(
J.E.N.I.
9.3.2 Constants
2lass Thread !uga menyediakan beberapa *onstants sebagai nilai prioritas. +abel
berikut ini adalah rangkuman dari *lass Thread. Thread Constants public final
static int MAX_PRIORIT Nilai prioritas maksimum, $8 public final static int MI!
_PRIORIT Nilai prioritas minimum, $. public final static int !ORM_PRIORIT Nilai
de&ault prioritas, ,.
Tabel 1.2.2:Konstanta dalam Thread
9.3.3 Methods
%ethod- method inilah yang disediakan dalam *lass Thread. Thread Methods public
static Thread currentThread() %engembalikan sebuah re&eren*e kepada thread yang
sedang ber!alan. public final String get!ame() %engembalikan nama dari thread.
public final "#id set!ame(String name) %engulang pemberian nama thread sesuai
dengan argument name. 5al ini dapat menyebabkan SecurityException. public final int
getPri#rit$() %engembalikan nilai prioritas yang telah diberikan kepada thread
tersebut. public final b##lean isAli"e() %enun!ukkan bahwa thread tersebut sedang
ber!alan atau tidak. public final "#id %#in(&l#ng millis, &int nan#s'') Sebuah
o6erloading method. Sebuah thread yang sedang ber!alan, harus menunggu sampai
thread tersebut selesai 3!ika tidak ada parameter-parameter spesi&ik4, atau sampai
waktu yang telah ditentukan habis. public static "#id sleep(l#ng millis) %enunda
thread dalam InterruptedException. public "#id run() Eksekusi thread dimulai dari
method ini. !angka waktu milis. 5al ini dapat menyebabkan
)
J.E.N.I.
Thread Methods public "#id start() %enyebabkan eksekusi dari thread berlangsung
dengan *ara memanggil method run.
Tabel 1.2. : !ethod"method dari Thread
,
J.E.N.I.
Perhatikan bahwa 6ariable re&eren*e pnt$, pnt', pnt(, dan pnt) hanya digunakan satu
kali. 0ntuk aplikasi ini, 6ariabel yang menun!uk pada tiap thread pada dasarnya
tidak dibutuhkan. Anda dapat mengganti body dari main tersebut dengan pernyataan
berikut ini# ne* ne* ne* ne* Print!ameThread(6A6), Print!ameThread(696), Print!
ameThread(6-6), Print!ameThread(6.6), erikut ini
Program akan memberikan keluaran yang berbeda pada setiap eksekusi. adalah *ontoh
dari keluarannya.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9-.A9-.A9-.A
9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.
A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9.A9-.A9-.A9-.A9-.A9-.
A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.A9-.9.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-
.9-.9-.9-.9-.9-.9-.9.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9-.9.
9-.9-.9-.9-.9-.9-.9-.
pada *ontoh ini Anda akan mengimplement inter&a*e Runnable. class Print!ameThread
implements Runnable 3 Thread thread, Print!ameThread(String name) 3 thread 5 ne*
Thread(this, name), thread)start(), ? public "#id run() 3 String name 5 thread)get!
ame(), f#r (int i 5 =, i F @==, iCC) 3 S$stem)#ut)print(name), ? ? ? class
TestThread 3 public static "#id main(String args&') 3 ne* Print!ameThread(6A6), ne*
Print!ameThread(696), ne* Print!ameThread(6-6), ne* Print!ameThread(6.6), ? ?
.
J.E.N.I.
/
J.E.N.I.
;
J.E.N.I.
Program ini diharapkan dapat men*etak dua argument ob!e*t Runnable se*ara
berurutan. Permasalahannya adalah, pendeklarasian method sleep akan menyebabkan
thread yang lain akan dieksekusi walaupun thread yang pertama belum selesai di!
alankan pada saat eksekusi method print dari *lass T$oStrin%s. erikut ini adalah
*ontoh dari keluarannya. Jell# J#* are ThanE $#u there) $#uK "er$ much7 Pada saat
ber!alan, ketiga thread telah men*etak argument string pertama mereka sebelum
argument kedua di*etak. Sehingga hasilnya adalah sebuah keluaran yang tidak !elas.
Sebenarnya, pada *ontoh diatas, tidak menun!ukkan permasalahan yang serius. Akan
tetapi pada aplikasi yang lain hal ini dapat menimbulkan e1*eption atau
permasalahanpermasalahan tertentu.
$8
J.E.N.I.
S$stem)#ut)println(strG), ? ?
pelanggan belum siap untuk memesan. Akan sangat mengganggu apabila pelayan terus-
menerus bertanya kepada pelanggan apakah ia telah siap untuk memesan atau tidak.
"leh karena itu, pelayan akan menunggu 3$ait4 sampai pelanggan memberikan tanda
3noti'ies4 bahwa ia telah siap untuk memesan. Sekali pelanggan sudah memesan, akan
sangat mengganggu apabila ia terus menerus bertanya kepada pelayan, apakah
pesanannya sudah tersedia atau tidak. Normalnya, pelanggan akan menunggu sampai
pelayan memberikan tanda 3noti'ies4 dan kemudian menya!ikan makanan. Perhatikan
pada skenario berikut, setiap anggota yang menunggu, hanya akan ber!alan sampai
anggota yang lain memberi tanda yang memerintahkan untuk ber!alan. 5al ini sama
dengan yang ter!adi pada thread.
$(
J.E.N.I.
$)
J.E.N.I.
/et HN /enerate /et <I /enerate /et <N /enerate /et LI /et LI /et LI /enerate /et
<I /et <I
<I <N LI
<I
5asil tersebut bukanlah hasil yang kita harapkan. =ita berharap bahwa setiap nilai
yang diproduksi oleh produser dan !uga kita akan mengansumsikan bahwa konsumen akan
mendapatkan 6alue tersebut. 9ibawah ini adalah keluaran yang kita harapkan.
/enerate /et OM /enerate /et GI /enerate /et <H /enerate /et LH /enerate /et HL
/enerate /et GN /enerate /et GM /enerate /et LM /enerate /et MI /enerate /et <L
/enerate /et HM OM GI <H LH HL GN GM LM MI <L HM
0ntuk 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
Shared.ata 3 int data, b##lean "alueSet 5 false, s$nchr#ni;ed "#id set(int "alue) 3
if ("alueSet) 3 DDbaru sa%a membangEitEan sebuah nilai tr$ 3 *ait(), ? catch
(Interrupted8(cepti#n ie) 3 ? ? S$stem)#ut)println(6/enerate 6 C "alue), data 5
"alue,
Pengenalan Pemrograman ' $,
J.E.N.I.
$-
J.E.N.I.
$.
J.E.N.I.
methods# *a(t r) Meth d dari (lass +,e(ut r public static 8(ecut#rSer"ice ne*-
achedThreadP##l() %en*iptakan sebuah pool thread yang akan men*iptakan thread
sesuai yang dibutuhkan, atau ia akan menggunakan kembali thread yang telah dibangun
sebelumnya, apabila tersedia. Sebuah method o6erloading, !uga akan menggunakan ob!
e*t Thread,actory sebagai argument. public static 8(ecut#rSer"ice
ne*2i(edThreadP##l(int nThreads) %en*iptakan sebuah pool thread yang dapat
digunakan kembali untuk membetulkan sebuah thread yang berada didalam antrian yang
tidak teratur. Sebuah o6erloading method, akan menggunakan ob!e*t Thread,actory
sebagai tambahan parameter. public static Scheduled8(ecut#rSer"ice
ne*ScheduledThreadP##l(int c#reP##lSi;e) %en*iptakan sebuah pool thread yang akan
men!adwalkan *ommand yang akan ber!alan setelah diberikan sebuah delay, atau untuk
mengeksekusi se*ara periodi*. Sebuah o6erloading method, akan menggunakan ob!e*t
Thread,actory sebagai tambahan parameter. public static 8(ecut#rSer"ice
ne*SingleThread8(ecut#r() %en*iptakan sebuah E1e*utor yang digunakan sebagai satu-
satu-nya pelaksana dari sebuah antrian thread yang tidak teratur. 2reates an
E1e*utor that uses a single worker thread operating o&& an unbounded Aueue. Sebuah
o6erloading method, !uga akan menggunakan ob!e*t Thread,actory sebagai tambahan
parameter. public static Scheduled8(ecut#rSer"ice
ne*SingleThreadScheduled8(ecut#r() %en*iptakan sebuah E1e*utor thread yang akan
men!adwalkan *ommand untuk di!alankan setelah delay tertentu, atau dieksekusi
se*ara periodi*. Sebuah o6erloading method, !uga akan menggunakan ob!e*t
Thread,actory sebagai tambahan parameter
Tabel 1.1: ,actory !ethods didalam class Executor
Pada saat sebuah tugas dari Runnable telah dieksekusi dan diselesaikan dengan
*ontrol sebuah inter&a*e Executor. 0ntuk memberhentikan thread ini, kita dapat
dengan mudah memanggil method shutdown dari inter&a*e tersebut seperti berikut ini#
e(ecut#r)shutd#*n(),
9.0.2 'nterface Ca ab e
Ingatlah kembali, bahwa ada dua *ara untuk men*iptakan sebuah thread. =ita dapat
meng-e1tend sebuah *lass +hread atau meng-implement sebuah inter&a*e Runnable.
0ntuk menentukan teknik mana yang akan digunakan, kita akan melihat se*ara spesi&ik
&ungsi dari masing-masing teknik dengan *ara meng-o6erride method run. Penulisan
method tersebut ditun!ukkan seperti berikut ini# public "#id run() =elemahan-
kelemahan dari men*iptakan thread dengan *ara tersebut adalah# $. %ethod run tidak
dapat melakukan pengembalian hasil selama ia memiliki -oid sebagai nilai
kembaliannya. '. %ethod run mewa!ibkan Anda untuk menge*ek setiap e1*eption karena
o6erriding method tidak dapat menggunakan klausa thro$s. Inter&a*e Callable pada
dasarnya adalah sama dengan inter&a*e 7unnable tanpa kelemahan-kelemahan yang telah
disebutkan diatas. 0ntuk mendapatkan hasil dari
Pengenalan Pemrograman ' $/
J.E.N.I.
sebuah peker!aan yang telah diselesaikan oleh 7unnable, kita harus melakukan suatu
teknik untuk mendapatkan hasilnya. +eknik yang paling umum adalah dengan membuat
sebuah instan*e 6ariable untuk menyimpan hasilnya. =ode berikut ini akan menun!
ukkan bagaimana hal tersebut dilakukan. public M$Runnable implements Runnable 3
pri"ate int result 5 =, public "#id run() 3 ))) result 5 s#me>alue, ? D+ Jasil dari
attribute ini di%aga dari segala sesuatu perubahan $ang dilaEuEan #leh E#deBE#de
lain $ang mengaEses class ini +D public int getResult() 3 return result, ? ?
+ulislah inter&a*e 2allable, kemudian dapatkanlah hasil sesederhana yang
ditampilkan pada *ontoh dibawah ini. import #a-a.util.concurrent../ public class !
yCallable implements Callable 0 public Inte%er call12 thro$s #a-a.io.I3Exception
0 ... return some4alue/ 5 5 %ethod *all memiliki penulisan seperti berikut ini# >
call thr#*s 8(cepti#n 4 adalah sebuah tipe generi* yang berarti nilai pengembalian
dari pemanggilan method tersebut adalah tipe data re&eren*e apapun. Anda akan
mempela!ari tentang tipe data generi* di bab selan!utnya. %asih ada lagi &itur-
&itur *on*urren*y dalam J'SE ,.8. @ihatlah lagi didalam dokumentasi API untuk
mendapatkan in&ormasi lebih detail lagi mengenai &itur-&itur yang lain.
$;
J.E.N.I.
9.- .atihan
9.1.1 2anner
9engan menggunakan A:+ atau Swing, buatlah sebuah banner sederhana yang akan
men*etak string yang dituliskan oleh user. String ini akan ditampilkan se*ara terus
menerus dan program Anda harus memberikan ilustrasi bahwa string tersebut bergerak
dari kiri ke kanan. 0ntuk memastikan bahwa proses perpindahannya tidak terlalu
*epat, Anda sebaiknya menggunakan method sleep dari *lass +hread. erikut ini adalah
sebuah *ontoh dimana Anda menuliskan BCour name hereDB.
'8
J.E.N.I.
Bab 10 Jaringan
Java mengijinkan anda untuk mempermudah mengembangkan aplikasi yang mengerjakan
berbagai pekerjaan melalui jaringan. Ini adalah suatu cita-cita pembuatan Java yang
menjadi salah satu kekuatan Java sejak dibuat dengan internet di dalam cita-cita.
Sebelum mempelajari tentang jaringan dalam Java. Pertama-tama anda akan
diperkenalkan kepada beberapa konsep dasar jaringan. Setelah menyelesaikan bab ini,
anda diharapkan dapat !."engerti konsep dasar jaringan
● ● ● ●
10.1.1 IP Adress
Pada setiap komputer yang terkoneksi dengan internet memiliki alamat IP unik. )
lamat IP secara logika hampir sama dengan alamat pengiriman surat tradisional
dimana memiliki arti bah'a alamat yang bersi&at unik tersebut me'akili dari
keterangan sebuah objek. )lamat tersebut di'akilkan dalam *$-bit nomor yang
digunakan sebagai pengenal yang bersi&at unik dari setiap komputer yang tersambung
dengan internet. 192.1.1.1 adalah contoh dari sebuah alamat IP. "ereka juga bisa
ditulis dengan bentuk simbol seperti docs.rinet.ru.
10.1.2 Protokol
Sejak terdapat jenis komunikasi yang berbeda-beda yang mungkin terjadi pada
internet,disana harus pula ada suatu jumlah yang sama untuk mekanisme penangangan
mereka . Setiap jenis komunikasi membutuhkan protokol yang spesi&ik dan unik.
Protokol mengatur peraturan dan standar dimana menetapkan jenis komunikasi internet
yang khusus. (al tersebut menjelaskan &ormat data yang dikirim le'at internet,
seiring dengan bagaimana dan kapan itu dikirim.
Pengenalan Pemrograman $
1
J.E.N.I.
+onsep dari protokol tentunya tidak terlalu asing untuk kita. "engingat sudah
beberapa kali anda telah menggunakan jenis percakapan ini
"Hallo." "Hallo. Selamat siang. Bolehkah saya berbicara dengan oan!" ""kay# 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. "ari
kita lihat beberapa protokol penting yang digunakan pada internet. ,anpa banyak
kata, (yperte-t ,rans&er Protocol .(,,P/ adalah salah satu protokol yang sering
digunakan. 0igunakan untuk mentrans&er dokumen (,"1 pada %eb. +emudian, ada juga
2ile ,rans&er Protocol .2,P/ dimana lebih umum dibandingkan dengan (,,P dan
mengijinkan anda untuk mentrans&er &ile biner pada intenet. +edua protokol tersebut
memiliki peraturan masing-masing dan standar dalam pengiriman data. Java juga dapat
mendukung kedua protokol tersebut.
10.1.3 Port
Sekarang, protokol hanya bisa dipertimbangkan manakala digunakan dalam konteks
suatu jasa. Sebagai contoh, protokol (,,P digunakan ketika anda menyediakan isi %eb
melalui layanan (,,P. Setiap komputer pada internet dapat menyediakan berbagai
jenis layanan melalui berbagai jenis protokol yang mendukung. "asalahnya,
bagaimanapun, kita harus mengetahui jenis layanan sebelum sebuah in&ormasi dapat
ditrans&er. 3ntuk itulah port digunakan. Port adalah !4-bit nomor dimana mengenal
setiap layanan yang dita'arkan oleh server jaringan. 3ntuk menggunakan layanan
khusus dan oleh karena itu, jalur komunikasi yang mele'ati protokol tertentu, anda
perlu untuk menyambungkan pada port yang sesuai. Port dihubungkan dengan nomor dan
beberapa nomor bersi&at spesi&ik yang berhubungan dengan jenis layanan khusus. Port
dengan layanan pekerjaan tertentu disebut port standar. Sebagai contoh, layanan 2,P
terletak pada port $! sedangkan layanan (,,P terletak pada port 56. Jika anda ingin
menggunakan &ile trans&er 2,P, anda perlu terhubung dengan port $! pada komputer
anda. Sekarang, semua standar layanan tertentu diberikan nilai port diba'ah !6$7.
port dengan nilai diatas !6$7 disediakan untuk komunikasi custom. Jika terdapat
kasus dimana port dengan nilai diatas !6$7 telah digunakan oleh beberapa komunikasi
custom, anda harus mencari nilai lainnya yang tidak digunakan.
Pengenalan Pemrograman $
2
J.E.N.I.
10.1.5 sockets
+onsep umum jaringan yang terakhir sebelum kita membahas lebih dalam tentang Java
net'orking adalah dengan memperhatikan sockets. +ebanyakan pemrograman Java net'ork
menggunakan jenis khusus dari komunikasi jaringan yang diketahui sebagai sockets.
Socket adalah so&t'are abstrak untuk media input atau output komunikasi. Socket
digunakan oleh Java untuk mengatasi komunikasi pada jaringan level rendah. Jalur
komunikasi ini memungkinkan untuk mentrans&er data melalui port khusus. Singkatnya,
socket adalah point terkahir untuk komunikasi antara dua mesin.
Pengenalan Pemrograman $
3
J.E.N.I.
etode ServerSocket public Socket accept() "enyebabkan server untuk menunggu dan
mendengarkan dari koneksi client, lalu menerimanya. public void close() "enutup
socket server. 8lient tidak dapat lagi terhubung ke server hingga dibuka kembali
public int getLocalPort() "engembalikan port dimana socket juga membatasi public
boolean isClosed() "endeteksi apakah socket tertutup atau belum
)abel 1.2.1b& Metode ServerSocket
8ontoh yang berhasil melakukan implementasi sebuah server sederhana, dimana sebuah
in&ormasi sederhana dikirim oleh client. import java.net.*; import java.io.*;
public class Ec oingServer ! public static void main(String "# args) ! ServerSocket
server $ null; Socket client; tr% ! server $ ne& ServerSocket('()*);
Pengenalan Pemrograman $
4
J.E.N.I.
"embuat sebuah socket client dimana dihubungkan dengan diberikan nomor port pada
host tertentu. Socket(-net5ddress address, int port) "embuat sebuah socket client
dimana dihubungkan dengan diberikan nomor port pada alamat IP tertentu.
)abel 1.2.1c& *onstruktor Socket
etode Socket public void close() "enutup socket client public -nputStream get-
nputStream() "enerima kembali input stream yang berhubungan dengan socket ini.
public .utputStream get.utputStream() "enerima kembali output stream yang
berhubungan dengan socket ini. public -net5ddress get-net5ddress()
Pengenalan Pemrograman $
5
J.E.N.I.
etode Socket "engembalikan alamat IP kepada socket ini pada saat masih terhubung.
public int getPort() "engembalikan remote port kepada socket ini pada saat masih
terhubung. public boolean isClosed() "endeteksi apakah socket telah tertutup atau
tidak
)abel 1.2.1d& Metode Socket
10.2.2
Pengenalan Pemrograman $
6
J.E.N.I.
ulticastSocket
etode
ulticastSocket
Sebelum seorang dapat mengirim pesan kepada kelompok, pertama kali seorang tersebut
seharusnya menjadi anggota dari multicast kelompok dengan menggunakan metode
join=roup. Sekarang seorang anggota dapat mengirim pesan melalui metode send. Jika
anda telah selesai berbicara dengan kelompok, anda dapat menggunakan metode
leavekelompok untuk melepaskan keanggotaan anda. Sebelum melihat contoh dalam
menggunakan class multicastSocket, pertama-tama mari kita lihat ke class
0atagramPacket. Perhatikan bah'a dalam metode send dari class multiSocket,
dibutuhkan parameter yaitu objek 0atagramPacket. Sehingga, kita harus mengerti
objek jenis ini sebelum menggunakan metode send. 8lass 0atagramPacket digunakan
untuk mengirim data melalui conectionless protokol seperti multicast. "asalah yang
ditimbulkan bah'a pengiriman packet tidak terjamin. "ari kita perhatikan dua dari
enam konstruktor.
Pengenalan Pemrograman $
7
J.E.N.I.
etode !atagramPacket public b%te"# get<ata() "engembalikan bu&&er dimana data telah
disimpan public -net5ddress get5ddress() "engembalikan alamat IP mesin dimana paket
yang dikirim atau yang diterima public int getLengt () "engembalikan panjang data
yang dikirim atau diterima public int getPort() "engembalikan nomor port pada
remote host dimana paket yang dikirim atau yang diterima
)able 1.2.2d& Metode DatagramPacket
8ontoh multicast kita juga mengandung dua class, server dan client. Server menerima
pesan dari client dan mencetak pesan tersebut. :erikut adalah class server import
java.net.*; public class C atServer ! public static void main(String args"#) t ro&s
E/ception ! 6ulticastSocket server $ ne& 6ulticastSocket('()*); -net5ddress group $
-net5ddress.get2%=ame(0()*.>.?.@0); ++get2%=ame A 6engembalikan alamat -P %ang
diberikan ole 8ost server.join;roup(group); boolean in3inite $ true; +* Server
terusBmenerus menerima data dan mencetak mereka *+ & ile(in3inite) ! b%te bu3"# $
ne& b%te"'7(*#; <atagramPacket data $ ne& <atagramPacket(bu3, bu3.lengt );
server.receive(data); String msg $ ne& String(data.get<ata()).trim(); S
%stem.out.println(msg); , server.close(); , ; :erikut adalah class client import
java.net.*; import java.io.*; public class C atClient ! public static void
main(String args"#) t ro&s E/ception ! 6ulticastSocket c at $ ne&
6ulticastSocket('()*);
Pengenalan Pemrograman $ 8
J.E.N.I.
, ;
10.3 Latihan
10.3.1 "rivia Server
:uatlah sebuah server yang berisi satu set pertanyaan yang mudah. Secara sederhana,
akan ada sekitar 9-!6 pertanyaan. 8lient yang terhubung ke server mengirim sebuah
permintaan untuk sebuah pertanyaan atau ja'aban sebuah pertanyaan, 8lient mengirim
pesan >permintaan?. 3ntuk ja'aban dari sebuah pertanyaan, client mengirim pesan
>ja'aban?. +etika menerima pesan >permintaan?, secara acak server akan memilih satu
pertanyaan dari koleksi yang ada. 0ia mengirimkan pertanyaan yang dipilih sesuai
dengan nomor yang bersangkutan kepada client. +etika server menerima pesan
>ja'aban? dari client, dia mengin&ormasikan user bah'a user perlu mengirimkan
ja'aban sesuai dengan nomor pertanyaan kepada server. Ja'aban itu harus dalam
&ormat @no pertanyaanAB@ja'aban andaA. :erikut adalah contoh skenario 8lient
CpermintaanC Server C*BSiapa pembuat JavaDC 8lient Cja'abanC Server C:erikan
ja'abanmu dengan &ormat @nomor pertanyaanrAB@ja'aban andaAC 8lient C*BJames
=oslingC Server +erja yang bagusE ...
Pengenalan Pemrograman $
9
J.E.N.I.
Bab 11 Applet
11.1 Tujuan
Applets adalah satu dari fitur yang paling menarik dalam java. Applet merupakan
program yang Anda jalankan melalui web browser. Anda akan belajar tentang membentuk
applet pada pembelajaran ini. Setelah melengkapi pembelajaran ini, anda harus dapat
!. mendefinisikan apa yang dimaksud dengan applet ". #embentuk applet anda sendiri
$. #engetahui siklus yang terdapat pada applet
• • • •
init start stop destroy paint showStatus #ethods untuk memainkan sebuah audio &lip
9etika membuat sebuah applet, dibutuhkan suatu e)tend &lass Applet. Sebagaimana
yang disebutkan sebelumnya, &lassnya dapat ditemukan dalam java.applet pa&kage.
:leh karena itu, mengimport the java.applet pa&kage merupakan suatu keharusan.
Juga, telah disebutkan sebelumnya bahwa &lass Applet adalah sub&lass dari &lass
+anel. 0al ini mengimplikasikan bahwa beberapa methods dari &lass applet ditemukan
dalam &lass Panel.3ntuk mengakses methods atau fields dalam &lass Panel atau
&lass;&lass induk, diperlukan suatu aksi untuk import pa&kage java.awt .
+engenalan +emrograman " "
J.E.N.I.
$
J.E.N.I.
9etika membuat applet, sedikitnya beberapa dari method ini telah menolaknya. &ontoh
applet berikut menolak method berikut. import java.applet.*; import java.awt.*; /*
<applet code="2i1e34cleDemo" width= !! height="!!# </applet# */ class 2i1e34cleDemo
e$tends Applet % )tring msg =""; public void init&( % msg 5= "initiali6ing... ";
repaint&(; 0 public void start&( % msg 5= "starting... "; repaint&(; 0 public void
stop&( % msg 5= "stopping... "; repaint&(; 0 public void destro4&( % msg 5=
"preparing 1or unloading..."; repaint&(; 0 public void paint&'raphics g( %
g.draw)tring&msg, "/, "/(; 0 0 .ontoh dokumen html berikut tergabung dalam applet
4ife.y&le=emo . <*782# <7972:#2i1e 34cle Demo</7972:# <applet code="2i1e34cleDemo"
width= !! height="!!# </applet# </*782#
%
J.E.N.I.
'
J.E.N.I.
11.3." Me#ai ka
Audio Clips
Applets juga menyediakan layanan melalui adanya suatu method yang memungkinkan Anda
untuk memainkan file audio. #emainkan audio &lips dalam sebuah applet melibatkan
dua langkah dasar !. =apatkan audio &lip menggunakan method getAudio.lip. ". 3ntuk
memainkan audio &lip, menggunakan method play atau loop pada obje&t audio &lip.
play memungkinkan Anda untuk memainkan audio satu kali mengingat loop berulang pada
audio &lip dan berhenti hanya ketika method stop dipanggil. .ontoh berikutnya
memainkan file audio se&ara terus;menerus hingga method stop applet dipanggil.
import java.awt.*; import java.applet.*; /* <applet code="AudioApplet" width= !!
height="!!# </applet# */ public class AudioApplet e$tends Applet % Audio3lip ac;
public void init&( % tr4 % /*audio clip tersimpan dalam direktori 4ang sama seperti
kode javan4a*/ /* space8usic telah terdownload dari java.sun.com */ ac =
getAudio3lip&get3ode;ase&(, "space8usic.au"(; ac.loop&(; 0 catch &:$ception e( % )
4stem.out.println&e(; 0 0 public void stop&( % ac.stop&(; 0 public void
paint&'raphics g( % g.draw)tring&"<la4ing space music+", -!, ./(; 0 0
>
J.E.N.I.
A
J.E.N.I.
$ata ku ci Applet HTML Ta% Alignment atau pengaturan posisi dari applet. satu
diantara /left/, /right/, /top/, /bottom/, /middle/, /baseline/, /te)ttop/,
/absmiddle/, atau /absbottom/. +eletakan posisi se&ara =efault tergantung pada
lingkungan. /top/ B posisi atas dari applet diratakan dengan item tertinggi dalam
baris yang ada. /bottom/, baseline B posisi bawah dari applet diratakan dengan
bawah dari &ontent lain dalam baris yang sama. /middle/ B tengah dari applet
diratakan dengan bawah dari &ontent yang lain dalam baris yang sama. /te)ttop/ B
posisi atas dari applet diratakan dengan posisi atas dari applet diratakan dengan
posisi tertinggi dari posisi atas pada baris yang sama. /absmiddle/ B tengah dari
applet diratakan dengan verti&al middle dari &ontent lain pada baris yang sama.
/absbottom/ B posisi bawah dari applet diratakan dengan posisi bawah dari &ontent
lain dalam baris yang sama. E)<A3:, *)<A3: Spasi diatas dan dibawah 5CS+A.E6 dan
pada sisi 50S+A.E6 dari applet.. <A@A8 CA8:, EA2?: 3ntuk mengelompokkan parameter
yang dapat menampilkan appletD applet dapat meminta method getParameter String
param'ame!.
(able 1.#: Applet )(*+ (ags
.ontoh dibawah ini mendemokan bagaimana untuk mengakses parameter tertentu pada 0-
#4 tag. import java.awt.*; import java.applet.*; /* <applet code="<aramDemo" width=
!! height="!!# <param name="m4<aram" value="*ello world+"# </applet# */ public
class <aramDemo e$tends Applet % public void paint&'raphics g( %
g.draw)tring&get<arameter&"m4<aram"(, -!, ./(; 0 0 :utput dari program ini hanya
sama seprti applet 0ello ,orld.
8
J.E.N.I.
11.5 Latihan
11.&.1 Tic'Tac'Toe Applet satu'player
*uat game satu;player -i&;-a&;-oe. 3ser memainkannya melawan komputer. 3ntuk setiap
giliran, pemain harus menggeser kotak dari papan. Sekali sebuah kotak terpilih,
kotak tersebut ditandai oleh symbol pemain 5: dan E yang selalu digunakan sebagai
symbol6. pemain yang berhasil mengatasi $ kotak membentuk baris hori(ontal,
verti&al atau diagonal memenangkan game ini. Fame ini berakhir ketika pemain menang
atau ketika semua kotak sudah berhasil dibentuk. =esain dan gerakan komputer
seakan;akan user akan memengkan pertandingan melawan komputer.
G
J.E.N.I.
stream ini. Anda diijinan untuk memba a dari input stream tapi tidak menulisnya. Di
lain pihak, Anda diijinkan untuk menulis output streams tapi tidak memba anya.
0lass InputStream dan lass Reader adalah super lass-super lass dari semua input
stream. 0lass OutputStream dan lass Writer adalah lass- lass root dari semua output
stream. Input stream juga dikenal sebagai stream sumber 4sour e stream5 sejak kita
memperoleh informasi dari stream ini. sementara itu output stream disebut juga
stream hasil4sink stream5.
3engenalan 3emrograman %
%
J.E.N.I.
12.3 Cla
!ile
1alaupun lass File bukan merupakan lass stream, ini sesuatu yag penting bah8a kita
mempelajari ini sejak lass- lass stream merupakan file-file yang telah
dimanipulasi. 0lass adalah sebuah per8akilan dari abstraksi dari file-file nyata
dan nama path direktori. /ntuk meng-instantiate sebuah obje t File, Anda dapat
menggunakan berikut ini" Sebuah Constructor File File(String pathname) Instantiate
sebuah obje t File dengan nama path khusus sebagai nama filenya. Nama filenya
mungkin salah satu menjadi penuh4 sebagai ontoh, isi dengan path yang lengkap5 atau
mungkin terdiri atas namafile itu sendiri dan diasumsikan menjadi diisi dalam
direktori tersebut.
Table 1.2a: File constructor
onstru tor
0lass File menyediakan beberapa method untuk memanipulasi file dan direktori.
9erikut ini beberapa dari method-method tersebut. ethod!method File public String
getName() &engembalikan nilai nama file atau nama direktori dari obje t File ini.
public boolean exists() &enguji apakah sebuah file atau sebuah direktori masih ada
atau tidak public long length() &engembalikan nilai ukuran dari file. public long
lastModified() &engembalikan nilai tanggal dalam milidetik ketika file terakhir
kali dimodifikasi. public boolean canRead() &engembalikan nilai true jika dijinkan
untuk memba a dari file. !ebaliknya, nilai pengembaliannya bernilai false. public
boolean canWrite() mengembalikan nilai true jika diijinkan untuk menulis ke sebuah
file. !ebaliknya, nilai pengembaliannya bernilai false. public boolean isFile()
&enguji apakah obje t ini berupa sebuah file, yaitu persepsi normal kita tentang
apa itu sebuah file 4bukan sebuah direktori5 atau bukan. public boolean
isDirectory() menguji apakah obje t ini adalah sebuah direktori atau bukan.
3engenalan 3emrograman %
)
J.E.N.I.
ethod!method File public String[ list() &engembalikan nilai daftar file dan
subdirektori yang ada dalam obje t ini. (bje t ini haruslah berupa sebuah
direktori. public !oid m"dir() &embuat sebuah direktori yang merupakan abstraksi
nama path ini. public !oid delete() &embuang file atau direktori yang sebenarnya
di8akili oleh obje t 'ile tersebut.
Table 1.2a: method-method File
&ari kita melihat bagaimana method ini bekerja berdasarkan ontoh berikut ini "
import #a!a$io$%& public class File'nfo(lass ) public static !oid main(String args[
) ) String fileName * args[+ & File fn * ne, File(fileName)& System$out$println(-
Name. - / fn$getName())& if (0fn$exists()) ) System$out$println(fileName / - does
not exists$-)& 1% membuat sebuah temporary directory $ %1 System$out$println(-
(reating temp directory$$$-)& fileName * -temp-& fn * ne, File(fileName)&
fn$m"dir()& System$out$println(fileName / (fn$exists()2 -exists-. -does not
exist-))& System$out$println(-Deleting temp directory$$$-)& fn$delete()&
System$out$println(fileName / (fn$exists()2 -exists-. -does not exist-))& return& 3
System$out$println(fileName / - is a - / (fn$isFile()2 -file$- .-directory$-))& if
(fn$isDirectory()) ) String content[ * fn$list()& System$out$println(-4he content
of this directory.-)& for (int i * +& i 5 content$length& i//) )
System$out$println(content[i )& 3 3 if (0fn$canRead()) )
System$out$println(fileName / - is not readable$-)& return& 3
System$out$println(fileName / - is - / fn$length() / - bytes long$-)&
System$out$println(fileName / - is - / fn$lastModified() / - bytes long$-)&
3engenalan 3emrograman % +
J.E.N.I.
12." Cla
#ea$er
12.".1
ethod #eader
0lass Reader terdiri atas beberapa method untuk memba a karakter. berikut ini
adalah beberapa method lass " ethod #eader public int read(6) thro,s '78xception !
ebuah method o6erload, yang mana memiliki tiga 6ersi. &emba a karakter, segala
karakter array atau sebuah porsi untuk sebuah karakter array. public int read() -
memba a sebuah karakter tunggal. public int read(char[ karakter array cbu . cbuf)-
&emba a karakter dan menyimpannya dalam
public abstract int read(char[ cbuf9 int offset9 int length)- &emba a karakter
sejumlah panjang karakter tertentu dan menyimpannya dalam karakter cbu dimulai pada
tanda o set khusus yang telah ditentukan. public abstract !oid close() thro,s
'78xception &enutup !tream ini. &emanggil method Reader yang lain setelah menutup
stream akan menyebabkan suatu IO!"ception dijalankan. public !oid mar"(int
read:head;imit) thro,s '78xception &enandai posisi tertentu pada stream. !etelah
menandai, panggil untuk melakukan reset45 kemudian stream akan men oba mengatur
posisinya kembali pada titik ini. $idak semua stream input karakter mendukung
operasi ini. public boolean mar"Supported() mengindikasikan apakah sebuah stream
mendukung operasi pemberian tanda 4mark5 atau tidak $idak didukung oleh default. !
eharusnya bersifat o6erid sub lass. public !oid reset() thro,s '78xception :eposisi
stream ke posisi akhir stream yang telah ditandai
Table 1.#.1: Reader methods
3engenalan 3emrograman %
,
J.E.N.I.
lass
3engenalan 3emrograman %
-
J.E.N.I.
12.% Cla
12.$.1 %riter
-Cla
ethod
&riter
0lass Writer terdiri atas beberapa method untuk menulis karakter. 9erikut ini
adalah beberapa method lass " ethod %riter public !oid ,rite(6) thro,s
'78xception !ebuah method o6erloading dalam lima 6ersi" public !oid ,rite(int c) ;
&enulis sebuah karakter tunggal yang di8akili oleh pemberian nilai integer.
public !oid ,rite(char[ cbuf) ; &enulis isi dari karakter array cbu . public
abstract !oid ,rite(char[ cbuf9 int offset9 int length) ; &enulis sejumlah len(th
karakter dari aaray cbu , dimulai pada o set tertentu. public !oid ,rite(String
str) ; &enulis string strin(. public !oid ,rite(String str9 int offset9 int length)
; &enulis sejumlah len(th )ara)ter dari string str, dimulai pada o set tertentu.
public abstract !oid close() thro,s '78xception &enutup stream ini setelah
lushin( beberapa karaktr yang tidak tertulis. Invocation method lain setelah
menutup stream ini akan menyebabkan terjadinya I(E< eption. public abstract !oid
flush() &engganti stream4yaitu karakter yang disimpan dalam buffer dengan segera
ditulis ke tujuan yang dimaksud5.
Table 1.*.1: +ethod Writer
3engenalan 3emrograman %
.
J.E.N.I.
3 public static !oid main(String args[ ) ) String inputFile * args[+ & String
outputFile * args[> & (opyFile cf * ne, (opyFile()& cf$copy(inputFile9 outputFile)&
3
0obalah program tersebut sendiri dan amatilah apa ang terjadi pada file yang
dimanipulasi.
3engenalan 3emrograman %
?
J.E.N.I.
12., Cla
12.(.1
InputStream
9agian ini memberikan gambaran perbedaan stream byte yang digunakan memba a.
ethod InputStream
0lass InputStream terdiri atas beberapa method untuk memba a byte. 9eberapa method
lass" ethod InputStream public int read(6) thro,s '78xception ðod o6erloaded,
juga memiliki tiga 6ersi seperti lass :eader tersebut. public abstract int read() -
&emba a byte selanjutnya dari data dari stream ini. public int read(byte[ byta
array b'u . b=uf)- &emba a sejumlah byte dan menyimpannya dalam
public abstract int read(char[ cbuf9 int offset9 int length)- &emba a panjang
sejumlah len(th byte dan menyimpannya dalam array byte b'u dimulai dari o set
tertentu. public abstract !oid close() thro,s '78xception &enutup stream in.
&emanggil method InputStream yang lain setelah menutup streamnya akan menyebabkan
sebuah IO!"ception dijalankan. public !oid mar"(int read:head;imit) thro,s
'78xception &enandai posisi tertentu dalam stream. !etelah menandainya, panggil
untuk menjalankan fungsi reset45 akan men oba untuk mengatur posisi streamnya pada
titik tertentu kembali. $idak semua stream input-byte mendukung operasi ini. public
boolean mar"Supported() &engindikasikan apakah suatu stream mendukung operasi
pemberian tanda 4mark5 dan reset. @ang tidak didukung se ara default. !eharusnya
diubah menjadi o6eride oleh sub lass. public !oid reset() thro,s '78xception
&erubah posisi stream pada posisi akhir yang diberi tanda 4mark5
Table 1.-.1: +ethod InputStream
3engenalan 3emrograman %
#A
J.E.N.I.
lass
3engenalan 3emrograman %
##
J.E.N.I.
12.- Cla
-Cla
OutputStream
!esi ini memberikan sebuah pandangan tentang byte stream yang berbeda yang
digunakan dalam proses penulisan.
12.).1
ethod OutputStream
0lass OutputStream terdiri atas beberapa method untuk menulis data byte. 9erikut
ini adalah beberapa dari lass methodnya " ethod OutputStream public !oid ,rite(6)
thro,s '78xception !ebuah method o6erloaded untuk menulis bentuk byte ke bentuk
stream. Ada tiga 6ersi " public abstract !oid ,rite(int b) ; &enulis nilai byte
khusus b ke bentuk output stream nya. public !oid ,rite(byte[ nya. b=uf) ; &enulis
isi dari array byte b'u ke bentuk stream
public !oid ,rite(byte[ b=uf9 int offset9 int length) ; &enulis sejumlah len(th
byte dari array b'u ke bentuk streamnya, dimulai pada o set khusus ke streamnya.
public abstract !oid close() thro,s '78xception &enutup stream ini dan mengeluarkan
beberapa sumber dari sistem digabungkan dengan streamnya. 3enggunaan method lain
setelah memanggil method ini akan menyebabkan sebuahIO!"ception dijalankan. public
abstract !oid flush() &engganti stream 4sebagai ontoh, data byte tersimpan dalam
buffer akan segera ditulis dalam tujuan yang diamksud5.
Table 1...1: +ethod OutputStream
3engenalan 3emrograman %
#%
J.E.N.I.
3engenalan 3emrograman %
#)
J.E.N.I.
3engenalan 3emrograman %
#+
J.E.N.I.
/ji kode ini pada sebuah file yang mengandung sedikit baris atau karakter.
3engenalan 3emrograman %
#,
J.E.N.I.
12.12 Seriali a i
Ja6a Birtual &a hine 4JB&5 mendukung kemampuan untuk memba a atau menulis sebuah
obje t ke bentuk stream. kemampuan ini disebut dengan serialisasi, proses
CflatteningC sebuah obje t sehinnga data tersebut dapat disimpan ke beberapa
penyimpanan permanen atau dile8atkan ke obje t lain melalui lass OutputStream.
Ketika menulis sebuah obje t, ini merupakan hal yang penting bah8a keadaan tersebut
sudah tertulis dan telah diserialisasi dari setiap obje tnya dapat dibangun kembali
sebagaimana dtaa tersebut diba a. &enyimpan sebuah obje tke beberapa tipe
penyimpanan permanen yang dikenal sebagai persisten e. !tream yang digunakan untuk
deserialisasi dan serialisasi se ara berurutan adalah lass ObjectInputStream dan
ObjectOutputStream . /ntuk memungkinkan sebuah obje t diserialisasi 4sebagai ontoh
dapat disimpan dan diurutkan5, 0lass tersebut harus mengimplementasikan interfa e
yang dapat diserialisasi. 0lass ini seharusnya juga menyediakan default onstru tor
atau sebuah onstru tor tanpa argumen. !atu hal yang baik mengenai kemampuan untuk
melakukan serialisasiyang dapat diturunkan, yang berarti kita tidak memiliki
implementasi serialisasi pada setiap lass. Ini berarti mengurangi pekrjaan untuk
programmer. Anda hanya dapat mengimplementasikan serialisasi sekali sepanjang
hirarki lass.
12.12.2 Serialisasi'
12.12.3 +eserialisasi'
/ntuk memba a sebuah obje t dari sebuah stream, Anda perlu menggunakan lass
ObjectInputStream dan methodnya yaitu method readObject. ðod readObject memiliki
tanda sebagai berikut " public final 7b#ect read7b#ect() thro,s '78xception9
(lassNotFound8xception dimana 8here obj adalah obje t yang diba a dari stream. tipe
Object dikembalikan harus melalui proses type ast ke nama lass yang sesuai sebelum
method pada lass tersebut dapat dieksekusi. 0ontoh diba8ah ini memba a sebuah obje
t 'oolean dari sebuah ObjectInputStream. Ini merupakan kesinambungan dari ontoh
sebelumnya pada serialisasi. import #a!a$io$%& public class @nseriali?e=oolean )
@nseriali?e=oolean() ) =oolean booleanData * null& try ) File'nputStream fis * ne,
File'nputStream(-boolean$ser-)& 7b#ect'nputStream ois * ne, 7b#ect'nputStream(fis)&
booleanData * (=oolean) ois$read7b#ect()& ois$close()& 3 catch (8xception e) )
3engenalan 3emrograman % #.
J.E.N.I.
12.13 Lati)an
12.13.1 ,nkripsi Sederhana
9a a dari sebuah file khusus oleh user dan en rypt isi file menggunakan teknik
penggeseran yang sederhana. Juga, tanyakan pada user untuk menginput ukuran
pergeseran. (utput dari pesan yang telah di en rypt pada file yang lain yang
memiliki nama yang juga dibuat oleh user sendiri. !ebagai ontoh, /kuran pergeseran"
# 3esan yang diba a dari file" Dello 3esan ter-en rypt" Ifmmp
3engenalan 3emrograman %
#=
J.E.N.I.
checking/. 4ita dapat melan*utkannya dengan keperluan memiliki typecast elemen yang
kita dapatkan dari list dan memiliki pernyataan berikut terhadap pernyataan
sebelumnya $ String myString = myArrayList.get(0); 5alaupun do)ncasting sudah
terhapus# ini bukan berarti bah)a !nda dapat menandai segala sesuatu sebagai return
value dari method get dan melan*utkannya dengan typecasting semuanya. Jika !nda
menandai sesuatu yang lain disamping sebuah String untuk output dari method get# !
nda akan menghadapi sebuah )aktu mengcompile type tidak sesuai seperti pesan
berikut ini $ found: java.lang.String required: java.lang.Integer Integer data =
myArrayList.get(0); 6ntuk !nda agar hanya memiliki ide bagaimana type-type generic
digunakan sebelum materi ini digali lebih dalam# pertimbangkan potongan kode
berikut ini $ ArrayList <String genArrList = ne! ArrayList <String ();
genArrList.add("A generi# string"); String myString = genArrList.get(0); $o
%tion&ane.s'o!(essage)ialog(t'is* myString); !matilah melalui pernyataan# anda
mungkin mengamati kata <String> segera terlihat setelah referensi tipe data
arraylist. !nda dapat mener*emahkan pernyataan pertama sebagai instantiasi sebuah
versi generic dari class ArrayList dan versi generic ini terdiri dari ob*ect-ob*ect
dari tipe String. genArrList adalah batas dari tipe String. 7leh sebab itu#
mengikat sebuah Integer atau beberapa tipe lain bukan "tring untuk hasil dari get
function akan men*adi illegal. 2ernyataan berikut ini adalah illegal. int myInt =
genArrList.get();
&
J.E.N.I.
%u.li# #lass ,enSam%le %u.li# String met'od(String in%ut) String data0 = in%ut;
+asi#,eneri# <String .asi#,eneri# = ne! +asi#,eneri# <String (data0); String data1
= .asi#,eneri#.get)ata(); return data1; / %u.li# Integer met'od(int in%ut) Integer
data0 = ne! Integer(in%ut); +asi#,eneri# <Integer .asi#,eneri# = ne! +asi#,eneri#
<Integer (data0); Integer data1 = .asi#,eneri#.get)ata(); return data1; / %u.li#
stati# void main(String args23) ,enSam%le sam%le = ne! ,enSam%le(); System.out.
%rintln(sam%le.met'od("Some generi# data")); System.out.%rintln(sam
%le.met'od(0145)); / /
"ekarang mari kita melalui bagian dari kode yang menggunakan syntax untuk type
generic. 6ntuk deklarasi dari class BasicGeneric# #lass +asi#,eneri# <A nama class
diikuti oleh sepasang kurung yang didalamnya terdapat huruf kapital A$ <A>. Ini
disebut dengan sebuah parameter tipe. 2enggunaan kurung ini mengindikasikan bah)a
class yang dideklarasikan adalah class generic. Ini berarti bah)a class tidak
beker*a dengan beberapa type referensi khusus. kemudian# amati bah)a sebuah field
dari class dideklarasikan men*adi tipe ! %rivate A data; +eklarasi ini
mengelompokkan bah)a field data adalah dari tipe generic# tergantung pada tipe data
yang telah didesain untuk beker*a dengan ob*ect BasicGeneric. 4etika
mendeklarasikan sebuah instance dari class# anda harus mengelompokkan tipe
referensi dengan yang mana yang anda inginkan untuk beker*a sama. +asi#,eneri#
<String .asi#,eneri# = ne! +asi#,eneri# <String (data0);
!nda mungkin dapat mener*emahkan sisa dari kode dengan pemahaman anda sendiri.
empertimbangkan deklarasi dari method getData . %u.li# A get)ata() return data; /
ethod getData mengembalikan sebuah nilai dari tipe A# "ebuah 0ipe type. Ini bukan
berarti bah)a method tidak akan memiliki tipe data runtime# atau even pada )aktu
meng-compile. "etelah !nda mendeklarasikan sebuah ob*ect yang bertipe BasicGeneric#
A adalah pengikat ke sebuah tipe data yang spesifik. Instance ini akan berlaku
sebagai *ika ini dideklarasikan untuk memiliki tipe data spesifik ini dan tipe ini
hanya dari bagian sangat a)al. 2ada kode yang diberikan# dua instances dari class
BasicGeneric terbentuk. +asi#,eneri# <String .asi#,eneri# = ne! +asi#,eneri#
<String>(data0); String data1 = .asi#,eneri#.get)ata(); +asi#,eneri# <Integer
.asi#,eneri# = ne! +asi#,eneri# <Integer>(data0); Integer data1 =
.asi#,eneri#.get)ata(); 2erlu diperhatikan perhatian bah)a instantiasi dari class
generic adalah hanya sama dengan instantiasi sebuah class normal kecuali bah)a tipe
data khusus berada dalam <> menggantikan nama konstruktor. Informasi tambahan ini
mengindikasikan tipe dari data anda akan beker*a dengan siapa untuk bagian instance
ini dari class BasicGeneric."etelah instantiasi# anda dapat mengakses anggota dari
class melalui instance sekarang. 0idak ada yang lebih diperlukan untuk typecast
nilai pengembalian dari method getData se*ak diputuskan bah)a ini akan beker*a
dengan sebuah referensi tipe data yang spesifik.
13.3.1 Pembatasan"Primitive"
"ebuah pembatasan type generic dalam Java adalah mereka dibatasi oleh tipe
referensi dan tidak akan beker*a dengan tipe data primitive. "ebagai contoh#
pernyataan berikut akan men*adi illegal se*ak int adalah sebuah tipe data
primitive. +asi#,eneri# <int .asi#,eneri# = ne! +asi#,eneri# <int (data0);
(
J.E.N.I.
instantiasi dari tipe generic yang melekat pada batas yang kita miliki. "e*ak kita
yakin bah)a setiap tipe instantiasi adalah sebuah subclass dari batas yang
dimiliki# kita dapat memanggil beberapa method secara aman yang ditemukan dalam
ob*ek static tipe. Jika kita belum menempatkan beberapa batas eksplisit pada
parameternya# default batas adalah !"#ect. Ini berarti bah)a kita tidak dapat
men*alankan method pada sebuah instance dari batas yang tidak ditampilkan dalam
class !"#ect.
13.
+isamping mendeklarasikan sebuah class generic# Java *uga memberi kita perlakuan
khusus untuk mendeklarasikan sebuah method generic. ini disebut dengan method
polymorphic# yang mana didefinisikan men*adi method yang diberi nilai parameter
berupa tipe. method parameterisasi sangat membantu kita kita ingin untuk
menampilkan tugas dimana ketergantungan tipe antara argument dan nilai pengembalian
aslinya merupakan generic# tapi generic sebenarnya tidak mempercayakan pada
beberapa tipe level class informasi dan akan merubah dari method call ke method
call. "ebagai contoh# !ndaikata kita menginginkan untuk menambahkan sebuah method
$a%e untuk sebuah class ArrayList. ethod static ini akan diambil dalam sebuah
argument tunggal# yang mana akan men*adi satu-satunya elemen dari ob*ect ArrayList.
6ntuk membuat generic ArrayList kita# sebagai penampung beberapa tipe elemen#
argumen tunggal dalam method $a%e harus memiliki sebuah tipe generic sebagai sebuah
argumen dan sebagai sebuah tipe nilai kembalian. 6ntuk mendeklarasikan tipe generic
pada level method# pertimbangkan contoh berikut ini $ #lass >tilities 8? < se#ara
im%lisit e;tends ter'ada% @.je#t ?8 %u.li# stati# << ArrayList<< ma=e(< first)
return ne! ArrayList<< (first); / / Java *uga menggunakan sebuah mekanisme type-
inference untuk secara otomatis menyimpulkan tipe method polymorphic berdasarkan
pada tipe-tipe argumennya. Ini mengurangi pan*ang dan kompleksitas dari sebuah alur
untuk men*alankan suatu method. 6ntuk membangun sebuah instance baru dari
ArrayList<Integer># kita mempunyai cara yang cukup sederhana yaitu pernyataan
berikut $ >tilities.ma=e(Integer(0));
;
J.E.N.I.
13.! "atihan
13.6.1 Swapping
embentuk sebuah class dengan sebuah versi generic dari method print"&apped. ethod
ini menukar secara sederhana nilai dari parameternya secara lokal dan mencetak
nilainya. :atatan bah)a pencetakan harus dilakukan pada method ini. encetak nilai
dari argument dalam method lain tidak akan beker*a karena Java mele)atkan ob*ect ke
method melalui suatu nilai. 6*i method ini pada ob*ect Integer' ob*ect String dan
ob*ect ArrayList.
<