Buku Petunjuk Praktikum Praktikum Pemrograman Berbasis Obyek
Oleh: Ali Ridho Barakbah S.Kom., Ph.D. Rizky Yuniar Hakkun S.Kom., M.T. Tita Karlita, S.Kom., M.Kom. Yuliana Setiowati, S.Kom., M.Kom.
Program Studi D3 Teknik kni k Informatika Info rmatika Departeme Departemen n Teknik Teknik Inform atika dan Komp uter Politeknik Elektronika Negeri Surabaya 2012
Kata Pengantar Puji syukur kami panjatkan kehadirat Tuhan Yang Maha Esa atas segala rahmat dan karunia-Nya sehingga Buku Praktikum Pemrograman Berbasis Obyek dapat diwujudkan. Buku Praktikum Pemrograman Berbasis Obyek ini dirasa sangat diperlukan untuk diterbitkan sebagai pedomam bagi mahasiswa dan dosen yang berkaitan dengan kegiatan belajar dan mengajar di Jurusan Teknik Informasi Politeknik Elektronika Negeri Surabaya. Buku Praktikum Pemrograman Berbasis Obyek ini berisi penjelasan konsep pemrograman berbasis berba sis obyek disertai contoh c ontoh penerapannya dengan menggunakan m enggunakan bahasa ba hasa Java. Materi yang diajarkan meliputi prinsip-prinsip pemrograman berorientasi obyek seperti kelas, obyek, method, enkapsulasi, pewarisan, polimorfisme, serta topik tentang penanganan kesalahan, tipe data koleksi, dan membuat antar muka grafis menggunakan Java. Dengan modul-modul praktikum yang ada di buku ini diharapkan mahasiswa mampu
merancang
dan
mengimplementasikan
permasalahan
ke
dalam
konsep
pemrograman berbasis obyek dengan diberikan latihan-latihan dan tugas-tugas pemrograman.
Diakhir
kuliah
mahasiswa
membuat
tugas
proyek
akhir
yang
dipresentasikan di kelas. Akhirnya dengan ini kami mengharapkan Buku Praktikum ini dapat dijadikan petunjuk dan dipergunakan dengan sebaik-baiknya. Dan tentu tidak lupa kami harapkan kritik dan saran demi makin sempurnanya buku b uku ini.
Surabaya, 30 Nopember 2012
i
Daftar Isi Kata Pengantar Daftar Isi Praktikum 1 Praktikum 2 Praktikum 3 Praktikum 4 Praktikum 5 Praktikum 6 Praktikum 7 Praktikum 8 Praktikum 9 Praktikum 10 Praktikum 11 Praktikum 12 Praktikum 13 Praktikum 14 Praktikum 15 Praktikum 16 Praktikum 17 Praktikum 18 Praktikum 19 Praktikum 20 Praktikum 21 Praktikum 22 Praktikum 23 Praktikum 24 Praktikum 25 Praktikum 26 Praktikum 27 Praktikum 28 Praktikum 29 Praktikum 30 Praktikum 31 Praktikum 32
Pengenalan Lingkungan Kerja Java Dasar Pemrograman Java Operator Pengambilan Keputusan dan Perulangan Array String Pengenalan Pemrograman Berbasis Obyek Enkapsulasi Mengelola Kelas Inheritance 1 Inheritance 2 Overriding dan Overloading Polimorfisme Nested Class Type Wrapper Type Enum Menangani Exception Melempar Exeption dan Membuat Exception Sendiri Java Collection Framework: Set dan List Java Collection Framework: Map Comparable Comparator Generics: Membuat Class Generic dan Generic pada Collection Generics: Generics: Bounded Type Parameter dan WildCard Input dan Output 1 Input dan Output 2 Antar Muka Grafis Penanganan Event GUI: Kalkulator Mini Proyek 1 Proyek 2 Presentasi
i ii 1 7 15 25 35 44 53 63 71 81 89 96 105 113 122 134 145 153 164 177 185 197 211 222 237 246 257 267 279 291 292 293
ii
PRAKTIKUM 1 PENGENALAN LINGKUNGAN KERJA JAVA A. TUJUAN PEMBELAJARAN
1. Mengenal dan mempersiapkan lingkungan kerja Java 2. Mampu menerapkan langkah-langkah dalam menginstall Java Development Kit 3. Membuat program sederhana dengan Java 4. Mengkompilasi dan menjalankan program Java 5. Menganalisa beberapa problem yang terjadi saat pemrograman dan memberikan solusi
B. DASAR TEORI
Untuk bisa bekerja dengan Java, maka kita perlu melakukan instalasi Java Development Kit (JDK) atau Java 2 Software Development Kit (J2SDK). Setelah proses instalasi selesai, selesa i, selanjutnya adalah melakukan penyetingan PATH dan CLASSPATH di dalam sistem. Penyetingan PATH sangat berguna untuk memberitahu sistem dimana kita meletakkan file-file utama Java (diantaranya java, javac, jdb, dan lain-lain). Sedangkan penyetingan CLASSPATH sangat berguna untuk memberitahu sistem dimana kita meletakkan file-file class yang akan kita libatkan dalam program kita. Penyetingan CLASSPATH ini biasa melibatkan dua item, yaitu tanda . (titik) yang menandakan direktori kerja dan tools.jar yang berisikan kumpulan file-file library standar yang disediakan oleh Java.
1
C. TUGAS PENDAHULUAN
Buatlah makalah yang berisi tentang perkembangan teknologi Java dan uraikan berbagai macam teknologi Java serta aplikasinya saat ini.
D. PERCOBAAN Percobaan 1 : Instalasi JDK
Pilih dan tentukan file instalasi JDK sesuai dengan operating system yang dipakai oleh komputer anda. Jalankan file instalasi JDK dan ikuti proses instalasi tahap demi tahap. Pilihlah direktori penginstallan secara default (biasanya ini akan membuat direktori baru atau c:\jdkxxx atau c:\j2sdkxxx dimana xxx adalah versi JDK yang di-install.
Percobaan 2 : Pengesetan PATH
Masuk ke system setting OS anda melalui control panel dan lakukan penambahan PATH dengan cara sebagai berikut:
set PATH=%PATH%;%JAVA_HOME%\bin PATH=%PATH%;%JAVA_HOME%\bin
Percobaan 3 : Pengesetan CLASSPATH
Masuk ke system setting OS anda melalui control panel dan lakukan penambahan atau membuat baru CLASSPATH dengan cara sebagai berikut:
set CLASSPATH=.;%JAVA_HOME%\lib\tools.jar CLASSPATH=.;%JAVA_HOME%\lib\tools.jar
Percobaan 4 : Menampilkan suatu tulisan ke layar
Hallo.java public class Hallo { public static void main(String args[]) { System.out.println("Hallo..."); } }
Percobaan 5 : Melibatkan class lain dalam program
Buatlah class TestGreeting dan Greeting dalam dua file sumber berbeda.
TestGreeting.java public class TestGreeting { public static void main (String[] args) { Greeting hello = new Greeting(); hello.greet(); } }
Greeting.java public class Greeting { public void greet() { System.out.println("hi"); } }
E. LATIHAN Latihan 1 : Menganalisa dan membenahi kesalahan pada program
Tulislah program berikut ini dan simpanlah dengan nama Test.java Test.java public class Testing { public static void main(String[] args) { System.out.println("What's wrong with this program?"); } }
Lakukan kompilasi pada file tersebut dan amati hasilnya. Kenapa terjadi kegagalan pada saat kompilasi?. Benahilah kesalahan diatas sehingga program tersebut dapat berjalan dengan baik.
Latihan 2 : Menganalisa dan membenahi kesalahan pada program
Tulislah program dibawah ini dan simpanlah dengan nama tertentu sesuai pilihan anda.
public class Test { public static void main(String[] args) { System.out.println("What's wrong with this program?"); } } public class TestAnother { public static void main(String[] args) { System.out.println("What's wrong with this program?"); } }
Lakukan kompilasi pada file tersebut dan amati hasilnya. Kenapa terjadi kegagalan pada saat kompilasi? Benahilah kesalahan diatas sehingga program tersebut dapat berjalan dengan baik.
Latihan 3 : Menganalisa dan membenahi kesalahan pada program
Tulislah program berikut ini dan simpanlah. public class Test { public static void main(String args) { System.out.println("What's wrong with this program?"); } }
Lakukan kompilasi pada program tersebut dan jalankan. Kenapa terjadi kesalahan pada saat menjalankan program tersebut. Benahilah kesalahan diatas sehingga program tersebut dapat berjalan dengan baik.
Latihan 4 : Menganalisa dan membenahi kesalahan pada program
Tulislah program berikut ini dan simpanlah.
public class Test { public void main(String args[]) { System.out.println("What's wrong with this program?"); } }
Lakukan kompilasi pada program tersebut dan jalankan. Kenapa terjadi kesalahan pada saat menjalankan program tersebut. Benahilah kesalahan diatas sehingga program tersebut dapat berjalan dengan baik.
F. TUGAS Tugas 1 : Menghitung luas dan keliling lingkaran
Buatlah program untuk menghitung luas dan kelili ng lingkaran. Untuk nilai PI gunakan konstanta PI yang ada di java.lang.Math.PI 2
Rumus :
Luas lingkaran = PI x jari-jari Keliling lingkaran = 2 x PI x jari-jari
Tugas 2 : Mengkonversi suatu nilai dari Celcius ke Fahrenheit atau sebaliknya
Buatlah suatu program untuk mengkonversi suatu nilai dari Celcius ke Fahrenheit atau sebaliknya.
Rumus :
Lampiran
Cara memasukkan input melalui JOptionPane. import javax.swing.JOptionPane; public class InputPane { public static void main(String args[]) { int nilai; String str = JOptionPane.showInputDialog("Masukkan nilai :"); nila i= Integer.parseInt(str); System.out.println(nilai); System.exit(0); } }
LAPORAN RESMI
Kumpulkan hasil percobaan di atas, tambahkan dalam laporan resmi flow chart untuk menghitung nilai rata-rata dari n bilangan yang diinputkan, hitung jumlah totalnya, hitung maksimal dan minimal bilangan.
PRAKTIKUM 2 DASAR PEMROGRAMAN JAVA A. TUJUAN PEMBELAJARAN
1. Mengetahui aturan penamaan identifier 2. Mengenal kata-kata kunci yang ada di Java 3. Mengetahui tipe-tipe dasar yang ada di Java 4. Mengetahui pemberian nilai default untuk masing-masing tipe dasar 5. Memahami bagaimana melakukan casting dan promotion
B. DASAR TEORI
Identifier adalah nama yang diberikan untuk variabel, class atau method. Penamaan identifier tidak boleh mengandung spasi dan harus diawali dengan karakter unicode, tanda $ (dollar) atau tanda _ (underscore). Penamaan identifier ini bersifat case-sensitive dan tidak dibatasi panjang maksimum. Java mempunyai 48 kata kunci, seperti if , int , void , dan lain-lain. Kata-kata kunci tersebut tidak bisa dipakai sebagai identifier. Selain kata kunci, Java juga mempunyai 3 kata literal, yaitu true, false dan null, yang juga tidak bisa dipakai untuk penamaan identifier juga terdapat 2 reserved words yang tidak bisa digunakan sebagai nama identifier yaitu const dan goto. Java mempunyai 8 tipe dasar, yaitu boolean, char, byte, short, int, long, float, dan double. Dari 8 tipe data dasar tersebut bisa dikelompokkan menjadi 4 kelompok data yaitu, integral, floating point, character, dan logical. Yang termasuk dalam kelompok data integral atau bilangan bulat adalah byte, short, int dan long. Nilai default untuk kelompok data integral adalah int. Yang termasuk dalam kelompok data floating point adalah float dan double dengan nilai default double. Sedang yang termasuk dalam 7
tipe data character adalah char yang direpresentasikan dengan Unicode leter. Dan kelompok data yang terakhir adalah logical yaitu boolean dengan hanya dua buah nilai saja yang diijinkan yaitu “true” dan “false”. Spesifikasi panjang bit dan range serta nilai default untuk masing-masing tipe data bisa dilihat pada Tabel 2.1. Casting diperlukan untuk mengkonversi dari suatu tipe ke tipe data yang lebih kecil panjang bitnya. Sedangkan promotion terjadi pada saat mengkonversi dari suatu tipe data ke tipe data yang lebih panjang bitnya. Contoh :
int p = (int) 10L; long i = 10;
Tabel 2.1 Spesifikasi panjang bit dan nilai default tipe data dasar Tipe
Panjang bit
Range
Nilai Default
boolean
16
-
false
char
16
0 – 216-1
‘\u0000’
byte
8
-27 – 27-1
0
short
16
-215 – 215-1
0
int
32
-231 – 231-1
0
long
64
-263 – 263-1
0L
float
32
-
0.0F
double
64
-
0.0
C. TUGAS PENDAHULUAN
1. Buatlah uraian yang berisi tentang spesifikasi 8 tipe data dasar ! 2. Apakah yang dimaksud dengan casting (narrowing conversion) ? 3. Apakah yang dimaksud dengan konversi (widening conversion) ?
D. PERCOBAAN Percobaan 1 : Memberikan nilai ke suatu tipe data publ i c cl ass Assi gn { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { bool ean b = t r ue;
Syst em. out . pr i nt l n( "Val ue b = " + b) ; char c = ' C' ; Syst em. out . pr i nt l n( "Val ue c = " + c) ; byt e bt = 10; Syst em. out . pr i nt l n( "Val ue bt = " + bt ) ; shor t s = 20; Syst em. out . pr i nt l n( "Val ue s = " + s) ; i nt i = 30; Syst em. out . pr i nt l n( "Val ue i = " + i ) ; l ong l = 40L; Syst em. out . pr i nt l n( "Val ue l = " + l ) ; f l oat f = 3. 14F; Syst em. out . pr i nt l n( "Val ue f = " + f ) ; doubl e d = 3. 14; Syst em. out . pr i nt l n( "Val ue d = " + d) ; } }
Percobaan 2 : Mencetak nilai default dari tipe dasar publ i c cl ass Def aul t Val ue { st at i c bool ean b; s t a t i c c har c ; s t a t i c byt e bt ; s t at i c s hor t s ; st at i c i nt i ; s t at i c l ong l ; st at i c f l oat f ; st at i c doubl e d; publ i c stati c voi d mai n( St r i ng ar gs[ ] ) {
Syst em. out . pr i nt l n( "Def aul t val ue b = " + b) ; Syst em. out . pr i nt l n( "Def aul t val ue c = " + c) ; Syst em. out . pr i nt l n( "Def aul t val ue bt = " + bt ) ; Syst em. out . pr i nt l n( "Def aul t val ue s = " + s) ; Syst em. out . pr i nt l n( "Def aul t val ue i = " + i ) ; Syst em. out . pr i nt l n( "Def aul t val ue l = " + l ) ; Syst em. out . pr i nt l n( "Def aul t val ue f = " + f ) ; Syst em. out . pr i nt l n( "Def aul t val ue d = " + d) ; } }
Percobaan 3 : Mengamati hasil perubahan nilai dari suatu operasi matematis publ i c cl ass Di vi de { publ i c st at i c voi d mai n( St r i ng[ ] ar gument s) { f l oat number 1 = 15; f l oat number 2 = 6; f l oat r esul t = number 1 / number 2; f l oat r emai nder = number 1 % number 2; Syst em. out . pr i nt l n( number 1 + " di vi ded by " + number 2) ; Syst em. out . pr i nt l n( "\ nResul t \ t Remai nder ") ; Syst em. out . pr i nt l n( r esul t + "\ t " + r emai nder ) ; } }
Percobaan 4 : Mengamati hasil perubahan nilai dari suatu operasi matematis cl ass I nvest { publ i c st at i c voi d mai n( St r i ng[ ] ar gument s) { f l oat t ot al = 14000; Syst em. out . pr i nt l n( "Or i gi nal i nvest ment : $" + t ot al ) ; / / I ncr eases by 40 per cent t he f i r st year t ot al = t ot al + ( t ot al * . 4F) ; Syst em. out . pr i nt l n( "Af t er one year : $" + t ot al ) ; / / Loses $1, 500 t he second year
t ot al = t ot al - 1500F; Syst em. out . pr i nt l n( "Af t er t wo year s: $" + t ot al ) ; / / I ncr eases by 12 per cent t he t hi r d year t ot al = t ot al + ( t ot al * . 12F) ; Syst em. out . pr i nt l n( "Af t er t hr ee year s: $" + t ot al ) ; } }
Percobaan 5 : Menampilkan bilangan oktal ke format desimal
publ i c cl ass Oct al { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt si x=06; i nt seven=07; i nt ei ght =010; i nt ni ne=011; Syst em. out . pr i nt l n( "Octal si x = " + si x) ; Syst em. out . pr i nt l n( " Oct al seven = " + seven) ; Syst em. out . pr i nt l n( "Oct al ei ght = " + ei ght ) ; Syst em. out . pr i nt l n( "Oct al ni ne = " + ni ne) ; } }
Percobaan 6 : Menampilkan bilangan heksadesimal ke format desimal
publ i c cl ass Hexadeci mal { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt x=0x0001; i nt y =0x7f f f f f f f ; i nt z=0xDeadCaf e; Syst em. out . pr i nt l n( "x = " + x) ; Syst em. out . pr i nt l n( "y = " + y) ; Syst em. out . pr i nt l n( "z = " + z) ;
} }
Percobaan 7 : Mengamati perubahan nilai pada suatu tipe
publ i c cl ass Pl us { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt x; i nt y; x=2147483647;
/ / ( 2^31) - 1
Syst em. out . pr i nt l n( "x = " + x) ; y=x+1; Syst em. out . pr i nt l n( "y = " + y) ; } }
Percobaan 8 : Memahami pemakaian Unicode
publ i c cl ass CobaUni code { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { ch\ u0061r a=' a' ; char \ u0062 = ' b' ; char c= ' \ u0063' ; St r i ng kat a=" \ u0061\ u0062\ u0063" ; Syst em. out . pr i nt l n( "a: " + a) ; Syst em. out . pr i nt l n( "a: " + b) ; Syst em. out . pr i nt l n( "a: " + c); Syst em. out . pr i nt l n( "kat a: " + kat a) ; } }
E. LATIHAN Latihan 1 : Membuat formulasi proses casting dari tipe-tipe primitif
Lakukan percobaan casting antar tipe-tipe primitif. Lalu amati dan catatlah konversi dari suatu tipe ke tipe lainnya yang memerlukan suatu casting. Dari hasil analisa anda, buatlah suatu skema casting diantara tipe-tipe primitif.
Latihan 2 : Membuat formulasi proses promotion dari tipe-tipe primitif
Lakukan percobaan promotion antar tipe-tipe primitif. Lalu amati dan catatlah konversi dari suatu tipe ke tipe lainnya yang menyebabkan terjadinya suatu promotion. Dari hasil analisa anda, buatlah suatu skema promotion diantara tipe-tipe primitif.
F. TUGAS Tugas 1 : Menganalisa batasan maksimum dari suatu tipe
Amatilah dan tulislah program berikut ini:
publ i c cl ass Bi gI nt eger { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { l ong p=2147483648; } }
Lakukan kompilasi pada file tersebut dan amati pesan kesalahannya. Lakukan analisa mengapa bisa terjadi kesalahan padahal batasan nilai maksimum dari suatu bilangan bertipe long adalah 263-1 (9223372036854775807)?. Kemudian berikanlah solusi yang tepat untuk mengatasi persoalan diatas.
Tugas 2 : Mencari panjang menit dari durasi waktu
Input: jam awal, menit awal, jam akhir, menit akhir Output: durasi waktu (dalam menit) antara jam awal menit awal dengan jam akhir menit akhir.
LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan tugas yang telah dibuat.
PRAKTIKUM 3 OPERATOR A. TUJUAN PEMBELAJARAN
1.
Mengenal berbagai macam bentuk operator
2.
Memahami penggunaan berbagai macam jenis operator yang ada di Java
B. DASAR TEORI
Operator dapat diklasifikasikan menjadi 2 bentuk, yaitu unary operator dan binary operator. Unary operator adalah operator yang hanya melibatkan 1 operan. Sedangkan binary operator adalah operator yang melibatkan 2 operan. Java mempunyai berbagai macam jenis operator yang dapat digolongkan menjadi operator aritmatika, increment-decrement, bitwise, boolean, logik, shift (geser), penugasan, kombinasi dan kondisi. Arithmatic operator (operator aritmatika) adalah operator yang berfungsi untuk operasi aritmatika. Yang termasuk dalam arithmatic operator bisa dilihat pada Tabel 3.1. Tabel 3.1. Arithmatic operator Arithmatic Operator
Keterangan
+
Operasi penambahan
-
Operasi pengurangan
*
Operasi perkalian
/
Operasi pembagian
%
Operasi modulus
Increment – decrement operator adalah operator yang berguna untuk menaikkan 1 nilai (increment) dan menurunkan 1 nilai (decrement). Yang termasuk increment16
decrement operator bisa dilihat pada Tabel 3.2. Berdasarkan urutan eksekusi penaikkan dan penurunan nilainya, increment-decrement operator ini dapat diklasifikasikan menjadi 2 macam, yaitu pre-increment/decrement dan post-increment/decrement. Tabel 3.2. Arithmatic operator Increment-Decrement Operator
Keterangan
++
increment
--
decrement
Bitwise operator adalah operator yang dipakai untuk operasi bit pada nilai operan. Yang termasuk bitwise operator bisa dilihat pada Tabel 3.3. Tabel 3.3. Bitwise Operator Bitwise Operator
Keterangan
~
Operasi complement
&
Operasi AND
|
Operasi OR
^
Operasi XOR
Boolean operator (operator boolean) adalah operator yang mengharuskan operannya bertipe boolean (true atau false). Yang termasuk boolean operator bisa dilihat pada Tabel 3.4. Tabel 3.4. Boolean Operator Logical Operator
Keterangan
!
Operasi negasi (NOT)
&
Operasi AND
|
Operasi OR
^
Operasi XOR
&&
Operasi AND (short circuit)
||
Operasi OR (short circuit)
Operator !, &, | dan ^ mempunyai implementasi yang sama sebagaimana ketika ia menjadi bitwise operator. Hanya saja di logical operator, operan yang dilibatkan disini harus bertipe boolean, yang hanya mempunyai nilai true atau false. Logical operator (operator logika) adalah operator yang sering dipakai untuk operasi perbandingan dan selalu menghasilkan suatu nilai bertipe boolean (true atau false). Yang termasuk logical operator bisa dilihat pada Tabel 3.5. Tabel 3.5. Logical Operator Logical Operator
Keterangan
==
Operasi perbandingan sama dengan
!=
Operasi perbandingan tidak sama dengan
>
Operasi perbandingan lebih besar
>=
Operasi perbandingan lebih besar sama dengan
<
Operasi perbandingan lebih kecil
<=
Operasi perbandingan lebih kecil sama dengan
Shift operator (operator geser) adalah operator yang berfungsi untuk menggeser susunan bit pada suatu nilai. Yang termasuk dalam shift operator dapat dilihat pada Tabel 3.6. Tabel 3.6. Shift Operator Shift Operator
Keterangan
>>
right shift
>>>
unsigned right shift
<<
left shift
Combination operator (operator kombinasi) adalah operator yang terdiri dari gabungan 2 operator. Biasanya combination operator ini dipakai untuk mempersingkat waktu penulisan program. Yang termasuk operator combination bisa dilihat pada Tabel
3.7. Tabel 3.7. Combination Operator Combination Operator
Keterangan
+=
Gabungan dari operator = dan +
-=
Gabungan dari operator = dan -
*=
Gabungan dari operator = dan *
/=
Gabungan dari operator = dan /
%=
Gabungan dari operator = dan %
>>=
Gabungan dari operator = dan >>
>>>=
Gabungan dari operator = dan >>>
<<=
Gabungan dari operator = dan <<
&=
Gabungan dari operator = dan &
|=
Gabungan dari operator = dan |
^=
Gabungan dari operator = dan ^
Conditional operator (operator konditional) adalah operator yang dipakai untuk operasi kondisi (persyaratan), sama sebagaimana if-then-else dan hanya berlaku untuk pernyataan tunggal. Operator ini mengembalikan suatu nilai yang benar sesuai dengan kondisi yang diberikan. Conditional operator (operator konditional) ini hanya ada 1 macam, yaitu ? disertai dengan tanda : (titik dua). Jika kondisi persyaratan yang terletak di sebelah kiri tanda ? bernilai benar, maka pernyataan yang berada di sebelah kiri tanda : yang akan diambil. Demikian juga sebaliknya, jika kondisi persyaratan bernilai salah, maka pernyataan yang berada di sebelah kanan tanda : yang akan diambil. C. TUGAS PENDAHULUAN
Buatlah makalah yang berisi tentang berbagai macam operator dengan disertai contoh penggunaan dan outputnya.
D. PERCOBAAN Percobaan 1 : Melakukan increment dan decrement nilai cl ass I ncDec { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { i nt x = 8, y = 13; Syst em. out . pr i nt l n( "x = " + x) ; Syst em. out . pr i nt l n( "y = " + y) ; Syst em. out . pr i nt l n( " x = " + ++x) ; Syst em. out . pr i nt l n( " y = " + y++) ; Syst em. out . pr i nt l n( "x = " + x- - ) ; Syst em. out . pr i nt l n( "y = " + - - y) ; } }
Percobaan 2 : Melakukan operasi bit cl ass Bi t wi se { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { i nt x = 5, y = 6; Syst em. out . pr i nt l n( "x = " + x) ; Syst em. out . pr i nt l n( "y = " + y) ; Syst em. out . pr i nt l n( "x & y = " + ( x & y) ) ; Syst em. out . pr i nt l n( "x | y = " + ( x | y) ) ; Syst em. out . pr i nt l n( " x ^ y = " + ( x ^ y) ) ; } }
Percobaan 3 : Melakukan operasi komplemen cl ass Bi t wi seCompl ement { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { i nt x = 8; Syst em. out . pr i nt l n( "x = " + x) ; i nt y = ~x; Syst em. out . pr i nt l n( "y = " + y) ; } }
Percobaan 4 : Melakukan operasi shift c l as s Shi f t { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { i nt x = 7; Syst em. out . pr i nt l n( "x = " + x) ; Syst em. out . pr i nt l n( " x >> 2 = " + ( x >> 2) ) ; Syst em. out . pr i nt l n( " x << 1 = " + ( x << 1) ) ; Syst em. out . pr i nt l n( " x >>> 1 = " + ( x >>> 1) ) ; } }
Percobaan 5 : Menggunakan logical operator cl ass Logi cal Oper at or { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { i nt x = 7, y = 11, z = 11; Syst em. out . pr i nt l n( "x = " + x) ; Syst em. out . pr i nt l n( "y = " + y) ; Syst em. out . pr i nt l n( "z = " + z) ; Syst em. out . pr i nt l n( " x < y = " + ( x < y) ) ; Syst em. out . pr i nt l n( "x > z = " + ( x > z) ) ; Syst em. out . pr i nt l n( " y <= z = " + ( y <= z) ) ; Syst em. out . pr i nt l n( " x >= y = " + ( x >= y) ) ; Syst em. out . pr i nt l n( " y == z = " + ( y == z) ) ; Syst em. out . pr i nt l n( "x ! = y = " + ( x != z) ) ; } }
Percobaan 6 : Menggunakan operator boolean and publ i c cl ass Bool eanAnd { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt a=5, b=7; i f ( ( a<2) & ( b++<10) ) b+=2; Syst em. out . pr i nt l n( b) ; } }
Percobaan 7 : Menggunakan operator boolean and short-circuit publ i c cl ass Shor t Ci r cui t Bool eanAnd { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt a=5, b=7; i f ( ( a<2) && ( b++<10) ) b+=2; Syst em. out . pr i nt l n( b) ; } }
Percobaan 8 : Menggunakan boolean or publ i c cl ass Bool eanOr { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt a=5, b=7; i f ( ( a>2) | ( b++<10) ) b+=2; Syst em. out . pr i nt l n( b) ; } }
Percobaan 9 : Menggunakan boolean or short-circuit publ i c cl ass Shor t Ci r cui t Bool eanOr { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt a=5, b=7; i f ( ( a>2) | | ( b++<10) ) b+=2; Syst em. out . pr i nt l n( b) ; } }
Percobaan 10 : Menggunakan operator kondisi cl ass Condi t i onal { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { i nt x = 0; bool ean i sEven = f al se; Syst em. out . pr i nt l n( "x = " + x) ; x = i sEven ? 4 : 7; Syst em. out . pr i nt l n( "x = " + x) ; } }
E. LATIHAN Latihan 1 : Menampilkan representasi biner dari bilangan desimal bertipe int
Buatlah suatu program untuk menampilkan susunan bit dari suatu bilangan desimal. Nilai bilangan input yang dimasukkan adalah bertipe int. Contoh tampilan: Masukkan ni l ai desi mal : 13 Susunan bi t dar i 13 adal ah 00000000000000000000000000001101 Masukkan ni l ai desi mal : 612 Susunan bi t dar i 13 adal ah 00000000000000000000001001100100 Masukkan ni l ai desi mal : - 1 Susunan bi t dar i 13 adal ah 11111111111111111111111111111111 Masukkan ni l ai desi mal : - 13 Susunan bi t dar i 13 adal ah 11111111111111111111111111110011
Latihan 2 : Menampilkan representasi biner dari bilangan desimal bertipe byte
Buatlah suatu program seperti diatas untuk menampilkan susunan bit dari suatu bilangan desimal, akan tetapi nilai bilangan input yang dimasukkan adalah bertipe byte.
F. TUGAS Tugas 1 : Mencari representasi biner dari suatu bilangan
Tuliskan representasi bit dari nilai –19? Jelaskan.
Tugas 2 : Menganalisa pergeseran bit dari operasi shift
Jelaskan apa yang terjadi pada potongan program berikut ini: byte a=-1; a=(byte) (a >>> 2); LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan tugas yang telah dibuat.
PRAKTIKUM 4 DAN PERULANGAN PERCABANGAN D
A. TUJUAN PEMBELAJARAN
1. Memahami logika percabangan 2. Memahami logika perulangan 3. Memakai percabangan dan perulangan yang tepat 4. Memahami pemberian kondisi untuk perulangan
B. DASAR TEORI
Percabangan di dalam Java terdapat 2 macam, yaitu dengan memakai if dan switch. Percabangan if dipakai jika kita menginginkan suatu pernyataan itu dilakukan dengan syarat tertentu yang bernilai benar. Sintaks dari if adalah sebagai berikut:
i f ( ekspr esi _bool ean) { Per nyat aan1; }
Pernyataan1 akan dikerjakan kalau ekspresi_boolean bernilai true. Percabangan if-else dipakai untuk mengeksekusi salah satu dari 2 pernyataan dari syarat tertentu yang pada pada if yang dapat bernilai benar atau salah. Sintaks dari if-else adalah sebagai berikut:
i f ( ekspr esi _bool ean) { Per nyat aan1; } el se { Per nyat aan2; } 25
Pernyataan1
akan
dikerjakan
kalau
ekspresi_boolean
bernilai
true.
Kalau
ekspresi_boolean bernilai false, maka Pernyataan2 akan dikerjakan. Percabangan else-if dipakai untuk memberikan kondisi tertentu pada bagian else. Sintaks dari else-if adalah sebagai berikut:
i f ( ekspr esi _bool ean1) { Per nyat aan1; } el se i f ( ekspr esi _bool ean2) { Per nyat aan2; }
Ketika ekspresi_boolean bernilai false, maka alur program akan menuju ke bagian else. Selanjutnya Pernyataan2 diatas akan dikerjakan kalau ekspresi_boolean2 bernilai true. Percabangan switch dipakai pada saat kita ingin memberikan kondisi denga beberapa syarat yang identik yang masing-masing mempunyai pernyataan yang berbeda-beda. Pada Java, nilai yang dilewatkan pada switch harus bertipe int, short, byte atau char. Sintaks dari switch adalah sebagai berikut:
swi t ch ( ekspr esi ) { case ni l ai 1: Per nyat aan1; br eak; case ni l ai 2: Per nyat aan2; br eak; def aul t : Per nyat aan3; }
Ketika ekspresi bernilai nilai1, maka alur program akan mengeksekusi Pernyataan1. Selanjutnya break menyebabkan alur program keluar dari daerah switch. Kalau ekspresi bernilai nilai2, maka alur program akan mengeksekusi Pernyataan2. Apabila ekspresi mempunyai nilai yang tidak sama dengan nilai1 dan nilai2, maka alur program akan menuju ke bagian default dan kemudian mengeksekusi Pernyataan3. Tipe data yang
diperbolehkan untuk ekspresi adalah byte, short, int dan char saja. Tetapi untuk Java diatas versi 7 ditambahkan tipe data String.
Perulangan di dalam Java terdapat 3 macam, yaitu for, while dan do-while. Perulangan for dipakai pada saat kita melakukan perulangan dengan jumlah yang sudah diketahui pasti. Sintaks dari for adalah sebagai berikut:
f or ( i ni s i al i s as i ; kondi s i ; per ubah) { Per nyat aan; }
Perulangan while dipakai pada saat kita melakukan perulangan dengan jumlah yang belum diketahui pasti. Pernyataan pada while akan dikerjakan setelah pengecekan kondisi pada while bernilai true. Sintaks dari while adalah sebagai berikut:
whi l e ( kondi si ) { Per nyat aan; }
Perulangan do-while dipakai pada saat kita melakukan perulangan dengan jumlah yang belum diketahui pasti. Pernyataan pada do akan dikerjakan terlebih dahulu, baru setelah itu dilakukan pengecekan kondisi pada while. Sintaks dari do-while adalah sebagai berikut:
do { Per nyat aan; } whi l e ( kondi si ) ;
Kita dapat memberikan kondisi tertentu pada saat terjadi perulangan. Kondisi yang mungkin terjadi pada perulangan terdapat 2 macam, yaitu break dan continue. Break menyebabkan suatu kondisi untuk keluar dari perulangan. Sedangkan continue memyebabkan suatu kondisi untuk melanjutkan ke tahapan selanjutnya pada perulangan.
C. TUGAS PENDAHULUAN
1. Sebutkan dan jelaskan berbagai macam sintaks percabangan yang digunakan di Java! 2. Sebutkan dan jelaskan berbagai macam sintaks perulangan yang digunakan di Java!
D. PERCOBAAN Percobaan 1 : Percabangan menggunakan if, if-else dan else-if cl ass I f El seName { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { char f i r s t I ni t i al = ' a' ; Syst em. out . pr i nt l n( " Masukkan hur uf awal nama anda: " ) ; try { f i r s t I ni t i al = ( char ) Sys t em. i n. r ead( ) ; } cat ch ( Except i on e) { Sys t e m. out . pr i nt l n( " Er r or : " + e. t oSt r i ng( ) ) ; } i f ( f i r st I ni t i al == ' a' ) Syst em. out . pr i nt l n( " Nama anda past i Asep! " ) ; el se i f ( f i r s t I ni t i al == ' b' ) Syst em. out . pr i nt l n( " Nama anda past i Br odi n! ") ; el se i f ( f i r s t I ni t i al == ' c' ) Syst em. out . pr i nt l n( " Nama anda past i Cecep! " ) ; el se Syst em. out . pr i nt l n( " Nama anda t i dak t er kenal ! ") ; } }
Percobaan 2 : Percabangan menggunakan switch cl ass Swi t chName { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { char f i r s t I ni t i al = ' a' ; Syst em. out . pr i nt l n( " Masukkan hur uf awal nama anda: " ) ; try { f i r s t I ni t i al = ( char ) Sys t em. i n. r ead( ) ; } cat ch ( Except i on e) {
Sys t e m. out . pr i nt l n( " Er r or : " + e. t oSt r i ng( ) ) ; } swi t c h ( f i r s t I ni t i al ) { c as e ' a' : Syst em. out . pr i nt l n( " Nama anda past i Asep! " ) ; c as e ' b' : Syst em. out . pr i nt l n( "Nama anda past i Br odi n! ") ; cas e ' c' : Syst em. out . pr i nt l n( " Nama anda past i Cecep! " ) ; def aul t : Syst em. out . pr i nt l n( "Nama anda t i dak t er kenal ! ") ; } } }
Percobaan 3 : Percabangan menggunakan switch dengan break cl ass Swi t chNameBr eak { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { char f i r s t I ni t i al = ' a' ; Syst em. out . pr i nt l n( " Masukkan hur uf awal nama anda: " ) ; try { f i r s t I ni t i al = ( char ) Sys t em. i n. r ead( ) ; } cat ch ( Except i on e) { Sys t e m. out . pr i nt l n( " Er r or : " + e. t oSt r i ng( ) ) ; } swi t c h ( f i r s t I ni t i al ) { c as e ' a' : Syst em. out . pr i nt l n( " Nama anda past i Asep! " ) ; br eak; c as e ' b' : Syst em. out . pr i nt l n( " Nama anda past i Br odi n! " ) ; br eak;
case 'c': Syst em. out . pr i nt l n( " Nama anda past i Cecep! " ) ; br eak;
def aul t : Syst em. out . pr i nt l n( " Nama anda t i dak t er kenal ! ") ; } } }
Percobaan 4 : Perulangan menggunakan for cl ass For Count { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { i nt count =1; f or ( i nt i =0; i <9; i ++) { f or ( i nt j =0; j
Percobaan 5 : Perulangan menggunakan while
cl ass Whi l eCoun t { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { i nt count =1; i nt i =0; whi l e ( i <9) { i nt j =0; whi l e ( j
} } }
Percobaan 6 : Perulangan dengan break
cl ass Br eakLoop { publ i c stati c voi d mai n ( St r i ng ar gs[ ] ) { i nt i = 0; do { Sys t e m. out . pr i nt l n( " I t er as i ke " + i ) ; i ++; i f ( i > 10) br eak; } whi l e ( t r ue) ; } }
Percobaan 7 : Perulangan dengan continue
publ i c cl ass Cont i nueLoop { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt a, b; f or ( a=0; a<2; a++) f or ( b=0; b<3; b++) { i f ( b==1) cont i nue; Syst em. out . pr i nt l n( " a=" + a + " ; b=" + b) ; } } }
Percobaan 8 : Pemakaian label pada kondisi break
publ i c cl ass Br eakLabel { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt a, b;
Mul ai : f or ( a=0; a<2; a++) f or ( b=0; b<3; b++) { i f ( b==1) br eak Mul ai ; Syst em. out . pr i nt l n( " a=" + a + " ; b=" + b) ; } } }
Percobaan 9 : Pemakaian label pada kondisi continue
publ i c cl ass Cont i nueLabel { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt a, b; Mul ai : f or ( a=0; a<2; a++) f or ( b=0; b<3; b++) { i f ( b==1) cont i nue Mul ai ; Syst em. out . pr i nt l n( " a=" + a + " ; b=" + b) ; } } }
E. LATIHAN Latihan 1 : Pengecekan kelompok karakter
Buatlah program untuk menentukan kelompok suatu karakter yang dimasukkan melalui keyboard. Kelompok karakter tersebut adalah huruf kecil, huruf besar, angka, dan karakter khusus (tanda baca, operator dan sebagainya).
Latihan 2 : Menampilkan bilangan faktorial
Bilangan bulat faktorial n, ditulis dengan n! adalah dihasilkan dari mengalikan dari 1 sampai dengan n. Contohnya 5! = 1 x 2 x 3 x 4 x 5 =120. Buatlah program untuk menampilkan tabel hasil faktorial dari suatu bilangan yang diinputkan (tampilan bilangan rata kanan)
Contoh tampilan :
Masukkan bilangan faktorial: 7 n
n!
-----------------------------1
1
2
2
3
6
4
24
5
120
6
720
7
5040
---------------------------
Latihan 3 : Deret Fibonacci
Buatlah program untuk menampilkan deret Fibonacci Contoh tampilan : Masukkan ber apa der et Fi bonacci ? 8 8 der et Fi bonacci = 1 1 2 3 5 8 13 21
Latihan 4 : Menampilkan deret bilangan genap
Buatlah program untuk menampilkan deret bilangan genap dari 2 sampai dengan 20 kecuali kelipatan 6. Contoh tampilan : 2 4 8 10 14 16 20
F. TUGAS Tugas 1 : Menghitung nilai determinan dan mencari akar persamaan kuadrat
Buatlah program untuk menghitung determinan dan mencari akar-akar dari persamaan 2
kuadrat : ax + bx + c = 0 , dengan ketentuan sebagai berikut : 2
D = b - 4ac
•
Jika D = 0 , maka terdapat 2 akar real yang kembar, yaitu : x1 = x2 = -b / 2a
•
Jika D > 0 , maka terdapat 2 akar real yang berlainan, yaitu : x1 = (-b + √D) / 2a x2 = (-b - √D) / 2a
•
Jika D < 0 , maka terdapat 2 akar imaginer yang berlainan, yaitu : x1 = -b / 2a + ( √D / 2a) i x2 = -b / 2a - ( √D / 2a) i
Input
: a, b, c (int)
Output : Nilai Determinan serta nilai akar-akar persamaan tsb (x1 dan x2).
Petunjuk : Gunakan Math.pow(x,0.5) untuk mencari akar dari x.
Tugas 2 : Menentukan tahun kabisat
Buatlah program untuk menentukan suatu tahun kabisat atau bukan dimana tahun dibatasi mulai dari tahun 1900 sampai dengan tahun 2005. Contoh tampilan: Masukkan tahun (1900-2005) : 1923 1923 bukan tahun kabisat
Masukkan tahun (1900-2005) : 1898 Maaf, tahun input dibawah 1900
Masukkan tahun (1900-2005) : 1996 1996 adalah tahun kabisat
Masukkan tahun (1900-2005) : 2008 Maaf, tahun input diatas 2005
LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan tugas yang telah dibuat.
PRAKTIKUM 5 ARRAY A. TUJUAN PEMBELAJARAN
1. Membuat dan menggunakan array 2. Berinteraksi dengan array multi dimensi 3. Mengkopi elemen array 4. Memahami konsep referensi array
B. DASAR TEORI
Array adalah suatu kumpulan data pada suatu variabel. Cara mendeklarasikan suatu array adalah sebagai berikut : tipe_array nama_array[]; tipe_array[] nama_array; Contoh : int nilai[]; char[] huruf;
Agar kita dapat memesan tempat di memori untuk menampung elemen-elemen array, kita perlu membuat array. Adapun caranya adalah dengan memakai new karena di dalam Java suatu array adalah dianggap suatu obyek. Format penulisannya adalah sebagai berikut : nama_array = new tipe_array[total_elemen_array]; Contoh :
int nilai[]; nilai = new int[5];
Untuk dapat mengakses elemen array dapat dilakukan dengan menyebutkan elemen ke berapa dari array yang akan diakses, seperti berikut ini: nama_array[elemen_array] 35
Kita juga dapat melakukan deklarasi dan pembuatan array hanya pada satu baris statement . Adapun format penulisannya adalah sebagai berikut :
tipe_array nama_array[] = new tipe_array[total_elemen_array]; Contoh :
int nilai[] = new int[5];
Inisialisasi array dapat dilakukan dengan format penulisan sebagai berikut: tipe_array nama_array[] = {nilai_indeks_0, nilai_indeks_1, … , nilai_indeks_n};
Contoh : int nilai[] = {70, 65, 85};
Kita dapat membuat array multi dimensi dengan cara menambahkan tanda [] sebanyak dimensi yang ingin dibuat. Sebagai contoh adalah sebagai berikut: int x[][] = new int[3][4]; Baris statement diatas berarti kita ingin membuat array berdimensi 2, dengan 3 elemen di dimensi ke-1 dan 4 elemen di dimensi ke-2. Untuk mengetahui panjang dari suatu array yang telah kita buat, kita dapat memakai properti length. Adapun format untuk menggunakan length adalah sebagai berikut: var_array.length
total elemen array pada dimensi 1
var_array[i].length total elemen array pada dimensi 2 untuk indeks ke-i
pada dimensi 1 var_array[i][j].length total elemen array pada dimensi 3 untuk indeks ke-i
pada dimensi 1 dan indeks ke-j pada dimensi 2 dan seterusnya.
Isi dari suatu array dapat kita kopi pada array yang lain dengan memanfaatkan method arraycopy() pada class System. Format penulisannya sebagai berikut : System.arraycopy(array1, p1, array2, p2, n); dimana : array1 = array asal/sumber pengkopian array2 = array tujuan pengkopian p1 = posisi indeks awal pengkopian pada array asal p2 = posisi indeks awal pengkopian pada array tujuan n = banyaknya elemen array yang akan dikopi
Suatu array juga dapat me-refer (merujuk) ke array yang lain, dengan kata lain merujuk pada alamat memori yang sama. Sebagai contoh adalah program berikut ini : int nilai[] = {10, 20, 30}; int result[]; result = nilai;
Di baris ketiga, kita meng-assign array nilai ke array result. Akibatnya, array result akan me-refer (merujuk) pada array nilai, sehingga kedua array tersebut merujuk alamat memori yang sama.
C. TUGAS PENDAHULUAN
1. Apakah yang dimaksud dengan array? 2. Buatlah contoh mendeklarasikan, memberi nilai dan mengakses elemen array! 3. Bagaimana cara mengetahui panjang array? 4. Uraikan pengetahuan anda mengenai array multidimensi! 5. Bagaimana cara mengkopi isi array? 6. Apakah yang dimaksud dengan referensi array. Beri contoh!
D. PERCOBAAN
Percobaan 1 : Mengakses elemen array publ i c cl ass Ar r ay1 { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt ni l ai [ ] =new i nt [ 3] ; ni l ai [ 0] =70; ni l ai [ 1] =80; ni l ai [ 2] =65; doubl e r at ar at a=0. 0;
f or ( i nt i =0; i
f or ( i nt i =0; i
Percobaan 3 : Mendapatkan informasi panjang elemen array multi dimensi publ i c cl ass Cari Panj angEl emen { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt x[ ] [ ] [ ] [ ] =new i nt [ 2] [ ] [ ] [ ] ; x[ 0] =new i nt [ 1] [ ] [ ] ; x[ 0] [ 0] =new i nt [ 2] [ ] ; x[0][ 0] [ 0] =new i nt [ 3] ; x[0][ 0] [ 1] =new i nt [ 2] ; x[ 1] =new i nt [ 2] [ ] [ ] ; x[ 1] [ 0] =new i nt [ 1] [ ] ; x[1][ 0] [ 0] =new i nt [ 2] ; x[ 1] [ 1] =new i nt [ 2] [ ] ; x[1][ 1] [ 0] =new i nt [ 1] ; x[1][ 1] [ 1] =new i nt [ 3] ; Syst em. out . pr i nt l n( x. l engt h) ; Sys t e m. out . pr i nt l n( x[ 0] . l engt h) ; Sys t e m. out . pr i nt l n( x[ 0] [ 0] . l engt h) ; Sys t e m. out . pr i nt l n( x[ 0] [ 0] [ 0] . l engt h) ; Sys t e m. out . pr i nt l n( x[ 0] [ 0] [ 1] . l engt h) ; Sys t e m. out . pr i nt l n( ) ; Sys t e m. out . pr i nt l n( x[ 1] . l engt h) ; Sys t e m. out . pr i nt l n( x[ 1] [ 0] . l engt h) ; Sys t e m. out . pr i nt l n( x[ 1] [ 0] [ 0] . l engt h) ; Sys t e m. out . pr i nt l n( x[ 1] [ 1] . l engt h) ;
Sys t e m. out . pr i nt l n( x[ 1] [ 1] [ 0] . l engt h) ; Sys t e m. out . pr i nt l n( x[ 1] [ 1] [ 1] . l engt h) ; } }
Percobaan 4 : Menangkap daftar argumen publ i c cl ass Get Ar gument s { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Syst em. out . pr i nt l n( "Tanggal : " + ar gs[ 0] ) ; Syst em. out . pr i nt l n( "Bul an : " + ar gs[ 1] ) ; Syst em. out . pr i nt l n( "Tahun : " + ar gs[ 2] ) ; } }
Percobaan 5 : Melakukan pengkopian array
publ i c cl ass CopyAr r ay { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { i nt [ ] ar r ay1 = { 7, 4, 8, 1, 4, 1, 4 }; i nt [ ] ar r ay2 = new i nt [ 3] ; Syst em. ar r aycopy( ar r ay1, 0, ar r ay2, 0, 3) ; Syst em. out . pr i nt ( "Ar r ay1 : ") ; f or ( i nt i =0; i
") ;
Sys t e m. out . pr i nt l n( ) ; Syst em. out . pr i nt ( "Ar r ay2 : ") ; f or ( i nt i =0; i
") ;
E. LATIHAN Latihan 1 : Mencari nilai rata-rata mata kuliah dari daftar nilai siswa
Diketahui daftar nilai siswa sebagai berikut: NRP
Nama Mhs
RPL
BD
PBO
1
Ahmad
81
90
62
2
Adang
50
83
87
3
Dani
89
55
65
4
Edi
77
70
92
Buatlah program untuk menampilkan laporan sebagai be rikut:
NRP
Rata-rata
-------------------------1
77.67
2
73.33
3
69.67
4
79.67
---------------------------
Latihan 2 : Menampilkan deret Fibonacci
Deret fibonanci adalah deret dimana dimulai dengan dua angka, dimana bernilai 0 dan 1, kemudian deret ketiga ditentukan dari penjumlahan kedua angka tersebut, sedangkan deret keempat ditentukan dari dua angka sebelumnya begitu seterusnya. Sehingga didapatkan deret fibonanci sebagai berikut: 0 1 1 2 3 5 8 13 21 dan seterusn ya. Buatlah program untuk menampilkan bilangan Fibonacci yang banyaknya sesuai dengan input.
Contoh tampilan: Masukkan jumlah deretan Fibonacci? 8 0 1 1 2 3 5 8 13
Masukkan jumlah deretan Fibonacci? 10 0 1 1 2 3 5 8 13 21 34
Latihan 3 : Mendeteksi bilangan prima
Buatlah suatu program untuk mendeteksi suatu bilangan itu termasuk bilangan prima atau bukan.
Contoh tampilan: Masukkan bilangan? 8 8 bukan termasuk bilangan prima
Masukkan bilangan? 11 11 adalah bilangan prima
F. TUGAS Tugas 1: Mencari posisi suatu angka di array
Misal terdapat array dua dimensi sebagai berikut: int[][] arrayOfInts = { { 32, 87, 3, 589 }, { 12, 1076, 2000, 8 }, { 622, 127, 77, 955 }}; Tugas : Carilah posisi angka 12 pada array tersebut. Sil akan menggunakan looping, branching, label, break, atau continue bila diperlukan. Contoh output program: Found 12 at 1, 0
Tugas 2: Hitung jumlah huruf a yang terdapat pada array berikut ini !
char [ ] matKul = {‘p’,‘e’,’m’,’r’,’o’,’g’,’r’,’a’,’m’,’a’,’n’,’b’,’e’,’r’,’b’,’a’,’s’,’i’,’s’,’o’,’b’,’y’,’e’,’k’};
Tugas 3. Mengakses elemen array
Di bawah ini adalah contoh program yang mengakses dan menampilkan elemen array ke layar dengan menggunakan looping for.
class ForDemo { public static void main(String[] args){ int x [] = {1,2,3,4,5,6,7,8,9,10}; for(int i=0; i<10; i++){ System.out.println("Count is: " + x[i]); } } }
Temukan dan sebutkan cara lain dengan menggunakan loop for untuk mengakses dan menampilkan elemen array!
LAPORAN RESMI
Kumpulkan hasil percobaan di atas, tambahkan analisa untuk tiap latihan dan tugas!
PRAKTIKUM 6 STRING A. TUJUAN PEMBELAJARAN
1. Memahami sifat dan cara menggunakan dan operasi String. 2. Memahami sifat dan cara menggunakan dan operasi StringBuffer 3. Memahami sifat dan cara menggunakan dan operasi StringBuilder
B. DASAR TEORI
Objek dari String sering sekali kita gunakan sehari-hari, bahkan mungkin di setiap class dari Java kita terdapat rutin yang menangani String. Class St r i ng merepresentasikan suatu teks. Class String berisi string yang tetap (immutable string). Artinya sekali intance St r i ng dibuat maka isinya tidak bisa diubah. Kelas St r i ng memiliki 13 konstruktor yang memungkinkan kita membuat obyek St r i ng dan menginisialisasi nilainya dengan menggunakan berbagai macam sumber data yang berbeda. Cara membuat obyek string adalah sebagai berikut: St r i ng st r = "abc";
Sama dengan char dat a[ ] = {' a' , ' b' , ' c' }; St r i ng st r = new St r i ng( dat a) ;
Berikut ini adalah beberapa contoh penggunaan String: Syst em. out . pr i nt l n( "abc") ; St r i ng cde = " cde" ; Syst em. out . pr i nt l n( "abc" + cde) ; St r i ng c = "abc". subst r i ng( 2, 3) ; St r i ng d = cde. subst r i ng( 1, 2) ;
Class St r i ng memiliki method untuk menangani individual karakter dari suatu string, membandingkan string, mencari string, mendapatkan substring, membuat kopi isi string 44
dan dijadikan lowercase atau uppercase. Java menyediakan operator spesial untuk menggabungkan dua string yaitu operator plus (+). Class St r i ngBuf f er mirip dengan String tetapi bersifat mutable, atau dapat diubah atau dimodifikasi dengan menggunakan beberapa method yang dimilikinya. String buffer aman digunakan oleh beberapa thread. Method-methodnya bersifat synchronized sehingga beberapa operasi yang terjadi pada suatu obyek string buffer akan diselesaikan secara serial sesuai urutan pemanggilan. Operasi utama class St r i ngBuf f er adalah method append dan insert. Method append selalu menambahkan teks diakhir string, sedang method i ns er t menembahkan
teks di posisi tertentu. Sebagai contoh: St r i ngBuf f er sb1 = new St r i ngBuf f er ( “st ar t ”) ; sb1. append( “l e”) ;
maka i si sb1 adal ah “st ar t l e”
St r i ngBuf f er sb2 = new St r i ngBuf f er ( “st ar t ”) ; s b2. i ns er t ( 4, ” l e” ) ;
maka i si sb1 adal ah “st ar l et ”
Secara umum, jika sb adalah obyek dari St r i ngBuf f er , maka sb. append( x) sama dengan operasi s b. i ns er t ( s b. l engt h( ) , x) .
St r i ngBui l der adalah string yang
bersifat mutable. Operasi yang dimiliki class St r i ngBui l der mirip dengan class St r i ngBuf f er . Perbedaannya adalah StringBuilder tidak mendukung sinkronisasi.
C. TUGAS PENDAHULUAN
1. Apakah perbedaan class String, StringBuffer dan StringBuilder? 2. Apakah yang dimaksud dengan sifat mutable dan immutable? Beri contoh! 3. Jelaskan operasi utama append dan insert yang dimiliki oleh StringBuffer!
D. PERCOBAAN Percobaan 1. Karakter escape
Di dalam String kita dapat memasukkan sekuen dari karakter escape yang terdiri dari satu karakter back slash (\) diikuti oleh karakter escape tersebut. Beberapa escape character yang sering digunakan adalah : - \n untuk baris baru
- \t untuk tab - \\ untuk karakter back slash (\) itu sendiri Cobalah kode dibawah ini. Apakah outputnya? cl ass St r 1{ publ i c stati c voi d mai n( St r i ng [ ] ar gs) { St r i ng st r 1 = " PENS" ; St r i ng st r 2 = "pens"; Syst em. out . pr i nt l n( st r 1 + "\ n" + st r 2) ; } }
Percobaan 2. Membandingkan String
Membandingkan String di java tidak bisa menggunakan operator equals (==) tetapi kita harus menggunakan method dari String yaitu equals dan equalsIgnoreCase. Sesuai dengan nama methodnya, equals digunakan untuk membandingkan objek String secara case-sensitive (huruf kecil dan besar dibedakan) dan sebaliknya equalsIgnoreCase digunakan untuk membandingkan String secara case-insensitive (huruf besar dan kecil tidak dibedakan). Cobalah kode dibawah ini. Apakah outputnya? cl ass St r 2{ publ i c stati c voi d mai n( St r i ng [ ] ar gs) { St r i ng st r 1 = " PENS" ; St r i ng st r 2 = "pens"; Sys t e m. out . pr i nt l n( s t r 1. equal s ( s t r 2) ) ; Syst em. out . pr i nt l n( st r 1. equal sI gnor eCase( st r 2) ; }
Percobaan 3. Menggabungkan String (Concatenation)
Untuk menggabungkan string kita bisa menggunakan beberapa cara yaitu dengan menggunakan method concat maupun dengan operator + (plus) dan += (plus sama dengan). Cobalah kode dibawah ini. Apakah outputnya?
cl ass St r 3{ publ i c stati c voi d mai n( St r i ng [ ] ar gs) { St r i ng st r 1 = " Monas" ; Sys t e m. out . pr i nt l n( s t r 1) ; St r i ng st r 2 = " monas" ; Sys t e m. out . pr i nt l n( s t r 2) ; St r i ng st r 3 = st r 1 + st r 2; Sys t e m. out . pr i nt l n( s t r 3) ; St r i ng st r 4 = st r 1. concat ( st r 2) ; Sys t e m. out . pr i nt l n( s t r 4) ; st r 1 += st r 2; Sys t e m. out . pr i nt l n( s t r 1) ; } }
Percobaan 4. Konversi Otomatis (Automatic Conversion)
Pada saat kita menggunakan concatenation (penggabungan) antara objek string dengan suatu nilai atau variable yang bertipe primitive (int, char, float, dsbnya) maka secara otomatis data primitif tersebut akan dikonversi menjadi string. Cobalah kode dibawah ini. Apakah outputnya?
cl ass St r 4{ publ i c stati c voi d mai n( St r i ng [ ] ar gs) { i nt ni l ai = 100; ni l ai = ni l ai * 2; Syst em. out . pr i nt l n( " Angka " + 1 + " adal ah angka per t a ma bi l angan bul at posi t i f ") ; Syst em. out . pr i nt l n( "100 x 2 = " + ni l ai ) ; } }
Percobaan 5. Mengganti Nilai String Sederhana
Untuk mengganti nilai text dari String cukup menggunakan method replace dari String. Cobalah kode dibawah ini. Apakah outputnya? cl ass St r 5{ publ i c stati c voi d mai n( St r i ng [ ] ar gs) { St r i ng nama = " Dor a"; nama = nama. r epl ace( " Dor " , " Ti " ) ; Syst em. out . pr i nt l n( nama) ; } }
E. LATIHAN Latihan 1. Apakah output program dibawah ini? cl ass St r 1{ publ i c stati c voi d mai n( St r i ng [ ] ar gs) { St r i ng s=new St r i ng( "Bi cycl e") ; i nt i Begi n=1; char i End=3; Sys t e m. out . pr i nt l n( s . s ubs t r i ng( i Begi n, i End) ) ; }
Latihan 2. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan! publ i c cl ass Conv{ publ i c stati c voi d mai n( St r i ng ar gv[ ] ) { Conv c = new Conv( ) ; St r i ng s = new St r i ng( "el l o") ; c. amet hod( s) ; } publ i c voi d amet hod( St r i ng s) { char c = ' H' ; c += s; Sys t e m. out . pr i nt l n( c ) ; } }
Latihan 3. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan! publ i c cl ass EqTest 3{ publ i c st at i c voi d mai n( St r i ng ar gv[ ] ) { EqTest e = new EqTest ( ) ; } EqTest ( ) { St r i ng s1 = "J ava"; St r i ng s2 = "J ava"; St r i ng s3 = "j ava"; i f ( s1 == s2) ) { Syst em. out . pr i nt l n( "Equal ") ; }el se{ Syst em. out . pr i nt l n( "Not equal ") ; } i f ( s1 == s3) ) { Syst em. out . pr i nt l n( "Equal ") ; }el se{ Syst em. out . pr i nt l n( "Not equal ") ; } } }
Latihan 4. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan! publ i c cl ass EqTest 4{ publ i c st at i c voi d mai n( St r i ng ar gv[ ] ) { EqTest e = new EqTest ( ) ; } EqTest ( ) { St r i ng s1 = new St r i ng( " J ava") ; St r i ng s2 = new St r i ng( " J ava") ; St r i ng s3 = new St r i ng( " j ava") ; i f ( s1 == s2) ) { Syst em. out . pr i nt l n( "Equal ") ; }el se{ Syst em. out . pr i nt l n( "Not equal ") ; } i f ( s1 == s3) ) { Syst em. out . pr i nt l n( "Equal ") ; }el se{ Syst em. out . pr i nt l n( "Not equal ") ; } } }
Latihan 5. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan! publ i c cl ass EqTest 5{ publ i c st at i c voi d mai n( St r i ng ar gv[ ] ) { EqTest e = new EqTest ( ) ; } EqTest ( ) { St r i ng s = "J ava"; St r i ng s2 = "j ava"; i f ( s. equal sI gnor eCase( s2) ) { Syst em. out . pr i nt l n( "Equal ") ; }el se{ Syst em. out . pr i nt l n( "Not equal ") ; } } }
Latihan 6. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan! publ i c cl ass EqTest 6{ publ i c st at i c voi d mai n( St r i ng ar gv[ ] ) { St r i ng st r = "J ava"; St r i ngBuf f er buf f er = new St r i ngBuf f er ( st r ) ; i f ( s t r . equal s ( buf f er ) ) { Syst em. out . pr i nt l n( "Bot h ar e equal ") ; } el se{ Syst em. out . pr i nt l n( "Bot h ar e not equal ") ; } }
Latihan 7. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan? Jelaskan! publ i c cl ass Test { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { St r i ng st r 1="abc"; St r i ng st r 2="def "; St r i ng st r 3=st r 1. concat ( st r 2) ; s t r 1. c onc at ( s t r 2) ; Sys t e m. out . pr i nt l n( s t r 1) ; } }
F. TUGAS Tugas 1.
Buatlah sebuah program yang menampikan indek-indek karakter pada suatu kalimat. Contoh: Input :
Output:
Kalimat
: “Politeknik Elektronika Negeri Surabaya”
Karakter
: ‘o’
Karakter ‘o’ terdapat pada indek 1, 17
Tugas 2.
Desain dan implementasikan program Java yang mampu melakukan beberapa operasi terhadap string “Selamat Datang di PENS” : a. Konversikan semua karakter menjadi huruf kapital dan tampilkan ke layar b. Konversikan semua karakter menjadi huruf kapital dan tampilkan ke layar c. Tampilkan panjang string d. Tampilkan indek kata “PENS”
Tugas 3.
Buatlah sebuah program yang mengubah huruf perta ma suatu string dengan huruf terakhir string tersebut dan sebaliknya! Contoh:
String masukan
: Amanda Ace
String hasil
: Emende Eca
Program harus bisa berjalan untuk semua inputan string.
Tugas 4. Buatlah sebuah program yang menukar family name dari dua buah string. Contoh:
Input
: String nama pertama : Katy Perry String nama kedua
Output
: Taylor Swift
: String nama pertama : Katy Swift String nama kedua
: Taylor Perry
Program harus bisa berjalan untuk semua inputan string.
Tugas 5. Buatlah sebuah program yang mampu mengganti kata tertentu suatu string. Contoh: Input
: String kalimat utama
: Praktikum di laboratorium Database
String yang diganti
: Database
String pengganti
: Sistem Informasi
Output : Kalimat utama menjadi
: Praktikum di laboratorium Sistem Informasi
Program harus bisa berjalan untuk semua inputan string.
H. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.
PRAKTIKUM 7 PEMROGRAMAN PENGENALAN P BERBASIS O OBYEK A. TUJUAN PEMBELAJARAN
1.
Mendeklarasikan suatu class
2.
Mendeklarasikan suatu atribut
3.
Mendeklarasikan suatu metod
4.
Mengakses anggota suatu obyek
B. DASAR TEORI
Deklarasi class dapat dilakukan dengan sintaks sebagai berikut:
cl ass { [ dekl ar a si _ at r i but ] [ dekl ar asi _konst r ukt or ] [ dekl ar asi _met ode] }
Contoh: publ i c cl ass Si swa { … }
Deklarasi atribut dapat dilakukan dengan sintaks sebagai berikut:
;
Contoh: publ i c cl ass Si swa { publ i c i nt nr p; 53
publ i c St r i ng nama; }
Deklarasi metode dapat dilakukan dengan sintaks sebagai berikut:
( [ daf t ar _ ar gumen] ) { [ ] }
Contoh: publ i c cl ass Si swa { publ i c i nt nr p; publ i c St r i ng nama; publ i c voi d i nf o( ) { Syst em. out . pr i nt l n( “I ni si swa PENS”) ; } }
Untuk dapat mengakses anggota-anggota dari suatu obyek, maka harus dibuat instance dari class tersebut terlebih dahulu. Berikut ini adalah contoh pengaksesan anggota-anggota dari class Siswa:
publ i c cl ass Si swa { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Si swa i t =new Si swa( ) ; i t . nr p=5; i t . nama=”Andi ”; i t . i nf o( ) ; } }
C. TUGAS PENDAHULUAN
1. Apakah yang dimaksud dengan kelas, method, atri but dan obyek? 2. Buatlah contoh suatu kelas dan definisikan atribut dan methodnya! 3. Buatlah kode program soal no. 2 diatas!
4. Buatlah kelas yang berisi main method yang membuat obyek dari kelas yang telah dibuat di soal no. 3. Selanjutnya obyek tersebut mengakses atribut dan methodnya.
D. PERCOBAAN Percobaan 1 : Mengakses anggota suatu class
Amati program dibawah ini: publ i c cl ass Si swa { i nt nr p; publ i c voi d s et Nr p( i nt i ) { nr p=i ; } } publ i c cl ass Test { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Si swa anak=new Si swa( ) ; anak. set Nr p( 5) ; Syst em. out . pr i nt l n( anak. nr p) ; } }
Percobaan 2 : Mengakses anggota suatu class
Amati program dibawah ini: publ i c cl ass Si swa { i nt nr p; St r i ng nama; publ i c voi d s et Nr p( i nt i ) { nr p=i ; } publ i c voi d set Nama( St r i ng i ) { nama=i ; } }
Percobaan 3 : Mengimplementasikan UML class diagram dalam program
Berikut adalah sebuah UML class diagram dari suatu kasus:
Dari class diagram tersebut, dapat diimplementasikan ke dalam program sebagai berikut: publ i c cl ass Si swa { publ i c i nt nr p; publ i c Si s wa( i nt i ) { nr p=i ; } publ i c voi d s et Nr p( i nt i ) { nr p=i ; } publ i c i nt get Nr p( ) { r et ur n nr p; } }
E. LATIHAN
Latihan 1 : Mengimplementasikan UML class diagram dalam program untuk class Tabungan.
Transformasikan class diagram diatas ke dalam bentuk program. Tulislah listing program berikut ini sebagai pengetesan.
publ i c cl ass TesLat i han1{ publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Tabungan t abungan = new Tabungan( 5000) ; Syst em. out . pr i nt l n( " Sal do awal : " + t abungan. sal do) ; t abungan. ambi l Uang( 2300) ; Syst em. out . pr i nt l n( " J uml ah uang yang di ambi l : 2300") ; Syst em. out . pr i nt l n( " Sal do sekar ang : " + t abungan. sal do) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas. Sal do awal : 5000 J uml ah uang yang di ambi l : 2300 Sal do sekar ang : 2700
Latihan 2 :
Mengimplementasikan UML class diagram dalam program untuk
class Mahasiswa
Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing program berikut ini sebagai pengetesan.
publ i c cl ass TesLat i han2{ publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Mahasi swa mhs = new Mahasi swa( 12345, " J ono" ) ; Syst em. out . pr i nt l n( "NRP : " + mhs. get Nr p( ) ) ; Syst em. out . pr i nt l n( " Nama : " + mhs. get nama( ) ) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas.
NRP : 12345 Nama : J ono
Latihan 3 :
Mengimplementasikan UML class diagram dalam program untuk
class Truk
Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing program berikut ini sebagai pengetesan.
publ i c cl ass TesLat i han3{ publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Tr uk t r uk = new Tr uk( 1000) ; Syst em. out . pr i nt l n( " Muat an maksi mal = " +t r uk. get Muat anMaks( ) ) ; t r uk. t ambahMuat an( 500. 0) ; Syst em. out . pr i nt l n( " Tambah muat an : 500 " ) ; t r uk. t ambahMuat an( 350. 0) ; Syst em. out . pr i nt l n( " Tambah muat an : 350 " ) ; t r uk. t ambahMuat an( 100. 0) ; Syst em. out . pr i nt l n( " Tambah muat an : 100 " ) ; t r uk. t ambahMuat an( 150. 0) ; Syst em. out . pr i nt l n( " Tambah muat an : 150 " ) ; Syst em. out . pr i nt l n( " Muat an sekarang = " + t r uk. get Muat an( ) ) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas. Muat an maksi mal : 1000. 0 Tambah muat an : 500 Tambah muat an : 350 Tambah muat an : 100
F. TUGAS Tugas 1 :
Mengimplementasikan UML class diagram dalam program untuk
class Tabungan
Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing program berikut ini sebagai pengetesan.
publ i c cl ass TesTugas1 { publ i c s t at i c voi d mai n ( St r i ng s r t [ ] ) { bool ean st at us; Tabungan t abungan = new Tabungan( 5000) ; Syst em. out . pr i nt l n( "Sal do awal : "+t abungan. get Sal do( ) ) ; t abungan. si mpanUang( 3000) ; Syst em. out . pr i nt l n( " J uml ah uang yang di si mpan : 3000" ) ; st at us = t abungan. ambi l Uang( 6000) ; Syst em. out . pr i nt l n( "J uml ah uang yang di ambi l : 6000" ) ; i f ( s t at us ) Syst em. out . pr i nt l n( "Ok") ; el se Syst em. out . pr i nt l n( "Gagal ") ; t abungan. si mpanUang( 3500) ; Syst em. out . pr i nt l n( " J uml ah uang yang di si mpan : 3500" ) ; st at us = t abungan. ambi l Uang( 4000) ; Syst em. out . pr i nt l n( "J uml ah uang yang di ambi l : 4000" ) ;
i f ( s t at us ) Syst em. out . pr i nt l n( "Ok") ; el se Syst em. out . pr i nt l n( "Gagal ") ; st at us = t abungan. ambi l Uang( 1600) ; Syst em. out . pr i nt l n( "J uml ah uang yang di ambi l : 1600" ) ; i f ( s t at us ) Syst em. out . pr i nt l n( "Ok") ; el se Syst em. out . pr i nt l n( "Gagal ") ; t abungan. si mpanUang( 2000) ; Syst em. out . pr i nt l n( " J uml ah uang yang di si mpan : 2000" ) ; Syst em. out . pr i nt l n( " Sal do sekarang = " + t abungan. get Sal do( ) ) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas.
Sal do awal : 5000 J uml ah uang yang di si mpan : 3000 J uml ah uang yang di ambi l : 6000
ok
J uml ah uang yang di si mpan : 3500 J uml ah uang yang di ambi l : 4000
ok
J uml ah uang yang di ambi l : 1600
gagal
J uml ah uang yang di si mpan : 2000 Sal do sekar ang = 3500
Tugas 2 : Menganalisa, membuat UML class diagram dan implementasi program
Seorang pengusaha rental mobil kesulitan mengingat armada kendaraan yang dimilikinya. Oleh karena itu pengusaha tersebut menugaskan pegawainya untuk mengidentifikasi tersebut. Hasil identifikasi dicatat dalam suatu table sebagaimana bisa
dilihat pada Tabel 7.1. Sayangnya karena merupakan pegawai baru maka ia tidak memahami nama hal yang diidentifikasi (A,B,C, D, dan E). a. Bantulah pegawai tersebut dalam menentukan nama hal yang diidentifikasi (A,B,C, D, dan E). b. Bantulah pengusaha tersebut dalam membuat UML class diagram Mobil. Tambahkan method infoMobil() yang bertujuan untuk menampilkan semua karakteristik mobil (A,B,C, D, dan E). c. Buatlah kelas Mobil.java yang mengimplementasikan desain UML class diagram anda! d. Buatlah kelas TesMobil.java yang berisi pembuatan 4 (empat) buah obyek bernama mobil1, mobil2, mobil3, mobil4. Mengeset karakterist ik masing-masing dan menampilkan info karakteristik mobil.
Tabel 7.1. Data karakteristik mobil Obyek
A
B
C
D
E
mobil1
Toyota
Biru
minibus
2000
7
mobil2
Daihatsu
Hitam
pick up
1500
2
mobil3
Suzuki
Silver
suv
1800
5
mobil4
Honda
Merah
sedan
1300
5
H. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.
PRAKTIKUM 8 ENKAPSULASI A. TUJUAN PEMBELAJARAN 1.
Menerapkan konsep enkapsulasi pada class
2.
Mendeklarasikan suatu constructor
B. DASAR TEORI
Kita dapat menyembunyikan information dari suatu class sehingga anggotaanggota class tersebut tidak dapat diakses dari luar. Adapun caranya adalah cukup dengan memberikan akses kontrol private ketika mendeklarasikan suatu atribut atau method. Contoh: pr i vat e i nt nr p;
Encapsulation (Enkapsulasi) adalah suatu cara untuk menyembunyikan implementasi detail dari suatu class. Enkapsulasi mempunyai dua hal mendasar, yaitu : 1. information hiding 2. menyediakan suatu perantara (method) untuk pengaksesan data Contoh: publ i c cl ass Si swa { pr i vat e i nt nr p; publ i c voi d set Nr p( i nt n) { nr p=n; } }
Contructor (konstruktor) adalah suatu method yang pertama kali dijalankan pada 63
saat pembuatan suatu obyek. Konstruktor mempunyai ciri yaitu : 1. mempunyai nama yang sama dengan nama class 2. tidak mempunyai return type (seperti void, int, double dll) Contoh: publ i c cl ass Si swa { pr i vat e i nt nr p; pr i vat e St r i ng nama; publ i c Si swa( i nt n, St r i ng m) { nr p=n; nama=m; } }
Suatu class dapat mempunyai lebih dari 1 konstruktor dengan syarat daftar parameternya tidak boleh ada yang sama. Contoh :
publ i c cl ass Si swa { pr i vat e i nt nr p; pr i vat e St r i ng nama; publ i c Si swa( St r i ng m) { nr p=0; nama=””; } publ i c Si swa( i nt n, St r i ng m) { nr p=n; nama=m; } }
C. TUGAS PENDAHULUAN
1. Apakah yang dimaksud dengan enkapsulasi? 2. Apakah yang dimaksud dengan constructor? 2. Apakah yang dimaksud dengan overloading constructor?
D. PERCOBAAN Percobaan 1 : Melakukan enkapsulasi pada suatu class
Implementasikan UML class diagram Mahasiswa sebelum dan setelah dilakukan enkapsulasi!
Jika enkapsulasi dilakukan pada class diagram diatas, maka akan berubah menjadi:
Percobaan 2 : Melakukan overloading constructor
Dari class diagram tersebut, dapat diimplementasikan ke dalam program sebagai berikut: publ i c cl ass Mahasi swa { pr i vat e i nt nr p;
pr i vat e St r i ng nama; publ i c Mahasi swa( ) { nr p=0; nama=””; } publ i c Mahasi swa( St r i ng nama) { nr p=0; t hi s. nama=nama; } publ i c Mahasi swa( i nt nr p, St r i ng nama) { t hi s. nr p=nr p; t hi s. nama=nama; } }
E. LATIHAN Latihan 1: Mengimplementasikan UML class diagram dalam program untuk class Kalender
Dari class diagram diatas, desainlah suatu class yang memenuhi konsep enkapsulasi. Untuk nilai inisialisasi, dipakai 1-1-2000. Pakailah kata kunci this untuk mempersingkat pengkodean. Tulislah listing program berikut ini sebagai pengetesan.
publ i c cl ass TesKal ender { publ i c st at i c St r i ng get Ti me( Kal ender kal ) { St r i ng t mp; t mp = kal . get Tanggal ( ) + " - " + kal . get Bul an( ) + "- " + kal . get Tahun( ) ; r et ur n t mp; } publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Kal ender kal = new Kal ender ( 8) ; Syst em. out . pr i nt l n( " Wakt u awal : " + get Ti me( kal ) ) ; kal . set Tanggal ( 9) ; Syst em. out . pr i nt l n( " 1 har i set el ah wakt u awal : " +get Ti me( kal ) ) ; kal = new Kal ender ( 6, 2003) ; Syst em. out . pr i nt l n( " Wakt u ber ubah : " + get Ti me( kal ) ) ; kal . s et Bul an( 7) ; Syst em. out . pr i nt l n( "1 bul an set el ah i t u : " + get Ti me( kal ) ) ; kal = new Kal ender ( 20, 10, 2004) ; Syst em. out . pr i nt l n( " Wakt u ber ubah : " + get Ti me( kal ) ) ; kal . set Tahun( 2005) ; Syst em. out . pr i nt l n( "1 t ahun set el ah i t u : " + get Ti me( kal ) ) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda. Wakt u awal : 8- 1- 2000 1 har i set el ah wakt u awal : 9- 1- 2000 Wakt u ber ubah : 1- 6- 2003 1 bul an set el ah i t u : 1- 7- 2003 Wakt u ber ubah : 20- 10- 2004 1 t ahun set el ah i t u : 20- 10- 2005
Latihan 2 : Mengimplementasikan UML class diagram dalam program untuk class Truk
Ket er angan : 1 ki l ogr am = 9, 8 newt ons
Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing program berikut ini sebagai pengetesan.
publ i c cl ass TesTugas2{ publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { bool ean st at us; Tr uk t r uk = new Tr uk( 900) ; Syst em. out . pr i nt l n( " Muat an maksi mal = " +t r uk. get Muat anMaks( ) ) ; st at us = t r uk. t ambahMuat an( 500. 0) ; Syst em. out . pr i nt l n( " Tambah muat an : 500" ) ; i f ( s t at us ) Syst em. out . pr i nt l n( "Ok") ; el se Syst em. out . pr i nt l n( "Gagal ") ; st at us = t r uk. t ambahMuat an( 300. 0) ; Syst em. out . pr i nt l n( " Tambah muat an : 300" ) ; i f ( s t at us ) Syst em. out . pr i nt l n( "Ok") ;
el se Syst em. out . pr i nt l n( "Gagal ") ; st at us = t r uk. t ambahMuat an( 150. 0) ; Syst em. out . pr i nt l n( " Tambah muat an : 150" ) ; i f ( s t at us ) Syst em. out . pr i nt l n( "Ok") ; el se Syst em. out . pr i nt l n( "Gagal ") ; st at us = t r uk. t ambahMuat an( 50. 0) ; Syst em. out . pr i nt l n( " Tambah muat an : 50" ) ; i f ( s t at us ) Syst em. out . pr i nt l n( "Ok") ; el se Syst em. out . pr i nt l n( "Gagal ") ; Syst em. out . pr i nt l n( " Muat an sekar ang = " + t r uk. get Muat an( ) ) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas. Muat an Tambah Tambah Tambah Tambah Muat an
maksi mal muat an : muat an : muat an : muat an : sekar ang
: 900. 0 500 ok 300 ok 150 gagal 50 ok = 849. 9999999999999
F. TUGAS Tugas 1. Menerapkan konsep enkapsulasi pada kelas Tabungan yang terdapat di Tugas 1. Bab 7. Pengenalan Pemrograman Berbasis Obyek.
Kembangkan kelas Tabungan diatas sehingga memungkinkan pengguna untuk memilih satuan mata uang yang berbeda (USD, AUD, IDR) ketika mengambil atau menyimpan uang. Saldo tabungan disimpan dalam satuan IDR oleh sistem. Beri nama kelas anda dengan nama MultiTabungan.java. Diasumsikan bahwa: 1 AUD = 10.000 IDR 1 USD = 9.000 IDR Buat kelas baru untuk mengetes kelas MultiTabungan yang anda buat!
G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.
PRAKTIKUM 9 MENGELOLA KELAS A. TUJUAN PEMBELAJARAN
1. Memahami konsep package dan import 2. Menggunakan kata kunci this
B. DASAR TEORI
Package adalah suatu cara untuk memenej class-class yang kita buat. Package akan sangat bermanfaat jika class-class yang kita buat sangat banyak sehingga perlu dikelompokkan berdasarkan kategori tertentu. Contoh: package i t ;
package t el kom;
publ i c cl ass Si swa {
publ i c cl ass Si swa {
…
…
Yang perlu kita perhatikan pada saat deklarasikan package, bahwa class tersebut harus disimpan pada suatu direktori yang sama dengan nama package-nya. Suatu class dapat meng-import class lainnya sesuai dengan nama package yang dipunyainya. Contoh: i mpor t i t . Si swa; publ i c cl ass I si Dat a { … }
Satu hal yang perlu kita ketahui, pada saat kita ingin meng-import suatu class dalam suatu package, pastikan letak package tersebut satu direktori dengan class yang ingin meng-import. Kata kunci this sangat berguna untuk menunjukkan suatu member dalam classnya sendiri. This dapat digunakan baik untuk data member maupun untuk function 71
member, serta dapat juga digunakan untuk konstruktor. Adapun format penulisannya adalah: this.data_member
merujuk pada data member
this.function_member()
merujuk pada function member
this()
merujuk pada konstruktor
Contoh: cl ass Par ent { publ i c i nt x = 5; } cl ass Chi l d ext ends Parent { publ i c i nt x = 10; publ i c voi d I nf o( ) { Syst em. out . pr i nt l n( super . x) ; } }
Ketika kita memakai konsep inheritance, maka yang harus kita ketahui adalah konstruktor dari parent class tidak dapat diwariskan ke subclass-nya. Sebagai konsekuensinya adalah setiap kali kita membuat suatu subclass, maka kita harus memanggil konstruktor parent class di konstruktor subclass. Jika kita tidak mendeklarasikannya secara eksplisit, maka kompiler Java akan menambahkan deklarasi pemanggilan kontruktor parent class di konstruktor subclass.
C. TUGAS PENDAHULUAN
1. Apakah yang dimaksud dengan package? 2. Apakah kegunaan kata kunci import ? 3. Apakah kegunaan kata kunci this?
D. PERCOBAAN Percobaan 1 : Menggunakan kata kunci this
Dari class diagram tersebut, dapat diimplementasikan ke dalam program sebagai berikut:
publ i c cl ass Mahasi swa { publ i c i nt nr p; publ i c St r i ng nama; publ i c Mahasi swa( i nt nr p, St r i ng nama) { t hi s. nr p=nr p; t hi s. nama=nama; } }
Percobaan 2 : Memakai kata kunci this pada overloading constructor
Dari class diagram tersebut, dapat diimplementasikan ke dalam program sebagai berikut:
publ i c cl ass Mahasi swa { pr i vat e i nt nr p; pr i vat e St r i ng nama; publ i c Mahasi swa( ) { t hi s( 0, ” ”) ; } publ i c Mahasi swa( St r i ng nama) { t hi s( 0, nama) ; } publ i c Mahasi swa( i nt nr p, St r i ng nama) { t hi s. nr p=nr p; t hi s. nama=nama; } }
Percobaan 3 : Menggunakan package dan import
Dari class diagram tersebut, dapat diimplementasikan ke dalam program dibawah ini. Sebelum melakukan kompilasi, daftarkan direktori tempat package diatas disimpan. package sekol ah;
package sekol ah;
publ i c cl ass Kel as {
publ i c cl ass Mahasi swa {
pr i vat e i nt kodekel as;
pr i vat e i nt nr p;
pr i vat e St r i ng namakel as;
pr i vat e St r i ng nama;
pr i vat e Mahasi swa mahasi swa; publ i c Mahasi swa( i nt nr p, publ i c Kel as( i nt kode,
St r i ng nama) {
St r i ng nama) {
t hi s. nr p=nr p;
t hi s. kodekel as=kode;
t hi s. nama=nama;
t hi s. namakel as=nama; }
}
publ i c voi d set Mhs ( Mahasi swa mhs) { t hi s. mahasi swa=mhs; } }
}
E. LATIHAN Latihan 1: Mengimplementasikan UML class diagram dalam program untuk package perbankan
i mport perbankan. *; publ i c cl ass TesLat i han { publ i c stati c voi d mai n( St r i ng[ ] ar gs) { i nt t mp; bool ean st at us; Nasabah nasabah = new Nasabah( " Agus" , " Dar yant o" ) ; Syst em. out . pr i nt l n( " Nasabah at as nama " +nasabah. get NamaAwal ( ) +nasabah. get NamaAkhi r ( ) ) ; nasabah. set Tabungan( new Tabungan ( 5000) ) ; t mp = nasabah. get Tabungan( ) . get Sal do( ) ; Syst em. out . pr i nt l n( " Sal do awal : "+t mp) ; nasabah. get Tabungan( ) . si mpanUang( 3000) ; Syst em. out . pr i nt l n( " J uml ah uang yang di si mpan 3000" ) ; st at us=nasabah. get Tabungan( ) . ambi l Uang( 6000) ;
Syst em. out . pr i nt l n( " J uml ah uang yang di ambi l 6000" ) ; i f ( s t at us) Syst em. out . pr i nt l n( "
OK") ;
el se Syst em. out . pr i nt l n( " Gagal ") ; nasabah. get Tabungan( ) . si mpanUang( 3500) ; Syst em. out . pr i nt l n( " J uml ah uang yang di si mpan 3500" ) ; st at us=nasabah. get Tabungan( ) . ambi l Uang( 4000) ; Syst em. out . pr i nt l n( " J uml ah uang yang di ambi l 4000" ) ; i f ( s t at us) Syst em. out . pr i nt l n( "
OK") ;
el se Syst em. out . pr i nt l n( " Gagal ") ; st at us=nasabah. get Tabungan( ) . ambi l Uang( 1600) ; Syst em. out . pr i nt l n( " J uml ah uang yang di ambi l 1600" ) ; i f ( s t at us) Syst em. out . pr i nt l n( "
OK") ;
el se Syst em. out . pr i nt l n( " Gagal ") ; nasabah. get Tabungan( ) . si mpanUang( 2000) ; Syst em. out . pr i nt l n( " J uml ah uang yang di si mpan 2000" ) ; t mp=nasabah. get Tabungan( ) . get Sal do( ) ; Syst em. out . pr i nt l n( " Sal do sekar ang = " +t mp) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas.
Nasabah at as nama : Agus Dar yant o Sal do awal : 5000 J uml ah uang yang di si mpan : 3000 J uml ah uang yang di ambi l : 6000
ok
J uml ah uang yang di si mpan : 3500 J uml ah uang yang di ambi l : 4000
ok
J uml ah uang yang di ambi l : 1600
gagal
J uml ah uang yang di si mpan : 2000 Sal do sekar ang = 3500
F. TUGAS Tugas 1 : Perhatikan program dibawah ini. Apa yang terjadi bila dikompile dan dijalankan? Jelaskan jawaban anda!
publ i c cl ass Pegawai { i nt ni p; St r i ng nama; publ i c Pegawai ( i nt ni p_pegawai ) { t hi s( ni p_pegawai , ”NoName“) ; } publ i c Pegawai ( i nt ni p_pegawai , St r i ng nama_pegawai ) { t hi s. ni p = ni p_pegawai ; t hi s. nama = nama_pegawai ; } }
Tugas 2. Mengembangkan package perbankan dengan tambahan class Bank
Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing program berikut ini sebagai pengetesan.
i mport perbankan. *; publ i c cl ass TesTugas { publ i c stati c voi d mai n( St r i ng ar g [ ] ) { Bank bank = new Bank( ) ; bank. t ambahNasabah( " Agus", " Dar yant o") ; bank. get Nasabah( 0) . set Tabungan( new Tabungan( 5000) ) ; bank. t ambahNasabah( " Tut i " , " I r awan" ) ; bank. get Nasabah( 1) . set Tabungan( new Tabungan( 7000) ) ; bank. t ambahNasabah( " Ani " , " Rat na") ; bank. get Nasabah( 2) . set Tabungan( new Tabungan( 4000) ) ; bank. t ambahNasabah( " Bambang" , " Dar mawan") ; bank. get Nasabah( 3) . set Tabungan( new Tabungan( 6500) ) ; Syst em. out . pr i nt l n( " J uml ah Nasabah = " +
bank. get J uml ahNasabah( ) ) ; f or ( i nt i =0; i
package Cl ass1; / / Cl as s 1. j ava publ i c cl ass Cl ass1 ext ends Base{ publ i c st at i c voi d mai n( St r i ng ar gv[ ] ) { Base b = new Base( ) ; b. amet hod( ) ; }/ / End of mai n }/ / End of Cl ass1
Latihan 2. Aturan overriding a. Berdasarkan kode di bawah ini, akses modifier (public, protected atau private) apa yang diijinkan di tambahkan sebelum myMethod() baris 3? b. Jika baris 3 seperti kode di bawah (apa adanya tanpa perubahan) keywords apa yang diijinkan ditambahkan sebelum myMethod baris 8? 1. 2. 3. 4. 5. 6. 7. 8. 9.
cl ass Humpt yDumpt y { voi d myMet hod( ) {} } cl ass HankyPanky ext ends Humpt yDumpt y { voi d myMet hod( ) {} }
Latihan 3. a. Apa yang terjadi bila kedua kode dibawah ini dikompile dan dijalankan dalam satu direktori? Jelaskan ! b. Bagaimana solusi supaya tidak terjadi error? / / Fi l e P1. j ava package MyPackage; cl ass P1{ voi d aFancyMet hod( ) { Syst em. out . pr i nt l n( " What a f ancy met hod" ) ; }
/ / Fi l e P2. j ava publ i c cl ass P2 ext ends P1{ publ i c st at i c voi d mai n( St r i ng ar gv[ ] ) { P2 p2 = new P2( ) ; p2. aFancyMet hod( ) ;
Latihan 4. Mengimplementasikan UML class diagram dalam program untuk package perbankan
Ubahlah mode akses atribut saldo pada Tabungan menjadi protected. Lalu Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing program berikut ini sebagai pengetesan.
i mport perbankan. *; publ i c cl ass TesLat i han{ publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Penyi mpananUang t abungan = new Penyi mpananUang( 5000, 8. 5/ 100) ; Syst em. out . pr i nt l n( " Uang yang di t abung : 5000" ) ; Syst em. out . pr i nt l n( "Ti ngkat bunga sekar ang : 8. 5%" ) ; Syst em. out . pr i nt l n( " Tot al uang anda sekar ang : " + t abungan. cekUang( ) ) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas.
Uang yang di t abung : 5000 Ti ngkat bunga sekar ang : 8. 5% Tot al uang anda sekar ang : 5425. 0
F. TUGAS Mengimplementasikan UML class diagram dalam program untuk package perbankan
Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing program berikut ini sebagai pengetesan. i mport perbankan. *; publ i c cl ass TesTugas{ publ i c stati c voi d mai n( St r i ng ar gs[ ] ) {
Pengambi l anUang t abungan = new Pengambi l anUang( 5000, 1000) ; Syst em. out . pr i nt l n( " Uang yang di t abung : 5000" ) ; Syst em. out . pr i nt l n( "Uang yang di pr ot eksi : 1000") ; Syst em. out . pr i nt l n( " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ; Syst em. out . pr i nt l n( " Uang yang akan di ambi l : 4500 " + t abungan. ambi l Uang( 4500) ) ; Syst em. out . pr i nt l n( "Sal do sekar ang : " + t abungan. get Sal do( ) ) ; Syst em. out . pr i nt l n( " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ; Syst em. out . pr i nt l n( " Uang yang akan di ambi l : 2500 " + t abungan. ambi l Uang( 2500) ) ; Syst em. out . pr i nt l n( "Sal do sekar ang : " + t abungan. get Sal do( ) ) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas.
Uang yang di t abung : 5000 Uang yang di pr ot eksi : 1000 ----------------Uang yang akan di ambi l : 4500 f al se Sal do sekar ang : 5000 ----------------Uang yang akan di ambi l : 2500 t r ue Sal do sekar ang : 2500
G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.
PRAKTIKUM 11 INHERITANCE 2 A. TUJUAN PEMBELAJARAN
1. Melakukan pengontrolan akses pada pengkodean 2. Menggunakan kata kunci super 3. Menghindari kesalahan pada pewarisan konstruktor
B. DASAR TEORI
Suatu parent class dapat tidak mewariskan sebagian member-nya kepada subclass-nya. Sejauh mana suatu member dapat diwariskan ke class lain, ataupun suatu member dapat diakses dari class lain, sangat berhubungan dengan access control (kontrol pengaksesan). Di dalam java, kontrol pengaksesan dapat digambarkan dalam Tabel 9.1. Tabel 9.1. Akses modifier Modifier
class
package
yang sama
yang sama
subclass
class manapun
private
√
default
√
√
protected
√
√
√
public
√
√
√
√
Kata kunci super dipakai untuk merujuk pada member dari parent class, sebagaimana kata kunci this yang dipakai untuk merujuk pada member dari class itu sendiri. Adapun format penulisannya adalah sebagai berikut: super.data_member
merujuk pada data member pada parent class
super.function_member()
merujuk pada function member pada parent class 89
super()
merujuk pada konstruktor pada parent class
Dalam inheritance, member kelas yang diwariskan hanyalah variabel dan method saja. Sedangkan konstruktorparent class tidak diwariskan ke sub class. Tetapi ketika suatu obyek anak dibuat dalam artian ketika konstruktor anak dijalankan maka konstruktor parent class dijalankan terlebih dahulu dan selanjutnya menyelesaikan konstruktor anak.
C. TUGAS PENDAHULUAN
1. Ada berapa modifier untuk pengontrolan akses? Jelaskan masing-masing! 2. Apakah kegunaan kata kunci super? Jelaskan ! 3. Apakah yang dimaksud dengan konstruktor tidak diwariskan?
D. PERCOBAAN Percobaan 1 : Menggunakan kata kunci super
Berikut ini listing penggunaan kata kunci super.
cl ass Par ent { publ i c i nt x = 5; } cl ass Chi l d ext ends Parent { publ i c i nt x = 10; publ i c voi d I nf o( i nt x) { Syst em. out . pr i nt l n( "Ni l ai x sebagai par amet er = " + x) ; Syst em. out . pr i nt l n( "Dat a member x di cl ass Chi l d = " + t hi s. x) ; Syst em. out . pr i nt l n( " Dat a member x di cl ass Par ent = " + super. x) ; } } publ i c cl ass Ni l ai X { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Chi l d t es = new Chi l d( ) ; t es . I nf o( 20) ; }
}
Ketika program tersebut dijalankan, akan tampak hasil seperti dibawah ini :
Ni l ai x sebagai par amet er = 20 Dat a member x di cl ass Chi l d = 10 Dat a member x di cl ass Par ent = 5
Percobaan 2 : Konstruktor tidak diwariskan
Buatlah class kosong bernama Parent seperti dibawah: publ i c cl ass Par ent { }
Buatlah class Child yang menurunkan class Parent seperti dibawah ini: publ i c cl ass Chi l d ext ends Par ent { i nt x; publ i c Chi l d( ) { x = 5; s uper ( ) ; } }
Lakukan kompilasi pada Child diatas. Apa yang terjadi?. Pasti disana terjadi error. Sekarang ubahlah sedikit class Child diatas seperti dibawah ini: publ i c cl ass Chi l d ext ends Par ent { i nt x; publ i c Chi l d( ) { s uper ( ) ; x = 5; } }
Setelah dikompilasi, anda tidak mendapatkan error sebagaimana yang sebelumnya. Ini yang harus kita perhatikan bahwa untuk pemanggilan konstruktor parent class, kita harus melakukan pemanggilan tersebut di baris pertama pada konstruktor subclass. E. LATIHAN Latihan 1. Konstruktor tidak diwariskan
Buatlah class berikut ini cl ass Base Base{ { Bas e( e( i nt i ) { Syst em. out . pr i nt l n( "ba "base con const r uctor" ) ; } Base( ase( ) { }
publ i c cl ass Sup Sup ext ext ends ends Base Base{ { publ i c stati c vo voi d mai n( St r i ng ar gv[ ] ) { Sup s = new Sup( Sup( ) ; //baris 1
} Sup( Sup( ) { // baris 2
} publ i c vo voi d der i ved( ) { // baris 3
} }
Modifikasilah class Sup (di bagian //baris 1, //baris 2 atau //baris 3) sedemikian hingga konstruktor kelas Base (konstruktor Base(int i)) dipanggil dan menampilkan string “base constructor” ke layar!
Latihan 2. Konstruktor tidak diwariskan pr i vat vat e cl ass Ba Base{ se{ Base( ase( ) { i nt i = 100; Sys t em em. out . pr i nt l n( i ) ; } }
publ i c cl ass Pr i ext ends B Ba ase{ se{ s t a t i c i nt i = 200; publ i c st at i c vo voi d mai n( St r i ng ar gv[ ] ) { Pr i p = new Pr i ( ) ; Sys t em em. out . pr i nt l n( i ) ; }
Kompile dan jalankan program diatas! Apa yang terjadi? Jelaskan !
Latihan 3. Apa yang tampil di layar bila kode dibawah ini dijalankan? cl ass X{ X{ Y b = new Y( ) ; X( ) { Syst em. out . pr i nt ( "X") "X") ; }
cl ass Y{ Y( ) { Syst em. out . pr i nt ( "Y") ; } } publ i c cl ass Z ext ext ends X{ X{ Y y = new Y( ) ; Z( ) { Syst em. out . pr i nt ( "Z") "Z") ; } publ i c stati c vo voi d mai n( St r i ng[ ] ar gs) { new new Z( ) ; }
Latihan 4. Kompile dan jalankan program berikut! Apa yang terjadi? Jelaskan ! publ i c cl ass H Hop ope{ e{ publ i c st at i c vo voi d mai n( St r i ng ar gv[ ] ) { Hope h = new Hope( ) ; } pr ot ect ed Hope( ope( ) { f or ( i nt i =0; i <10; i ++) { Sys t em em. out . pr i nt l n( i ) ; } }
F. TUGAS Mengimplementasikan UML class diagram dalam program.
a. Buatlah kelas-kelas berdasarkan UML class diagram dibawah ini!
b. Selanjutnya buatlah kelas Tes.java yang membuat obyek-obyek serta mengeset nilai variabel seperti pada Tabel 9.2.dan tampilkan data per obyek. Tabel 9.2. Data obyek Obyek
jmlRoda
warna
bahanBakar
kapasitasMesin
muatanMaks
truk1
4
kuning
solar
1500
1000
truk2
6
merah
solar
2000
5000 tarifAwal
tarifPerKm
taksi1
4
oranye
bensin
1500
10000
5000
taksi1
4
biru
bensin
1300
7000
3500
jmlSadel
jmlGir
sepeda1
3
hitam
1
2
sepeda2
2
putih
2
5
G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.
PRAKTIKUM 12 DAN OVERRIDING OVERLOADING D A. TUJUAN PEMBELAJARAN
1. Memahami tentang overloading 2. Memahami tentang overriding 3. Memahami aturan tentang overridden
B. DASAR TEORI
Overloading adalah suatu keadaan dimana beberapa method sekaligus dapat mempunyai nama yang sama, akan tetapi mempunyai fungsionalitas yang berbeda. Contoh penggunaan penggunaan overloading dilihat dibawah ini:
Gambar bar ( i nt t 1) 1 parameter titik, untuk menggambar titik Gambar ( i nt t 1, i nt t 2) 2 parameter titik, untuk menggambar garis Gambar ( i nt t 1, i nt t 2, i nt t 3) 3 parameter titik, untuk menggambar segitiga Gambar ( i nt t 1, i nt t 2, i nt t 3, i nt t 4) 4 parameter titik, untuk menggambar
persegi empat Overloading ini dapat terjadi pada class yang sama atau pada suatu parent class dan subclass-nya. Overloading mempunyai ciri-ciri sebagai berikut: 1. Nama method harus sama 2. Daftar parameter harus berbeda 3. Return type boleh sama, juga boleh berbeda
Overriding adalah suatu keadaan dimana method pada subclass menolak method pada parent class-nya. Overriding mempunyai ciri-ciri sebagai berikut : 1. Nama method harus sama 2.
Daftar parameter harus sama 96
3.
Return type harus sama
Berikut ini contoh terjadinya overriding dimana method Info() pada class Child mengoverride method Info() pada class parent:
cl ass Par ent { publ i c voi d I nf o( ) { Sys t e m. out . pr i nt l n( “ I ni c l as s P ar ent ” ) ; } } cl ass Chi l d ext ends Par ent { publ i c voi d I nf o( ) { Sys t e m. out . pr i nt l n( “ I ni c l as s Chi l d” ) ; } }
Method yang terkena override (overridden method) diharuskan tidak boleh mempunyai modifier yang lebih luas aksesnya dari method yang meng-override (overriding method).
C. TUGAS PENDAHULUAN
1. Memahami tentang overloading 2. Memahami tentang overriding 3. Memahami aturan tentang overridden
D. PERCOBAAN Melakukan overloading pada method
Tulislah listing program berikut ini dan amati yang terjadi pada saat terjadinya overloading pada method.
i mpor t j ava. awt . Poi nt ; publ i c cl ass Segi empat { i nt x1 = 0;
i nt y1 = 0; i nt x2 = 0; i nt y2 = 0; publ i c voi d buat Segi empat ( i nt x1, i nt y1, i nt x2, i nt y2) { t hi s. x1 = x1; t hi s. y1 = y1; t hi s. x2 = x2; t hi s. y2 = y2; } publ i c voi d buat Segi empat ( Poi nt t opLef t , Poi nt bot t omRi ght ) { x1 = t opLef t . x; y1 = t opLef t . y; x2 = bot t omRi ght . x; y2 = bot t omRi ght . y; } publ i c voi d buat Segi empat ( Poi nt t opLef t , i nt w, i nt h) { x1 = t opLef t . x; y1 = t opLef t . y; x2 = ( x1 + w) ; y2 = ( y1 + h) ; } voi d cet akSegi empat ( ) { Syst em. out . pr i nt ( " Segi empat : <" + x1 + " , " + y1) ; Syst em. out . pr i nt l n( " , " + x2 + " , " + y2 + " >" ) ; } publ i c st at i c voi d mai n( St r i ng[ ] ar gument s) { Segi empat r ect = new Segi empat ( ) ; Syst em. out . pr i nt l n( " Buat segi empat dengan koordi nat ( 25, 25) dan ( 50, 50) ") ; r ect . buat Segi empat ( 25, 25, 50, 50) ; r ect . cet akSegi empat ( ) ; Sys t e m. out . pr i nt l n( ) ; Syst em. out . pr i nt l n( " Buat segi empat dengan poi nt ( 10, 10) dan
poi nt ( 20, 20) : " ) ; r ect . buat Segi empat ( new Poi nt ( 10, 10) , new Poi nt ( 20, 20) ) ; r ect . cet akSegi empat ( ) ; Sys t e m. out . pr i nt l n( ) ; Syst em. out . pr i nt ( " Buat segi empat dengan 1 poi nt ( 10, 10) , koodi nat ( 50, 50) ") ; r ect . buat Segi empat ( new Poi nt ( 10, 10) , 50, 50) ; r ect . cet akSegi empat ( ) ; } }
E. LATIHAN Latihan 1. Overriding Apa yang terjadi bila program berikut ini dikompile dan dijalankan? Jelaskan ! cl ass Base{ pr i vat e voi d amet hod( i nt i Base) { Syst em. out . pr i nt l n( "Base. amet hod") ; }
cl ass Over ext ends Base{ publ i c stati c voi d mai n( St r i ng ar gv[ ] ) { Over o = new Over ( ) ; i nt i Base=0; o. amet hod( i Base) ; } publ i c voi d amet hod( i nt i Over ) { Syst em. out . pr i nt l n( " Over . amet hod") ; } }
Latihan 2. Overloading Apa yang terjadi bila program berikut ini dikompile dan dijalankan? Jelaskan !
cl ass MyPar ent { i nt x, y; MyPar ent ( i nt x, i nt y) { t hi s. x = x; t hi s. y = y; } publ i c i nt addMe( i nt x, i nt y) { r et ur n t hi s. x + x + y + t hi s. y; } publ i c i nt addMe( MyPar ent myPar ) { r et ur n addMe( myPar . x, myPar . y) ; } } cl ass MyChi l d ext ends MyPar ent { i nt z; MyChi l d ( i nt x, i nt y, i nt z ) { super ( x, y) ; t hi s. z = z; } publ i c i nt addMe( i nt x, i nt y, i nt z ) { r et ur n t hi s. x + x + t hi s. y + y + t hi s. z + z; } publ i c i nt addMe( MyChi l d myChi ) { r et ur n addMe( myChi . x, myChi . y, myChi . z) ; } publ i c i nt addMe( i nt x, i nt y) { r et ur n t hi s. x + x + t hi s. y + y; }
publ i c cl ass MySomeOne{ publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) MyChi l d myChi = new MyChi l d( 10, 20, 30) ; MyPar ent myPar = new MyPar ent ( 10, 20) ; i nt x = myChi . addMe( 10, 20, 30) ; i nt y = myChi . addMe( myChi ) ; i nt z = myPar . addMe( myPar ) ; Syst em. out . pr i nt l n( x + y + z) ; } }
{
Latihan 3. Overloading Apa yang terjadi bila program berikut ini dikompile dan d ijalankan? Jelaskan !
cl ass MyCl ass{ voi d myMet hod( i nt i ) { Sys t e m. out . pr i nt l n( " i nt ver s i on" ) ; } voi d myMet hod( St r i ng s) { Sys t e m. out . pr i nt l n( " St r i ng ver s i on" ) ; } publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { MyCl ass obj = new MyCl ass( ) ; char ch = ' c' ; obj . myMet hod( ch) ; }
Latihan 4. Mengimplementasikan UML class diagram dalam program
Transformasikan class diagram diatas ke dalam bentuk program? Tulislah listing program berikut ini sebagai pengetesan.
publ i c cl ass TesLat i han{ publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Syst em. out . pr i nt l n( " Memasukkan i dent i t as dosen 1 : Agus" ) ; Dosen dosen1 = new Dosen( " Agus" ) ; Syst em. out . pr i nt l n( " Memasukkan i dent i t as dosen 2 : Budi , NI P.
1458") ;
Dosen dosen2 = new Dosen( " Budi " , 1458) ; Syst em. out . pr i nt l n( " Memasukkan i dent i t as dosen 3 : I wan, NI P.
1215, umur 47" ) ;
Dosen dosen3 = new Dosen( " I wan" , 1215, 47) ; Sys t e m. out . pr i nt l n( ) ; dosen1. I nf o( ) ; Sys t e m. out . pr i nt l n( ) ; dosen2. I nf o( ) ; Sys t e m. out . pr i nt l n( ) ; dosen3. I nf o( ) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas. Masukkan i dent i t as dosen 1 : Agus Masukkan i dent i t as dosen 2 : Budi , NI P. 1458 Masukkan i dent i t as dosen 3 : I wan, NI P. 1215, umur 47 Nama : Agus NI P : Umur : Nama : Budi NI P : 1458 Umur : Nama : I wan NI P : 1215 Umur : 47
F. TUGAS Tugas 1: Mengimplementasikan UML class diagram dalam program
RerataNilai
+ int average(int, int) + double average(double, double) + int average(int, int, int)
Transformasikan class diagram diatas ke dalam bentuk program? Tulislah listing program berikut ini sebagai pengetesan publ i c cl ass TesTugas1{ publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Rer at aNi l ai r n = new Rer at aNi l ai ( ) ; Syst em. out . pr i nt l n( "Rer at a ni l ai 21 dan 13 adal ah : " + r n. aver age( 21, 13) ) ; Syst em. out . pr i nt l n( "Rer at a ni l ai 19. 3 dan 39. 5 adal ah : " + r n. aver age( 19. 3, 39. 5) ) ; Syst em. out . pr i nt l n( "Rer at a ni l ai 123, 567 dan 744 adal ah : " + r n. aver age( 123, 567, 744) ) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas. Rer at a ni l ai 21 dan 13 adal ah : 27 Rerat a ni l ai 19. 3 dan 39. 5 adal ah : 39. 05 Rer at a ni l ai 123, 567 dan 744 adal ah : 938
Tugas 2: Mengimplementasikan UML class diagram dalam program Katak
umur : int nama : String + Katak(int, String) + String caraBergerak()
Kecebong
panjangEkor : double + Kecebong(int, String, double)
Transformasikan
class
diagram
diatas
ke
dalam
bentuk
program?
Buatlah
TesTugas2.java yang membuat obyek dengan karakteristik sebagaimana Tabel 13.1. Selanjutnya tampilkan informasi nama, umur dan cara bergerak obyek-obyek tersebut!
Tabel 13.1 Karakteristik obyek Obyek
umur
nama
O1
5
Froggy
O2
2
Junior Frog
panjangEkor
caraBergerak
melompat 10
berenang
G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.
PRAKTIKUM 13 POLIMORFISME A. TUJUAN PEMBELAJARAN
1. Memahami dan menerapkan konsep polimorfisme dalam pemrograman 2. Memahami proses terjadinya Virtual Method Invocation 3. Memahami dan menerapkan polymorphic arguments dalam pemrograman 4. Memahami penggunaan instanceof dan cara melakukan casting object
B. DASAR TEORI
Polymorphism (polimorfisme) adalah kemampuan untuk mempunyai beberapa bentuk class yang berbeda. Polimorfisme ini terjadi pada saa t suatu obyek bertipe parent class, akan tetapi pemanggilan constructornya melalui subclass. Misalnya deklarasi pernyataan berikut ini:
Empl oyee empl oyee=new Manager ( ) ;
dimana Manager() adalah kontruktor pada class Manager yang merupakan subclass dari class Employee. Virtual Method Invocation (VMI) bisa terjadi jika terjadi polimorfisme dan overriding. Pada saat obyek yang sudah dibuat tersebut memanggil overridden method pada parent class, kompiler Java akan melakukan invocation (pemanggilan) terhadap overriding method pada subclass, dimana yang seharusnya dipanggil adalah overridden method. Berikut contoh terjadinya VMI: cl ass Par ent { i nt x = 5; publ i c voi d I nf o( ) { 105
Sys t e m. out . pr i nt l n( “ I ni c l as s P ar ent ” ) ; } } cl ass Chi l d ext ends Par ent { i nt x = 10; publ i c voi d I nf o( ) { Sys t e m. out . pr i nt l n( “ I ni c l as s Chi l d” ) ; } } publ i c cl ass Tes { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Par ent t es=new Chi l d( ) ; Syst em. out . pr i nt l n( “Ni l ai x = “ + t es. x) ; t es. I nf o( ) ; } }
Hasil dari running program diatas adalah sebagai berikut: Ni l ai x = 5 I ni cl as s Chi l d
Polymorphic arguments adalah tipe suatu parameter yang menerima suatu nilai yang bertipe subclass-nya. Berikut contoh dari polymorphics arguments:
cl ass Pegawai { … } cl ass Manaj er ext ends Pegawai { … } publ i c cl ass Tes { publ i c st at i c voi d Proses( Pegawai peg) { …
} publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Manaj er man = new Manaj er ( ) ; Pr oses( man) ; } }
Pernyataan instanceof sangat berguna untuk mengetahui tipe asal dari suatu polymorphic arguments. Untuk lebih jelasnya, misalnya dari contoh program sebelumnya, kita sedikit membuat modifikasi pada class Tes dan ditambah sebuah class baru Kurir, seperti yang tampak dibawah ini: … cl ass Kur i r ext ends Pegawai { … } publ i c cl ass Tes { publ i c st at i c voi d Proses( Pegawai peg) { i f ( peg i nst anceof Manaj er ) { …l akukan t ugas- t ugas manaj er … } el se i f ( peg i nst anceof Kur i r ) { …l akukan t ugas- t ugas kur i r … } el se { …l akukan t ugas- t ugas l ai nnya… } } publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Manaj er man = new Manaj er ( ) ; Kur i r kur = new Kur i r ( ) ; Pr oses( man) ; Pr oses( kur ) ; } }
Seringkali pemakaian instanceof
diikuti dengan casting object dari tipe
parameter ke tipe asal. Misalkan saja program kita sebelumnya. Pada saat kita sudah melakukan instanceof dari tipe Manajer, kita dapat melakukan casting object ke tipe asalnya, yaitu Manajer. Caranya adalah seperti berikut: … i f ( peg i nst anceof Manaj er ) { Manaj er man = ( Manaj er ) peg; …l akukan t ugas- t ugas manaj er … } …
C. TUGAS PENDAHULUAN
1. Apakah yang dimaksud dengan polimorfisme ? 2. Jelaskan proses terjadinya Virtual Method Invocation ! 3. Apakah yang dimaksud dengan polymorphic arguments ? 4. Apakah kegunaan kata kunci instanceof ?
D. PERCOBAAN Memahami proses terjadinya Virtual Method Invocation
Tulislah listing program berikut ini dan amati yang terjadi pada saat terjadinya Virtual Method Invocation.
cl ass Par ent { i nt x = 5; publ i c voi d I nf o( ) { Sys t e m. out . pr i nt l n( “ I ni c l as s Par ent ” ) ; } } cl ass Chi l d ext ends Parent { i nt x = 10; publ i c voi d I nf o( ) { Sys t e m. out . pr i nt l n( “ I ni c l as s Chi l d” ) ; } }
publ i c cl ass Tes { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Par ent t es=new Chi l d( ) ; Syst em. out . pr i nt l n( “Ni l ai x = “ + t es. x) ; t es. I nf o( ) ; } }
Apakah output program diatas? Jelaskan !
E. LATIHAN Latihan 1. Apa yang terjadi bila kode dibawah ini dikompile dan dijalankan jika sebelumnya Base.java belum dikompile? Jelaskan ! / / Fi l ename; Super cl assX. j ava package packageX; publ i c cl ass Super cl assX{ i nt super cl assVar X; pr ot ect ed voi d supercl assMet hodX( ) { }
/ / Fi l ename Subcl assY. j ava package packageX. packageY; publ i c cl ass Subcl assY ext ends Super cl assX{ Super cl assX obj X = new Subcl assY( ) ; Subcl assY obj Y = new Subcl assY( ) ; voi d subcl assMet hodY( ) { obj Y. super cl assMet hodX( ) ; i nt i ; i = obj Y. super cl assVar X; }
Latihan 2. Apa yang tampil di layar jika kode dibawah ini dijalankan? Jelaskan ! cl ass Base { i nt i = 99; Base( ) { amet hod( ) ; } publ i c voi d amet hod( ) { Syst em. out . pr i nt l n( "Base. amet hod( ) " ) ; } } publ i c cl ass Der i ved ext ends Base{ i nt i = - 1; publ i c stati c voi d mai n( St r i ng ar gv[ ] ) { Base b = new Der i ved( ) ; Sys t e m. out . pr i nt l n( b. i ) ; b. amet hod( ) ; } publ i c voi d amet hod( ) { Syst em. out . pr i nt l n( "Der i ved. amet hod( ) ") ; } }
Latihan 3. Apa yang tampil di layar jika kode dibawah ini dijalankan? Jelaskan ! cl ass Par ent { pr i vat e voi d met hod1( ) { Syst em. out . pr i nt l n( "Par ent ' s met hod1( ) ") ; } publ i c voi d met hod2( ) { Syst em. out . pr i nt l n( "Par ent ' s met hod2( ) ") ; met hod1( ) ; } } cl ass Chi l d ext ends Parent { publ i c voi d met hod1( ) Syst em. out . pr i nt l n( "Chi l d' s met hod1( ) ") ; } publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Par ent p = new Chi l d( ) ; p. met hod2( ) ; } }
Latihan 4. Mengimplementasikan UML class diagram dalam program
Suatu program terdiri dari class Pegawai sebagai parent class, class Manajer dan class Kurir sebagai subclass. Buatlah suatu program yang menerapkan konsep polymorphic argument sebagaimana yang telah disinggung dalam pembahasan sebelumnya.
F. TUGAS Mengimplementasikan UML class Diagram dalam program
Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing program berikut ini sebagai pengetesan.
publ i c cl ass Bayaran{ publ i c i nt hi t ungbayar an( Pegawai peg) { i nt uang = peg. i nf oGaj i ( ) ; i f ( peg i nst anceof Manaj er ) uang += ( ( Manaj er) peg) . i nf oTunj angan( ) ; el se i f ( peg i nst anceof Pr ogr ammer )
uang += ( ( Pr ogr ammer ) peg) . i nf oBonus( ) ; r et ur n uang; } publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { Manaj er man = new Manaj er ( " Agus" , 800, 50) ; Pr ogr ammer pr og = new Pr ogr ammer ( " Budi " , 600, 30) ; Bayar an hr = new Bayar an( ) ; Syst em. out . pr i nt l n( " Bayar an unt uk Manaj er : " + hr . hi t ungbayaran( man) ) ; Syst em. out . pr i nt l n( " Bayar an unt uk Pr ogr ammer : " + hr . hi t ungbayar an( pr og) ) ; } }
Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak seperti di bawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali program anda dan lakukan hal yang sama seperti diatas.
Bayar an unt uk Manaj er : 850 Bayar an unt uk Pr ogr ammer : 630
G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.
PRAKTIKUM 14 NESTED CLASS A.
TUJUAN PEMBELAJARAN
1. Mampu mengimplementasikan konsep inner class B.
DASAR TEORI
Java membolehkan menyisipkan suatu kelas ke dalam kelas lainnya. Kelas sisipan ini disebut kelas Inner. Kelas Inner berguna untuk mendukung suatu proses yang akan dijalankan oleh kelas luarnya. Beberapa ketentuan kelas Inner : •
Kelas Luar yang mengandung kelas Inner, bila dikompilasi akan menghasilkan dua file *.class, yaitu Luar.class dan Luar$Inner.class
•
Kelas Inner boleh tidak diberi nama, yang disebut Anonymous Inner.
•
Kelas Inner dapat diberi modifier akses public, atau protected, atau default, ataupun private.
•
Untuk mengakses referensi this dari kelas luar digunakan bentuk NamaKelasLuar.this.
•
Kelas Luar ikut bertanggung-jawab dalam instansiasi kelas Inner (yang non static) . Kalau objek kelas Luar adalah a, dan objek kelas Inner adalah b, maka sintaks yang benar adalah : Luar a = new Luar(); Luar.Inner b = a.new Inner(); •
Jika kelas Inner bersifat static, maka objek milik kelas Inner dapat dibuat sendiri tanpa melalui kelas Luarnya, (Artinya kelas Inner tidak dapat mengakses attribute ataupun method non static milik kelas Luarnya).
Inner Class adalah kelas yang disisipkan di dalam kelas yang lain. Fungsi kelas sisipan ini adalah mendukung suatu proses yang akan dijalankan oleh kelas utamanya. Inner Class bersifat
113
tersarang terhadap kelas – kelas utamanya, seperti halnya blok penyeleksian
(if, for) yang
tersarang pada blok penyeleksian lainnya atau method yang tersarang pada method lainnya. Analogi Inner Class Inner Class dapat dianalogikan sebagi hubungan antara manusia dan paru – paru. Setiap manusia pasti bernafas dengan menggunakan paru – paru. Dalam hal ini berarti kinerja dari paru – paru turut mendukung/menetukan kinerja dari manusia. Dalam bahasa pemrograman berorientasi objek manusia dapat dikatakan sebagai outer class dan paru – paru sebagai inner class-nya. C.
TUGAS PENDAHULUAN
Jelaskan kembali pengertian inner class menurut bahasa anda! D.
PERCOBAAN
Percobaan 1 1 :: Non-Static IInner c class y yang d dideklarasikan d di d dalam c class
114
Percobaan 2 2 :: IInner c class y yang d dideklarasikan d di d dalam m method.
Percobaan 3 3 :: S Static IInner c class. P Perbaiki e error y yang tter jadi.
115
Percobaan 4 4 :: N Non S Static IInner c class y yang d dide klarasikan d dalam c class
116
Percobaan 5 5 :: L Local IInner c class
117
Percobaan 6 6 :: A Anony mous c class
118
Percobaan 7 7 :: IInner c class y yang d dide klarasikan IInner c class y yang d dideklarasikan d di d di d dalam dalam m method.
119
Percobaan 8 8 :: A Anony mous IInner C Class.
E.
LATIHAN
Latihan 1 1 :: P Program b berikut ttida k d dapat d dikompile. P Perbaiaki a agar d dapat d dikompile publ i c cl ass Pr obl em { St r i ng s ; st at i c cl ass I nner { voi d t est Met hod( ) { s = "Set f r om I nner "; } } }
Latihan 2 : Gunakan Java API documentation untuk Box class (di jjavax.swing package) untuk m men jawab p pertanyaan b berikut ::
1. What static nested class does Box define? 2. What inner class does Box define? 3. What is the superclass of Box's inner class? 4. Which of Box's nested classes can you use from any class? 120
5. How do you create an instance of Box's Fi l l er class?
F.
TUGAS
Jelaskan kelebihan dan kelemahan penggunaan inner kelas!
G.
LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan tugas yang telah dibuat.
121
PRAKTIKUM 15 TYPE WRAPPER A. TUJUAN PEMBELAJARAN
1. Memahami mengenai type Wrapper dan berbagai macam type Wrapper. 2. Memahami cara perpindahan dari tipe data primitif menjadi tipe Wrapper dan sebaliknya. 3. Memahami proses Autoboxing dan Auto-unboxing.
B. DASAR TEORI B.1 Pengenalan dan Macam Type Wrapper
Java mengenal 8 buah tipe data primitif dan tidak dapat dibuat objek. Karena hal ini mengalami kesulitan dalam penggunaannya karena beberapa class di library Java hanya dapat berinteraksi dengan objek. Untuk mengatasi masalah ini, Java menyediakan tipe data class untuk tipe data primitif. Class ini membungkus tipe data primitif agar dapat digunakan sebagai objek. Class ini disebut dengan type Wrapper. Tipe Data Primitif
Class Wrapper
Argument Constructor
Boolean
Boolean
boolean atau String
Byte
Byte
byte atau String
Char
Character
char
Double
Double
double atau String
Float
Float
float, double atau String
Int
Integer
int atau String
Long
Long
long atau String
Short
Short
short atau String
B.2 Number (Class Byte, Short, Integer, Long, Float dan Double)
Number adalah class abstract yang merupakan superclass dari semua class type wrapper yang membungkus tipe data numerik seperti byte, short ,int, long, float dan double. Konstruktor dari class wrapper ini mengizinkan untuk membuat nilai numerik dari objek 122
String. Namun jika objek String yang dilewatkan sebagai argument konstruktor bukan nilai
numerik
yang
valid,
maka
melemparkan
exception
yang
bertipe
Number For mat Except i on. Constructor dari Class Byte, Short, Integer, Long, Float d an Double adalah : Byt e( byt e val ue) Byt e( St r i ng s) t hr ows Number For mat Except i on
Contoh penggunaan Byt e num1 = new Byt e( 100) ; Byt e num2 = new Byt e( “100”) ; Shor t ( shor t val ue) Shor t ( St r i ng s) t hr ows Number For mat Except i on
Contoh penggunaan Shor t num1 = new Shor t ( 100) ; Shor t num2 = new Shor t ( “100”) ; I nt eger ( i nt val ue) I nt eger ( St r i ng s) t hr ows Number For mat Except i on
Contoh penggunaan I nt eger num1 = new I nt eger ( 100) ; I nt eger num2 = new I nt eger ( “100”) ; Long( l ong val ue) Long( St r i ng s) t hr ows Number For mat Except i on
Contoh penggunaan Long num1 = new Long( 100) ; Long num2 = new Long( “100”) ; Fl oat( doubl e val ue) Fl oat ( f l oat val ue) Fl oat ( St r i ng s) t hr ows Number For mat Except i on
Contoh penggunaan Fl oat num1 = new Fl oat ( 100. 4) ; Fl oat num2 = new Fl oat ( 100. 4f ) ; Fl oat num3 = new Fl oat ( “100. 4”) ;
Doubl e( doubl e val ue) Doubl e( St r i ng s) t hr ows Number For mat Except i on
Contoh penggunaan Doubl e num1 = new Doubl e( 100) ; Doubl e num2 = new Doubl e( “100”) ;
Setiap objek wrapper mempunyai konstanta MAX_VALUE dan MIN_VALUE MAX_VALUE
: nilai numerik terbesar yang dapat ditampung oleh objek dengan
tipe data class wrapper ini. 123
MIN_VALUE
: nilai numerik terkecil yang dapat ditampung oleh objek dengan
tipe data class wrapper ini. Byt e byt eObj = new Byt e( Byt e. MAX_VALUE) ; Shor t shor t Obj = new Shor t ( Shor t . MAX_VALUE) ; I nt eger i nt Obj = new I nt eger ( I nt eger . MAX_VALUE) ; Long l ongObj = new Long( Long. MAX_VALUE) ; Fl oat f l oat Obj = new Fl oat ( Fl oat . MAX_VALUE) ; Doubl e doubl eObj = new Doubl e( Doubl e. MAX_ VALUE) ;
Nilai dari maksimum dari objek wrapper adalah sebagai berikut: Byt e Shor t I nt eger Long Fl oat Doubl e
: 127 : 32767 : 2147483647 : 9223372036854775807 : 3. 4028235E38 : 1. 7976931348623157E308
B.3 Method-method pada class wrapper. •
Method valueOf()
Method val ueOf ( ) : mengubah suatu nilai menjadi object dari class tersebut dan melempar NumberFormatException(NFE) jika argument tidak sesuai. Class Long, Integer, Short dan Byte mempunyai tiga method valueOf()
Method 1 menerima argument berupa nilai. Method 2 menerima argument nilai dalam bentuk String. Method 3 argument kedua berupa int radix yang menyatakan base dari argument pertama (binary, octal, atau hexadecimal) Class Boolean, Float dan Double mempunyai dua method valueOf()
Contoh penggunaan method valueOf() 124
I nt eger I nt eger I nt eger Bool ean Bool ean Long n1 Long n1
•
i 1 = I nt eger . val ueOf ( 42) ; i 2 = I nt eger . val ueOf ( “42”) ; i 3 = I nt eger . val ueOf ( “42”, 2) ; b1 = Bool ean . val ueOf ( t r ue) ; b2 = Bool ean . val ueOf ( “t r ue”) ; = Long. val ueOf ( 42000000L) ; = Long. val ueOf ( “42000000L”) ;
Method xxxValue()
Method xxxVal ue( ) digunakan untuk mengubah object dari class wrapper (object ini mempunyai nilai) menjadi nilai numerik Contoh penggunaan : I nt eger i 2 = new I nt eger( 42) ; byte b = i 2. byteVal ue( ) ; shor t s = i 2. shor t Val ue( ) ; doubl e d = i 2. doubl eVal ue( ) ; Fl oat f 2 = new Fl oat ( 3. 14f ) ; shor t s = f 2. shor t Val ue( ) ;
•
Method parseXxx()
Fungsi par seXxx( ) dan val ueOf ( ) , argument berupa String dan melempar
Number For mat Except i on(NFE) jika argument tidak sesuai. Method par seXxx( ) mengembalikan nilai primitif, sedangkan method val ueOf ( ) mengembalikan object dari class wrapper
B.4 Character.
Class Character merupakan class wrapper untuk tipe data primitif char. Konstruktor dari class Character adalah :
Char act er ( char val ue) Method valueOf() digunakan untuk mendapat nilai char dengan tipe wrapper. Character hanya mempunyai satu method valueOf()
Method charValue() untuk mendapatkan tipe data primitif char. char charValue()
125
B.5 Autoboxing / Auto-Unboxing
Pada Java 5, dikenal istilah Autoboxing dan Auto-unboxing . Autoboxing adalah konversi secara otomatis oleh kompiler Java dari tipe data primitif ke tipe data sesuai dengan tipe wrappernya (misalnya, int dan Integer, double dan Double). Sedangkan mengubah object dari class wrapper menjadi nilai primitifnya disebut Autounboxing. Dengan Autoboxing
Tanpa Autoboxing
int i;
int i;
Integer j ;
Integer j ;
i=1;
i=1;
j=2;
j=new Integer(2);
i=j;
i=j.intValue();
j=i;
j=new Integer(i);
Pada kode tanpa Autoboxing, harus secara eksplisit membuat objek Integer j dengan nilai primitif 2, sedangkan dengan autoboxing, maka proses perubahan dari tipe data primitif int secara otomatis akan di konversi menjadi objek Integer, sehingga pada java 1.5 keatas diperbolehkan dari I nt eger j ; j = new I nt eger ( 2)
menjadi I nt eger j ; j =2;
Contoh dengan Auto-unboxing: I nt eger y = new I nt eger ( 567) ; i nt x = y. i nt Val ue( ) ; x++ ; y = new I nt eger ( x) ;
Contoh dengan Autoboxing: I nt eger y = new I nt eger ( 567) ; y++;
Proses increment biasanya digunakan untuk tipe data primitif. Tapi untuk java 1.5 (dengan Autoboxing), proses increment dapat dilakukan pada objek wrapper. Pada Auto126
unboxing pada waktu hendak melakukan increment, nilai primitifnya harus terlebih dahulu diambil baru kemudian proses increment dapat dilakukan. Hasil increment tersebut kemudian dibuat menjadi objek Integer yang baru.
C. TUGAS PENDAHULUAN
Buatlah review mengenai tipe Wrapper dan macam-macamnya, dan penggunaan konstruktor dari masing-masing tipe Wrapper.
D. PERCOBAAN Percobaan 1 : Memahami cara membuat objek Integer. Jika terjadi error atau exception, jelaskan penyebabnya ! public class TestInteger {
publ i c st at i I nt eger I nt eger I nt eger I nt eger }
c voi d mai n( St r i ng[ ] ar gs) { i 1 = new I nt eger ( 42) ; i 2 = new I nt eger ( 2147483647) ; i 3 = new I nt eger ( "42") ; i 4 = new I nt eger ( "42. u") ;
}
public class TestInteger {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { I nt eger i 1 = new I nt eger ( 42) ; Integer i2 = new Integer(2147483650);
I nt eger i 3 = new I nt eger ( "42") ; I nt eger i 4 = new I nt eger ( "42. u") ; } }
Percobaan 2 : Mengetahui nilai maksimum dan minimum untuk tipe Wrapper. publ i c cl ass MaxMi n { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { System. out . pr i nt l n( "Ni l ai Maxi mum") ; Byt e byt eObj = new Byt e( Byt e. MAX_ VALUE) ; Syst em. out . pr i nt l n( byt eObj ) ; Shor t shor t Obj = new Shor t ( Shor t . MAX_ VALUE) ; Syst em. out . pr i nt l n( shor t Obj ) ; I nt eger i nt Obj = new I nt eger( I nt eger . MAX_VALUE) ; Syst em. out . pr i nt l n( i nt Obj ) ; Long l ongObj = new Long( Long. MAX_VALUE) ; Syst em. out . pr i nt l n( l ongObj ) ; Fl oat f l oat Obj = new Fl oat ( Fl oat . MAX_VALUE) ; Sys t e m. out . pr i nt l n( f l oat Obj ) ; Doubl e doubl eObj = new Doubl e( Doubl e. MAX_VALUE) ; 127
Syst em. out . pr i nt l n( doubl eObj ) ; Syst em. out . pr i nt l n( "Ni l ai Mi ni mum") ; Byt e byt eObj 2 = new Byt e( Byt e. MI N_VALUE) ; Syst em. out . pr i nt l n( byt eObj 2) ; Shor t shor t Obj 2 = new Shor t ( Shor t . MI N_VALUE) ; Syst em. out . pr i nt l n( shor t Obj 2) ; I nt eger i nt Obj 2 = new I nt eger ( I nt eger . MI N_VALUE) ; Syst em. out . pr i nt l n( i nt Obj 2) ; Long l ongObj 2 = new Long( Long. MI N_VALUE) ; Syst em. out . pr i nt l n( l ongObj 2) ; Fl oat f l oat Obj 2 = new Fl oat ( Fl oat . MI N_VALUE) ; Syst em. out . pr i nt l n( f l oat Obj 2) ; Doubl e doubl eObj 2 = new Doubl e( Doubl e. MI N_ VALUE) ; Syst em. out . pr i nt l n( doubl eObj 2) ; } }
Percobaan
3
:
Menampilkan
bilangan
integer
menjadi biner,
octal
dan
heksadesimal. public class TestInteger2 {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { I nt eger i 1 = new I nt eger ( 345) ; Sys t e m. out . pr i nt l n( " ni l ai i nt = " + i 1) ; Syst em. out . pr i nt l n( "bi l bi nar y = " + I nt eger . t oBi nar ySt r i ng( i 1) ) ; Syst em. out . pr i nt l n( "bi l hexa = " + I nt eger . t oHexSt r i ng( i 1) ) ; Syst em. out . pr i nt l n( "bi l okt al = " + I nt eger . t oOctal St r i ng( i 1) ) ; I nt eger i 2 = new Sys t e m. out . pr i nt l Syst em. out . pr i nt l Syst em. out . pr i nt l Syst em. out . pr i nt l
I nt eger ( 675) ; n( " ni l ai i nt = " + i 2) ; n( "bi l bi nar y = "+I nt eger . t oSt r i ng( i 2, 2) ) ; n( "bi l hexa = " +I nt eger . t oSt r i ng( i 2, 8) ) ; n( "bi l okt al = " + I nt eger . t oSt r i ng( i 2, 16) ) ;
} }
Percobaan 4 : Memahami cara konversi antar tipe Wrapper, misal dari objek Integer diassignkan ke objek Long dan sebaliknya. publ i c cl ass Konver si { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { I nt eger i = 7 ; Long l = 345L ; i = l . i nt Val ue( ) ; Syst em. out . pr i nt l n( "Ni l ai pada I nt eger = " + i ) ; l = i . l ongVal ue( ) ; Syst em. out . pr i nt l n( "Ni l ai pada Long = " + l ) ; } } 128
Percobaan 5 : Jelaskan kegunaan dari method-method di bawah ini! public class WrapperMethod {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Sys t e m. out . pr i nt l n( I nt eger . r ot at eL ef t ( 3, 1) ) ; Sys t e m. out . pr i nt l n( I nt eger . r ot at eL ef t ( 5, 2) ) ; Syst em. out . pr i nt l n( I nt eger . r ot at eRi ght ( 20, 1) ) ; Syst em. out . pr i nt l n( I nt eger . r ot at eRi ght ( 32, 1) ) ; Syst em. out . pr i nt l n( I nt eger . r ever se( 20) ) ; Syst em. out . pr i nt l n( I nt eger . hi ghest OneBi t ( 20) ) ; Syst em. out . pr i nt l n( I nt eger . l owest OneBi t ( 20) ) ; Syst em. out . pr i nt l n( I nt eger . bi t Count ( 20) ) ; System. out . pr i nt l n( I nt eger . number Of Leadi ngZer os( 32) ) ; Syst em. out . pr i nt l n( I nt eger . number Of Tr ai l i ngZer os( 32) ) ; } }
Percobaan 6 : Memahami mengenai Autoboxing dan Auto-unboxing. public class TestUnboxing {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt i ; I nt eger j ; i =1; j =new I nt eger ( 2) ; i =j . i nt Val ue( ) ; j =new I nt eger ( i ) ; } }
public class TestAutoboxing {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt i ; I nt eger j ; i =1; j =2; i =j ; j =i ; } }
Percobaan 7 : Memahami mengenai Autoboxing dan Auto-unboxing(2) public class TestUnboxing2 {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { I nt eger y = new I nt eger ( 567) ; i nt x = y. i nt Val ue( ) ; System. out . pr i nt l n( "x = " + x); x++ ; y = new I nt eger ( x) ; System. out . pr i nt l n( "y = " + y); } 129
}
public class TestAutoboxing2 {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { I nt eger y = new I nt eger ( 567) ; Syst em. out . pr i nt l n( y) ; y++; Syst em. out . pr i nt l n( y) ; } }
E. LATIHAN
1. Terdapat program seperti di bawah ini !
cl ass Hexy { publ i c stat i c voi d mai n( St r i ng[ ] ar gs) { I nt eger i = 42; St r i ng s = ( i <40) ?"l i f e": ( i >50) ?"uni ver se": "ever yt hi ng"; Syst em. out . pr i nt l n( s) ; } } What is the result? A. null B. life C. universe D. everything E. Compilation fails. F. An exception is thrown at runtime. 2. Given:
1. cl ass Exampl e { 2. publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { 3. Shor t s = 15; 4. Bool ean b; 5. / / i nser t code her e 6. } 7. } Which, inserted independently at line 5, will compile? (Choose all that apply.)
A. B. C. D.
b b b b
= ( Number i nst anceof s) ; = ( s i nst anceof Shor t ) ; = s. i nst anceof ( Shor t ) ; = ( s i nst anceof Number ) ; 130
E. b = s. i nst anceof ( Obj ect ) ; F. b = ( s i nst anceof St r i ng) ; 3.
Given:
cl ass For k { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i f ( ar gs. l engt h == 1 | ar gs[ 1] . equal s( "t est ") ) { Syst em. out . pr i nt l n ( "t est case") ; } el se { Syst em. out . pr i nt l n( "product i on " + ar gs[ 0] ) ; } } } And the command-line invocation:
j ava For k l i ve2 What is the result? A. test case B. production C. test case live2 D. Compilation fails. E. An exception is thrown at runtime.
4. Gi ven: cl ass Foozi t { publ i c stat i c voi d mai n( St r i ng[ ] ar gs) { I nt eger x = 0; I nt eger y = 0; f or ( Shor t z = 0; z < 5; z++) i f ( ( ++x > 2) | | ( ++y > 2) ) X++ ; Syst em. out . pr i nt l n ( x + " " + y) ; } } What is the result?
A. B. C. D. E. F. G. H.
5 1 5 2 5 3 8 1 8 2 8 3 10 2 10 3
5. Given: 131
cl ass Ti t ani c { publ i c stat i c voi d mai n( St r i ng[ ] ar gs) { Bool ean bl = t r ue; bool ean b2 = f al se; bool ean b3 = t r ue; i f ( ( bl & b2) | ( b2 & b3) & b3) Syst em. out . pr i nt ( "al pha ") ; if( ( bl = false) | ( b1 & b3) | ( bl | b2) ) Syst em. out . pr i nt ( "bet a "}; } } What is the result? A. beta B. alpha C. alpha beta D. Compilation fails. E. No output is produced. F. An exception is thrown at runtime 6. cl ass Fel i ne { publ i c stat i c voi d mai n( St r i ng[ ] ar gs) { Long x = 42L; Long y = 44L; Syst em. out . pr i nt ( " " + 7 + 2 + " " ) ; Syst em. out . pr i nt ( f oo ( ) + x + 5 + " " ) ; Syst em. out . pr i nt l n( x + y + f oo( ) ) ; } st at i c St r i ng f oo( ) { r et ur n "f oo"; } } What A. B. C. D. E. F. G. H. I.
i s t he r esul t ? 9 f oo47 86f oo 9 f oo47 4244f oo 9 f oo425 86f oo 9 f oo425 4244f oo 72 f oo47 86f oo 72 f oo47 4244f oo 72 f oo425 86f oo 72 f oo425 4244f oo Compi l at i on f ai l s.
7. Buatlah sebuah aplikasi untuk mengubah sebuah bilangan desimal menjadi bilangan biner, octal dan heksa berdasarkan inputan user. Input
Masukkan bi l angan : 345 Output
bi ner : 101011001 okt al : 531 heksa : 159 132
8. Buatlah sebuah aplikasi menerima inputan user berupa bilangan dan basis dari bilangan tersebut, selanjutnya mengubah ke bilangan dengan basis yang lain (basis 2,8,10,16) Input
Masukkan bi l angan : 531 Basi s : 8 Output
bi ner : 101011001 desi mal : 345 heksa : 159
9. a. Bagaimana program ini jika dijalankan? Jelaskan! b. Bagaimana cara mengubah objek Long menjadi objek Integer dan sebaliknya ? publ i c cl ass Coba { publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { Fl oat f = 2. 3f ; Doubl e d = 34. 7 ; i =j ; } }
10. Ubahlah object Double menjadi tipe data primitif byte, short, int, long, float. F. TUGAS
1. Buatlah suatu aplikasi untuk mengubah : int Tipe wrapper lain
String
Integer
Tipe primitif
2. Buatlah sebuah program untuk menerima inputan beberapa bilangan(Subclass Number) dari command line dan menambahkannya.
j ava Adder 1 3 2 10 Out put : 16
G. LAPORAN RESMI
Kerjakan hasil percobaan(D) dan latihan(E) di atas dan tambahkan analisa.
133
PRAKTIKUM 16 TYPE ENUM
A. TUJUAN PEMBELAJARAN
1. Memahami mengenai konsep Enum 2. Memahami bentuk-bentuk penggunaan Enum 3. Memahami fungsi-fungsi yang terdapat di Enum
B. DASAR TEORI
Sebelum J2SE 5.0,
solusi untuk menangani masalah sekumpulan nilai konstanta,
dicontohkan seperti di bawah ini: (jenis credit card yang bisa diterima oleh aplikasi) •
public static final int VISA = 1;
•
public static final int MASTER_CARD = 2;
•
public static final int AMERICAN_EXPRESS = 3;
Permasalahan yang muncul adalah tidak ada yang mengikat ketiga nilai menjadi semacam set dan kita bisa memberikan nilai yang salah pada variabel-variabel tersebut. Kondisi seperti ini disebut not type safe (tipe yang tidak aman). Kondisi ini dapat diperbaiki dengan membuat tipe yang relatif aman (tipe safe) dengan mendefinisikan suatu class, yaitu class AllowedCreditCard. Class tersebut mendefinisikan : – konstanta-konstanta di dalam kelas – variabel untuk menyatakan state object dari class tersebut. – Constructor private untuk mengeset state. public class AllowedCreditCard {
pr ot ected f i nal St r i ng car d ; publ i c f i nal st at i c Al l owedCr edi t Car d VI SA = new Al l owedCr edi t Car d( "VI SA") ; publ i c f i nal st at i c Al l owedCr edi t Car d MASTER_CARD = new Al l owedCr edi t Car d( " MASTER CARD" ) ; publ i c f i nal st at i c Al l owedCr edi t Car d AMERI CAN_EXPRESS = new Al l owedCr edi t Car d( " AMERI CAN_EXPRESS") ; pr i vat e Al l owedCr edi t Car d( St r i ng st r ) { car d = st r ;
134
} publ i c St r i ng get Name( ) { r et ur n car d ; } }
Pada pendekatan ini, terdapat 3 state dari class AllowedCreditCard yang dinyatakan oleh tiga object yang dicreate dengan memberikan nilai yang berbeda pada variabel card. Karena konstruktor private, sehingga tidak bisa create object diluar class. Design seperti ini masih dianggap type safe. Tapi pada J2SE 5.0 terdapat solusi yang bagus dengan mengenalkan tipe baru yaitu enum. Tipe data enum dikenalkan di J2SE 5.0 berguna untuk variabel yang berisi sekumpulan nilai. Cara mendefinisikan variabel enum: – Mendefinisikan tipe enum dengan sekumpulan nilai. – Mendefinisikan variabel yang menyimpan satu dari nilai-nilai tersebut.
Contoh 1 : Class AllowedCreditCard dirubah menjadi bentuk enum. enum Al l owedCr edi t Car d {VI SA, MASTER_CARD, AMERI CAN_EXPRESS}; Al l owedCr edi t Car d vi sa = Al l owedCr edi t Car d. VI SA;
Contoh 2 : Mendeklarasikan enum di luar class enum Cof f eeSi ze {BI G, HUGE, OVERWHELMI NG} publ i c cl ass Cof f ee { Cof f eeSi ze si ze ; } cl ass Cof f eeTest 1{ publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Cof f ee dr i nk = new Cof f ee( ) ; dr i nk. si ze = Cof f eeSi ze. BI G ; } }
Contoh 3 : Mendeklarasikan enum di dalam class publ i c cl ass Cof f ee2 { enum Cof f eeSi ze {BI G, HUGE, OVERWHELMI NG} Cof f eeSi ze si ze ; } cl ass Cof f eeTest 2{ publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Cof f ee2 dr i nk = new Cof f ee2( ) ;
135
dr i nk. si ze = Cof f ee2. Cof f eeSi ze. BI G ; } }
Contoh 4 : Tidak bisa mendeklarasikan enum di dalam method / / Ti dak l egal publ i c cl ass Cof f eeTest 3 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { enum Cof f eeSi ze {BI G, HUGE, OVERWHELMI NG} Cof f ee dr i nk = new Cof f ee( ) ; dr i nk. si ze = Cof f eeSi ze. BI G ; } }
Menentukan sendiri nilai konstanta dari enum.
•
Cara termudah dengan memberikan nilai enum (misal : BIG, HUGE, dan OVERWHELMING). Nilai enum sebagai object yang masing-masing mempunyai nilai instance variabel sendiri-sendiri.
• Nilai ini diberikan pada saat enum diinisialisasi, dengan memberikan nilai pada konstruktor enum. enum Cof f eeSi ze2{ BI G( 8) , HUGE( 10) , OVERWHELMI NG( 16) ; Cof f eeSi ze2( i nt ounces) { t hi s. ounces = ounces ; } pr i vat e i nt ounces ; publ i c i nt get Ounces( ) { r et ur n ounces; } }
Konstruktor enum dijalankan secara otomatis. Contoh BIG(8) menjalankan konstruktor CoffeSize yang menerima parameter berupa int, dengan nilai 8. Konstruktor pada enum bisa lebih dari satu.
Fungsi pada Enum
• public static Apple[] values() Mengembalikan array yang berisi konstanta dari tipe enum, urutan sesuai pada saat pendeklarasian enum. • public static Apple valueOf (String name) 136
Mengembalikan konstanta enum sesuai dengan inputan dari parameter String • public final int ordinal() Mengembalikan ordinal dari enum konstanta (dimulai dari 0) • public final int compareTo(E o) Membandingkan object enum dengan object enum lainnya berdasarkan urutan. Mengembalikan nilai negatif (object enum 1 < object enum 2), 0 (object enum 1 = object enum 2) dan positif (object enum 1 > object enum 2). enum Appl e { A( 10) , B( 9) , C, D( 15) , E( 8) ; pr i vat e i nt pr i ce; / / pr i ce of each appl e / / Const r uctor Appl e( i nt p) { pr i ce = p; } / / Over l oaded const r uct or Appl e( ) { pr i ce = - 1; } i nt get Pr i ce( ) { r et ur n pr i ce; } }
C. TUGAS PENDAHULUAN
Buatlah review mengenai •
Definisi enum
•
Merubah bentuk konstanta(terdapat lebih dari satu konstanta) menjadi bentuk enum
•
Letak yang diperbolehkan dan tidak diperbolehkan untuk pendeklarasian enum
D. PERCOBAAN Percobaan 1 : Class AllowedCreditCard dirubah menjadi bentuk enum. public class AllowedCreditCard {
pr ot ected f i nal St r i ng car d ; publ i c f i nal st at i c Al l owedCr edi t Car d VI SA = new Al l owedCr edi t Car d( "VI SA") ; publ i c f i nal st at i c Al l owedCr edi t Car d MASTER_CARD = new Al l owedCr edi t Car d( " MASTER CARD" ) ; publ i c f i nal st at i c Al l owedCr edi t Car d AMERI CAN_EXPRESS = new Al l owedCr edi t Car d( " AMERI CAN_EXPRESS") ; pr i vat e Al l owedCr edi t Car d( St r i ng st r ) { car d = st r ; } publ i c St r i ng get Name( ) { r et ur n car d ;
137
} } enum enum Al l owedCr edCr edi t Car d {VI {VI SA, SA, MASTER STER_ CARD, AMERI ERI CAN_ EXPR EXPRES ESS}; S}; Al l owedCr edi t Car d vi vi sa = Al l owedCr edi t Car d. VI SA;
Percobaan 2 : Mendeklarasikan enum di luar class enum Cof f eeSi z e {BI {BI G, HUGE, OVERW ERWHELMI NG} publ i c cl cl ass Co Cof f ee { Cof f eeSi ze si ze ; } cl ass Cof Cof f eeTest Test 1{ publ i c st at i c vo voi d mai n( St r i ng[ ] ar gs) { Cof f ee dr i nk = new Cof f ee( ee( ) ; dr i nk. si ze = Cof f eeSi ze. ze. BI G ; } }
Percobaan 3 : Mendeklarasikan enum di dalam class publ i c cl ass Co Cof f ee2 { enum Cof f eeSi z e {BI {BI G, HUGE, OVERW ERWHELMI NG} Cof f eeSi ze si ze ; } cl ass Cof Cof f eeTest Test 2{ publ i c st at i c vo voi d mai n( St r i ng[ ] ar gs) { Cof f ee2 ee2 dr i nk = new Cof f ee2 ee2( ) ; dr i nk. si ze = Cof f ee2. Cof f eeSi ze. ze. BI G ; } }
Percobaan 4 : Tidak bisa mendeklarasikan enum di dalam method / / Ti dak l egal publ i c cl ass Co Cof f eeTest 3 { publ i c st at i c vo voi d mai n( St r i ng[ ] ar gs) { enum Cof f eeSi z e {BI {BI G, HUGE, OVERW ERWHELMI NG} Cof f ee dr i nk = new Cof f ee( ee( ) ; dr i nk. si ze = Cof f eeSi ze. ze. BI G ; } }
Percobaan 5 : Menentukan sendiri nilai konstanta dari enum enu enum Cof f eeS eeSi ze2{ ze2{ BI G( 8) , HUGE( 10) , OVERW ERWHELMI NG( 16) ; Cof f eeSi ze2 ze2( i nt ounces) ces) { t hi s. oun ounces = oun ounces ;
138
} pr i vat e i nt ounces ces ; publ i c i nt get Ounces( ces( ) { r et ur n oun ounces; ces; } }
Percobaan 6 : Enum dengan statement switch enum OperatingSystems {
wi ndows, uni x, l i nux, maci nt osh } publ publ i c cl ass Enum EnumExam Exampl e1 { publ i c stati c vo voi d mai n( St r i ng ar gs[ ] ) { Oper per at i ngSy ngSyst st ems os; os; os = Oper per at i ngSyst ngSyst ems. wi ndow ndows; swi t ch( ch( os) { case wi ndow ndows: Syst em. out out . pr i nt l n( " You You chose chose Wi ndows! " ) ; br eak; case case un uni x: Syst yst em. out . pr i nt l n( "You "You cho chose Un Uni x!" ) ; br eak; case case l i nux: Syst yst em. out . pr i nt l n( "You "You ch chose Li Li nux! ") ; br eak; case maci nt osh: osh: Syst em. out . pr i nt l n( " You cho chose Maci nt osh! sh! ") ; br eak; def aul t : Syst yst em. out . pr i nt l n( "I don' t kno know you your OS. ") ; br eak; } } }
Percobaan 7 : Fungsi pada Enum enum enum Appl ppl e { A( 10) , B( 9) , C, D( 15) , E( 8) ; pr i vat e i nt pr i ce; ce; / / pr i ce of each appl e / / Const r uctor Appl e( i nt p) { pr i ce = p; } / / Over ver l oaded con const r uct or Appl e( ) { pr i ce = - 1; } i nt get Pr i ce( ce( ) { r et ur n pr i ce; ce; } }
139
Percobaan 8 : Melakukan enumerasi pada Enum
enum Media {
book, ook, musi c_cd, musi c_vi nyl nyl , movi ovi e_vhs, e_vhs, movi ovi e_dvd e_dvd;; } publ i c cl ass Medi aFa aFact or y { publ i c st at i c vo voi d mai n( St r i ng[ ] ar gs) { System. out . pr i nt l n( Medi aFact Fact or y. get Medi a( " Book") ) ; } publ i c st at i c Medi a get Medi a( St r i ng s) { r et ur n En Enum. val val ueOf ( Medi a. cl ass, s. t oLo oLower Case( se( ) ) ; } publ i c st at i c Medi a get Medi a( i nt n) { r et ur n Medi a. val val ues( ) [ n] ; } }
E. LATIHAN
1. Consider the following code fragment: 1. cl ass Enum EnumTest Test { 2. enum Si ze{sm ze{smal l , medi um, l ar ge, Xl arge} arge}; 3. publ i c st at i c voi d mai n( St r i ng [ ] ar gs) { 4. f or ( Si z e s : Si z e. e. val ues ( ) ) { 5. i f ( s == Si ze. ze. smal l ) 6. Syst em. out . pr i nt ( "smal l ") ; 7. el se i f ( Si ze. ze. medi um. equal s( s) ) 8. Sy Syst em. out . pr i nt l n( "medi um ") ; 9. el se i f ( s == Si ze. ze. l ar ge) 10. Syst em. out . pr i nt l n( "l ar ge ") ; 11. el s e i f ( s . equal s ( " Xl ar ge " ) ) 12. Syst em. out . pr i nt l n( "Xl "Xl ar ge ") ; 13. el se i f ( s == "Xl "Xl ar ge ") ; 14. Syst em. out . pr i nt l n( "Xl "Xl ar ge ") ; 15. } 16. } 17. }
What is the result of this code? A. small medium large Xlarge Xlarge B. small medium large Xlarge C. small medium large 140
D. Compiler error at line 11 E. Compiler error at line 13 F. Throws exception at runtime 2. Consider the following code fragment: 1. enum enum Col or s {BLU {BLUE, E, GREEN EEN, YELLOW YELLOW, RED} 2. cl ass Pi Pi cture { 3. publ i c st at i c voi d mai n( St r i ng [ ] ar gs) { 4. i nt x = 0; 5. Col or s c = Col or s. GREEN; 6. swi t ch( ch( c) { 7. case BLUE: LUE: 8. Syst em. out . pr i nt ( c); 9. case cas e GREEN: 10. Syst em. out . pr i nt ( c); 11. 11. case cas e YELLOW YELLOW: 12. Syst em. out . pr i nt ( c); 13. def aul t : 14. Syst em. out . pr i nt ( " Bl ackW ckWhi t e ") ; 15. br eak; 16. 16. case RED: 17. Syst em. out . pr i nt ( c); 18. } 19. Syst em. out . pr i nt l n( " Pi ctureP cturePer f ect" ) ; 20. } 21. }
What is the result? A. GREEN PicturePerfect B. GREENGREEN PicturePerfect C. GREENGREEN BlackWhite PicturePerfect D. GREENYELLOW BlackWhite PicturePerfect E. GREENGREEN BlackWhite Red PicturePerfect F. Compilation fails at line 6. G. Compilation fails at line 13. 3. Consider the following code fragment: 1. enum enum Col or s {BLU {BLUE, E, GREEN EEN, RED} 2. cl ass Pi Pi cture { 3. publ i c st at i c voi d mai n( St r i ng [ ] ar gs) {
141
4. 5. 6. 7. 8. 9. 10. 11. 11. 12. 13. 14. 15. 16. 16. 17. 18. 19. 20. } 21. }
i nt x = 0; Col or s c = Col or s. GREEN; swi t ch( ch( c) { case BLUE: LUE: Syst em. out . pr i nt ( c); case cas e GREEN EEN: Syst em. out . pr i nt ( c); case cas e YELLOW YELLOW: Syst em. out . pr i nt ( c); def aul t : Syst em. out . pr i nt ( " Bl ackW ckWhi t e ") ; br eak; case RED: Syst em. out . pr i nt ( c); } Syst em. out . pr i nt l n( " Pi ctureP cturePer f ect" ) ;
What is the result? A. GREEN PicturePerfect B. GREENYELLOW PicturePerfect C. GREENGREEN BlackWhite PicturePerfect D. GREEN BlackWhite Red PicturePerfect Pictu rePerfect E. Compilation fails. F. An exception is thrown at runtime. 4. Consider the following code: 1. enum enum Vi l l ages ages {Ph {Phar ar wal a, Gohaw ohawar , Phag Phagw war a, Gor aya} aya} 2. publ publ i c cl ass MyEnu yEnum mTest Test { 3. publ publ i c st at i c enum enum Col or s{RED s{RED, BLU BLUE, E, GREEN EEN, YELLO YELLOW W, ORANGE}; E}; 4. pr i vat vat e enum enum weeken eekend d { Sat Sat ur day, day, Sund Sunday ay}; }; 5. publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { 6. enu enum Cur r ency ency {Dol l ar s, Rupees, ees, Fr anc, Eur o}; o}; 7. Sys t e m. out . pr i nt l n( " He Hel l o" ) ; 8. } 9. }
What is the result? A. Hello B. Compilation fails at line 1. C. Compilation fails at line 3. D. Compilation fails at line 6. 142
E. An exception is thrown at runtime. 5. Given: 1. enum Ani mal s { 2. DOG ( " woof " ) , CAT ( " meow" ) , FI SH ( " bur bl e") ; 3. St r i ng sound; 4. Ani mal s( St r i ng s) { sound = s; } 5. } 6. cl ass Test Enum { 7. st at i c Ani mal s a; 8. publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { 9. Syst em. out . pr i nt l n( a. DOG. sound + " " + a. FI SH. sound) ; 10. } 11. }
What is the result? A. woof burble B. Multiple compilation errors C. Compilation fails due to an error on line 2 D. Compilation fails due to an error on line 3 E. Compilation fails due to an error on line 4 F. Compilation fails due to an error on line 9
F. TUGAS Tugas 1 :
Pada supermarket terdapat beberapa macam jenis buah Apel yaitu Apel Malang, Granny Smith, Pink Lady, Golden Delicious, Gala dan Red Delicious. Buatlah enum Apel dengan berbagai jenis apel dan harganya. Berikan deskripsi dari apel tersebut pada method get Des kr i ps i ( ) .
Selanjutnya tampilkan data semua Apel, harga dan
deskripsi pada Supermarket tersebut.
143
Enum Apel { MALANG( / / har ga) , . . . publ i c St r i ng get Deskr i psi ( ) {…} }
G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di ata s dan tambahkan analisa.
144
PRAKTIKUM 17 MENANGANI EXCEPTION A. TUJUAN PEMBELAJARAN
1. Memahami mengenai exception 2. Memahami tipe exception yaitu Checked Exception dan Unchecked Exception. 3. Mengetahui cara menggunakan exception menggunakan blok try catch.
B. DASAR TEORI
Exception adalah suatu kondisi abnormal yang terjadi pada saat menjalankan program. Karena
dalam
java
segala
sesuatu
merupakan
objek,
maka
exception
juga
direpresentasikan dalam sebuah objek yang menjelaskan tentang exception tersebut. Contoh exception adalah pembagian bilangan dengan 0, pengisian elemen array diluar ukuran array, kegagalan koneksi database, file yang akan dibuka tidak ada, dan mengakses objek yang belum diinisialisasi. Terdapat dua penanganan exception yaitu: •
Menangani sendiri exception tersebut.
•
Meneruskannya ke luar dengan cara membuat objek tentang exception tersebut dan melemparkannya (throw) keluar agar ditangani oleh kode yang memanggil method(method yang didalamnya terdapat exception) tersebut.
Ada lima keyword yang digunakan oleh Java untuk menangani exception yaitu try, catch, finally, throw dan throws.
B.1 Tipe-Tipe Exception
Pada exception, superclass tertinggi adalah class Throwable, tetapi kita hampir tidak pernah menggunakan class ini secara langsung. Dibawah class Throwable terdapat dua subclass yaitu class Error dan class Exception. Class Error merupakan tipe exception yang tidak ditangani dengan blok try-catch, karena berhubungan dengan Java run-time system/environment. Untuk exception dengan tipe class Exception, merupakan exception 145
yang dapat ditangani oleh program. Terdapat subclass dari class Exception diantaranya RunTimeException, IOException, AWTException dan lain-lain. Semua exception bertipe RunTimeException dan turunannya tidak harus secara eksplisit ditangani
dalam
program
(Unchecked
Exception).
Contoh
subclass
dari
RunTimeException adalah ArrayIndexOutOfBoundsException, ArithmeticException, NullPointerException dan lain-lain. Semua tipe exception yang bukan turunan dari class RuntimeException merupakan exception yang harus ditangani atau jika tidak ditangani menyebab error. Dibawah ini adalah hirarki dari exception.
B.2 Penggunaan Blok try-catch
Untuk menangani exception dalam program, dengan meletakkan kode program yang memungkinkan terjadinya exception didalam blok try, diikuti dengan blok catch yang menentukan jenis exception yang ingin ditangani. Contoh : publ i c cl ass Percobaan2 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt a[ ] = new i nt [ 5] ; try{ a[ 5] = 100 ; }cat ch( Ar r ayI ndexOut Of BoundsExcept i on e) { Syst em. out . pr i nt l n( "I ndeks Ar r ay mel ebi hi bat as") ; } Syst em. out . pr i nt l n( "Set el ah bl ok t r y- cat ch") ; }
146
}
Output : Ter j adi except i on kar ena I ndeks Ar r ay mel ebi hi bat as Set el ah bl ok t r y- cat ch
Dapat terjadi kode yang terdapat dalam blok try mengakibatkan lebih dari satu exception. Dalam hal ini, kita dapat menuliskan lebih dari satu blok catch. Contoh : publ i c cl ass Percobaan5 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt bi l =10; St r i ng b[ ] = {"a", "b", "c"}; t r y{ Sys t em. out . pr i nt l n( bi l / 0) ; Syst em. out . pr i nt l n( b[ 3] ) ; }cat ch( Ar i t hmet i cExcept i on e) { Syst em. out . pr i nt l n( "Er r or Ar i t met i k") ; }cat ch( Ar r ayI ndexOut Of BoundsExcept i on e) { Syst em. out . pr i nt l n( "Err or Kapasi t as Ar r ay Mel ebi hi Bat as") ; }cat ch( Except i on e) { Syst em. out . pr i nt l n( "Ter dapat Er r or ") ; } } }
Blok catch yang dijalankan tergantung dengan exception yang terjadi. Java akan menjalankan
blok
catch
yang
sesuai
dengan
tipe
exceptionnya
saja.
Dalam
penggunaannya, blok catch dengan tipe subclass harus ditulis lebih dahulu baru diikuti dengan blok catch dengan tipe data superclassnya.
B.3 Menggunakan Keyword ”finally”
Terdapat kode yang harus dijalankan walaupun terjadi atau tidak terjadi exception, misalkan kita membuka file, hal ini memungkinkan terjadinya exception misal file tidak ada, file tidak bisa dibuka, selanjutnya yang harus dilakukan adalah menutup file tersebut. public class Percobaan2 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt a[ ] = new i nt [ 5] ; try{ a[ 5] = 100 ; }cat ch( Ar r ayI ndexOut Of BoundsExcept i on e) {
147
System. out . pr i nt l n( "Ter j adi except i on kar ena I ndeks Ar r ay mel ebi hi bat as") ; }f i nal l y{ Syst em. out . pr i nt l n( "Sel al u Di j al ankan") ; } Syst em. out . pr i nt l n( "Set el ah bl ok t r y- cat ch") ; } }
B.4 Menggunakan Keyword ”throw ” dan ”throws”
Secara eksplisit, kita dapat melempar (throw) exception dari program menggunakan keyword throw. Jika exception tersebut adalah checked exception, maka pada method harus ditambahkan throws. Jika exception tersebut adalah unchecked exception, maka pada method tidak perlu ditambahkan throws. public class Percobaan6 { publ i c st at i c voi d met hod1( ) t hr ows Fi l eNot FoundExcept i on{ t hr ow new Fi l eNot FoundExcept i on( " Fi l e Ti dak Ada") ; } publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { try { met hod1( ) ; } cat ch ( Fi l eNot FoundExcept i on ex) { Syst em. out . pr i nt l n( ex. get Message( ) ) ; } } }
B.5 Membuat sendiri Subclass dari Exception
Untuk melakukan ini, kita cukup membuat class baru yang merupakan subclass Exception. Didalam class ini kita cukup mendeklarasikan konstruktor. cl ass Sal ah ext ends Except i on{ publ i c Sal ah( ) {} publ i c Sal ah( St r i ng pesan) { super ( pesan) ; } }
C. TUGAS PENDAHULUAN
Buatlah review mengenai definisi exception, jenis exception, dan berikan 2 contoh program yang menyebabkan exception beserta cara penangannya.
D. PERCOBAAN
148
Percobaan 1 : Jalankan program di bawah ini ! Bagaimana output program ? Jelaskan ! public class Percobaan1 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt a[ ] = new i nt [ 5] ; a[ 5] = 100 ; } }
Percobaan
2
:
Memahami
cara
menangkap
Exception
dengan
tipe
ArrayIndexOutOfBoundsException public class Percobaan2 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt a[ ] = new i nt [ 5] ; try{ a[ 5] = 100 ; }cat ch( Ar r ayI ndexOut Of BoundsExcept i on e) { Syst em. out . pr i nt l n( "I ndeks Ar r ay mel ebi hi bat as") ; } } }
Percobaan 3 : Jalankan percobaan 3, bagaimana output program ? Perbaiki dengan Percobaan32 untuk menangani exception. public class Percobaan3 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt bi l = 10 ; Sys t e m. out . pr i nt l n( bi l / 0) ; } }
public class Percobaan32 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt bi l = 10 ; t r y{ Sys t em. out . pr i nt l n( bi l / 0) ; }cat ch( Ar i t hmet i cExcept i on e) { Syst em. out . pr i nt l n( " Ti dak bol eh membagi 0" ) ; } } }
bi l angan
dengan
Percobaan 4 : Memahami try bertingkat. public class Percobaan4 {
149
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt bi l = 10 ; t r y{ Sys t em. out . pr i nt l n( bi l / 0) ; }cat ch( Ar i t hmet i cExcept i on e) { System. out . pr i nt l n( " Ter j adi except i on membagi bi l angan dengan 0" ) ; }cat ch( Except i on e) { Syst em. out . pr i nt l n( "Ter dapat Er r or ") ; } } }
kar ena
t i dak
bol eh
Percobaan 5 : Bandingkan output dua program di bawah ini ! Jelaskan ! public class Percobaan5 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt bi l =10; St r i ng b[ ] = {"a", "b", "c"}; t r y{ Sys t em. out . pr i nt l n( bi l / 0) ; Syst em. out . pr i nt l n( b[ 3] ) ; }cat ch( Ar i t hmet i cExcept i on e) { Syst em. out . pr i nt l n( "Er r or Ar i t met i k") ; }cat ch( Ar r ayI ndexOut Of BoundsExcept i on e) { Syst em. out . pr i nt l n( "Err or Kapasi t as Ar r ay Mel ebi hi Bat as") ; }cat ch( Except i on e) { Syst em. out . pr i nt l n( "Ter dapat Er r or ") ; } } }
public class Percobaan52 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt bi l =10; St r i ng b[ ] = {"a", "b", "c"}; t r y{ Syst em. out . pr i nt l n( b[ 3] ) ; Sys t em. out . pr i nt l n( bi l / 0) ; }cat ch( Ar i t hmet i cExcept i on e) { Syst em. out . pr i nt l n( "Er r or Ar i t met i k") ; }cat ch( Ar r ayI ndexOut Of BoundsExcept i on e) { Syst em. out . pr i nt l n( "Err or Kapasi t as Ar r ay Mel ebi hi Bat as") ; }cat ch( Except i on e) { Syst em. out . pr i nt l n( "Ter dapat Er r or ") ; } } }
Percobaan 6 : Penggunaan finally public class ExcepTest{ publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) {
150
i nt a[ ] = new i nt [ 2] ; try{ Syst em. out . pr i nt l n( "Access el ement t hr ee : " + a[ 3] ) ; }cat ch( Ar r ayI ndexOut Of BoundsExcept i on e) { Syst em. out . pr i nt l n( "Except i on t hr own : " + e) ; } f i nal l y{ a[ 0] = 6; Syst em. out . pr i nt l n( "Fi r st el ement val ue: " +a[ 0] ) ; Syst em. out . pr i nt l n( "The f i nal l y stat ement i s execut ed") ; } } }
E. LATIHAN
1. Semua exception yang berasal dari java.lang.RuntimeException adalah unchecked exceptions,
sedangkan
java.lang.RuntimeException
exception adalah
lainnya checked
yang
tidak
exceptions.
berasal
Jelaskan
dari
mengenai
unchecked exceptions dan checked exceptions ,berikan contoh !
2. Buatlah contoh program untuk menangani exception dengan cara menangkap exception seperti di bawah ini : • • • • • • • • •
ArithmeticException ArrayStoreException ClassCastException ArrayIndexOutOfBoundsException StringIndexOutOfBoundsException NegativeArraySizeException NoSuchElementException NullPointerException, NumberFormatException
F. TUGAS
1. Terdapat dua cara untuk menangani Exception yaitu dengan menangkap Exception dan melempar Exception. Lakukan penanganan exception dengan menangkap Exception menggunakan blok try-catch. Berilah penjelasan (apakah program termasuk unchecked exceptions atau checked exceptions) ! public class ReadFile {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { Fi l e f i l e = new Fi l e( " Dat a. t xt " ) ; Buf f er edReader f i l eReader ;
151
f i l eReader = new Buf f er edReader( new Fi l eReader ( f i l e) ) ; whi l e( t r ue) { St r i ng l i ne = f i l eReader . r eadLi ne( ) ; i f ( l i ne == nul l ) br eak ; Sys t e m. out . pr i nt l n( l i ne) ; } } }
G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di ata s dan tambahkan analisa.
152
PRAKTIKUM 18 DAN MEMBUAT MELEMPAR EXCEPTION D
EXCEPTION SENDIRI A. TUJUAN PEMBELAJARAN
1. Mengetahui cara menangani exception dengan cara melempar exception. 2. Mengetahui cara membuat sendiri class exception. B. DASAR TEORI
Exception adalah suatu kondisi abnormal yang terjadi pada saat menjalankan program. Karena
dalam
java
segala
sesuatu
merupakan
objek,
maka
exception
juga
direpresentasikan dalam sebuah objek yang menjelaskan tentang exception tersebut. Contoh exception adalah pembagian bilangan dengan 0, pengisian elemen array diluar ukuran array, kegagalan koneksi database, file yang akan dibuka tidak ada, dan mengakses objek yang belum diinisialisasi. Terdapat dua penanganan exception yaitu: •
Menangani sendiri exception tersebut.
•
Meneruskannya ke luar dengan cara membuat objek tentang exception tersebut dan melemparkannya (throw) keluar agar ditangani oleh kode yang memanggil method(method yang didalamnya terdapat exception) tersebut.
Ada lima keyword yang digunakan oleh Java untuk menangani exception yaitu try, catch, finally, throw dan throws.
B.1 Tipe-Tipe Exception
Pada exception, superclass tertinggi adalah class Throwable, tetapi kita hampir tidak pernah menggunakan class ini secara langsung. Dibawah class Throwable terdapat dua subclass yaitu class Error dan class Exception. Class Error merupakan tipe exception yang tidak ditangani dengan blok try-catch, karena berhubungan dengan Java run-time system/environment. Untuk exception dengan tipe class Exception, merupakan exception 153
yang dapat ditangani oleh program. Terdapat subclass dari class Exception diantaranya RunTimeException, IOException, AWTException dan lain-lain. Semua exception bertipe RunTimeException dan turunannya tidak harus secara eksplisit ditangani
dalam
program
(Unchecked
Exception).
Contoh
subclass
dari
RunTimeException adalah ArrayIndexOutOfBoundsException, ArithmeticException, NullPointerException dan lain-lain. Semua tipe exception yang bukan turunan dari class RuntimeException merupakan exception yang harus ditangani atau jika tidak ditangani menyebab error. Dibawah ini adalah hirarki dari exception.
B.2 Penggunaan Blok try-catch
Untuk menangani exception dalam program, dengan meletakkan kode program yang memungkinkan terjadinya exception didalam blok try, diikuti dengan blok catch yang menentukan jenis exception yang ingin ditangani. Contoh : publ i c cl ass Per cobaan2 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt a[ ] = new i nt [ 5] ; try{ a[ 5] = 100 ; }cat ch( Ar r ayI ndexOut Of BoundsExcept i on e) { Syst em. out . pr i nt l n( "I ndeks Ar r ay mel ebi hi bat as") ; } Syst em. out . pr i nt l n( "Set el ah bl ok t r y- cat ch") ; } 154
} Output :
Ter j adi except i on kar ena I ndeks Ar r ay mel ebi hi bat as Set el ah bl ok t r y- cat ch
Dapat terjadi kode yang terdapat dalam blok try mengakibatkan lebih dari satu exception. Dalam hal ini, kita dapat menuliskan lebih dari satu blok catch. Contoh : publ i c cl ass Per cobaan5 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt bi l =10; St r i ng b[ ] = {"a", "b", "c"}; try{ Sys t em. out . pr i nt l n( bi l / 0) ; Syst em. out . pr i nt l n( b[ 3] ) ; }cat ch( Ar i t hmet i cExcept i on e) { Syst em. out . pr i nt l n( "Er r or Ar i t met i k") ; }cat ch( Ar r ayI ndexOut Of BoundsExcept i on e) { Syst em. out . pr i nt l n( "Err or Kapasi t as Ar r ay Mel ebi hi Bat as") ; }cat ch( Except i on e) { Syst em. out . pr i nt l n( "Ter dapat Er r or ") ; } } }
Blok catch yang dijalankan tergantung dengan exception yang terjadi. Java akan menjalankan
blok
catch
yang
sesuai
dengan
tipe
exceptionnya
saja.
Dalam
penggunaannya, blok catch dengan tipe subclass harus ditulis lebih dahulu baru diikuti dengan blok catch dengan tipe data superclassnya.
B.3 Menggunakan Keyword ”finally”
Terdapat kode yang harus dijalankan walaupun terjadi atau tidak terjadi exception, misalkan kita membuka file, hal ini memungkinkan terjadinya exception misal file tidak ada, file tidak bisa dibuka, selanjutnya yang harus dilakukan adalah menutup file tersebut. public class Percobaan2 {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { i nt a[ ] = new i nt [ 5] ; try{ a[ 5] = 100 ; }cat ch( Ar r ayI ndexOut Of BoundsExcept i on e) { System. out . pr i nt l n( "Ter j adi except i on kar ena I ndeks Ar r ay mel ebi hi bat as") ; }f i nal l y{ 155
Syst em. out . pr i nt l n( "Sel al u Di j al ankan") ; } Syst em. out . pr i nt l n( "Set el ah bl ok t r y- cat ch") ; } }
B.4 Menggunakan Keyword ”throw ” dan ”throws”
Secara eksplisit, kita dapat melempar (throw) exception dari program menggunakan keyword throw. Jika exception tersebut adalah checked exception, maka pada method harus ditambahkan throws. Jika exception tersebut adalah unchecked exception, maka pada method tidak perlu ditambahkan throws. public class Percobaan6 {
publ i c st at i c voi d met hod1( ) t hr ows Fi l eNot FoundExcept i on{ t hr ow new Fi l eNot FoundExcept i on( " Fi l e Ti dak Ada") ; } publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { try { met hod1( ) ; } cat ch ( Fi l eNot FoundExcept i on ex) { Syst em. out . pr i nt l n( ex. get Message( ) ) ; } } }
B.5 Membuat sendiri Subclass dari Exception
Untuk melakukan ini, kita cukup membuat class baru yang merupakan subclass Exception. Didalam class ini kita cukup mendeklarasikan konstruktor. cl ass Sal ah ext ends Except i on{ publ i c Sal ah( ) {} publ i c Sal ah( St r i ng pesan) { super ( pesan) ; } }
C. TUGAS PENDAHULUAN
Buatlah review 1 halaman mengenai penanganan exception dengan cara melempar exception dan berikan 1 contoh program. D. PERCOBAAN Percobaan 1 : Method yang melempar unchecked exception public class Percobaan6 {
publ i c st at i c voi d met hod1( ) { t hr ow new Ar r ayI ndexOut Of BoundsExcept i on( " Mel ebi hi Kapasi t as") ; } 156
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { try { met hod1( ) ; } cat ch ( Ar r ayI ndexOut Of BoundsExcept i on ex) { Syst em. out . pr i nt l n( ex. get Message( ) ) ; } } }
Percobaan 2 : Method yang melempar checked exception publ i c cl ass Per cobaan7 { publ i c st at i c voi d met hod1( ) t hr ows Fi l eNot FoundExcept i on{ t hr ow new Fi l eNot FoundExcept i on( " Fi l e Ti dak Ada") ; } publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { try { met hod1( ) ; } cat ch ( Fi l eNot FoundExcept i on ex) { Syst em. out . pr i nt l n( ex. get Message( ) ) ; } } }
Percobaan 3 : Memahami mengenai mekanisme exception. public class Exercise1 {
s t a t i c voi d f 1( ) { Syst em. out . pr i nt ( "1") ; try { Syst em. out . pr i nt ( "2") ; f 2( ) ; Syst em. out . pr i nt ( "3") ; } cat ch ( Except i on e) { Syst em. out . pr i nt ( "4") ; } f i nal l y { Sys t e m. out . pr i nt ( " 5" ) ; } Syst em. out . pr i nt l n( "6") ; } st at i c voi d f 2 ( ) t hr ows Except i on { i f ( t r ue) t hr ow new Except i on( ) ; } publ i c st at i c voi d mai n( St r i ng s[ ] ) { f 1( ) ; } }
Percobaan 4 : Menggunakan konsep Inheritance untuk membuat superclass dan subclass exception. Program menangani exception dengan menangkap subclass exception dengan superclass i mpor t j avax. swi ng. *; cl ass Except i onA ext ends Except i on {} cl ass Except i onB ext ends Except i onA {}
157
cl ass Except i onC ext ends Except i onB {} publ i c cl ass Demo { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { try { t hr ow new Except i onC( ) ; } cat ch( Except i onA a ) { J Opt i onPane. showMess ageDi al og( nul l , a. t oSt r i ng( ) , " Except i on" , J Opt i onPane. I NFORMATI ON_MESSAGE ) ; } try { t hr ow new Except i onB( ) ; } cat ch( Except i onA b ) { J Opt i onPane. showMess ageDi al og( nul l , b. t oSt r i ng( ) , " Except i on" , J Opt i onPane. I NFORMATI ON_MESSAGE ) ; } Syst em. exi t ( 0 ) ; } }
Percobaan 5 : Membuat exception sendiri class Salah extends Exception{
publ i c Sal ah( ) {} publ i c Sal ah( St r i ng pesan) { super ( pesan) ; } } public class TesSalah{
publ i c st at i c voi d mai n( St r i ng [] ar g) t hr ows Sal ah{ Sal ah s = new Sal ah( “Sal ah di sengaj a ha. . ha. . ”) ; i nt i = 0; i f ( i ==0) t hr ow s; } }
Percobaan 6: Membuat exception sendiri class counterException extends Exception {
/ / Def i ne
St r i ng compl ai nt ; publ i c count er Except i on( St r i ng c) { t hi s. compl ai nt = c; } publ i c St r i ng t oSt r i ng( ) { r et ur n " count er Except i on “ + compl ai nt ; } } class counter {
158
i nt n = 0; publ i c i nt zer o( ) { r et ur n n=0; } publ i c i nt up( ) { r et ur n ++n; } publ i c i nt down( ) t hr ows count er Except i on { / / Thr ow i f ( n <= 0) t hr ow new count er Except i on ( n + " count Down f ai l ed. ") ; r et ur n - - n; } } public class Example1 {
publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { count er aCount er = new count er ( ) ; aCount er . zer o( ) ; aCount er . up( ) ; t r y { aCount er . down( ) ; } cat ch ( count er Except i on ce) { / / Cat ch Syst em. out . pr i nt l n( "" + ce) ; } t r y { aCount er . down( ) ; } cat ch ( count er Except i on ce) { / / Cat ch Syst em. out . pr i nt l n( "" + ce) ; } f i nal l y { Sys t em. out . pr i nt l n( “ Fi nal l y” ) ; } } }
public class Example2 {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) t hr ows Except i on { count er aCount er = new count er ( ) ; aCount er . zer o( ) ; aCount er . up( ) ; aCount er. down( ) ; aCount er. down( ) ; Syst em. out . pr i nt l n( “Compl et ed”) ; } }
E. LATIHAN
1. Terdapat dua cara untuk menangani Exception yaitu dengan menangkap Exception dan melempar Exception. Lakukan penanganan exception dengan melempar Exception menggunakan throw. Berilah penjelasan (apakah program termasuk unchecked exceptions atau checked exceptions) ! public class ReadFile {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { Fi l e f i l e = new Fi l e( " Dat a. t xt " ) ; 159
Buf f er edReader f i l eReader ; f i l eReader = new Buf f er edReader( new Fi l eReader ( f i l e) ) ; whi l e( t r ue) { St r i ng l i ne = f i l eReader . r eadLi ne( ) ; i f ( l i ne == nul l ) br eak ; Sys t e m. out . pr i nt l n( l i ne) ; } } }
F. TUGAS
1. Buatlah sebuah class Stack, FullStackException dan EmptyStackException. Class Stack ini menggambar Stack yang menerapkan konsep LIFO (Last In First Out). Konsep LIFO ini, data yang terakhir masuk akan keluar pertama kali. Class Stack mempunyai atribut: •
size : menentukan besar array untuk menyimpan data. Array berdimensi satu dengan tipe Object.
•
top : merupakan tanda indeks yang paling atas, yang belum terisi. Sehingga data yang akan masuk akan dimasukkan pada indeks tersebut.
•
Object[] elemen : untuk menyimpan data.
Class Stack mempunyai operasi: •
public Stack() : jika kita membuat object Stack dengan konstruktor Stack() maka tentukan size = 5.
•
public Stack(int s) : jika kita membuat object Stack dengan konstruktor Stack(int s) maka tentukan size berdasarkan parameter s.
•
public int getSize() : untuk mendapatkan besar array dari Stack.
•
public int getTop() : untuk mendapatkan top dari Stack
•
public void push(Object o) : untuk memasukkan data ke array pada Stack.
•
public Object pop() : untuk mengambil data dari array.
160
Deskripsi Stack Buat objek Stack dengan nama stack, pertama kali top bernilai 0. 4 3 2 1 top = 0
Masukkan sebuah data String “satu”, data “satu” akan dimasukkan pada indeks yang ke-0 (sesuai dengan nilai top) selanjutnya top dinaik kan 1, sehingga top = 1. 4 3 2 1
top = 1 “satu”
Masukkan sebuah data String “dua”, data “dua” akan dimasukkan pada indeks yang ke-1 (sesuai dengan nilai top) selanjutnya top dinaik kan 1, sehingga top = 2. 4 3 2
top = 2
1 “dua” “satu”
Ambil sebuah data dari Stack, data yang diambil adalah data yang dimasukkan terakhir kali (“dua”). Kurangi nilai top dengan 1 sehingga menjadi nilai top = 1. Selanjutnya ambil data pada indeks ke -1.
161
4 3 2 1
top = 1 “satu”
Ambil sebuah data dari Stack, data yang diambil adalah data yang terakhir (“satu”). Kurangi nilai top dengan 1 sehingga menjadi nilai top = 0. Selanjutnya apabila ada pengambilan data maka yang diambil adalah data pada indeks ke -0. 4 3 2 1 top = 0
Ambil sebuah data lagi dari Stack, jika kondisi top = 0, maka Stack kosong dan melempar exception EmptyStackException (class ini merupakan subclass dari class RuntimeException), dan muncul peringatan bahwa “Stack kosong”. Selanjutnya isilah Stack sampai penuh. top = 5 4 “lima” 3 “empat” 2 “tiga” 1 “dua” “satu”
162
Jika kita ingin memasukkan data baru lagi, jika kondisi top = 5, maka akan melempar exception yaitu FullStackException (class ini merupakan subclass dari class RuntimeException). top = 5 4 “lima” 3 “empat” 2 “tiga” 1 “dua” “satu”
Masukkan data lagi
Stack
Full
A. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di atas d an tambahkan analisa.
163
PRAKTIKUM 19 JAVA COLLECTION FRAMEWORK : SET D DAN LIST A. TUJUAN PEMBELAJARAN
1. Memahami cara penyimpanan objek menggunakan Collection. 2. Mengetahui pengelompokan dari Collection. 3. Mengetahui perbedaan dari interface Set dan List. 4. Mengetahui penggunaan class-class dari interface Set dan List. 5. Mengetahui cara penggunaan Iterasi dan Enumeration.
B. DASAR TEORI
Collection adalah suatu objek yang bisa digunakan untuk menyimpan sekumpulan objek. Objek yang ada dalam Collection disebut elemen. Collection menyimpan elemen yang bertipe Object, sehingga berbagai tipe objek bisa disimpan dalam Collection. Class-class mengenai Collection tergabung dalam Java Collection Framework. Classclass Collection diletakkan dalam package java.util dan mempunyai dua interface utama yaitu Col l ect i on dan Map. Mulai java 1.5 (juga dikenal sebagai J2SE 5), semua class yang termasuk Java Collection Framework adalah class generics. Untuk kompatibilitas dengan versi java sebelumnya, penggunaan generics tidak diharuskan, namun sangat disarankan. Collection terbagi menjadi 3 kelompok yaitu Set, List dan Map. Berikut ini adalah struktur hierarki interface dan class yang termasuk dalam kelompok collection ini.
164
Java Collections Framework terbagi menjadi tiga ke lompok: •
Set
Set mengikuti model himpunan, dimana objek/anggota yang tersimpan dalam Set harus unik. Urutan maupun letak dari anggota tidaklah penting, hanya keberadaan anggota saja yang penting. Class-class yang mengimplementasikan interface Set adalah HashSet . Interface SortedSet merupakan subInterface dari interface Set. Untuk mengurutkan Set, kita dapat menggunakan class yang mengimplementasikan interface SortedSet yaitu clas TreeSet. •
List
List digunakan untuk menyimpan sekumpulan objek berdasarkan urutan masuk (ordered) dan menerima duplikat. Cara penyimpanannya seperti array, oleh sebab itu memiliki posisi awal dan posisi akhir, menyisipkan objek pada posisi tertentu, mengakses dan menghapus isi list, dimana semua proses ini selalu didasarkan pada urutannya. Classclass yang mengimplementasikan interface List adalah Vect or ,
St ack,
Li nked
Li st dan Ar r ay Li st . 165
Terdapat interface Queue yang cara penyimpanan seperti List, interface ini menyimpan objek menggunakan metode FIFO (First In First Out) yaitu objek yang masuk pertama keluar pertama. Class-class yang mengimplementasikan interface Queue adalah
Pr i or i t yQueue
dan
Li nkedLi st .
Data
yang
tersimpan
pada
objek
Pr i or i t yQueue akan diurutkan, data tersebut harus mengimplementasikan objek Comparable atau Comparator. •
Map
Perbedaaan mendasar map dengan collection yang lain, untuk menyimpan objek pada Map, perlu sepasang objek, yaitu key yang bersifat unik dan nilai yang disimpan. Untuk mengakses nilai tersebut maka kita perlu mengetahui key dari nilai tersebut. Map juga dikenal sebagai dictionary/kamus. Pada saat menggunakan kamus, perlu suatu kata yang digunakan untuk pencarian. Class-class yang mengimplementasikan Map adalah
Hasht abl e, HashMap, Li nkedHashMap. Untuk mengurutkan Map menggunakan interface Sor t edMap, class yang mengimplementasikan interface tersebut adalah
Tr eeMap.
C. TUGAS PENDAHULUAN
Buatlah resume 1 halaman mengenai Java Collection Framework dan pembagian kelompok Collection dan berikan penjelasannya.
D. PERCOBAAN Percobaan 1 : Memahami penggunaan class-class yang mengimplementasikan interface Set yaitu class HashSet dan class TreeSet i mpor t j ava. ut i l . * ; public class SetExample {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Set set =new HashSet ( ) ; set . add( "Ber nadi ne") ; set . add( "El i zabet h") ; set . add( "Gene") ; set . add( "El i zabet h") ; set . add( "Cl ar a") ; Syst em. out . pr i nt ( " El emen pada HashSet : " ) ; Syst em. out . pr i nt l n( set ) ; Set sor t Set =new TreeSet ( set ) ; Syst em. out . pr i nt ( " El emen pada TreeSet : " ) ; Syst em. out . pr i nt l n( sor t Set ) ;
166
} }
Percobaan 2 : Penggunaan Class HashSet publ i c cl ass Fi ndDups { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Set s = new HashSet ( ) ; f or ( St r i ng a : ar g s) i f ( ! s . add( a) ) Syst em. out . pr i nt l n( "Dupl i cat e det ect ed: " + a) ; Syst em. out . pr i nt l n( s. si ze( ) + " di st i nct wor ds: " + s) ; } }
Jalankan dengan : java FindDups i came i saw i left
publ i c cl ass Fi ndDups2 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Set uni ques = new HashSet ( ) ; Set dups = new HashSet ( ) ; f or ( St r i ng a : ar g s) i f ( ! uni ques . add( a) ) dups. add( a) ; / / Dest r ucti ve set - di f f er ence uni ques. r emoveAl l ( dups) ; System. out . pr i nt l n( "Uni que wor ds: " + uni ques) ; System. out . pr i nt l n( "Dupl i cat e wor ds: " + dups) ; } }
Jalankan dengan java FindDups i came i saw i left
Percobaan
3
:
Interface
Set
menerapkan
konsep
himpunan.
Mengetahui
implementasi konsep himpunan pada interface Set. i mpor t j ava. ut i l . * ; public class SetExample { public static void main(Stri ng[] args) {
Set s1=new HashSet ( ) ; s 1. add( " Aus t r al i a" ) ; s1. add( " Sweden" ) ; s1. add( " Ger many") ; Set s2=new HashSet ( ) ; s2. add( " Sweden" ) ;
167
s2. add( "Fr ance") ; Set uni on=new Tr eeSet ( s1) ; uni on. addAl l ( s2) ; / / gabungan dar i s1 dan s2 pr i nt ( " Uni on" , uni on) ; Set i nt er sect =new TreeSet ( s1) ; i nt er s ec t . r e t ai nAl l ( s 2) ; / / i r i s an dar i s 1 dan s 2 pr i nt ( " I nt er s ec t i on" , i nt er s ect ) ; } protected static void print( String label, Collection c){
Syst em. out . pr i nt l n( " - - - - - - - - - - - - - - - - " + l abel +" - - - - - - - - - - - - - - "); I t er at or i t =c. i t er at or ( ) ; whi l e( i t . hasNext ( ) ) { Sys t em. out . pr i nt l n( i t . next ( ) ) ; } } }
Percobaan 4 : Memahami penggunaan class-class yang mengimplementasikan interface List yaitu ArrayList dan LinkedList. i mpor t j ava. ut i l . * ; publ i c cl ass Li st Exampl e { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { L i s t l i s t =new Ar r ayL i s t ( ) ; l i s t . add( " Ber nadi ne" ) ; l i s t . add( " El i z abet h" ) ; l i s t . add( " Gene" ) ; l i s t . add( " El i z abet h" ) ; l i s t . add( " Cl ar a" ) ; Sys t em. out . pr i nt l n( l i s t ) ; Sys t e m. out . pr i nt l n( " 2 : " +l i s t . get ( 2) ) ; Sys t e m. out . pr i nt l n( " 0 : " +l i s t . get ( 0) ) ; Li nkedLi st queue=new Li nkedLi st ( ) ; queue. addFi r st ( "Ber nadi ne") ; queue. addFi r st ( "El i zabet h") ; queue. addFi r st ( "Gene") ; queue. addFi r st ( "El i zabet h") ; queue. addFi r st ( "Cl ar a") ; Syst em. out . pr i nt l n( queue) ; queue. r emoveLast ( ) ; queue. r emoveLast ( ) ; Syst em. out . pr i nt l n( queue) ; } }
168
Percobaan 5 : Penggunaan Class Vector i mpor t j ava. ut i l . Vec t or ; public class VectorExample {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Vect or vc=new Vect or ( ) ; / / El ement t ype of Vect or e. g. St r i ng, I nt eger , Obj ect . . . / / add vect or el ement s vc. add( "Vect or Obj ect 1") ; vc. add( "Vect or Obj ect 2") ; vc. add( "Vect or Obj ect 3") ; vc. add( "Vect or Obj ect 4") ; vc. add( "Vect or Obj ect 5") ; / / add vect or el ement at i ndex vc. add( 3, "El ement at f i x posi t i on") ; / / vc. si ze( ) i nf or m number of el ement s i n Vect or Syst em. out . pr i nt l n( "Vector Si ze : "+vc. si ze( ) ) ; / / get el ement s of Vect or f or ( i nt i =0; i
Percobaan 6 : Penggunaan Iterator i mpor t j ava. ut i l . * ; cl ass I t erat orDemo { publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { / / c r eat e an ar r a y l i s t Ar r ayLi st al = new Ar r ayLi st ( ) ; / / add el ement s t o the ar r ay l i st al . add( " C" ) ; al . add( " A" ) ; al . add( " E" ) ; al . add( " B" ) ; al . add( " D" ) ; al . add( " F" ) ; / / use i t er at or t o di spl ay cont ent s of al Syst em. out . pr i nt ( "Or i gi nal cont ent s of al : ") ; I t er at or i t r = al . i t er at or ( ) ; whi l e ( i t r . has Next ( ) ) { Obj ect el ement = i t r . next( ) ;
169
System. out . pr i nt ( el ement + " ") ; } Syst em. out . pr i nt l n( ) ; / / modi f y obj ect s bei ng i t er at ed Li st I t er at or l i t r = al . l i st I t er at or ( ) ; whi l e ( l i t r . has Next ( ) ) { Obj ect el ement = l i t r . next ( ) ; l i t r . set ( el ement + "+") ; } Syst em. out . pr i nt ( "Modi f i ed cont ent s of al : ") ; i t r = al . i t er at or ( ) ; whi l e ( i t r . has Next ( ) ) { Obj ect el ement = i t r . next( ) ; System. out . pr i nt ( el ement + " ") ; } Syst em. out . pr i nt l n( ) ; / / now, di spl ay t he l i st backwar ds Syst em. out . pr i nt ( "Modi f i ed l i st backwar ds: ") ; whi l e ( l i t r . has Pr e vi ous ( ) ) { Obj ect el ement = l i t r . pr evi ous( ) ; System. out . pr i nt ( el ement + " ") ; } Syst em. out . pr i nt l n( ) ; } }
Percobaan 7 : Penggunaan Enumeration i mpor t j ava. ut i l . Vec t or ; i mpor t j ava. ut i l . Enumer at i on; public class EnumerationTester {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { Enumer at i on days; Vect or dayNames = new Vect or ( ) ; dayNames. add( " Sunday") ; dayNames. add( " Monday" ) ; dayNames. add( " Tuesday" ) ; dayNames. add( " Wednesday" ) ; dayNames. add( " Thur sday" ) ; dayNames. add( " Fr i day" ) ; dayNames. add( " Sat ur day" ) ; days = dayNames. el ement s( ) ; whi l e ( days. hasMoreEl ement s ( ) ) Syst em. out . pr i nt l n( days. next El ement ( ) ) ; }
170
}
Percobaan 8 : Membuat Array List dari Enumerasi public class CreateArrayListFromEnumerationExample {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { / / creat e a Vect or obj ect Vect or v = new Vect or ( ) ; / / Add el ement s t o Vect or v. add( "A") ; v. add( "B") ; v. add( "D") ; v. add( "E") ; v. add( " F " ) ; Syst em. out . pr i nt l n( "Vect or cont ai ns : " + v) ; / / Get Enumerat i on over Vect or Enumer at i on e = v. el ement s( ) ; / / Cr eat e Ar r ayLi st f r om Enumer at i on of Vect or Ar r ayLi s t aLi s t = Col l ect i ons . l i s t ( e) ; Syst em. out . pr i nt l n( "Ar r ayl i st cont ai ns : " + aLi st ) ; } }
Percobaan 9 : Mengkopikan element dari ArrayList ke Vector i mpor t j ava. ut i l . Ar r ayL i s t ; i mpor t j ava. ut i l . Col l ec t i ons ; i mpor t j ava. ut i l . Vec t or ; publ i c cl ass CopyEl ement sOf Ar r ayLi st ToVect or Exampl e { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { / / creat e an Ar r ayLi st obj ect Ar r ayLi st ar r ayLi st = new Ar r ayLi st ( ) ; / / Add el ement s t o Ar r ayl i st ar r ayL i s t . add( " 1" ) ; ar r ayL i s t . add( " 4" ) ; ar r ayL i s t . add( " 2" ) ; ar r ayL i s t . add( " 5" ) ; ar r ayL i s t . add( " 3" ) ; / / creat e a Vect or obj ect Vect or v = new Vect or ( ) ; / / Add el ement s t o Vect or v. add( "A") ; v. add( "B") ; v. add( "D") ;
171
v. add( "E") ; v. add( " F " ) ; v. add( "G") ; v. add( "H") ; System. out . pr i nt l n( "Bef or e copy, Vect or Cont ai ns : " + v) ; / / copy al l el ement s of Ar r ayLi st t o Vect or usi ng copy met hod of Col l ecti ons cl ass Col l ec t i ons . c opy( v, ar r ayL i s t ) ; Syst em. out . pr i nt l n( "Af t er Copy, Vect or Cont ai ns : " + v) ; } }
Percobaan 10 : Menambahkan elemen yang tersimpan di Collection pada ArrayList i mpor t j ava. ut i l . Ar r ayL i s t ; i mpor t j ava. ut i l . Vec t or ; public class AppendAllElementsOfOtherCollectionToArrayListExample {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { / / creat e an Ar r ayLi st obj ect Ar r ayLi st ar r ayLi st = new Ar r ayLi st ( ) ; / / Add el ement s t o Ar r ayl i st ar r ayL i s t . add( " 1" ) ; ar r ayL i s t . add( " 2" ) ; ar r ayL i s t . add( " 3" ) ; / / cr eat e a new Vect or obj ect Vect or v = new Vect or ( ) ; v. add( "4") ; v. add( "5") ; / / append al l el ement s of Vect or t o Ar r ayLi st ar r ayLi s t . addAl l ( v) ; / / di spl ay el ement s of Ar r ayLi st System. out . pr i nt l n( "Af t er appendi ng al l el ement s of Vect or , Ar r ayL i s t c ont ai ns . . " ) ; f or ( i nt i = 0; i < ar r ayL i s t . s i z e( ) ; i ++) { Sys t em. out . pr i nt l n( ar r ayL i s t . get ( i ) ) ; } } }
172
Percobaan 11 : Memahami Penggunaan dari class PriorityQueue i mpor t j ava. ut i l . * ; public class PriorityQueueDemo { Pri ori t yQueue st r i ngQueue; publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { st r i ngQueue = new Pr i or i t yQueue( ) ; st r i ngQueue. add( " ab") ; st r i ngQueue. add( " abcd" ) ; st r i ngQueue. add( " abc") ; st r i ngQueue. add( " a") ;
/ / don' t use i t erat or whi ch may or may not / / show t he Pri or i t yQueue' s or der whi l e( st r i ngQueue. si ze( ) > 0) Syst em. out . pr i nt l n( st r i ngQueue. r emove( ) ) ; } }
Percobaan 12 : Memahami Penggunaan dari class PriorityQueue dan data yang tersimpan
dalam
objek
PriorityQueue
mengimplementasikan
interface
Comparator. i mpor t j ava. ut i l . Compar at or ; i mpor t j ava. ut i l . Pr i or i t yQueue; public class PQueueTest { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Pr i or i t yQueue pQueue = new Pr i or i t yQueue( 10, new Compar at or ( ) {
publ i c i nt compar e( I nt eger i nt 1, I nt eger i nt 2) { bool ean f l ag1 = i sPr i me( i nt 1) ; bool ean f l ag2 = i sPr i me( i nt 2) ; i f ( f l ag1 == f l ag2) { r et ur n i nt 1. compar eTo( i nt 2) ; } el s e i f ( f l ag1) { r et ur n - 1; } el s e i f ( f l ag2) { r et ur n 1; } r et ur n 0; } }); pQueue. add( 1) ; pQueue. add( 5) ; pQueue. add( 6) ; pQueue. add( 4) ; pQueue. add( 2) ;
173
pQueue. add( 9) ; pQueue. add( 7) ; pQueue. add( 8) ; pQueue. add( 10) ; pQueue. add( 3) ; whi l e( t r ue) { I nt eger head = pQueue. pol l ( ) ; i f ( head == nul l ) { br eak; } System. out . pr i nt ( head + " <- - " ) ; } } /** * * @par am n * @r et ur n */ publ i c st at i c bool ean i sPr i me( i nt n) { i f ( n <= 1) { r et ur n f al s e; } i f ( n == 2) { r et ur n t r ue; } i f ( n % 2 == 0) { r et ur n f al s e; } l ong m = ( l ong) Mat h. sqr t ( n) ; f or ( l ong i = 3; i <= m; i += 2) { i f ( n % i == 0) { r e t ur n f al s e; } } r et ur n t r ue; } }
E. LATIHAN Latihan 1 : Penerapan konsep himpunan pada interface Set
Terdapat sebuah himpunan A = {1,2,3,4,5} B = {5,6,7,8,9,10} Menggunakan class yang mengimplementasikan Interface Set, dapatkah output seperti : – A – B – A ∩ B 174
– A U B – A C B
Latihan 2 : Memahami penggunaan interface List.
Buatlah objek List, dengan data bertipe String lakukan langkah berikut : •
Tampilkan data yang terdapat pada list.
•
Baliklah data yang terdapat pada list dan tampilkan.
•
Acaklah data tersebut dan tampilkan.
•
Urutkan data tersebut dan tampilkan.
Latihan 3 : Memahami penggunaan interface List (2)
Buatlah class Mahasiswa dengan informasi nrp dan nama(bertipe String). Buatlah objek List, dengan data bertipe String lakukan langkah berikut : •
Tampilkan data yang terdapat pada list.
•
Baliklah data yang terdapat pada list dan tampilkan.
•
Acaklah data tersebut dan tampilkan.
•
Urutkan data tersebut, jangan lupa untuk mengimplementasikan interface Comparable/Comparator pada class Mahasiswa dan tampilkan.
F. TUGAS Tugas 1 : Penggunaan class LinkedList pada interface List.
Buatlah dua objek List (ArrayList) yaitu objek warna dan warnaDihapus. Objek ini berisi warna-warna, buatlah sebagian ada yang sama. Lakukan penghapusan data yang terdapat pada objek warna yang sama dengan data warna yang terdapat pada objek warnaDihapus, selanjutnya tampilkan. War na : [ MAGENTA, RED, WHI TE, BLUE, CYAN] War na yang di hapus : [ RED, WHI TE, BLUE] Out put : War na : [ MAGENTA, CYAN]
175
Tugas 2 : Pengurutan data mahasiswa berdasarkan nilai.
Buatlah class Mahasiswa dengan informasi : •
Nrp (String)
•
Nama(String)
•
Nilai(Float)
Terdapat 10 data mahasiswa yang tersimpan dalam queue, set nilai secara random antara 60-100, lakukan pengurutan data mahasiswa berdasarkan nilai tersebut !
G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di ata s dan tambahkan analisa.
176
PRAKTIKUM 20 JAVA COLLECTION FRAMEWORK : MAP
A. TUJUAN PEMBELAJARAN
1. Mengetahui mengenai interface Map. 2. Memahami cara penyimpanan objek menggunakan Map. 3. Mengetahui implementasi penggunaan dari class-class pada interface Map.
B. DASAR TEORI
Collection adalah suatu objek yang bisa digunakan untuk menyimpan sekumpulan objek. Objek yang ada dalam Collection disebut elemen. Collection menyimpan elemen yang bertipe Object, sehingga berbagai tipe objek bisa disimpan dalam Collection. Class-class mengenai Collection tergabung dalam Java Collection Framework. Classclass Collection diletakkan dalam package java.util dan mempunyai dua interface utama yaitu Col l ect i on dan Map. Mulai java 1.5 (juga dikenal sebagai J2SE 5), semua class yang termasuk Java Collection Framework adalah class generics. Untuk kompatibilitas dengan versi java sebelumnya, penggunaan generics tidak diharuskan, namun sangat disarankan. Collection terbagi menjadi 3 kelompok yaitu Set, List dan Map. Berikut ini adalah struktur hierarki interface dan class yang termasuk dalam kelompok collection ini.
177
Java Collections Framework terbagi menjadi tiga ke lompok: •
Set
Set mengikuti model himpunan, dimana objek/anggota yang tersimpan dalam Set harus unik. Urutan maupun letak dari anggota tidaklah penting, hanya keberadaan anggota saja yang penting. Class-class yang mengimplementasikan interface Set adalah HashSet . Interface SortedSet merupakan subInterface dari interface Set. Untuk mengurutkan Set, kita dapat menggunakan class yang mengimplementasikan interface SortedSet yaitu clas TreeSet. •
List
List digunakan untuk menyimpan sekumpulan objek berdasarkan urutan masuk (ordered) dan menerima duplikat. Cara penyimpanannya seperti array, oleh sebab itu memiliki posisi awal dan posisi akhir, menyisipkan objek pada posisi tertentu, mengakses dan menghapus isi list, dimana semua proses ini selalu didasarkan pada urutannya. Class-
178
class yang mengimplementasikan interface List adalah Vect or ,
St ack,
Li nked
Li st dan Ar r ay Li st . Terdapat interface Queue yang cara penyimpanan seperti List, interface ini menyimpan objek menggunakan metode FIFO (First In First Out) yaitu objek yang masuk pertama keluar pertama. Class-class yang mengimplementasikan interface Queue adalah
Pr i or i t yQueue
dan
Li nkedLi st .
Data
yang
tersimpan
pada
objek
Pr i or i t yQueue akan diurutkan, data tersebut harus mengimplementasikan objek Comparable atau Comparator. •
Map
Perbedaaan mendasar map dengan collection yang lain, untuk menyimpan objek pada Map, perlu sepasang objek, yaitu key yang bersifat unik dan nilai yang disimpan. Untuk mengakses nilai tersebut maka kita perlu mengetahui key dari nilai tersebut. Map juga dikenal sebagai dictionary/kamus. Pada saat menggunakan kamus, perlu suatu kata yang digunakan untuk pencarian. Class-class yang mengimplementasikan Map adalah
Hasht abl e, HashMap, Li nkedHashMap. Untuk mengurutkan Map menggunakan interface Sor t edMap, class yang mengimplementasikan interface tersebut adalah
Tr eeMap.
C. TUGAS PENDAHULUAN
Buatlah resume 1 halaman mengenai interface Map dan 2 contoh dari interface Map.
D. PERCOBAAN Percobaan 1 : Penggunaan HashMap, menambahkan data, menghapus data tertentu dan menghapus semua data pada objek HashMap. i mport j ava. ut i l . HashMap;
public class RemoveValueFromHashMapExample { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { / / cr eat e HashMap obj ect HashMap hMap = new HashMap( ) ; / / add key val ue pai r s t o HashMap hMap. put ( "1", " One") ; hMap. put ( "2", " Two") ;
179
hMap. put ( "3", " Thr ee") ; Obj ect obj obj = hMap. ap. r emove( ove( " 2") ; Syst em. out out . pr i nt l n( obj obj + " Rem Removed oved f r om HashM ashMap" ap" ) ; hMap. cl ear ( ) ; Syst em. out out . pr i nt l n( " Tot Tot al key key val val ue pai r s i n HashM shMap ar e : " + hMap. si ze( ze( ) ) ; } }
Percobaan 2 : Melakukan iterasi pada value HashMap i mpor t j ava. ut i l . Col l ec t i on; i mport j ava. va. ut i l . HashM shMap; i mpor t j ava. ut i l . I t er at at or ; public class IterateValuesOfHas IterateValuesOfHashMapExample hMapExample {
publ i c st st at i c voi d mai n( St r i ng[ ] ar gs) { / / cr eat eat e HashM ashMap obj obj ect HashM as hMap hMap = new HashM as hMap( ) ; / / add add key val val ue pai pai r s t o HashMap hMap. put ( "1", " One") ; hMap. put ( "2", " Two") ; hMap. put ( "3", " Thr ee") ; Col l ect i on c = hMap. val val ues( ) ; / / obt ai n an I t er a t or or f or Col l ec t i on I t er e r at at or o r i t r = c . i t er at at or ( ) ; / / i t er at e t hr oug ough HashM shMap val val ues i t er at or whi l e( i t r . has Ne Next ( ) ) Sys t em em. out . pr i nt l n( i t r . next ( ) ) ; } }
Percobaan 3 : Mendapatkan key, melakukan iterasi pada key dan menghapus key tertentu pada objek HashMap public class GetSetViewOfKeysFr GetSetViewOfKeysFromHashMapExample omHashMapExample {
publ i c st st at i c voi d mai n( St r i ng[ ] ar gs) { / / cr eat eat e HashM ashMap obj obj ect HashM as hMap hMap = new HashM as hMap( ) ; / / add add key val val ue pai pai r s t o HashMap hMap. put ( "1", " One") ; hMap. put ( "2", " Two") ; hMap. put ( "3", " Thr ee") ;
180
Set s t = hMap. ap. keyS keySet et ( ) ; System. out . pr i nt l n( "Set "Set cr eat ed f r om HashM shMap Keys con cont ai ns : ") ; / / i t er at e throug through t he Set of keys keys I t er er at at or o r i t r = s t . i t er er at at or or ( ) ; whi l e( i t r . has Ne Next ( ) ) Sys t em em. out . pr i nt l n( i t r . next ( ) ) ; / / r emove 2 f r om Set st . r emove( "2") ; } }
Percobaan 4 : Mengecek apakah objek HashMap mempunyai value tertentu. i mport j ava. va. ut i l . HashM shMap; public class CheckValueOfHashMa CheckValueOfHashMapExample pExample {
publ i c st st at i c voi d mai n( St r i ng[ ] ar gs) { / / cr eat eat e HashM ashMap obj obj ect HashM as hMap hMap = new HashM as hMap( ) ; / / add add key val val ue pai pai r s t o HashMap hMap. put ( "1", " One") ; hMap. put ( "2", " Two") ; hMap. put ( "3", " Thr ee") ; bool ool ean ean bl bl nExi st s = hMap. ap. con cont ai nsVa sVal ue( " Two") ; System. out . pr i nt l n( "Two exi exi st s i n HashM shMap ? : " + bl nExi st s) ; } }
Percobaan 5 : Mengecek apakah objek HashMap berisi key tertentu i mport j ava. va. ut i l . HashM shMap; public class CheckKeyOfHashMapE CheckKeyOfHashMapExample xample {
publ i c st st at i c voi d mai n( St r i ng[ ] ar gs) { / / cr eat eat e HashM ashMap obj obj ect HashM as hMap hMap = new HashM as hMap( ) ; / / add add key val val ue pai pai r s t o HashMap hMap. put ( "1", " One") ; hMap. put ( "2", " Two") ; hMap. put ( "3", " Thr ee") ; bool ool ean ean bl bl nExi st s = hMap. ap. con cont ai nsKe sKey( " 3" ) ;
181
System. out . pr i nt l n( "3 exi exi st s i n HashM shMap ? : " + bl nExi st s) ; } }
Percobaan 6 : Menambahkan objek Hash Map ke objek Hashtable dan penggunaan Enumeration. i mpor t j ava. ut i l . Enumer at i on; i mpor t j ava. ut i l . Hasht sht abl e; i mport j ava. va. ut i l . HashM shMap; public class CreateHashtableFro CreateHashtableFromHashMap mHashMap {
publ i c st st at i c voi d mai n( St r i ng[ ] ar gs) { / / cr eat eat e Hash HashM Map HashM as hMap hMap = new HashM as hMap( ) ; / / popu popull at e HashM HashMap hMap. put ( "1", " One") ; hMap. put ( "2", " Two") ; hMap. put ( "3", " Thr ee") ; / / cr eat eat e new Hasht asht abl abl e Hasht asht abl abl e ht ht = new new Hasht abl abl e( ) ; / / popu opul at e Hasht abl e ht . put ( " 1" , " Thi Thi s val val ue woul oul d be REPLA PLACED ! ! " ) ; ht . put ( " 4" 4" , " F ou our " ) ; / / pr i nt val val ues of Hasht sht abl e be bef ore cop copy f r om HashM shMap System. out . pr i nt l n( "Ha "Hasht sht abl e con cont ent s be bef or e cop copy") ; Enumer at i on e = ht . el ement ent s( ) ; whi l e( e. hasMoreEl oreEl ement s( ) ) Syst em. out . pr i nt l n( e. next El ement ( ) ) ; ht . put Al l ( hMap) ; / / di spl spl ay con cont ent s of of Hasht sht abl e Syst em. out . pr i nt l n( "Ha "Hasht sht abl e con cont ent s af t er cop copy") ; e = ht . el ement s( ) ; whi l e( e. hasMoreEl oreEl ement s( ) ) Syst em. out . pr i nt l n( e. next El ement ( ) ) ; } }
Percobaan 7 : Mendapatkan key terendah dan tertinggi dari objek TreeMAp. i mpor t j ava. ut i l . Tr eeMap; public class GetLowestHighestKe GetLowestHighestKeyTreeMapExample yTreeMapExample {
publ i c st st at i c voi d mai n( St r i ng[ ] ar gs) {
182
/ / cr eat eat e TreeM TreeMap obj obj ect Tr eeMap t r eeMap = new Tr eeMap( ) ; / / add add key key val val ue pai r s t o Tr Tr eeM eeMap t r eeMap. put ( "1", "On "One") ; t r eeMap. put ( "3", "Thr "Thr ee") ; t r eeMap. put ( "2", "Two") ; t r eeMap. put ( "5", "5", "Fi ve") ; t r eeMap. put ( "4", "Fou "Four ") ; System. out . pr i nt l n( "Lowest key key St St or ed i n J ava Tr eeMap i s : " + t r eeMap. f i r st Key( ) ) ; System. out . pr i nt l n( "Hi "Hi ghest key key St St or ed i n J ava Tr eeMap i s : " + t r eeMap. l ast Key( ) ) ; } }
Percobaan 8 : Mendapatkan TailMap dari objek TreeMap i mpor t j ava. ut i l . Sor t edMap; i mpor t j ava. ut i l . Tr eeMap; public class GetTailMapFromTree GetTailMapFromTreeMapExample MapExample {
publ i c st st at i c voi d mai n( St r i ng[ ] ar gs) { / / cr eat eat e TreeM TreeMap obj obj ect Tr eeMap t r eeMap = new Tr eeMap( ) ; / / add add key key val val ue pai r s t o Tr Tr eeM eeMap t r eeMap. put ( "1", "On "One") ; t r eeMap. put ( "3", "Thr "Thr ee") ; t r eeMap. put ( "2", "Two") ; t r eeMap. put ( "5", "5", "Fi ve") ; t r eeMap. put ( "4", "Fou "Four ") ; Sor t edM edMap sor sor t edM edMap = t r eeM eeMap. ap. t ai l Map( ap( " 2" ) ; System. out . pr i nt l n( "Tai "Tai l Map Co Cont ai ns : " + sort edMap) ; } }
Percobaan 9 : Mendapatkan SubMap dari objek TreeMap i mpor t j ava. ut i l . Tr eeMap; i mpor t j ava. ut i l . Sor t edMap; public class GetSubMapFromTreeM GetSubMapFromTreeMapExample apExample {
publ i c st st at i c voi d mai n( St r i ng[ ] ar gs) {
183
/ / cr eat eat e TreeM TreeMap obj obj ect Tr eeMap t r eeMap = new Tr eeMap( ) ; / / add add key key val val ue pai r s t o Tr Tr eeM eeMap t r eeMap. put ( "1", "On "One") ; t r eeMap. put ( "3", "Thr "Thr ee") ; t r eeMap. put ( "2", "Two") ; t r eeMap. put ( "5", "5", "Fi ve") ; t r eeMap. put ( "4", "Fou "Four ") ; Sor Sor t edM edMap sor t edM edMap = t r eeM eeMap. ap. subM subMap( ap( " 2", " 5") ; Syst em. out out . pr i nt l n( " Sort edMap Cont ont ai ns : " + sor t edMap) ; } }
Percobaan 10 : Mendapatkan HeadMap dari objek TreeMap i mpor t j ava. ut i l . Sor t edMap; i mpor t j ava. ut i l . Tr eeMap; public class GetHeadMapFromTree GetHeadMapFromTreeMapExample MapExample {
publ i c st st at i c voi d mai n( St r i ng[ ] ar gs) { / / cr eat eat e TreeM TreeMap obj obj ect Tr eeMap t r eeMap = new Tr eeMap( ) ; / / add add key key val val ue pai r s t o Tr Tr eeM eeMap t r eeMap. put ( "1", "On "One") ; t r eeMap. put ( "3", "Thr "Thr ee") ; t r eeMap. put ( "2", "Two") ; t r eeMap. put ( "5", "5", "Fi ve") ; t r eeMap. put ( "4", "Fou "Four ") ; Sor Sor t edM edMap sor t edM edMap = t r eeM eeMap. ap. head headM Map( ap( " 3") ; Syst em. out out . pr i nt l n( " Head ead Map Cont ont ai ns : " + sor t edM edMap) ap) ; } }
E. LATIHAN Latihan 1 : Mengetahui penggunaan class TreeMap
Inputkan kalimat, buatlah sebagian kata-kata dalam kalimat tersebut ada yang sama, output berupa kata (sebagai key) dan jumlah kata (value) dalam kalimat tersebut yang tersimpan dalam TreeMap, selanjutnya tampilkan. Input : televisi kursi televisi kursi meja televisi televisi monitor. Output : kursi = 2 meja = 1 monitor = 1 televisi = 3
184
Latihan 2 : Mengetahui penggunaan class TreeMap
Melanjutkan latihan 1, tampilkan : •
Tampilkan nilai terendah dan tertinggi Out put : Ni l ai t erendah : Mej a = 1 Ni l ai t er t i nggi : Tel evi s i = 3
•
Tampilkan berdasarkan key dengan awalan m. Out put : mej a = 1 moni t or = 1
F. TUGAS Tugas 1 : Ibukota propinsi di Indonesia
Terdapat objek TreeMap 1 yang berisi pulau(sebagai key)
beserta propinsi-
propinsinya(value). Terdapat objek TreeMap 2 yang berisi propinsi(sebagai key) beserta ibukotanya(value). Tampilkan : •
Ibukota propinsi yang terdapat di pulau Sumatera
•
Ibukota propinsi yang terdapat di pulau Jawa
•
Ibukota propinsi yang berawalan S (Sumatera Utara, Sumatera Barat, Sumatera Selatan, Sulawesi Barat, Sulawesi Tengah, Sulawesi Utara, Sulawesi Tenggara, Sulawesi Selatan)
G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di ata s dan tambahkan analisa.
185
PRAKTIKUM 21 COMPARABLE
A. TUJUAN PEMBELAJARAN
1. Mengetahui untuk mengurutkan data dengan cara membandingkan satu objek dengan objek lainnya. 2. Mengetahui class-class di Java yang mengimplementasikan interface Comparable. 3. Mengetahui cara mengurutkan data dengan class yang didefinisikan sendiri, dengan cara mengimplementasikan interface Compable.
B. DASAR TEORI
Pada kehidupan nyata, object-object sering dibandingkan, misal : •
Mobil Andi lebih mahal dibandingkan dengan mobil Budi
•
Buku A lebih tebal dibandingkan dengan Buku B
•
Usia Andi lebih muda dibandingkan dengan usia Intan
Dalam pemrograman object oriented, sering sekali ada kebutuhan untuk membandingkan object-object dari class yang sama, misalkan membandingkan object untuk mengurutkan data, pencarian data yang diurutkan berdasarkan umur. Pada praktikum ini akan membahas
bagaimana
merancang
object
dari
class
untuk
bisa
dibandingkan
menggunakan interface java.lang.Comparable and java.util.Comparator.
B.1 Mengurutkan Objek String
Terdapat array dengan tipe String, untuk mengurutkan data String pada array gunakan Arrays.sort(). i mpor t j ava. ut i l . Ar r ays ; public class ArrayString {
publ i c st at i c voi St r i ng ani mal ani mal s[ 0] = ani mal s[ 1] =
d mai n( St r i ng ar gs[ ] ) { s[ ] = new St r i ng[ 6] ; " snake" ; " kangar oo" ;
185
ani mal s[ 2] = " wombat " ; ani mal s[ 3] = "bi r d"; Syst em. out . pr i nt l n( " \ nSEBELUM DI SORTI NG" ) ; f or ( i nt i = 0; i < 4; i ++) { Syst em. out . pr i nt l n( "ani mal " + i + " : " + ani mal s[ i ] ) ; } Ar r ays. sor t ( ani mal s, 0, 4) ; Syst em. out . pr i nt l n( " \ nSETELAH DI SORTI NG" ) ; f or ( i nt i = 0; i < 4; i ++) { Syst em. out . pr i nt l n( "ani mal " + i + " : " + ani mal s[ i ] ) ; } } }
Output : SEBELUM DI SORTI NG ani mal 0 : snake ani mal 1 : kangar oo ani mal 2 : wombat ani mal 3 : bi r d SETELAH DI SORTI NG ani mal 0 : bi r d ani mal 1 : kangar oo ani mal 2 : snake ani mal 3 : wombat
Terdapat data String yang tersimpan dalam ArrayList, untuk mengurutkan data menggunakan Collections.sort() i mpor t j ava. ut i l . Ar r ayL i s t ; i mpor t j ava. ut i l . Col l ec t i ons ; publ i c cl ass Sor t Li st { publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { Ar r ayLi st i nsect s = new Ar r ayLi st ( ) ; i nsect s. add( "mosqui t o") ; i ns ec t s . add( " but t er f l y" ) ; i nsects. add( "dr agonf l y") ; i ns ec t s . add( " f l y" ) ; Syst em. out . pr i nt l n( " \ nSEBELUM DI SORTI NG" ) ; i nt s i z e = i ns ect s . s i z e( ) ; f or ( i nt i = 0; i < si ze; i ++) { Syst em. out . pr i nt l n( "i nsect " + i + " : " + ( St r i ng) i ns ect s . get ( i ) ) ; } Col l ect i ons . s or t ( i ns ect s ) ;
186
Syst em. out . pr i nt l n( " \ nSETELAH DI SORTI NG" ) ; f or ( i nt i = 0; i < si ze; i ++) { Syst em. out . pr i nt l n( "i nsect " + i + " : " + ( St r i ng) i ns ect s . get ( i ) ) ; } } }
Output : SEBELUM DI SORTI NG i nsect 0 : mosqui t o i ns ec t 1 : but t er f l y i nsect 2 : dr agonf l y i ns ect 3 : f l y SETELAH DI SORTI NG i ns ec t 0 : but t er f l y i nsect 1 : dr agonf l y i ns ect 2 : f l y i nsect 3 : mosqui t o
B.2 Mengurutkan Objek Yang Kita Definisikan Sendiri
Kita buat class Mahasiswa yang terdapat informasi nama dan nrp dengan tipe String. Terdapat beberapa data mahasiswa yang disimpan di array, selanjutnya kita urutkan berdasarkan nrp. public class Mahasiswa { pr i vat e St r i ng nr p ; pr i vat e St r i ng nama ;
publ i c Mahasi swa( St r i ng nr p, St r i ng nama) { t hi s. nr p = nr p; t hi s. nama = nama; } publ i c St r i ng get Nama( ) { r et ur n nama; } publ i c voi d set Nama( St r i ng nama) { t hi s. nama = nama; } publ i c St r i ng get Nr p( ) { r et ur n nr p; } publ i c voi d set Nr p( St r i ng nr p) { t hi s. nr p = nr p; }
187
@Over r i de publ i c St r i ng t oSt r i ng( ) { r et ur n "Mahasi swa{" + " nr p=" + nr p + " nama=" + nama + ' }' ; } }
Buatlah class TestMahasiswa untuk menampilkan output : i mpor t j ava. ut i l . Ar r ays ; public class TestMahasiswa {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Mahasi swa dat aMhs[ ] = {new Mahasi swa( " 05" , " Cahya") , new Mahasi swa( "04", "Rudi ") , new Mahasi swa( " 01" , " Endah" ) , new Mahasi swa( " 03" , " Ri t a") , new Mahasi swa( "02", "Ti ka") }; Syst em. out . pr i nt l n( " SEBELUM SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; Ar r ays. sor t ( dat aMhs) ; Syst em. out . pr i nt l n( " \ nSESUDAH SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; } }
Output : Except i on i n t hr ead " mai n" j ava. l ang. Cl assCast Except i on: pr ak. Mahasi swa cannot be cast t o j ava. l ang. Compar abl e at j ava. ut i l . Ar r ays. mer geSor t ( Ar r ays. j ava: 1144) at j ava. ut i l . Ar r a ys . s or t ( Ar r ays . j ava: 1079) at pr ak. Test Mahasi swa. mai n( Test Mahasi swa. j ava: 16) J ava Resul t : 1
Pada output program terjadi exception. Mengapa? Karena untuk mengurutkan objek (proses mengurutkan ini dilakukan dengan cara membandingkan satu objek dengan objek yang lain), maka objek tersebut harus mengimplementasikan interface Comparable. Dengan mengimplementasikan interface Comparable pada sebuah class, menyebabkan object-object tersebut bisa dibandingkan (comparable). Kalau pada percobaan sebelumnya data yang diurutkan adalah String, dapat diurutkan karena String mengimplementasikan interface Comparable. publ i c f i nal cl as s String ext ends Obj ect i mpl ement s Ser i al i z abl e, Compar abl e, Char Sequence
Interface ini mempunyai sebuah method compar eTo( ) yang menentukan bagaimana cara membandingkan antara dua object dari class tersebut. 188
Bentuk methodnya:
publ i c i nt compar eTo( Obj ect o) Mehod compar eTo( ) menerima Object, sehingga kita bisa memasukkan sembarang object, tapi harus mempunyai tipe yang sama. Kalau object yang kita masukkan adalah object yang berbeda maka melemparkan exception java.lang.ClassCastException. Return value dari method compareTo() •
0 jika dua object yang dibandingkan sama.
•
Bilangan positif, jika object 1 lebih besar dibandingkan dengan object 2
•
Bilangan negatif, jika object 1 lebih kecil dibandingkan dengan object 2
Bagaimana caranya supaya bisa menggunakan Array.sort() pada contoh kasus diatas. Pada
class
Mahasiswa
implementasikan
interface
Comparable,
berarti
harus
mengimplementasikan method compareTo(). Isilah method ini dengan tujuan untuk membandingkan object dari class Mahasiswa berdasarkan umur. Jangan lupa untuk mengcasting object menjadi object dari class Mahasiswa terlebih dahulu. public class Mahasiswa impl ements Comparable {
pr i vat e St r i ng nr p ; pr i vat e St r i ng nama ; publ i c Mahasi swa( St r i ng nr p, St r i ng nama) { t hi s. nr p = nr p; t hi s. nama = nama; } publ i c St r i ng get Nama( ) { r et ur n nama; } publ i c voi d set Nama( St r i ng nama) { t hi s. nama = nama; } publ i c St r i ng get Nr p( ) { r et ur n nr p; } publ i c voi d set Nr p( St r i ng nr p) { t hi s. nr p = nr p; } @Over r i de publ i c St r i ng t oSt r i ng( ) { r et ur n "Mahasi swa{" + " nr p=" + nr p + " nama=" + nama + ' }' ; }
189
public int compareTo(Object o) { Mahasiswa m2 = (Mahasisw a) o ; return this.nrp.compareTo(m2.nrp); }
}
Selanjutnya jalankan class TestMahasiswa lagi. Output : SEBELUM SORTI NG [ Mahasi swa{nr p=05 nama=Cahya}, Mahasi swa{nr p=04 nama=Rudi }, Mahasi swa{nr p=01 nama=Endah}, Mahasi swa{nr p=03 nama=Ri t a}, Mahasi swa{nr p=02 nama=Ti ka}] SESUDAH SORTI NG [ Mahasi swa{nr p=01 nama=Endah}, Mahasi swa{nr p=02 nama=Ti ka}, Mahasi swa{nr p=03 nama=Ri t a}, Mahasi swa{nr p=04 nama=Rudi }, Mahas i swa{nr p=05 nama=Cahya}]
B.3 Penggunaan Class Comparator
Dengan mengimplementasikan interface Compar abl e kita hanya bisa menentukan satu cara saja untuk membandingkan object-object dari class Mahasi swa, untuk contoh sebelumnya, yang kita bandingkan berdasarkan nrp. Bagaimana jika object-object dari class Mahasi swa diurutkan berdasarkan nama? Berarti object-object tersebut dibandingkan berdasarkan nama. Kita masih memerlukan satu cara lagi untuk membandingkan object-object dari class Mahasi swa. Kita memerlukan comparator. Untuk
membuat
comparator,
buat
class
yang
mengimplementasikan
interface
java.util.Comparator, dan method compar e( ) .
publ i c i nt compar e( Obj ect o1, Obj ect o2) Return value dari method compare() •
0 jika dua object yang dibandingkan sama.
•
Bilangan positif, jika object 1 lebih besar dibandingkan dengan object 2
•
Bilangan negatif, jika object 1 lebih kecil dibandingkan dengan object 2
Class Comparator public class NamaComparator implements Comparator { publ i c i nt compar e( Obj ect o1, Obj ect o2) { Mahasi swa m1 = ( Mahasi swa) o1;
190
Mahasi swa m2 = ( Mahasi swa) o2; r et ur n m1. get Nama( ) . compar eTo( m2. get Nama( ) ) ; } }
Penggunaan objek Comparator pada Arrays.sort() public class TestMahasiswa2 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Mahasi swa dat aMhs[ ] = {new Mahasi swa( " 05" , " Cahya") , new Mahasi swa( "04", "Rudi ") , new Mahasi swa( " 01" , " Endah" ) , new Mahasi swa( " 03" , " Ri t a") , new Mahasi swa( "02", "Ti ka") };
Syst em. out . pr i nt l n( " SEBELUM SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; Ar r ays. sor t ( dat aMhs, new NamaCompar at or ( ) ) ; Syst em. out . pr i nt l n( " \ nSESUDAH SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; } }
Output : Mengurutkan Data Mahasiswa berdasarkan Nama SEBELUM SORTI NG [ Mahasi swa{nr p=05 nama=Cahya}, Mahasi swa{nr p=04 nama=Rudi }, Mahasi swa{nr p=01 nama=Endah}, Mahasi swa{nr p=03 nama=Ri t a}, Mahasi swa{nr p=02 nama=Ti ka}] SESUDAH SORTI NG [ Mahasi swa{nr p=05 nama=Cahya}, Mahasi swa{nr p=01 nama=Endah}, Mahasi swa{nr p=03 nama=Ri t a}, Mahasi swa{nr p=04 nama=Rudi }, Mahasi swa{nr p=02 nama=Ti ka}]
C. TUGAS PENDAHULUAN
Buatlah resume 1 halaman mengenai interface Comparable dan berikan 1 contoh penggunaan interface Comparable.
D. PERCOBAAN Percobaan 1 : Mengurutkan data dengan tipe String yang tersimpan di array. i mpor t j ava. ut i l . Ar r ays ; public class ArrayString {
publ i c st at i c voi St r i ng ani mal ani mal s[ 0] = ani mal s[ 1] = ani mal s[ 2] =
d mai n( St r i ng ar gs[ ] ) { s[ ] = new St r i ng[ 6] ; " snake" ; " kangar oo" ; " wombat " ;
191
ani mal s[ 3] = "bi r d"; Syst em. out . pr i nt l n( " \ nSEBELUM DI SORTI NG" ) ; f or ( i nt i = 0; i < 4; i ++) { Syst em. out . pr i nt l n( "ani mal " + i + " : " + ani mal s[ i ] ) ; } Ar r ays. sor t ( ani mal s, 0, 4) ; Syst em. out . pr i nt l n( " \ nSETELAH DI SORTI NG" ) ; f or ( i nt i = 0; i < 4; i ++) { Syst em. out . pr i nt l n( "ani mal " + i + " : " + ani mal s[ i ] ) ; } } }
Percobaan 2 : Mengurutkan data dengan tipe String yang tersimpan di List. i mpor t j ava. ut i l . Ar r ayL i s t ; i mpor t j ava. ut i l . Col l ec t i ons ; publ i c cl ass Sor t Li st { publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { Ar r ayLi st i nsect s = new Ar r ayLi st ( ) ; i nsect s. add( "mosqui t o") ; i ns ec t s . add( " but t er f l y" ) ; i nsects. add( "dr agonf l y") ; i ns ec t s . add( " f l y" ) ; Syst em. out . pr i nt l n( " \ nSEBELUM DI SORTI NG" ) ; i nt s i z e = i ns ect s . s i z e( ) ; f or ( i nt i = 0; i < si ze; i ++) { Syst em. out . pr i nt l n( "i nsect " + i + " : " + ( St r i ng) i ns ect s . get ( i ) ) ; } Col l ect i ons . s or t ( i ns ect s ) ; Syst em. out . pr i nt l n( " \ nSETELAH DI SORTI NG" ) ; f or ( i nt i = 0; i < si ze; i ++) { Syst em. out . pr i nt l n( "i nsect " + i + " : " + ( St r i ng) i ns ect s . get ( i ) ) ; } } }
Percobaan 3 : Membuat class Mahasiswa dengan variabel nama dan nrp dengan tipe String. Membuat data mahasiswa yang tersimpan di array. Selanjutnya lakukan pengurutan data mahasiswa tersebut, apa yang terjadi? Jelaskan! public class Mahasiswa { pr i vat e St r i ng nr p ; pr i vat e St r i ng nama ;
192
publ i c Mahasi swa( St r i ng nr p, St r i ng nama) { t hi s. nr p = nr p; t hi s. nama = nama; } publ i c St r i ng get Nama( ) { r et ur n nama; } publ i c voi d set Nama( St r i ng nama) { t hi s. nama = nama; } publ i c St r i ng get Nr p( ) { r et ur n nr p; } publ i c voi d set Nr p( St r i ng nr p) { t hi s. nr p = nr p; } @Over r i de publ i c St r i ng t oSt r i ng( ) { r et ur n "Mahasi swa{" + " nr p=" + nr p + " nama=" + nama + ' }' ; } }
i mpor t j ava. ut i l . Ar r ays ; public class TestMahasiswa {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Mahasi swa dat aMhs[ ] = {new Mahasi swa( " 05" , " Cahya") , new Mahasi swa( "04", "Rudi ") , new Mahasi swa( " 01" , " Endah" ) , new Mahasi swa( " 03" , " Ri t a") , new Mahasi swa( "02", "Ti ka") }; Syst em. out . pr i nt l n( " SEBELUM SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; Ar r ays. sor t ( dat aMhs) ; Syst em. out . pr i nt l n( " \ nSESUDAH SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; } }
Percobaan 4 : Mengimplementasikan interface Comparable pada class Mahasiswa untuk membandingkan antar objek mahasiswa berdasarkan nrp, lalu urutkan data mahasiswa, apa yang terjadi ? Jelaskan ! public class Mahasiswa impl ements Comparable {
pr i vat e St r i ng nr p ; pr i vat e St r i ng nama ; publ i c Mahasi swa( St r i ng nr p, St r i ng nama) {
193
t hi s. nr p = nr p; t hi s. nama = nama; } publ i c St r i ng get Nama( ) { r et ur n nama; } publ i c voi d set Nama( St r i ng nama) { t hi s. nama = nama; } publ i c St r i ng get Nr p( ) { r et ur n nr p; } publ i c voi d set Nr p( St r i ng nr p) { t hi s. nr p = nr p; } @Over r i de publ i c St r i ng t oSt r i ng( ) { r et ur n "Mahasi swa{" + " nr p=" + nr p + " nama=" + nama + ' }' ; } public int compareTo(Object o) { Mahasiswa m2 = (Mahasisw a) o ; return this.nrp.compareTo(m2.nrp); }
}
E. LATIHAN Latihan 1 : Sebutkan class-class yang mengimplementasikan interface Comparable.
Latihan 2 : Kembangkan untuk Class Mahasiswa dengan memberikan variabel baru
berupa nilai IPK (double), selanjutkan lakukan pengurutan data Mahasiswa berdasarkan nrp, nama dan nilai IPK (menggunakan Comparable)
Latihan 3 : Pada Supermarket Buah, terdapat beberapa macam buah dan informasi stock
dari buah tersebut. Terdapat menu penjualan (supermarket ke konsumen) dan pembelian (supermarket ke pemasok) (menggunakan Comparable)
F. TUGAS Tugas 1 : Permainan Remi
194
Pada permainan Remi terdapat 52 kartu, terdapat empat jenis kartu yaitu hati, keriting, wajik dan waru. Setiap jenis kartu terdapat 13 kartu yaitu dua, tiga, empat, lima, enam, tujuh, delapan, sembilan, sepuluh, jack, queen, king, ace. Kartu-kartu ini bisa dibandingkan berdasarkan aturan tertentu. Untuk kartu dengan jenis yang sama, maka misalkan untuk kartu dua hati memiliki nilai yang lebih rendah dibandingkan dengan sembilan hati, kartu king hati lebih tinggi dibandingkan dengan jack hati. Di bawah ini adalah urutan yang berlaku berdasarkan jenis kartu. Untuk selanjutnya urutan ini disebut dengan Bagi anMuka dua, t i ga, empat , l i ma, enam, t uj uh, del apan, sembi l an, sepul uh, j ack, quee n, ki ng, ace
Untuk mengimplementasikan Permainan Remi maka buat : •
Enum Bagian Muka
•
Class Kartu : terdiri dari dua variabel yaitu variabel BagianMuka(tipe Enum BagianMuka) dan variabel jenis(tipe String) Contoh :
•
•
ace keriting (bagianMuka : ace, jenis : keriting)
•
lima hati (bagianMuka : lima, jenis : hati)
Class TumpukanKartu : berisi variabel List dengan nama tumpukanKartu. Kerjakan method-method berikut ini di Class TumpukanKartu dan selanjutnya ujilah method tersebut. •
i ni si al i sasi ( ) : untuk membuat tumpukan kartu sebanyak 52 kartu dengan
jenis "Hati","Waru","Wajik","Keriting", masing-masing jenis mempunyai bagian muka dua,tiga,empat,lima,enam,tujuh,delapan,sembilan,sepuluh,jack,queen,king,ace. •
acakKart u( ) : untuk mengacak tumpukan kartu.
•
subLi st ( n) : untuk mengambil sebanyak n kartu dari tumpukan kartu.
•
s ubL i s t ( i nt awal , i nt akhi r ) : untuk mengambil kartu mulai dari indek
ke-awal sampai ke-(akhir-1) dari tumpukan kartu. •
i ndexOf ( Obj ect
o)
: untuk mencari objek Kartu pertama kali yang
diinginkan. Gunakan method i ndexOf ( ) pada List, tapi pada class Kartu harus 195
mengimplementasikan interface Comparable, sehingga perlu menambahkan method compar eTo( Obj ect o) . r emove( i nt awal ,
•
i nt akhi r ) : untuk menghapus tumpukan kartu mulai
dari indek ke-awal sampai ke-(akhir-1) dari tumpukan kartu.
enum BagianMuka { dua, t i ga, empat , l i ma, enam, t uj uh, del apan, sembi l an, sepul uh, j ack, queen, ki ng , ac e ; } public class Kartu { pr i vat e Bagi anMuka bagi anMuka ; pr i vat e St r i ng j eni s ; ... } public class TumpukanKartu { publ i c TumpukanKar t u( ) { t umpukanKar t u = new Vect or ( ) ; }
publ i c TumpukanKar t u( Li st t umpukanKar t u) { t hi s. t umpukanKar t u = t umpukanKar t u; } } public class TestPrak { public static void main(Stri ng args[]){
TumpukanKar t u t k = new TumpukanKar t u( ) ; t k. i ni si al i sasi ( ) ; System. out . pr i nt l n( "\ nSEBELUM DI ACAK\ n") ; Sys t e m. out . pr i nt l n( t k. t oSt r i ng( ) ) ; Syst em. out . pr i nt l n( " \ nSETELAH DI ACAK\ n" ) ; t k. acakKar t u( ) ; Sys t e m. out . pr i nt l n( t k. t oSt r i ng( ) ) ; } }
G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di ata s dan tambahkan analisa.
196
PRAKTIKUM 22 COMPARATOR
A. TUJUAN PEMBELAJARAN
1. Memahami untuk mengurutkan data dengan cara membandingkan satu objek dengan objek lainnya. 2. Mengetahui cara mengurutkan data dengan class yang didefinisikan sendiri, dengan cara mengimplementasikan Comparator.
B. DASAR TEORI
Pada kehidupan nyata, object-object sering dibandingkan, misal : •
Mobil Andi lebih mahal dibandingkan dengan mobil Budi
•
Buku A lebih tebal dibandingkan dengan Buku B
•
Usia Andi lebih muda dibandingkan dengan usia Intan
Dalam pemrograman object oriented, sering sekali ada kebutuhan untuk membandingkan object-object dari class yang sama, misalkan membandingkan object untuk mengurutkan data, pencarian data yang diurutkan berdasarkan umur. Pada praktikum ini akan membahas
bagaimana
merancang
object
dari
class
untuk
bisa
dibandingkan
menggunakan interface java.lang.Comparable and java.util.Comparator.
B.1 Mengurutkan Objek String
Terdapat array dengan tipe String, untuk mengurutkan data String pada array gunakan Arrays.sort(). i mpor t j ava. ut i l . Ar r ays ; public class ArrayString {
publ i c st at i c voi St r i ng ani mal ani mal s[ 0] = ani mal s[ 1] = ani mal s[ 2] =
d mai n( St r i ng ar gs[ ] ) { s[ ] = new St r i ng[ 6] ; " snake" ; " kangar oo" ; " wombat " ;
197
ani mal s[ 3] = "bi r d"; Syst em. out . pr i nt l n( " \ nSEBELUM DI SORTI NG" ) ; f or ( i nt i = 0; i < 4; i ++) { Syst em. out . pr i nt l n( "ani mal " + i + " : " + ani mal s[ i ] ) ; } Ar r ays. sor t ( ani mal s, 0, 4) ; Syst em. out . pr i nt l n( " \ nSETELAH DI SORTI NG" ) ; f or ( i nt i = 0; i < 4; i ++) { Syst em. out . pr i nt l n( "ani mal " + i + " : " + ani mal s[ i ] ) ; } } }
Output : SEBELUM DI SORTI NG ani mal 0 : snake ani mal 1 : kangar oo ani mal 2 : wombat ani mal 3 : bi r d SETELAH DI SORTI NG ani mal 0 : bi r d ani mal 1 : kangar oo ani mal 2 : snake ani mal 3 : wombat
Terdapat data String yang tersimpan dalam ArrayList, untuk mengurutkan data menggunakan Collections.sort() i mpor t j ava. ut i l . Ar r ayL i s t ; i mpor t j ava. ut i l . Col l ec t i ons ; publ i c cl ass Sor t Li st { publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { Ar r ayLi st i nsect s = new Ar r ayLi st ( ) ; i nsect s. add( "mosqui t o") ; i ns ec t s . add( " but t er f l y" ) ; i nsects. add( "dr agonf l y") ; i ns ec t s . add( " f l y" ) ; Syst em. out . pr i nt l n( " \ nSEBELUM DI SORTI NG" ) ; i nt s i z e = i ns ect s . s i z e( ) ; f or ( i nt i = 0; i < si ze; i ++) { Syst em. out . pr i nt l n( "i nsect " + i + " : " + ( St r i ng) i ns ect s . get ( i ) ) ; } Col l ect i ons . s or t ( i ns ect s ) ; Syst em. out . pr i nt l n( " \ nSETELAH DI SORTI NG" ) ;
198
f or ( i nt i = 0; i < si ze; i ++) { Syst em. out . pr i nt l n( "i nsect " + i + " : " + ( St r i ng) i ns ect s . get ( i ) ) ; } } }
Output : SEBELUM DI SORTI NG i nsect 0 : mosqui t o i ns ec t 1 : but t er f l y i nsect 2 : dr agonf l y i ns ect 3 : f l y SETELAH DI SORTI NG i ns ec t 0 : but t er f l y i nsect 1 : dr agonf l y i ns ect 2 : f l y i nsect 3 : mosqui t o
B.2 Mengurutkan Objek Yang Kita Definisikan Sendiri
Kita buat class Mahasiswa yang terdapat informasi nama dan nrp dengan tipe String. Terdapat beberapa data mahasiswa yang disimpan di array, selanjutnya kita urutkan berdasarkan nrp. public class Mahasiswa { pr i vat e St r i ng nr p ; pr i vat e St r i ng nama ;
publ i c Mahasi swa( St r i ng nr p, St r i ng nama) { t hi s. nr p = nr p; t hi s. nama = nama; } publ i c St r i ng get Nama( ) { r et ur n nama; } publ i c voi d set Nama( St r i ng nama) { t hi s. nama = nama; } publ i c St r i ng get Nr p( ) { r et ur n nr p; } publ i c voi d set Nr p( St r i ng nr p) { t hi s. nr p = nr p; } @Over r i de
199
publ i c St r i ng t oSt r i ng( ) { r et ur n "Mahasi swa{" + " nr p=" + nr p + " nama=" + nama + ' }' ; } }
Buatlah class TestMahasiswa untuk menampilkan o utput : i mpor t j ava. ut i l . Ar r ays ; public class TestMahasiswa {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Mahasi swa dat aMhs[ ] = {new Mahasi swa( " 05" , " Cahya") , new Mahasi swa( "04", "Rudi ") , new Mahasi swa( " 01" , " Endah" ) , new Mahasi swa( " 03" , " Ri t a") , new Mahasi swa( "02", "Ti ka") }; Syst em. out . pr i nt l n( " SEBELUM SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; Ar r ays. sor t ( dat aMhs) ; Syst em. out . pr i nt l n( " \ nSESUDAH SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; } }
Output : Except i on i n t hr ead " mai n" j ava. l ang. Cl assCast Except i on: pr ak. Mahasi swa cannot be cast t o j ava. l ang. Compar abl e at j ava. ut i l . Ar r ays. mer geSor t ( Ar r ays. j ava: 1144) at j ava. ut i l . Ar r a ys . s or t ( Ar r ays . j ava: 1079) at pr ak. Test Mahasi swa. mai n( Test Mahasi swa. j ava: 16) J ava Resul t : 1
Pada output program terjadi exception. Mengapa? Karena untuk mengurutkan objek (proses mengurutkan ini dilakukan dengan cara membandingkan satu objek dengan objek yang lain), maka objek tersebut harus mengimplementasikan interface Comparable. Dengan mengimplementasikan interface Comparable pada sebuah class, menyebabkan object-object tersebut bisa dibandingkan (comparable). Kalau pada percobaan sebelumnya data yang diurutkan adalah String, dapat diurutkan karena String mengimplementasikan interface Comparable. publ i c f i nal cl as s String ext ends Obj ect i mpl ement s Ser i al i z abl e, Compar abl e, Char Sequence
Interface ini mempunyai sebuah method compar eTo( ) yang menentukan bagaimana cara membandingkan antara dua object dari class tersebut. 200
Bentuk methodnya:
publ i c i nt compar eTo( Obj ect o) Mehod compar eTo( ) menerima Object, sehingga kita bisa memasukkan sembarang object, tapi harus mempunyai tipe yang sama. Kalau object yang kita masukkan adalah object yang berbeda maka melemparkan exception java.lang.ClassCastException. Return value dari method compareTo() •
0 jika dua object yang dibandingkan sama.
•
Bilangan positif, jika object 1 lebih besar dibandingkan dengan object 2
•
Bilangan negatif, jika object 1 lebih kecil dibandingkan dengan object 2
Bagaimana caranya supaya bisa menggunakan Array.sort() pada contoh kasus diatas. Pada
class
Mahasiswa
implementasikan
interface
Comparable,
berarti
harus
mengimplementasikan method compareTo(). Isilah method ini dengan tujuan untuk membandingkan object dari class Mahasiswa berdasarkan umur. Jangan lupa untuk mengcasting object menjadi object dari class Mahasiswa terlebih dahulu. public class Mahasiswa impl ements Comparable {
pr i vat e St r i ng nr p ; pr i vat e St r i ng nama ; publ i c Mahasi swa( St r i ng nr p, St r i ng nama) { t hi s. nr p = nr p; t hi s. nama = nama; } publ i c St r i ng get Nama( ) { r et ur n nama; } publ i c voi d set Nama( St r i ng nama) { t hi s. nama = nama; } publ i c St r i ng get Nr p( ) { r et ur n nr p; } publ i c voi d set Nr p( St r i ng nr p) { t hi s. nr p = nr p; } @Over r i de publ i c St r i ng t oSt r i ng( ) { r et ur n "Mahasi swa{" + " nr p=" + nr p + " nama=" + nama + ' }' ; }
201
public int compareTo(Object o) { Mahasiswa m2 = (Mahasisw a) o ; return this.nrp.compareTo(m2.nrp); }
}
Selanjutnya jalankan class TestMahasiswa lagi. Output : SEBELUM SORTI NG [ Mahasi swa{nr p=05 nama=Cahya}, Mahasi swa{nr p=04 nama=Rudi }, Mahasi swa{nr p=01 nama=Endah}, Mahasi swa{nr p=03 nama=Ri t a}, Mahasi swa{nr p=02 nama=Ti ka}] SESUDAH SORTI NG [ Mahasi swa{nr p=01 nama=Endah}, Mahasi swa{nr p=02 nama=Ti ka}, Mahasi swa{nr p=03 nama=Ri t a}, Mahasi swa{nr p=04 nama=Rudi }, Mahas i swa{nr p=05 nama=Cahya}]
B.3 Penggunaan Class Comparator
Dengan mengimplementasikan interface Compar abl e kita hanya bisa menentukan satu cara saja untuk membandingkan object-object dari class Mahasi swa, untuk contoh sebelumnya, yang kita bandingkan berdasarkan nrp. Bagaimana jika object-object dari class Mahasi swa diurutkan berdasarkan nama? Berarti object-object tersebut dibandingkan berdasarkan nama. Kita masih memerlukan satu cara lagi untuk membandingkan object-object dari class Mahasi swa. Kita memerlukan comparator. Untuk
membuat
comparator,
buat
class
yang
mengimplementasikan
interface
java.util.Comparator, dan method compar e( ) .
publ i c i nt compar e( Obj ect o1, Obj ect o2) Return value dari method compare() •
0 jika dua object yang dibandingkan sama.
•
Bilangan positif, jika object 1 lebih besar dibandingkan dengan object 2
•
Bilangan negatif, jika object 1 lebih kecil dibandingkan dengan object 2
Class Comparator public class NamaComparator implements Comparator { publ i c i nt compar e( Obj ect o1, Obj ect o2) { Mahasi swa m1 = ( Mahasi swa) o1;
202
Mahasi swa m2 = ( Mahasi swa) o2; r et ur n m1. get Nama( ) . compar eTo( m2. get Nama( ) ) ; } }
Penggunaan objek Comparator pada Arrays.sort() public class TestMahasiswa2 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Mahasi swa dat aMhs[ ] = {new Mahasi swa( " 05" , " Cahya") , new Mahasi swa( "04", "Rudi ") , new Mahasi swa( " 01" , " Endah" ) , new Mahasi swa( " 03" , " Ri t a") , new Mahasi swa( "02", "Ti ka") };
Syst em. out . pr i nt l n( " SEBELUM SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; Ar r ays. sor t ( dat aMhs, new NamaCompar at or ( ) ) ; Syst em. out . pr i nt l n( " \ nSESUDAH SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; } }
Output : Mengurutkan Data Mahasiswa berdasarkan Nama SEBELUM SORTI NG [ Mahasi swa{nr p=05 nama=Cahya}, Mahasi swa{nr p=04 nama=Rudi }, Mahasi swa{nr p=01 nama=Endah}, Mahasi swa{nr p=03 nama=Ri t a}, Mahasi swa{nr p=02 nama=Ti ka}] SESUDAH SORTI NG [ Mahasi swa{nr p=05 nama=Cahya}, Mahasi swa{nr p=01 nama=Endah}, Mahasi swa{nr p=03 nama=Ri t a}, Mahasi swa{nr p=04 nama=Rudi }, Mahasi swa{nr p=02 nama=Ti ka}]
C. TUGAS PENDAHULUAN
Buatlah resume 1 halaman mengenai kegunaan interface Comparator, dan 1 contoh penggunaan dari interface Comparator.
D. PERCOBAAN Percobaan 1 : Mengurutkan data secara descending, data tersimpan di ArrayList i mpor t j ava. ut i l . Ar r ayL i s t ; i mpor t j ava. ut i l . Col l ec t i ons ; i mpor t j ava. ut i l . Compar at or ; public class SortArrayListInDescendingOrderExample {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) {
203
/ / creat e an Ar r ayLi st obj ect Ar r ayLi st ar r ayLi st = new Ar r ayLi st ( ) ; / / Add el ement s t o Ar r ayl i st ar r ayL i s t . add( " A" ) ; ar r ayL i s t . add( " B" ) ; ar r ayL i s t . add( " C" ) ; ar r ayLi st . add( "D") ; ar r ayL i s t . add( " E" ) ; Comparat or compar at or = Col l ect i ons. r ever seOr der ( ) ; Syst em. out . pr i nt l n( "Bef or e sor t i ng Ar r ayLi st i n descendi ng or der : " + ar r ayLi s t ) ; Col l ecti ons. sor t ( ar r ayLi st , compar at or ) ; Syst em. out . pr i nt l n( "Af t er sor t i ng Ar r ayLi st i n descendi ng or der : " + ar r ayLi s t ) ; } }
Percobaan 2 : Membuat sendiri class yang akan diurutkan dan membuat objek Comparator. i mpor t j ava. ut i l . * ; class Employee{
pr i vat e i nt age; pr i vat e St r i ng name; publ i c voi d set Age( i nt age) { t hi s. age=age; } publ i c i nt get Age( ) { r et ur n t hi s. age; } publ i c voi d set Name( St r i ng name) { t hi s. name=name; } publ i c St r i ng get Name( ) { r et ur n t hi s. name; } } class AgeComparator implements Comparator{
publ i c i nt compar e( Obj ect emp1, Obj ect emp2) {
204
i nt emp1Age = ( ( Empl oyee) emp1) . get Age( ) ; i nt emp2Age = ( ( Empl oyee) emp2) . get Age( ) ; i f ( emp1Age > emp2Age) r et ur n 1; el se i f ( emp1Age < emp2Age) r et ur n - 1; el se r et ur n 0; } } class NameComparator implements Comparator{
publ i c i nt compar e( Obj ect emp1, Obj ect emp2) { / / par amet er ar e of t ype Obj ect , so we have t o downcast i t t o Empl oyee obj ect s St r i ng emp1Name = ( ( Empl oyee) emp1) . get Name( ) ; St r i ng emp2Name = ( ( Empl oyee) emp2) . get Name( ) ; / / uses compar eTo met hod of St r i ng cl ass t o compar e names of t he empl oyee r et ur n emp1Name. compar eTo( emp2Name) ; } } public class JavaComparatorExample{
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { / / Empl oyee arr ay whi ch wi l l hol d empl oyees Empl oyee empl oyee[ ] = new Empl oyee[ 2] ; / / set di f f er ent at t r i but es of t he i ndi vi dual empl oyee. empl oyee[ 0] = new Empl oyee( ) ; empl oyee[ 0] . set Age( 40) ; empl oyee[ 0] . set Name( " J oe" ) ; empl oyee[ 1] = new Empl oyee( ) ; empl oyee[ 1] . set Age( 20) ; empl oyee[ 1] . set Name( " Mar k") ; Syst em. out . pr i nt l n( "Or der of empl oyee bef or e sor t i ng i s") ; / / pr i nt ar r ay as i s . f or ( i nt i =0; i < empl oyee. l engt h; i ++) { Syst em. out . pr i nt l n( " Empl oyee " + ( i +1) + " name : : " + empl oyee[ i ] . get Name( ) + " , Age : : " + empl oyee[ i ] . get Age( ) ) ; }
/ / Sor t i ng arr ay on t he basi s of empl oyee age by passi ng AgeCompar at or Arrays.sort(employee, new AgeComparator());
205
System. out . pr i nt l n( "\ n\ nOr der of empl oyee af t er sor t i ng by empl oyee age i s" ) ; f or ( i nt i =0; i < empl oyee. l engt h; i ++) { Syst em. out . pr i nt l n( " Empl oyee " + ( i +1) + " name : : " + empl oyee[ i ] . get Name( ) + " , Age : : " + empl oyee[ i ] . get Age( ) ) ; } / / Sor t i ng ar r ay on t he basi s of empl oyee Name by passi ng NameCompar at or Arrays.sort(employee, new NameComparator()); System. out . pr i nt l n( "\ n\ nOr der of empl oyee af t er sor t i ng by empl oyee name i s" ) ; f or ( i nt i =0; i < empl oyee. l engt h; i ++) { Syst em. out . pr i nt l n( " Empl oyee " + ( i +1) + " name : : " + empl oyee[ i ] . get Name( ) + " , Age : : " + empl oyee[ i ] . get Age( ) ) ; } } }
Percobaan 3 : Membuat class Mahasiswa dengan variabel nama dan nrp dengan tipe String. Membuat data mahasiswa yang tersimpan di array. Selanjutnya lakukan pengurutan data mahasiswa tersebut, apa yang terjadi? Jelaskan! public class Mahasiswa { pr i vat e St r i ng nr p ; pr i vat e St r i ng nama ;
publ i c Mahasi swa( St r i ng nr p, St r i ng nama) { t hi s. nr p = nr p; t hi s. nama = nama; } publ i c St r i ng get Nama( ) { r et ur n nama; } publ i c voi d set Nama( St r i ng nama) { t hi s. nama = nama; } publ i c St r i ng get Nr p( ) { r et ur n nr p; } publ i c voi d set Nr p( St r i ng nr p) { t hi s. nr p = nr p; } @Over r i de
206
publ i c St r i ng t oSt r i ng( ) { r et ur n "Mahasi swa{" + " nr p=" + nr p + " nama=" + nama + ' }' ; } }
i mpor t j ava. ut i l . Ar r ays ; public class TestMahasiswa {
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Mahasi swa dat aMhs[ ] = {new Mahasi swa( " 05" , " Cahya") , new Mahasi swa( "04", "Rudi ") , new Mahasi swa( " 01" , " Endah" ) , new Mahasi swa( " 03" , " Ri t a") , new Mahasi swa( "02", "Ti ka") }; Syst em. out . pr i nt l n( " SEBELUM SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; Arrays.sort(dataMhs); Syst em. out . pr i nt l n( " \ nSESUDAH SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; } }
Percobaan 4 : Mengurutkan data mahasiswa berdasarkan nama, dengan mengimplementasikan interface Comparator.
Class Comparator public class NamaComparator implements Comparator { publ i c i nt compar e( Obj ect o1, Obj ect o2) { Mahasi swa m1 = ( Mahasi swa) o1; Mahasi swa m2 = ( Mahasi swa) o2; r et ur n m1. get Nama( ) . compar eTo( m2. get Nama( ) ) ; } }
Penggunaan objek Comparator pada Arrays.sort() public class TestMahasiswa2 { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Mahasi swa dat aMhs[ ] = {new Mahasi swa( " 05" , " Cahya") , new Mahasi swa( "04", "Rudi ") , new Mahasi swa( " 01" , " Endah" ) , new Mahasi swa( " 03" , " Ri t a") , new Mahasi swa( "02", "Ti ka") };
Syst em. out . pr i nt l n( " SEBELUM SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; Ar r ays. sor t ( dat aMhs, new NamaCompar at or ( ) ) ; Syst em. out . pr i nt l n( " \ nSESUDAH SORTI NG" ) ; Syst em. out . pr i nt l n( Ar r ays. t oSt r i ng( dat aMhs) ) ; } }
207
Percobaan 5 : Membuat sendiri class yang akan diurutkan dan membuat objek Comparator. Mengurutkan objek secara descending. i i i i i
mpor t mpor t mpor t mpor t mpor t
j j j j j
ava. ut i ava. ut i ava. ut i ava. ut i ava. ut i
l l l l l
. Ar r ayL i s t ; . Ar r ays ; . Col l ec t i ons ; . Compar at or ; . Li s t ;
public class EmpComparator implements Comparator { publ i c i nt compar e( Obj ect obj 1, Obj ect obj 2) { Per son emp1 = ( Per son) obj 1; Per son emp2 = ( Per son) obj 2;
i nt nameComp = emp1. get Fi r st Name( ) . compar eTo( emp2. get Fi r st Name( ) ) ; r et ur n ( ( nameComp == 0) ? emp1. get Last Name( ) . compar eTo( emp2. get Last Name( ) ) : nameComp) ; } public static void main(String args[]) { St r i ng names[ ] = { " Bar t " , " Hugo", " Li sa", " Marge" , " Homer " , " Maggi e" , " Roy" };
/ / Conver t t o l i s t Li st l i st = new Ar r ayLi st ( Ar r ays. asLi st ( names) ) ; / / Ens ur e l i s t s or t ed Collections.sort(list); Sys t em. out . pr i nt l n( " Sor t ed l i s t : [ l engt h: " + l i s t . s i z e( ) + " ] " ) ; Sys t em. out . pr i nt l n( l i s t ) ; / / Sear ch f or el ement i n l i st int index = Collections.binarySearch(list, "Maggie"); Syst em. out . pr i nt l n( " Found Maggi e @ " + i ndex) ; / / Sear ch f or el ement not i n l i st index = Collections.binarySearch(list, "Jimbo Jones"); Syst em. out . pr i nt l n( "Di dn' t f i nd J i mbo J ones @ " + i ndex) ; / / I nser t i nt newI ndex = - i ndex - 1; l i st . add( newI ndex, "J i mbo J ones") ; System. out . pr i nt l n( "Wi t h J i mbo J ones added: [ l engt h: " + l i st . si ze( ) + "] ") ; Sys t em. out . pr i nt l n( l i s t ) ; / / Mi n shoul d be Bart System.out.println(Collections.min(list)); / / Max shoul d be Roy System.out.println(Collections.max(list));
208
Comparator comp = Collections.reverseOrder();
/ / Rever sed Mi n shoul d be Roy System.out.println(Collections.min(list, comp)); / / Rever sed Max shoul d be Bar t System.out.println(Collections.max(list, comp)); } }
class Person implements Comparable { St r i ng f i r st Name, l ast Name;
publ i c Per s on( St r i ng f , St r i ng l ) { t hi s. f i r st Name = f ; t hi s. l ast Name = l ; } publ i c St r i ng get Fi r st Name( ) { r et ur n f i r st Name; } publ i c St r i ng get Last Name( ) { r et ur n l ast Name; } publ i c St r i ng t oSt r i ng( ) { r et ur n "[ name=" + f i r st Name + " , name=" + l ast Name + " ] " ; } public int compareTo(Object obj) { Per son emp = ( Per son) obj ; i nt dept Comp = f i r st Name. compar eTo( emp. get Fi r st Name( ) ) ;
r et ur n ( ( dept Comp == 0) ? l ast Name. compar eTo( emp. get Last Name( ) ) : dept Comp) ; } publ i c bool ean equal s( Obj ect obj ) { i f ( ! ( obj i nst anceof Per son) ) { r e t ur n f al s e; } Per son emp = ( Per son) obj ; r et ur n f i r st Name. equal s( emp. get Fi r st Name( ) ) && l ast Name. equal s( emp. get Last Name( ) ) ; } }
E. LATIHAN
209
Latihan 1 : Kembangkan untuk Class Mahasiswa dengan memberikan variabel baru
berupa nilai IPK (double), (double ), selanjutkan lakukan pengurutan data Mahasiswa berdasarkan nrp, nama dan nilai IPK (menggunakan Comparator).
Latihan 2 : Pada Supermarket Buah, terdapat beberapa macam buah dan informasi stock
dari buah tersebut. Terdapat menu penjualan (supermarket ke konsumen) dan pembelian (supermarket ke pemasok) (menggunakan Comparator)
F. TUGAS Tugas 1 : Ubahlah contoh FindDups di bawah ini menggunakan SortedSet untuk
menggantikan Set. Definisikan Comparator, sehingga pada saat melakukan sorting berlaku non- case sensitive. i mpor t j ava. ut i l . * ; publ i c cl ass Fi ndDups { publ i c st at i c vo voi d mai n( St r i ng[ ] ar gs) { Set Set ng> s = new new HashSet ashSet ng>( ) ; f or ( St r i ng a : ar g s) s) i f ( ! s . add( a) ) Syst yst em. out . pr i nt l n( "Du "Dupl i cat cat e de det ect ed: " + a) ; Syst em. out . pr i nt l n( s. si ze( ze( ) + " di st i nct wo wor ds: " + s) ; } }
G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di ata s dan tambahkan analisa. an alisa.
210
PRAKTIKUM 23 CLASS GENERIC, GENERICS : MEMBUAT C PADA C COLLECTION GENERIC P A. TUJUAN PEMBELAJARAN
1. Memahami mengenai konsep generic 2. Mengetahui cara merubah dari bentuk non generic menjadi generic 3. Memahami generics pada Collection
B. DASAR TEORI
Generics merupakan cara Java dalam melakukan generalisasi terhadap tipe data tanpa mengurangi kemampuan Java dalam menjaga keamanan penggunaan tipe data. public class No NonGen nGen {
Obj ect ob; ob; NonGen( en( Obj ect o) { ob = o; } Obj ect get ob( ob( ) { r et ur n ob ob; } voi d show showType( Type( ) { System. out . pr i nt l n( "Typ "Type of ob i s " + ob. get Cl ass( ) . get Name( ) ) ; } }
Pada object Box, kita bisa memasukkan sembarang object karena parameter pada method
add add( ) adalah Class Object, tapi pada saat mengambil object tersebut harus diubah sesuai dengan tipe dari object ob ject tersebut. public class No NonGenDem nGenDemo o {
publ i c st st at i c voi d mai n( St r i ng ar gs[ ] ) { NonG onGen i nt eger eger Obj ect ; i nt eger eger Obj ect = new new NonGen( en( 88) 88) ; i nt eger Obj ect . sho showTyp Type( ) ; int v = (Integer) integerObject.getob();
211
Syst em. out . pr i nt l n( "val "val ue: " + v); NonGen strOb = new NonGen("10" NonGen("10"); );
st r Ob. show showTyp Type( ) ; String str = (String) strOb.getob();
Syst em. out . pr i nt l n( "val "val ue: " + st r ) ; / / menyeb enyebab abkan kan except except i on Integer i = (Integer) strOb.getob();
} }
Terjadi exception karena pada object strOb dimasukkan object 10 tapi dengan tipe String, tapi pada saat mengambil object, diubah menjadi tipe Integer. Tipe data tidak sesuai sehingga menyebabkan terjadinya exception. Output : Type of ob i s j ava. l ang. ang. I nt eger eger val val ue: 88 Exce xcept i on i n t hr ead "mai n" j ava. va. l ang. Cl assCa ssCast Exce xcept i on: j ava. l ang. ang. St r i ng cannot be cast cas t t o j ava. l ang. ang. I nt eger eger Type of ob i s j ava. l ang. ang. St r i ng val val ue: Nonon- Gene ener i cs Test Test at com. NonGenDemo. mai n( NonGenDemo. j ava: 30) J ava Resul t : 1
Permasalahan yang muncul dengan penyimpanan objek yang non homogeneous adalah memerlukan banyak casting. Tidak ada pengecekan pada saat kompile, kesalahan baru bisa terdeteksi pada saat runtime.
Cara mendeklarasikan Class Generics
Ubah class Box Non Generics menjadi men jadi class Box Generic. Pendeklarasian type generics dengan mengubah public class Box() menjadi public class Box – T biasanya disebut parameter type formal (formal type parameter) – T adalah type parameter yang akan diganti dengan tipe sebenarnya (Type dari T bisa berupa class, interface atau tipe variabel lainnya). 212
– T adalah nama dari type parameter. public class Ge Gen n {
T ob; / / decl ar e an obj ect of t ype T Gen( en( T o) { ob = o; } T get ob( ) { r et ur n ob ob; } voi d show showType( Type( ) { System. out . pr i nt l n( "Typ "Type of T i s " + ob. get Cl ass( ) . get Name( ) ) ; } }
public class Ge GenDemo nDemo {
publ i c st st at i c voi d mai n( St r i ng ar gs[ ] ) { Gen< en i Ob; i Ob = new Gen( 88) 88) ; i Ob. show showTyp Type( ) ; int v = iOb.getob();
Syst em. out . pr i nt l n( "val "val ue: " + v); Syst em. out . pr i nt l n( ) ; Gen< en ng> st r Ob = new new Gen< en ng>( " Gener ener i cs Test " ) ; String v2 = strOb.getob();
} }
Objek i Ob adalah objek dari class Generic, menggunakan tipe data Integer, sehingga pada saat mengambil objek menggunakan fungsi get(), tidak perlu proses casting.
Aturan Penamaan Type Parameter
Nama type parameter biasanya satu huruf dan huruf besar. Jenis nama tipe parameter yang sering digunakan : – E - Element (biasanya digunakan untuk Collection Framework) – K – Key – N – Number – T - Type 213
– V - Value – S,U,V dll. - 2nd, 3rd, 4th types
Generics pada Method
Pada contoh sebelumnya, kita mendefinisikan type parameter pada level class. Sebenarnya tipe variable ini juga dapat didefinisikan pada level method. publ i c cl ass Gener ener i cMet hodTe odTest st { publ i c st at i c voi d pr pr i nt Ar r ay(E[] i nput Ar r ay) { f or ( E el ement : i nput Ar r ay) Syst em. out . pr i nt f ( "%s", el ement ) ; Sys t e m. out . pr i nt l n( " " ) ; } publ i c st at i c vo voi d mai n( St r i ng[ ] ar gs) { I nt eger [ ] i nt Ar r ay = {1, 2, 3, 4, 5} ; Doubl e[ ] doubl eAr r ay = {1. 1, 2. 2, 3. 3, 4. 4, 5. 5}; Char ac a c t er [ ] c har Ar Ar r ay = {' J ' , ' A' , ' V' , ' A' }; pr i nt Ar r ay( i nt Ar r ay) ; pr i nt Ar r ay(dou y(doubl eAr r ay) ; pr i nt Ar r ay( cha char Ar r ay) ; } }
Subtyping
Jika B adalah suatu subtype dari A dan G adalah suatu tipe data generics, maka tidak berarti G adalah subtype dari G.
Generics pada Collection
•
List myList ;
E disebut type variabel, variabel yang diganti dengan type. Jika E adalah class, maka kita bisa melewatkan subclass E. Jika E adalah interface maka kita bisa melewatkan class yang mengimplementasikan E. publ i c cl ass Ar r ayLi st Gener i cDe cDemo { publ i c st st at i c voi d mai n( St r i ng[ ] ar gs) { Ar r ayLi st dat a = new Ar r ayLi st ( ) ; dat a. add( "he "hel l o") ; dat a. add( " good oodbye" ye" ) ; / / dat a. add( new Dat e( ) ) ; Thi s won' on' t com compi l e! }
214
Objek List data bertipe String, sehingga yang bisa dimasukkan hanya bertipe String saja, jika kita memasukkan objek selain String maka error.
Type parameter yang dibatasi
Jika kita ingin memberikan batasan type yang diperbolehkan untuk dilewatkan ke type parameter. Contoh method dengan parameter number, hanya menerima object dari class Number dan subclass. Hal ini yang disebut bounded type parameter . •
Cara
•
Jika terdapat interface yang harus diimplementasikan gunakan &
Menggunakan ? Wildcard
Jika kita mendeklarasikan sebuah List, isi List adalah object dengan tipe aType, maka kita bisa menyimpan di List object dengan tipe : – Object dari aType – Object dari subclass aType, jika aType adalah class – Object dari class yang mengimplementasikan aType, jika aType adalah interface Sedangkan List> berarti semua tipe data bisa masuk, terlalu luas bentuk lain :
Li st ext ends Number > Li st ext ends T>
C. TUGAS PENDAHULUAN
Buatlah review mengenai : •
permasalahan pada class non generic
•
merubah bentuk class non generic menjadi class generic
•
manfaat dari class generics
•
generic pada collection.
215
D. PERCOBAAN Percobaan 1 : Membuat class NonGeneric, membuat objek dan mengambil nilai dari class NonGeneric public class NonGen {
Obj ect ob; NonGen( Obj ect o) { ob = o; } Obj ect get ob( ) { r et ur n ob; } voi d showType( ) { System. out . pr i nt l n( "Type of ob i s " + ob. get Cl ass( ) . get Name( ) ) ; } }
public class NonGenDemo {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { NonGen i nt eger Obj ect ; i nt eger Obj ect = new NonGen( 88) ; i nt eger Obj ect . showType( ) ; i nt v = ( I nt eger ) i nt eger Obj ect . get ob( ) ; Syst em. out . pr i nt l n( "val ue: " + v); NonGen st r Ob = new NonGen( " Non- Gener i cs Test " ) ; st r Ob. showType( ) ; St r i ng st r = ( St r i ng) st r Ob. get ob( ) ; Syst em. out . pr i nt l n( "val ue: " + st r ) ; / / i ni yang menyebabkan except on i nt eger Obj ect = st r Ob; v = ( I nt eger ) i nt eger Obj ect . get ob( ) ; } }
Percobaan 2 : Membuat class NonGeneric, membuat objek dan mengambil nilai dari class NonGeneric public class Gen {
T ob; / / decl ar e an obj ect of t ype T Gen( T o) { ob = o;
216
} T get ob( ) { r et ur n ob; } voi d showType( ) { System. out . pr i nt l n( "Type of T i s " + ob. get Cl ass( ) . get Name( ) ) ; } }
public class GenDemo {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { Gen i Ob; i Ob = new Gen( 88) ; i Ob. showType( ) ; i nt v = i Ob. get ob( ) ; Syst em. out . pr i nt l n( "val ue: " + v); Syst em. out . pr i nt l n( ) ; Gen st r Ob = new Gen( " Gener i cs Test " ) ; st r Ob. showType( ) ; St r i ng st r = st r Ob. get ob( ) ; Syst em. out . pr i nt l n( "val ue: " + st r ) ; } }
Percobaan 3 : Class Generic dengan Dua Type Parameter class TwoGen {
T ob1; V ob2; TwoGen( T o1, V o2) { ob1 = o1; ob2 = o2; } voi d showTypes( ) { System. out . pr i nt l n( "Type of T i s " + ob1. get Cl ass( ) . get Name( ) ) ; System. out . pr i nt l n( "Type of V i s " + ob2. get Cl ass( ) . get Name( ) ) ; } T get ob1( ) { r et ur n ob1; } V get ob2( ) {
217
r et ur n ob2; } }
public class TwoGenDemo {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { TwoGen t gObj = new TwoGen( 88, "Gener i cs") ; t gObj . showTypes( ) ; i nt v = t gObj . get ob1( ) ; Syst em. out . pr i nt l n( "val ue: " + v); St r i ng st r = t gObj . get ob2( ) ; Syst em. out . pr i nt l n( "val ue: " + st r ) ; } }
Percobaan 4 : Generic pada Method publ i c cl ass Gener i cMet hodTest { publ i c st at i c voi d pr i nt Ar r ay(E[] i nput Ar r ay) { f or ( E el ement : i nput Ar r ay) Syst em. out . pr i nt f ( "%s", el ement ) ; Sys t e m. out . pr i nt l n( " " ) ; } publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { I nt eger [ ] i nt Ar r ay = {1, 2, 3, 4, 5} ; Doubl e[ ] doubl eAr r ay = {1. 1, 2. 2, 3. 3, 4. 4, 5. 5}; Char act er [ ] char Ar r ay = {' J ' , ' A' , ' V' , ' A' }; pr i nt Ar r ay( i nt Ar r ay) ; pr i nt Ar r ay(doubl eAr r ay) ; pr i nt Ar r ay( char Ar r ay) ; } }
Percobaan 5 : Generic Pada List publ i c cl ass Ar r ayLi st Gener i cDemo { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Ar r ayLi st dat a = new Ar r ayLi st ( ) ; dat a. add( "hel l o") ; dat a. add( " goodbye" ) ; / / dat a. add( new Dat e( ) ) ; Thi s won' t compi l e! I t er at or i t = dat a. i t er at or ( ) ; whi l e ( i t . hasNext ( ) ) { St r i ng s = i t . next ( ) ; Syst em. out . pr i nt l n( s) ; } } }
218
Percobaan 6 : Generic pada Map publ i c cl ass Gener i cMap { publ i c stati c voi d mai n( St r i ng ar gs[ ] ) { HashMap hm = new HashMap( ) ; hm. put ( "apel ", 20) ; hm. put ( " anggur " , 13) ; hm. put ( "j er uk", 5) ; } }
Percobaan 7 : Subtyping public class GenSubtypingDemo {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { Gen gen1 = new Gen( " abc" ) ; Gen gen2 = new Gen( " abc" ) ; gen2 = gen1 ; / / err or pada saat di kompi l e } }
E. LATIHAN
1. Buatlah method generic untuk menghitung banyaknya bilangan prima yang tersimpan di collection. Input : [3,5,7,9,12,15,19] Terdapat 4 bilangan prima.
Alur pengerjaan, dapat mengikuti cara di bawah ini : public interface UnaryPredicate {
publ i c bool ean test ( T obj ) ; }
class PrimePredicate implements UnaryPredicate { public boolean test(Integer i) { //isilah } }
public final class Algorithm { public static int countIf(Collection c, UnaryPredicate p) { int count = 0; for (T elem : c) if (p.test(elem)) ++count;
219
return count; } }
public class Test { public static void main(String[] args) { Collection ci = Arrays.asList(1, 2, 3, 4); int count = Algorithm.countIf(ci, new PrimePredicate()); System.out.println("Number of prime integers = " + count); } }
2. Apakah program di bawah ini dapat dikompile ? Jika tidak, jelaskan ! public final class Algorithm { public static T max(T x, T y) { return x > y ? x : y; } }
3. Buatlah method generic untuk menukar posisi dua element yang tersimpan di array public static void swap(T[] a, int i, int j) {..}
4. Apakah program di bawah ini dapat dikompile ? Jika tidak, jelaskan ! public class Singleton { public static T getInstance() { if (instance == null) instance = new Singleton(); return instance; } private static T instance = null; }
F. TUGAS Tugas 1 :
Apakah program di bawah ini dapat dikompile ? Jika tidak, jelaskan ! class Shape { /* ... */ } class Circle extends Shape { /* ... */ } class Rectangle extends Shape { /* ... */ } class Node { /* ... */ } Node nc = new Node<>(); Node ns = nc;
220
Tugas 2 :
Apakah program di bawah ini dapat dikompile ? Jika tidak, jelaskan ! class Node implements Comparable { public int compareTo(T obj) { /* ... */ } // ... } Node node = new Node<>(); Comparable comp = node;
G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di ata s dan tambahkan analisa.
221
PRAKTIKUM 24 GENERICS : BOUNDED TYPE PARAMETER DAN WILDCARD A. TUJUAN PEMBELAJARAN
1. Memahami mengenai konsep generic 2. Memahami penggunaan tipe parameter yang dibatasi (Bounded Type Parameter). 3. Memahami penggunaan wildcard
B. DASAR TEORI
Generics merupakan cara Java dalam melakukan generalisasi terhadap tipe data tanpa mengurangi kemampuan Java dalam menjaga keamanan penggunaan tipe data. public class NonGen {
Obj ect ob; NonGen( Obj ect o) { ob = o; } Obj ect get ob( ) { r et ur n ob; } voi d showType( ) { System. out . pr i nt l n( "Type of ob i s " + ob. get Cl ass( ) . get Name( ) ) ; } }
Pada object Box, kita bisa memasukkan sembarang object karena parameter pada method
add( ) adalah Class Object, tapi pada saat mengambil object tersebut harus diubah sesuai dengan tipe dari object tersebut. public class NonGenDemo {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { NonGen i nt eger Obj ect ; i nt eger Obj ect = new NonGen( 88) ; i nt eger Obj ect . showType( ) ;
222
int v = (Integer) integerObject.getob();
Syst em. out . pr i nt l n( "val ue: " + v);
NonGen strOb = new NonGen("10");
st r Ob. showType( ) ; String str = (String) strOb.getob();
Syst em. out . pr i nt l n( "val ue: " + st r ) ; / / menyebabkan except i on Integer i = (Integer) strOb.getob();
} }
Terjadi exception karena pada object strOb dimasukkan object 10 tapi dengan tipe String, tapi pada saat mengambil object, diubah menjadi tipe Integer. Tipe data tidak sesuai sehingga menyebabkan terjadinya exception. Output : Type of ob i s j ava. l ang. I nt eger val ue: 88 Except i on i n t hr ead "mai n" j ava. l ang. Cl assCast Except i on: j ava. l ang. St r i ng cannot be cast t o j ava. l ang. I nt eger Type of ob i s j ava. l ang. St r i ng val ue: Non- Gener i cs Test at com. NonGenDemo. mai n( NonGenDemo. j ava: 30) J ava Resul t : 1
Permasalahan yang muncul dengan penyimpanan objek yang non homogeneous adalah memerlukan banyak casting. Tidak ada pengecekan pada saat kompile, kesalahan baru bisa terdeteksi pada saat runtime.
Cara mendeklarasikan Class Generics
Ubah class Box Non Generics menjadi class Box Generic. Pendeklarasian type generics dengan mengubah public class Box() menjadi public class Box – T biasanya disebut parameter type formal (formal type parameter) 223
– T adalah type parameter yang akan diganti dengan tipe sebenarnya (Type dari T bisa berupa class, interface atau tipe variabel lainnya). – T adalah nama dari type parameter. public class Gen {
T ob; / / decl ar e an obj ect of t ype T Gen( T o) { ob = o; } T get ob( ) { r et ur n ob; } voi d showType( ) { System. out . pr i nt l n( "Type of T i s " + ob. get Cl ass( ) . get Name( ) ) ; } }
public class GenDemo {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { Gen i Ob; i Ob = new Gen( 88) ; i Ob. showType( ) ; int v = iOb.getob();
Syst em. out . pr i nt l n( "val ue: " + v); Syst em. out . pr i nt l n( ) ; Gen st r Ob = new Gen( " Gener i cs Test " ) ; String v2 = strOb.getob();
} }
Objek i Ob adalah objek dari class Generic, menggunakan tipe data Integer, sehingga pada saat mengambil objek menggunakan fungsi get(), tidak perlu proses casting.
Aturan Penamaan Type Parameter
Nama type parameter biasanya satu huruf dan huruf besar. Jenis nama tipe parameter yang sering digunakan : – E - Element (biasanya digunakan untuk Collection Framework) – K – Key 224
– N – Number – T - Type – V - Value – S,U,V dll. - 2nd, 3rd, 4th types
Generics pada Method
Pada contoh sebelumnya, kita mendefinisikan type parameter pada level class. Sebenarnya tipe variable ini juga dapat didefinisikan pada level method. publ i c cl ass Gener i cMet hodTest { publ i c st at i c voi d pr i nt Ar r ay(E[] i nput Ar r ay) { f or ( E el ement : i nput Ar r ay) Syst em. out . pr i nt f ( "%s", el ement ) ; Sys t e m. out . pr i nt l n( " " ) ; } publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { I nt eger [ ] i nt Ar r ay = {1, 2, 3, 4, 5} ; Doubl e[ ] doubl eAr r ay = {1. 1, 2. 2, 3. 3, 4. 4, 5. 5}; Char act er [ ] char Ar r ay = {' J ' , ' A' , ' V' , ' A' }; pr i nt Ar r ay( i nt Ar r ay) ; pr i nt Ar r ay(doubl eAr r ay) ; pr i nt Ar r ay( char Ar r ay) ; } }
Subtyping
Jika B adalah suatu subtype dari A dan G adalah suatu tipe data generics, maka tidak berarti G adalah subtype dari G.
Generics pada Collection
•
List myList ;
E disebut type variabel, variabel yang diganti dengan type. Jika E adalah class, maka kita bisa melewatkan subclass E. Jika E adalah interface maka kita bisa melewatkan class yang mengimplementasikan E. publ i c cl ass Ar r ayLi st Gener i cDemo { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Ar r ayLi st dat a = new Ar r ayLi st ( ) ; dat a. add( "hel l o") ; dat a. add( " goodbye" ) ; / / dat a. add( new Dat e( ) ) ; Thi s won' t compi l e! }
225
Objek List data bertipe String, sehingga yang bisa dimasukkan hanya bertipe String saja, jika kita memasukkan objek selain String maka error.
Type parameter yang dibatasi
Jika kita ingin memberikan batasan type yang diperbolehkan untuk dilewatkan ke type parameter. Contoh method dengan parameter number, hanya menerima object dari class Number dan subclass. Hal ini yang disebut bounded type parameter . •
Cara
•
Jika terdapat interface yang harus diimplementasikan gunakan &
Menggunakan ? Wildcard
Jika kita mendeklarasikan sebuah List, isi List adalah object dengan tipe aType, maka kita bisa menyimpan di List object dengan tipe : – Object dari aType – Object dari subclass aType, jika aType adalah class – Object dari class yang mengimplementasikan aType, jika aType adalah interface Sedangkan List> berarti semua tipe data bisa masuk, terlalu luas bentuk lain :
Li st ext ends Number > Li st ext ends T>
C. TUGAS PENDAHULUAN
Buatlah review mengenai : •
Generic dengan type parameter yang dibatasi.
•
Generic dengan wildcard
D. PERCOBAAN Percobaan 1 : Type parameter yang dibatasi class Stats {
226
T[ ] nums; Stats(T[] o) { nums = o; } doubl e aver age( ) { doubl e sum = 0. 0; f or ( i nt i = 0; i < nums. l engt h; i ++) sum += nums[ i ] . doubl eVal ue( ) ; r et ur n sum / nums. l engt h; } }
public class BoundsDemo {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { I nt eger i nums[ ] = { 1, 2, 3, 4, 5 }; St at s i ob = new St at s( i nums) ; doubl e v = i ob. aver age( ) ; Syst em. out . pr i nt l n( "i ob aver age i s " + v) ; Doubl e dnums[ ] = { 1. 1, 2. 2, 3. 3, 4. 4, 5. 5 }; St at s dob = new St at s( dnums) ; doubl e w = dob. aver age( ) ; Syst em. out . pr i nt l n( " dob aver age i s " + w) ; } }
Percobaan 2 : Generic pada konstruktor, dengan type parameter dibatasi. class GenCons {
pr i vat e doubl e val ; GenCons( T ar g) { val = ar g. doubl eVal ue( ) ; } voi d showval ( ) { Syst em. out . pr i nt l n( "val : " + val ) ; } }
public class GenConsDemo {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { GenCons t est = new GenCons( 100) ; GenCons t est 2 = new GenCons( 123. 5F) ; t est . showval ( ) ; t est 2. showval ( ) ;
227
} }
Percobaan 3 : Menggunakan Interface Comparable Generic interface MinMax> {
T mi n( ) ; T max( ) ; } class MyClass> implements MinMax
{
T[ ] val s; MyCl ass( T[ ] o) { val s = o; } publ i c T mi n( ) { T v = val s[ 0] ; f or ( i nt i =1; i < val s. l engt h; i ++) i f ( val s[ i ] . compar eTo( v) < 0) v = val s[ i ] ; r et ur n v; } publ i c T max( ) { T v = val s[ 0] ; f or ( i nt i =1; i < val s. l engt h; i ++) i f ( val s[ i ] . compar eTo( v) > 0) v = val s[ i ] ; r et ur n v; } } public class GenIFDemo {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { I nt eger i nums[ ] = {3, 6, 2, 8, 6 }; Char ac t er c hs [ ] = {' b' , ' r ' , ' p' , ' w' }; MyCl ass i ob = new MyCl ass( i nums) ; MyCl ass cob = new MyCl ass ( chs) ; Syst em. out . pr i nt l n( " Max val ue i n i nums: " + i ob. max() ) ; Syst em. out . pr i nt l n( "Mi n val ue i n i nums: " + i ob. mi n( ) ) ; Syst em. out . pr i nt l n( " Max val ue i n chs: " + cob. max() ) ; Syst em. out . pr i nt l n( "Mi n val ue i n chs: " + cob. mi n( ) ) ; } }
Percobaan 4 : Menggunakan Unbounded Wildcard(1) publ i c cl ass Test Gener i c { publ i c s t at i c voi d pr i nt L i s t ( L i s t > l i s t ) {
228
f or ( Obj ect el em : l i s t ) { Syst em. out . pr i nt ( el em + " ") ; } Syst em. out . pr i nt l n( ) ; } publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Li st l i = Ar r ays. asLi st ( 1, 2, 3) ; Li st l s = Ar r ays. asLi st ( "one", "t wo", "t hr ee") ; pr i nt Li st ( l i ) ; pr i nt Li st ( l s) ; } }
Percobaan 5 : Menggunakan Unbounded Wildcard(2) class Stats { T[ ] nums; / / ar r ay of Number or subcl ass / / Pass t he const r uct or a r ef er ence t o / / an arr ay of t ype Number or subcl ass. Stats(T[] o) { nums = o; } / / Ret ur n t ype doubl e i n al l cases. doubl e aver age( ) { doubl e sum = 0. 0; f or ( i nt i =0; i < nums. l engt h; i ++) sum += nums[ i ] . doubl eVal ue( ) ; r et ur n sum / nums. l engt h; } / / Det er mi ne i f t wo aver ages ar e t he same. / / Not i ce t he use of t he wi l dcar d. boolean sameAvg(Stats> ob) { i f ( aver age( ) == ob. aver age( ) ) r et ur n t r ue; r e t ur n f al s e; } } / / Demonst r at e wi l dcar d. public class WildCardDemo {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { I nt eger i nums[ ] = { 1, 2, 3, 4, 5 }; St at s i ob = new St at s( i nums) ; doubl e v = i ob. aver age( ) ; Syst em. out . pr i nt l n( "i ob aver age i s " + v) ; Doubl e dnums[ ] = { 1. 1, 2. 2, 3. 3, 4. 4, 5. 5 }; St at s dob = new St at s( dnums) ;
229
doubl e w = dob. aver age( ) ; System. out . pr i nt l n( "dob aver age i s " + w) ; Fl oat f nums[ ] = { 1. 0F, 2. 0F, 3. 0F, 4. 0F, 5. 0F }; St at s f ob = new St at s( f nums) ; doubl e x = f ob. aver age( ) ; Syst em. out . pr i nt l n( "f ob aver age i s " + x) ; / / See whi ch ar r ays have same aver age. System. out . pr i nt ( "Aver ages of i ob and dob ") ; i f ( i ob. sameAvg( dob) ) Syst em. out . pr i nt l n( "are t he same. ") ; el se Sys t em. out . pr i nt l n( " di f f er . " ) ; System. out . pr i nt ( "Aver ages of i ob and f ob ") ; i f ( i ob. sameAvg( f ob) ) Syst em. out . pr i nt l n( "are t he same. ") ; el se Sys t em. out . pr i nt l n( " di f f er . " ) ; } }
Percobaan 6 : Menggunakan UpperBound Wildcard(2) i mpor t j ava. ut i l . Ar r ays ; i mpor t j ava. ut i l . Li s t ; publ i c cl ass Test Gener i c2 { publ i c st at i c doubl e sumOf Li st ( Li st ext ends Number> l i st ) { doubl e s = 0. 0; f or ( Number n : l i st ) { s += n. doubl eVal ue( ) ; } r et ur n s; } publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Li st l i = Ar r ays. asLi st ( 1, 2, 3) ; Syst em. out . pr i nt l n( "sum = " + sumOf Li st ( l i ) ) ; Li st l d = Ar r ays. asLi st ( 1. 2, 2. 3, 3. 5) ; Syst em. out . pr i nt l n( "sum = " + sumOf Li st ( l d) ) ; } }
Percobaan 7 : Menggunakan UpperBound Wildcard(2) class TwoD {
i nt x, y; TwoD( i nt a, i nt b) { x = a; y = b;
230
} }
/ / Thr ee- di mensi onal coor di nat es. class ThreeD extends TwoD {
i nt z ; Thr eeD( i nt a, i nt b, i nt c) { super ( a, b) ; z = c; } }
/ / Four - di mensi onal coor di nat es. class FourD extends ThreeD {
i nt t ; Four D( i nt a, i nt b, i nt c , i nt d) { s uper ( a, b, c ) ; t = d; } }
/ / Thi s cl ass hol ds an ar r ay of coor di nat e obj ect s. class Coords {
T[ ] coor ds; Coor ds( T[ ] o) { coor ds = o; } }
/ / Demonst r at e a bounded wi l dcar d. public class BoundedWildcard {
st at i c voi d showXY( Coor ds> c) { Syst em. out . pr i nt l n( "X Y Coor di nat es: ") ; f or ( i nt i =0; i < c. coor ds. l engt h; i ++) Syst em. out . pr i nt l n( c. coor ds[ i ] . x + " " + c. coor ds [ i ] . y) ; Syst em. out . pr i nt l n( ) ; } st at i c voi d showXYZ( Coor ds ext ends Thr eeD> c) { Syst em. out . pr i nt l n( "X Y Z Coor di nat es: ") ; f or ( i nt i =0; i < c. coor ds. l engt h; i ++) Syst em. out . pr i nt l n( c. coor ds[ i ] . x + " " + c. coor ds[ i ] . y + " " + c. coor ds [ i ] . z ) ; Syst em. out . pr i nt l n( ) ; } st at i c voi d showAl l ( Coor ds ext ends Four D> c) { Syst em. out . pr i nt l n( "X Y Z T Coor di nat es: ") ; f or ( i nt i =0; i < c. coor ds. l engt h; i ++)
231
Syst em. out . pr i nt l n( c. coor ds[ i c. coor ds[ i c. coor ds[ i c. coor ds[ i Syst em. out . pr i nt l n( ) ;
].x + " " + ].y + " " + ].z + " " + ]. t) ;
} publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) { TwoD t d[ ] = { new TwoD( 0, 0) , new TwoD( 7, 9) , new TwoD( 18, 4) , new TwoD( - 1, - 23) }; Coor ds t dl ocs = new Coor ds( t d) ; Syst em. out . pr i nt l n( "Cont ent s of t dl ocs. ") ; showXY( t dl ocs) ; / / OK, i s a TwoD showXYZ( t dl ocs) ; / / Er r or , not a Thr eeD showAl l ( t dl ocs); / / Er or r , not a Four D
// //
/ / Now, cr eat e some Four D obj ect s. Four D f d[ ] = { new Four D( 1, 2, 3, 4) , new Four D( 6, 8, 14, 8) , new Four D( 22, 9, 4, 9) , new Four D( 3, - 2, - 23, 17) }; Coor ds f dl ocs = new Coor ds( f d) ; Syst em. out . pr i nt l n( "Cont ent s of f dl ocs. ") ; / / These ar e al l OK. showXY( f dl ocs) ; showXYZ( f dl ocs) ; s howAl l ( f dl oc s) ; } }
Percobaan 8 : Menggunakan LowerBound Wildcard publ i c cl ass BoxI mpl i mpl ement s Box { pr i vat e T el ement ; publ i c T get ( ) { r et ur n el ement ; }
publ i c voi d put ( T el ement ) { t hi s. el ement = el ement ; } }
232
publ i c cl ass Test BoxKu { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { BoxKu bI n = new BoxKu( 7) ; BoxKu bNum = new BoxKu( 10) ; Sys t e m. out . pr i nt l n( bI n. t oSt r i ng( ) ) ; Syst em. out . pr i nt l n( bNum. t oSt r i ng( ) ) ; bI n. copyTo( bNum) ; Sys t e m. out . pr i nt l n( bI n. t oSt r i ng( ) ) ; Syst em. out . pr i nt l n( bNum. t oSt r i ng( ) ) ; } }
E. LATIHAN 1. Apakah program di bawah ini dapat dikompile ? Jika tidak, jelaskan ! public static void print(List extends Number> list) { for (Number n : list) System.out.print(n + " "); System.out.println(); }
2. Buatlah method generic untuk mencari nilai maksimul pada range [begin, end] dari list. public static > T max(List extends T> list, int begin, int end) {...}
F. TUGAS Tugas 1 :
Buatlah interface Box seperti dibawah ini! Dan buatlah class BoxImpl yang mengimplementasikan interface Box. public interface Box { public T get(); public void put(T element); public void put(Box box); }
public class BoxImpl implements Box { private T element ; public T get() { //isilah }
233
public void put(T element) { //isilah } public void put(Box box) { //isilah } }
Jelaskan mengapa program di bawah ini error ! public class TestBoxImpl { public static void main(String[] args) { Box nBox = new BoxImpl(); Box iBox = new BoxImpl(); nBox.put(iBox);
// ERROR
} }
Perbaiki interface Box seperti di bawah ini ! Jelaskan mengapa dengan perubahan seperti ini program yang sebelumnya error menjadi tid ak error ? public interface Box { public T get(); public void put(T element); public void put(Box extends T> box); }
Tambahkan pada interface Box method containsSame dan interface EqualityComparator public interface Box { public T get(); public void put(T element); public void put(Box extends T> box); boolean containsSame(Box extends T> other, EqualityComparator comparator ); public interface EqualityComparator { public boolean compare(T first, T second); } }
Tambahkan pada class TestBoxImpl. Jelaskan mengapa EqualityComparator error ? public class TestBoxImpl {
234
publ i c st at i c Equal i t yCompar at or sameObj ect = new Equal i t yCompar at or ( ) { publ i c bool ean compar e( T o1, T o2) { r et ur n o1 == o2; } } publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Box nBox = new BoxI mpl ( ) ; Box i Box = new BoxI mpl ( ) ; / / sebel umnya er r or menj adi OK nBox. put ( i Box) ; bool ean b = nBox. cont ai nsSame( i Box, sameObj ect ) ; } }
Ubahlah menjadi bentuk seperti di bawah ini ! Jelaskan mengapa method containsSame() masih error ? public class TestBoxImpl {
publ i c s t at i c Equal i t yCompar at or sameObj ect = new Equal i t yCompar at or ( ) { publ i c bool ean compar e( Obj ect o1, Obj ect o2) { r et ur n o1 == o2; } }; publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Box nBox = new BoxI mpl ( ) ; Box i Box = new BoxI mpl ( ) ; / / sebel umnya er r or menj adi OK nBox. put ( i Box) ; bool ean b = nBox. cont ai nsSame( i Box, sameObj ect ) ; } }
Ubahlah interface Box menjadi seperti di bawah ini ! Ubah pula pada class BoxImpl publ i c i publ publ publ
nt erf ace Box { i c T get ( ) ; i c voi d put ( T el ement ) ; i c voi d put ( Box ext ends T> box) ;
bool ean cont ai nsSame( Box ext ends T> ot her , EqualityComparator super T> comparator);
publ i c i nt erf ace Equal i t yComparat or { publ i c bool ean compar e( T f i r st , T second) ;
235
} }
Lakukan cek pada method containsSame() apakah error ? Jelaskan !
G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di ata s dan tambahkan analisa.
236
PRAKTIKUM 25 INPUT D DAN OUTPUT
A. TUJUAN PEMBELAJARAN
1. Memahami konsep Input/Output di Java 2. Mengenal kelas – kelas yang berhubungan dengan IO. 3. Mampu membuat program yang menerapkan konsep Input Output.
B. DASAR TEORI
Dalam pemrograman Java, Stream and File bukanlah istilah yang asing didengar. Stream and File merupakan proses penulisan dan pembacaan data sering yang di sebut dengan proses input dan output, dimana penulisan data berarti mengalirkan data ke output dan menerima atau mendapatkan data dari input. Penerapan dalam pemrograman java ini selalu melakukan proses input dan output yaitu memindahkan byte data dari satu system ke system lain. Data yang dibaca dari server yang mengirim data tidak berbeda dengan membaca data dari sebuah file. Java mengangani I/O secara berbeda dari bahasa-bahasa pemrograman yang lainnya. STREAM Stream merupakan dasar operasi input-output ( I/O ) dalam Java yang menggunakan package
java.io sebagai package utama. Stream adalah representasi abstrak dari input dan output device, dimana aliran bytes akan ditransfer seperti file dalam harddisk, file pada sistem remote atau printer. Kita dapat membaca data dari input stream, yang dapat berupa file, keyboard atau komputer remote. Dalam Stream ini terdapat proses input dan output sebagai berikut : 1. Input Stream
237
Kelas java.io.InputStream adalah:
publ i c abst r act cl ass I nput St r eam Adapun 2 method utama dari InputStream adalah : • Read Method ini digunakan untuk membaca stream. • Close Method ini digunakan untuk menutup koneksi input stream. Dalam proses Penginputan Stream ini pun terdapat pembagian dalam kelasnya, yaitu : a) Byte Stream
Merupakan kelas dan interface ini digunakan untuk menangani data biner. b) Character Stream
Merupakan kelompok kelas ini digunakan untuk menangani proses baca tulis karakter Unicode. Kelas ini merupakan pengembangan dari kelas Byte Stream sehingga lebih efisien. Data input dalam Stream ini berfungsi untuk saling melengkapi dengan DataOutputStream,
yaitu untuk mendapatkan data yang telah ditulis. 2. Output Stream
Subclass-subclass dari outputStream adalah :
ByteArrayOutputStream : digunakan untuk menuliskan stream menjadi byte array.
FileOutputStream
: digunakan untuk menulis pada file
FilterOutputStream
:merupakan
superclass
dari
subclass-subclass
seperti
DataOutputStream, BufferOutputStream, PrintStream, CheckedOutputStream
ObjectOutputStream
: digunakan untuk menuliskan objek pada OutputStream.
PipedOutputStream
: digunakan untuk menjadi output dari PipedInputStream.
Data Output dalam stream ini merupakan class yang menyediakan cara praktis untuk menuliskan
tipe data primitif ke output stream yang lebih mudah digunakan dalam penyelesaian program dalam java.
238
FILE
File merupakan data yang siap diinput dan diproses dalam Stream yang merupaka data operasi dalam pemrograman. Keterkaitan antara keduanya, proses Input dan Ouput tetap dilakukan walau dengan cara yang berbeda, dari subclass maupun method yang digunakan.
File Input Stream dan File Output Stream FileInputStream digunakan untuk membaca data dari file yang merupakan turunan langsung dari class InputStream dan FileOutputStream untuk menuliskan data ke file merupakan turunan langsung dari class OutputStream. Dalam file pun terdapat subclass – subclass dan method, sama halnya dengan Stream, seperti : 1. Class File
Class File merupakan langkah awal dalam mempelajari proses input-output dengan Java, karena File merupakan objek yang mewakili path, file, atau direktori pada harddisk. Ada tiga cara membuat objek File, yaitu : Menggunakan
objek string sebagai argumen yang menginformasikan path untuk file atau
direktori. Menggunakan
dua langkah, dimana yang pertama untuk mendefinisikan direktori dan yang
kedua untuk file. Menggunakan
dua
argumen,
dimana
yang
pertama
adalah
argumen
string
yang
mendefinisikan direktori, dan yang kedua adalah argumen string yang mendefinisikan nama file. 2. File Writer
Di dalam aplikasi web, disamping database, penggunaan file untuk menyimpan data cukup banyak dilakukan karena kebutuhan penyimpanan data yang sederhana cukup dengan menggunakan file. File Writer merupakan subclass dari OutputStreamWriter yang merupakan subclass dari class abstract Writer. Class FileWriter memiliki konstruktor yang umum seperti berikut : a) FileWriter ( File objekfile ); b) FileWriter ( String pathkefile ); c) FileWriter ( String pathkefile, boolean append ); 3. File Reader
239
File Reader merupakan class yang dapat digunakan untuk membaca file teks. Konstruktor dari
FileReader :
FileReader(File objekfile);
FileReader(String pathkefile);
Method yang digunakan :
Read(char[] array);
Read(char[] array, int offset, int length);
C. TUGAS PENDAHULUAN
Pelajari konsep IO Java pada Java API documentation D. PERCOBAAN Percobaan 1 1: M Melihat d direktori
240
Percobaan 2 2 :: Menggunakan F FileInputStream
241
Percobaan 3 3 :: C Contoh m menggunakan B Buf f fe redInputStream
242
Percobaan 4 4 :: C Contoh m menggunakan P PushbackInputStream
243
Percobaan 5 5 :: C Contoh m menggunakan S Se rialization
E. LATIHAN
1. Buat program untuk menghitung jumlah kemunculan suatu karakter missal karakter ‘e’ pada text file. Contoh text berikut disimpan pada file example.txt. 244
I n Xanadu di d Kubl a Khan A st at el y pl easur e- dome decree: Wher e Al ph, t he sacr ed r i ver , r an Thr ough caver ns measur el ess t o man Down t o a sunl ess s ea.
F. TUGAS
Buatlah tabel mengenai kelas Input Output Java G. LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan tugas yang telah dibuat.
245
PRAKTIKUM 26 INPUT D DAN OUTPUT 2
A. TUJUAN PEMBELAJARAN
1. Memahami konsep Input dan Output di Java 2. Mengenal kelas – kelas yang berhubungan dengan IO. 3. Mampu membuat program yang menerapkan konsep Input Output.
B. DASAR TEORI
Dalam pemrograman Java, Stream and File bukanlah istilah yang asing didengar. Stream and File merupakan proses penulisan dan pembacaan data sering yang di sebut dengan proses input dan output, dimana penulisan data berarti mengalirkan data ke output dan menerima atau mendapatkan data dari input. Penerapan dalam pemrograman java ini selalu melakukan proses input dan output yaitu memindahkan byte data dari satu system ke sistem lain. Data yang dibaca dari server yang mengirim data tidak berbeda dengan membaca data dari sebuah file. Java mengangani I/O secara berbeda dari bahasa-bahasa pemrograman yang lainnya. STREAM Stream merupakan dasar operasi input-output ( I/O ) dalam Java yang menggunakan package
java.io sebagai package utama. Stream adalah representasi abstrak dari input dan output device, dimana aliran bytes akan ditransfer seperti file dalam harddisk, file pada sistem remote atau printer. Kita dapat membaca data dari input stream, yang dapat berupa file, keyboard atau komputer remote. Dalam Stream ini terdapat proses input dan output sebagai berikut : 1. Input Stream
246
Kelas java.io.InputStream adalah:
publ i c abst r act cl ass I nput St r eam Adapun 2 method utama dari InputStream adalah : • Read Method ini digunakan untuk membaca stream. • Close Method ini digunakan untuk menutup koneksi input stream. Dalam proses Penginputan Stream ini pun terdapat pembagian dalam kelasnya, yaitu : a) Byte Stream
Merupakan kelas dan interface ini digunakan untuk menangani data biner. b) Character Stream
Merupakan kelompok kelas ini digunakan untuk menangani proses baca tulis karakter Unicode. Kelas ini merupakan pengembangan dari kelas Byte Stream sehingga lebih efisien. Data input dalam Stream ini berfungsi untuk saling melengkapi dengan DataOutputStream,
yaitu untuk mendapatkan data yang telah ditulis. 2. Output Stream
Subclass-subclass dari outputStream adalah :
ByteArrayOutputStream : digunakan untuk menuliskan stream menjadi byte array.
FileOutputStream
: digunakan untuk menulis pada file
FilterOutputStream
:merupakan
superclass
dari
subclass-subclass
seperti
DataOutputStream, BufferOutputStream, PrintStream, CheckedOutputStream
ObjectOutputStream
: digunakan untuk menuliskan objek pada OutputStream.
PipedOutputStream
: digunakan untuk menjadi output dari PipedInputStream.
Data Output dalam stream ini merupakan class yang menyediakan cara praktis untuk menuliskan
tipe data primitif ke output stream yang lebih mudah digunakan dalam penyelesaian program dalam java.
247
FILE
File merupakan data yang siap diinput dan diproses dalam Stream yang merupaka data operasi dalam pemrograman. Keterkaitan antara keduanya, proses Input dan Ouput tetap dilakukan walau dengan cara yang berbeda, dari subclass maupun method yang digunakan.
File Input Stream dan File Output Stream FileInputStream digunakan untuk membaca data dari file yang merupakan turunan langsung dari class InputStream dan FileOutputStream untuk menuliskan data ke file merupakan turunan langsung dari class OutputStream. Dalam file pun terdapat subclass – subclass dan method, sama halnya dengan Stream, seperti : 1. Class File
Class File merupakan langkah awal dalam mempelajari proses input-output dengan Java, karena File merupakan objek yang mewakili path, file, atau direktori pada harddisk. Ada tiga cara membuat objek File, yaitu : Menggunakan
objek string sebagai argumen yang menginformasikan path untuk file atau
direktori. Menggunakan
dua langkah, dimana yang pertama untuk mendefinisikan direktori dan yang
kedua untuk file. Menggunakan
dua
argumen,
dimana
yang
pertama
adalah
argumen
string
yang
mendefinisikan direktori, dan yang kedua adalah argumen string yang mendefinisikan nama file. 2. File Writer
Di dalam aplikasi web, disamping database, penggunaan file untuk menyimpan data cukup banyak dilakukan karena kebutuhan penyimpanan data yang sederhana cukup dengan menggunakan file. File Writer merupakan subclass dari OutputStreamWriter yang merupakan subclass dari class abstract Writer. Class FileWriter memiliki konstruktor yang umum seperti berikut : a) FileWriter ( File objekfile ); b) FileWriter ( String pathkefile ); c) FileWriter ( String pathkefile, boolean append ); 3. File Reader
248
File Reader merupakan class yang dapat digunakan untuk membaca file teks. Konstruktor dari
FileReader :
FileReader(File objekfile);
FileReader(String pathkefile);
Method yang digunakan :
Read(char[] array);
Read(char[] array, int offset, int length);
C. TUGAS PENDAHULUAN
Pelajari konsep IO Java pada Java API documentation
249
D. PERCOBAAN Percobaan 1 1 :: M Mencari f f ile d dengan e e kstensi T Tertentu
250
Percobaan 2 2 :: Membaca u ukuran f f ile
251
Percobaan 3 3 :: C Contoh m menggunakan B Buf f fe redInputStream
Asumsi menggunakan file dengan nama ihave10lines.txt
252
Percobaan 4 4 :: M Membaca f f ile e enkode U UTF-8
253
Percobaan 5 5 :: M Menulis E En kode U UTF-8 k ke F File
254
Percobaan 6 6 :: M Mengubah S String k ke IInputStream
Percobaan 7 7 :: M Membaca sspace H Harddisk
255
E. LATIHAN Latihan 1 1 :: M Modif ikasi p program b berikut a agar d dapat d di kompile
F. TUGAS
Buatlah tabel mengenai kelas Input Output Java G. LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan tugas yang telah dibuat.
256
PRAKTIKUM 27 ANTAR MUKA GRAFIS A.
TUJUAN PEMBELAJARAN
1. Memahami konsep Graphical User Interface (GUI). 2. Mampu membuat program yang menerapkan konsep GUI. 3. Mampu membuat program berbasis GUI yang melibatkan penggunaan komponen GUI. B.
DASAR TEORI
Ciri utama dari tampilan model ini adalah seluruh data ditampilkan dalam bentuk teks (text based ). Model tampilan ini memiliki kelemahan yaitu lebih sulit membuat tampilan program
menjadi indah dan menarik, dikarenakan kurangnya dukungan warna. Monitor model teks hanya 24
mendukung warna sampai 16, berbeda dengan model grafik yang mendukung warna sampai 2 (2 pangkat 24) bahkan bisa lebih, tergantung graphic-card yang digunakan.
Bab ini akan membahas tentang Graphical User Interface (GUI), suatu metode untuk antar-muka komputer berbasis grafis. GUI digunakan dalam pembuatan program aplikasi dengan mempertimbangkan dua aspek yaitu keindahan tampilan dan kemudahan penggunaan program. Keindahan tampilan akan mempengaruhi orang untuk melihat dan merasa senang terhadap program yang kita buat, dan kemudahan penggunaan program akan berdampak pada ketertarikan orang untuk terus menggunakan program yang kita buat. Di dunia bisnis, hal ini merupakan target jangka panjang. Materi dalam bab ini akan disajikan secara sistematis dan terstruktur, mulai dari pengenalan objek utama, penambahan objek-objek pendukung (lebih dikenal sebagai komponen) sampai interaksi komputer dengan user. Untuk melengkapi uraian tentang GUI ini, pada akhir bab kita membuat sebuah project yang diberi nama ”Kalkulator Mini". Project ini menyajikan pembuatan sebuah kalkulator sederhana yang bisa digunakan untuk melakukan proses perhitungan 257
matematika biasa. Beberapa fungsi yang rumit dari kalkulator sesungguhnya tidak dimasukkan dalam project ini. Anda bisa mengembangkan project ini secara mandiri. Pembahasan kita mulai class JFrame. Dalam lingkup Java, sebuah interface window dikenal dengan sebutan frame. Bagi anda yang pernah menggunakan software Delphi (bahasa visual untuk Pascal ) tentu pernah menjumpai komponen TFrame. Perlu diingat bahwa frame dalam lingkup Delphi berbeda dengan frame dalam lingkup Java. Frame dalam lingkup Java identik dengan TForm di Delphi atau Form di Visual Basic. Perlu juga diketahui bahwa seluruh pembahasan pada bab ini mengacu kepada sistem operasi Windows, tepatnya Windows 2000 atau Windows XP. Anda yang menggunakan sistem operasi lain seperti UNIX atau LINUX mungkin akan melihat beberapa perbedaan tampilan yang tidak mengganggu. Jika anda membuka program Windows Explorer maka secara tidak sadar anda telah mengaktifkan sebuah window (atau frame). Frame adalah sebuah objek yang merepresentasikan suatu area di layar yang berisi sejumlah objek lain untuk menyampaikan informasi kepada user. Kita bisa menambahkan sejumlah komponen lain ke dalam sebuah framw dengan tujuan yang sesuai dengan fungsi komponen tersebut. Sebuah objek yang merupakan instansiasi dari class JFrame bisa dipanggil melalui dua cara, yaitu: 1. Dipanggil melalui class utama yang mengandung fungsi main(). 2. Dipanggil melalui class lain yang merupakan class tersendiri turunan dari JFrame. Mana jemen P Pemasangan K Komponen
Manajemen
pemasangan
komponen
(layout
management )
diperlukan
untuk
mengatur
penempatan komponen di dalam frame agar bisa menghasilkan bentuk interface yang menarik. Penggunaan layout-manager dalam mengatur letak komponen juga akan memudahkan kita menempelkan komponen pada frame. Java menyediakan sejumlah metode dalam mengatur penempelan komponen ke dalam frame. Pada bagian ini kita hanya akan membahas tiga metode: FlowLayout, GridLayout dan
BorderLayout. Masing-masing metode memiliki keunggulan dan kekurangan dibandingkan dengan metode yang lain. Hal yang menarik adalah kita tidak harus terpaku pada satu metode
258
dalam mengatur pemasangan komponen; kita boleh mengkombinasikan beberapa metode agar pemasangan komponen menjadi lebih baik dan mudah. Method setLayout(LayoutManager) digunakan untuk mengatur jenis metode yang digunakan pada saat memasang komponen. Method ini bisa kita gunakan pada class JFrame, JPanel dan Container. Pembahasan selanjutnya akan menunjukkan penggunaan berbagai metode pengaturan
penempelan komponen pada frame.
C.
TUGAS PENDAHULUAN
1. Pelajari layout – layout yang bisa digunakan untuk mengatur tata letak komponen, kemudian buat daftar mengenai layout tersebut, beserta penjelasan dan contoh tampilannya. D.
PERCOBAAN
Percobaan 1 1: M Membuat jendela ssederhana d dengan J JFrame
1 import j avax. swi ng. JFrame; 2 3 //-------------------------4 / / Def i ni si cl ass MYFRAME 5 //-------------------------6 class MyFr ame extends JFrame 7 { 8 MyFr ame( ) 9 { 10 super ( "Cont oh f r ame") ; 11 12 show( ) ; 13 } 14 } 15 16 / / - - - - - - - - - - - - - - 17 / / Cl ass ut ama 18 / / - - - - - - - - - - - - - - 19 public class J Fr ame_4 20 { 21 public static void mai n ( String [] args) 22 { 23 new MyFr ame( ) ; 24 } 25 }
259
Percobaan 2 2: M Menghapus F Frame d dari M Memori
1 import j avax. swi ng. JFrame; 2 3 //-------------------------4 / / Def i ni si cl ass MYFRAME 5 //-------------------------6 class MyFr ame extends JFrame 7 { 8 MyFr ame( ) 9 { 10 super ( " Cont oh f r ame") ; 11 set Def aul t Cl oseOper at i on ( JFrame . EXI T_ON_ CLOSE) ; 12 13 show( ) ; 14 } 15 } 16 17 / / - - - - - - - - - - - - - - 18 / / Cl ass ut ama 19 / / - - - - - - - - - - - - - - 20 public class J Fr ame_5 21 { 22 public static void mai n ( String [] args) 23 { 24 new MyFr am e( ) ; 25 } 26 }
Percobaan 3 3: F Frame d dengan U U kuran T Tetap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
import j avax. swi ng. JFrame;
//-------------------------/ / Def i ni si cl ass MYFRAME //-------------------------class MyFr ame extends JFrame { MyFr ame( ) { super ( " Cont oh f r ame") ; set Def aul t Cl oseOper at i on ( JFrame. EXI T_ON_CLOSE) ; set Locat i on ( 200, 100) ; set Si ze ( 300, 100) ; set Resi zabl e ( f al se) ; show( ) ; } } //---------------
260
21 / / Cl ass ut ama 22 / / - - - - - - - - - - - - - - 23 public class J Fr ame_8 24 { 25 public static void mai n ( String [] args) 26 { 27 new MyFr am e( ) ; 28 } 29 }
Percobaan 4 4: S Strategi “ “Tempel L Langsung”
1 import j avax. swi ng. *; 2 import j ava. awt . *; 3 4 class MyFr ame extends JFrame 5 { 6 private Container cont ai ner = new Container (); 7 private JButton t ombol = new JButton ( "Tombol ") ; 8 9 MyFr ame( ) 10 { 11 super ( "Str at egi ' Tempel - Langsung' ") ; 12 13 set Def aul t Cl oseOper at i on ( JFrame. EXI T_ON_CLOSE) ; 14 set Si ze ( 250, 80) ; 15 set Locat i on ( 100, 100) ; 16 17 cont ai ner = get Cont ent Pane( ) ; 18 19 cont ai ner . add ( t ombol ) ; 20 21 show( ) ; 22 } 23 } 24 25 public class Tempel Langsung_1 26 { 27 public static void mai n ( String [] args) 28 { 29 new MyFr am e( ) ; 30 } 31 }
Percobaan 5 5: M Mana je me n P Pemasangan K Komponen – – F Flowlayout
1 2 3
import j avax. swi ng. *; import j ava. awt . *;
261
4 class MyFr ame extends JFrame 5 { 6 private Container cont ai ner = new Container (); 7 private JButton t ombol = new JButton ( "Tombol ") ; 8 private JLabel t ul i san = new JLabel ( " Tul i s an" ) ; 9 10 MyFr ame( ) 11 { 12 super ( " Dem o Fl owLayout " ) ; 13 14 set Def aul t Cl oseOper at i on ( JFrame. EXI T_ON_CLOSE) ; 15 set Si ze ( 250, 80) ; 16 set Locat i on ( 100, 100) ; 17 18 cont ai ner = get Cont ent Pane( ) ; 19 cont ai ner . set Layout ( new FlowLayout ( ) ) ; 20 21 cont ai ner . add ( t ombol ) ; 22 cont ai ner . add ( t ul i san) ; 23 24 show( ) ; 25 } 26 } 27 28 public class Fl owLayout _1 29 { 30 public static void mai n ( String [] args) 31 { 32 new MyFr am e( ) ; 33 } 34 }
Percobaan 6 6: M Mana je me n P Pemasangan K Komponen – – G Gridlayout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import j avax. swi ng. *; import j ava. awt . * ; class MyFr ame extends JFrame
{ private Container cont ai ner = new Container (); private JButton t ombol = new JButton ( "Tombol ") ; private JLabel t ul i san = new JLabel ( " Tul i s an" ) ;
MyFr ame( ) { super ( "Gr i dLayout 1- bar i s 2- kol om") ; set Def aul t Cl oseOper at i on ( JFrame. EXI T_ON_CLOSE) ; set Si ze ( 250, 80) ; set Locat i on ( 100, 100) ;
262
18 cont ai ner = get Cont ent Pane( ) ; 19 cont ai ner . set Layout ( new GridLayout ( 1 , 2 ) ) ; 20 21 cont ai ner . add ( t ul i san) ; 22 cont ai ner . add ( t ombol ) ; 23 24 show( ) ; 25 } 26 } 27 28 public class Gr i dLayout _1 29 { 30 public static void mai n ( String [] args) 31 { 32 new MyFr am e( ) ; 33 } 34 }
Percobaan 7 7: M Mana je me n P Pemasangan K Komponen – – B Bor derlayout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
import j avax. swi ng. * ; import j ava. awt . *; class MyFr ame extends JFrame
{ private Container cont ai ner = new Container (); private private private private private
JButton JButton JButton JButton JButton
t ombol Ut ar a = new JButton ( " NORTH" ) ; t ombol Sel at an = new JButton ( " SOUTH" ) ; t ombol Ti mur = new JButton ( "EAST") ; t ombol Bar at = new JButton ( " WEST") ; t ombol Tengah = new JButton ( " CENTER" ) ;
MyFr ame( ) { super ( " Dem o Bor der Layout " ) ; set Def aul t Cl oseOper at i on ( JFrame. EXI T_ON_CLOSE) ; set Si ze ( 250, 130) ; set Locat i on ( 100, 100) ; cont ai ner = get Cont ent Pane( ) ; cont ai ner . set Layout ( new BorderLayout ( ) ) ; cont ai ner . add cont ai ner . add cont ai ner . add cont ai ner . add cont ai ner . add
( t ombol Ut ara, BorderLayout . NORTH) ; ( t ombol Sel at an, BorderLayout . SOUTH) ; ( t ombol Ti mur , BorderLayout . EAST) ; ( t ombol Bar at , BorderLayout . WEST) ; ( t ombol Tengah, BorderLayout . CENTER) ;
show( ) ;
263
32 } 33 } 34 35 public class Bor der Layout _1 36 { 37 public static void mai n ( String [] args) 38 { 39 new MyFr ame( ) ; 40 } 41 }
Percobaan 8 8: L Layout K Komponen d dalam J JPanel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
import j avax. swi ng. *; import j ava. awt . *; class MyFr ame extends JFrame
{ private Container cont ai ner = new Container (); private JPanel j Panel = new JPanel ( ) ; private JLabel l abel User Name = new JLabel ( "User name : ") ; private JLabel l abel Pass wor d = new JLabel ( "Passwor d : ") ; private JTextField t ext Fi el dUser Name = new JTextField ( " " , 8) ; private JTextField t ext Fi el dPasswor d = new JTextField ( " " , 8) ; private JButton but t onOK = new JButton ( "OK") ; private JButton but t onCancel = new JButton ( " Canc el " ) ;
MyFr ame( ) { super ( " Demo J Panel - Logi n") ; set Def aul t Cl oseOperat i on ( JFrame . EXI T_ON_ CLOSE) ; set Si ze ( 250, 10) ; set Locat i on ( 100, 100) ; j j j j j j j
Panel Panel Panel Panel Panel Panel Panel
. set Layout ( new GridLayout ( 3, 2) ) ; . add ( l abel UserName) ; . add ( t ext Fi el dUserName) ; . add ( l abel Passwor d) ; . add ( t extFi el dPassword) ; . add ( but t onOK) ; . add ( but t onCancel ) ;
cont ai ner = get Cont ent Pane( ) ; cont ai ner . add ( j Panel ) ;
264
35 show( ) ; 36 } 37 } 38 39 public class J Panel _2 40 { 41 public static void mai n ( String [] args) 42 { 43 new MyFr am e( ) ; 44 } 45 }
E.
LATIHAN
Latihan 1 1: M Membuat ttampilan H HP m mini
Buatlah tampilan HP seperti pada gambar berikut :
Latihan 2 2: M Membuat ttampilan iinput d data
Buatlah tampilan input data seperti gambar berikut :
265
Latihan 3 3: D Desain u user iinterf ace ssesuai p petun juk p pada g gambar b berikut
Petunjuk : Gantilah JApplet dengan JPanel F.
TUGAS
Buatlah tampilan kalkulator mini seperti pada gambar berikut :
G.
LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan tugas yang telah dibuat.
266
PRAKTIKUM 28 PENANGANAN EVENT
A.
TUJUAN PEMBELAJARAN
1. Memahami konsep Graphical User Interface (GUI). 2. Mampu membuat program yang menerapkan konsep GUI. 3. Mampu membuat program berbasis GUI yang melibatkan penggunaan komponen GUI. 4. Mampu membuat program berbasis GUI yang bisa menerima respon user, baik melalui mouse maupun keyboard. B.
DASAR TEORI
User bisa berinteraksi dengan program aplikasi melalui sejumlah komponen. Sebagai contoh, setelah memasukkan data-data yang diperlukan pada proses login, kita menekan sebuah button untuk memasukkan data-data tersebut ke dalam program. Dalam hal ini objek button tersebut menerima event click . Tidak hanya objek button yang bisa menerima event . Objek lain seperti textfield juga bisa menerima event , hanya saja jenis event yang terjadi pada objek textfield berbeda dengan objek button. Jadi kita harus memahami jenis event apa yang bisa dikenakan terhadap suatu jenis objek tertentu. Java menerima event melalui sebuah interface. Setiap komponen yang akan menerima suatu event harus disetting terlebih dahulu agar terasosiasi dengan event tersebut. Tanpa didahului dengan proses asosiasi ini, sebuah komponen tidak akan bisa "menangkap" (Java memberi istilah "mendengar" / listening) suatu event walaupun sesungguhnya bisa. Sebagai contoh, jika kita memasang sebuah objek button untuk membatalkan suatu proses, sebelum kita mengasosiasi objek tersebut dengan event yang menangani click mouse maka button tersebut tidak akan
267
memberikan efek pembatalan proses pada saat kita melakukan proses click tombol mouse di atasnya. Bagian ini membahas tentang bagaimana proses interaksi antara user dan program melalui sejumlah komponen dapat terjadi. Dari sejumlah interface untuk menangani event yang disediakan oleh Java, kita akan membahas 4 (empat) saja yang kami rasa mudah dimengerti sebagai pengantar untuk memahami interface-interface yang lain. Keempat interface tersebut adalah: 1. Interface ActionListener 2. Interface MouseListener 3. Interface MouseMotionListener 4. Interface KeyListener Interface pertama akan menangkap event yang ditimbulkan oleh mouse dan keyboard , interface kedua dan ketiga akan menangkap event yang ditimbulkan oleh mouse dan interface keempat akan menangkap event yang ditimbulkan oleh keyboard . Mouse dan keyboard adalah dua piranti yang sudah sangat umum digunakan pada komputer masa kini.
Bentuk umum penggunaan interface adalah: [ public | private] class NamaClass [ extends BaseClass] [ implements NamaInterface ] {
…i si cl ass… }
Implementasi sebuah interface mengharuskan kita memasukkan sejumlah method yang akan digunakan untuk melakukan suatu proses dalam interface tersebut. Pada bagian selanjutnya anda akan menjumpai method apa saja yang harus disediakan jika kita mengimplementasikan suatu interface. Interf ace A ActionListener
Interface ActionListener berguna untuk menerima event yang ditimbulkan oleh mouse atau keyboard. Pada prakteknya interface ini akan memeriksa objek yang terkena event, tidak perduli alat mana yang menimbulkan event tersebut. Sebuah objek button misalnya, mungkin akan 268
mengalami event click dari mouse atau event enter dari keyboard, yang jelas keduanya merupakan event dari button. Button inilah yang diperiksa oleh ActionListener. Class yang mengimlementasikan interface ActionPerformed harus mengandung method bernama actionPerformed(ActionEvent) sekalipun di dalamnya tidak ada instruksi apa pun. Kita bisa memeriksa objek yang menimbulkan event di dalam method ini. Seperti telah dijelaskan di depan, agar sebuah objek bisa "mendengar" terjadinya event, objek tersebut harus diasosiasikan dengan interface yang berhubungan dengan event tersebut. Java menyediakan method addActionListener(ActionListener) untuk mengasosiasikan sebuah objek dengan interface ActionListener. Method ini membutuhkan parameter berupa class yang mengimplementasikan interface ActionListener. Jika class tersebut merupakan class yang sama dengan tempat objek dimaksud, maka parameter ini cukup diberi nilai this. Interf ace M MouseListener
Interface MouseListener digunakan untuk menangkap event yang diakibatkan oleh mouse. Event yang dibangkitkan oleh keyboard tidak akan memberi efek, kecuali kita menggunakan interface ActionListener bersamaan dengan interface MouseListener. Dan sebenarnya anda boleh menggunakan sejumlah interface sesuai keperluan, tidak terbatas harus satu interface saja. Objek yang akan mendengar event dari MouseListener diasosiasikan menggunakan method addMouseListener(MouseListener). Class yang mengimplementasikan interface MouseListener harus menyediakan 5 (lima) method, walaupun tidak ada isinya. Kelima method tersebut adalah: 1. Method mouseClicked(MouseEvent), dipanggil pada saat tombol mouse ditekan lalu dilepas. 2. Method mouseEntered(MouseEvent), dipanggil pada saat kursor mouse memasuki area komponen. 3. Method mouseExited(MouseEvent), dipanggil pada saat kursor mouse meninggalkan area komponen. 4. Method mousePressed(MouseEvent), dipanggil pada saat tombol mouse ditekan. 5. Method mouseReleased(MouseEvent), dipanggil pada saat tombol mouse dilepas. Kita bisa katakan bahwa method mouseClicked(MouseEvent) merupakan perpaduan antara mousePressed(MouseEvent) dan mouseReleased(MouseEvent). Berbagai method pada class 269
MouseEvent bisa kita gunakan dalam proses event mouse ini, misalnya mendeteksi posisi kursor mouse saat ini. Interf ace M MouseMotionListener
Java menyediakan interface MouseMotionListener untuk mendukung MouseListener. Interface MouseMotionListener menyediakan dua method yang akan memantau pergerakan mouse yaitu mouseDragged(MouseEvent) dan mouseMoved(MouseEvent). •
Method mouseDragged(MouseEvent) digunakan untuk memantau pergerakan mouse yang melintasi objek pada saat tombol mouse ditekan. Tindakan ini persis sama dengan tindakan kita pada saat memindahkan sebuah window.
•
Method mouseMoved(MouseEvent) digunakan untuk memantau pergerakan mouse pada saat mouse melintasi area suatu objek. Pada saat ini tidak ada tombol mouse yang ditekan; kita hanya memindahkan pointer mouse melalui objek.
Berikut ini urutan method yang dieksekusi setelah event mouse ditangkap, diasumsikan kita melibatkan interface MouseListener dan MouseMotionListener. 1. Method mouseEntered(MouseEvent) : dijalankan pada saat pointer mouse digerakkan memasuki area objek. 2. Method mouseMoved(MouseEvent) : dijalankan pada saat pointer mouse digerakkan melintasi objek dalam kondisi tidak ada tombol mouse yang ditekan. 3. Method mousePressed(MouseEvent) : dijalankan pada saat to mbol mouse ditekan. 4. Method mouseDragged(MouseEvent) : dijalankan pada saat pointer mouse digeser melintasi objek sambil tombol mouse ditekan. 5. Method mouseClicked(MouseEvent) : dijalankan pada saat tombol mouse dilepas setelah ditekan dengan rentang waktu yang tidak terlalu lama. 6. Method mouseReleased(MouseEvent) : dijalankan pada saat tombol mouse dilepas. 7. Method
mouseExited(MouseEvent) :
dijalankan
pada
saat
pointer
mouse
meninggalkan area objek. Setelah pointer mouse berada di luar objek, segala macam event mouse tidak diperhatikan lagi, sampai pointer mouse memasuki area objek.
270
Interf ace K KeyListener
Setelah mengetahui cara menghandle event yang dibangkitkan oleh piranti mouse, sekarang kita akan membahas bagaimana caranya menghandle event yang dibangkitkan oleh piranti keyboard. Interface KeyListener disediakan untuk menangani event yang terjadi akibat tindakan dari keyboard, misalnya jika terjadi penekanan tombol ENTER atau ESCAPE. Interface KeyListener mengharuskan kehadiran tiga method: •
Method keyPressed(KeyEvent) : akan dijalankan pada saat sebuah tombol keyboard ditekan.
•
Method keyReleased(KeyEvent) : akan dijalankan pada saat sebuah tombol keyboard dilepas.
•
Method keyTyped(KeyEvent) : akan dijalankan pada saat sebuah tombol keyboard ditekan dan dilepas dengan selisih waktu yang singkat.
C.
TUGAS PENDAHULUAN
1. Pelajari event – event handling yang berhubungan dengan User Interface, kemudian buatlah ringkasan kelas/interface event handling tersebut beserta kegunaannya. D.
PERCOBAAN
Percobaan 1 1: M Membuat p program m meneba k a angka
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import j avax. swi ng. *; import j ava. awt . *; import j ava. awt . event . * ; class MyFr ame extends JFrame implements ActionListener
{ private private private private
Container cont ai ner = new Container (); Button t ombol Cek = new Button ( " Cek" ) ; TextField i nput an = new TextField ( " " , 8 ) ; int angkaAcak = ( int) ( Math. r andom( ) *10) ;
MyFr ame( ) { super ( " Tebak angka" ) ;
set Def aul t Cl oseOper at i on ( JFrame. EXI T_ON_CLOSE) ; set Si ze ( 200, 65) ;
271
18 19 20 21 22 23 24
set Locat i on ( 100, 100) ; t ombol Cek. addAct i onLi st ener ( this) ; cont ai ner = get Cont ent Pane( ) ; cont ai ner . set Layout ( new BorderLayout ( ) ) ; cont ai ner. add ( new JLabel( " Tebak angka ant ara 0- 9" ) , BorderLayout . NORTH) ; cont ai ner. add ( new JLabel ( " Tebakan anda : " ) , BorderLayout . WEST) ; cont ai ner . add ( i nput an, BorderLayout . CENTER) ; cont ai ner . add ( t ombol Cek, BorderLayout . EAST) ;
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
show( ) ; } public void act i onPer f or med ( ActionEvent e)
{ Object obj ek = e. get Sour ce( ) ; if ( obj ek == t ombol Cek)
{ int j awaban = Integer . par s eI nt ( i nput an. get Text ( ) ) ; if ( j awaban == angkaAcak) JOptionPane . showMessageDi al og ( null,
" Benar . . Anda memang per amal j i t u") ; 42 43
else JOptionPane . showMessageDi al og ( null,
" J awaban anda sal ah. . ") ; 44 } 45 } 46 } 47 48 / / - - - - - - - - - - - - 49 / / Cl ass ut ama 50 / / - - - - - - - - - - - - 51 public class Act i onLi st ener _1 52 { 53 public static void mai n ( String [] args) 54 { 55 new MyFr ame( ) ; 56 } 57 }
Percobaan 2 2: M Membuat p program d dengan e event m mouselistener
1 2 3 4
import j avax. swi ng. *; import j ava. awt . *; import j ava. awt . event . *;
272
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
class MyFr ame extends JFrame implements MouseListener
{ private private private private private private
Container cont ai ner = new Container (); JLabel l abel Cl i cked = new JLabel ( " " ) ; JLabel l abel Ent er ed = new JLabel ( " " ) ; JLabel l abel Exi t ed = new JLabel ( " " ) ; JLabel l abel Pr essed = new JLabel ( " " ) ; JLabel l abel Rel eased = new JLabel ( " " ) ;
MyFr ame( ) { super ( "Test MouseLi st ener ") ;
set Def aul t Cl oseOper at i on ( JFrame. EXI T_ON_CLOSE) ; set Si ze ( 220, 150) ; set Locat i on ( 100, 100) ; // -------------------------- ------------------/ / mengasosi asi sel ur uh obj ek dg event - handl er // -------------------------- ------------------l abel Cl i cked. addMouseLi st ener ( this) ; l abel Ent er ed. addMouseLi st ener ( this) ; l abel Exi t ed. addMouseLi st ener ( this) ; l abel Pr essed. addMouseLi st ener ( this) ; l abel Rel eased. addMouseLi st ener ( this) ; // -------------------------- ---/ / penambahan komponen ke f r ame // -------------------------- ---cont ai ner = get Cont ent Pane( ) ; cont ai ner . set Layout ( new GridLayout ( 5 , 2 ) ) ; cont ai ner . add ( new JLabel ( "mouseCl i cked : ") ) ; cont ai ner . add ( l abel Cl i cked) ; cont ai ner . add ( new JLabel ( "mouseEnt er ed : " ) ) ; cont ai ner . add ( l abel Ent er ed) ; cont ai ner . add ( new JLabel ( "mouseExi t ed : ") ) ; cont ai ner . add ( l abel Exi t ed) ; cont ai ner . add ( new JLabel ( "mousePr essed : " ) ) ; cont ai ner . add ( l abel Pr essed) ; cont ai ner . add ( new JLabel ( "mouseRel eased : ") ) ; cont ai ner . add ( l abel Rel eased) ; show( ) ; } public void mouseCl i cked ( MouseEvent e)
{ l l l l l
abel abel abel abel abel
Cl i cked. set Text ( "AKTI F") ; Ent er ed. set Text ( "" ) ; Exi t ed. set Text ( "" ) ; Pr essed. set Text ( "" ) ; Rel eased. set Text ( "" ) ;
}
273
59 public void mouseEnt er ed ( MouseEvent e) 60 { 61 l abel Cl i cked. set Text ( "" ) ; 62 l abel Ent er ed. set Text ( "AKTI F") ; 63 l abel Exi t ed. set Text ( "" ) ; 64 l abel Pr essed. set Text ( "" ) ; 65 l abel Rel eased. set Text ( "" ) ; 66 } 67 68 public void mouseExi t ed ( MouseEvent e) 69 { 70 l abel Cl i cked. set Text ( "" ) ; 71 l abel Ent er ed. set Text ( "" ) ; 72 l abel Exi t ed. set Text ( "AKTI F") ; 73 l abel Pr essed. set Text ( "" ) ; 74 l abel Rel eased. set Text ( "" ) ; 75 } 76 77 public void mousePr ess ed ( MouseEvent e) 78 { 79 l abel Cl i cked. set Text ( "" ) ; 80 l abel Ent er ed. set Text ( "" ) ; 81 l abel Exi t ed. set Text ( "" ) ; 82 l abel Pr essed. set Text ( "AKTI F") ; 83 l abel Rel eased. set Text ( "" ) ; 84 } 85 86 public void mouseRel eased ( MouseEvent e) 87 { 88 l abel Cl i cked. set Text ( "" ) ; 89 l abel Ent er ed. set Text ( "" ) ; 90 l abel Exi t ed. set Text ( "" ) ; 91 l abel Pr essed. set Text ( "" ) ; 92 l abel Rel eased. set Text ( "AKTI F") ; 93 } 94 } 95 96 / / - - - - - - - - - - - - 97 / / Cl ass ut ama 98 / / - - - - - - - - - - - - 99 public class MouseLi st ener _1 100 { 101 public static void mai n ( String [] args) 102 { 103 new MyFr ame( ) ; 104 } 105 }
Percobaan 3 3: M Memantau k kondisi m mouse d dan m menerima e event p pada ssaat m mouse d digerakkan
1
import j avax. swi ng. *;
274
2 3 4 5
import j ava. awt . *; import j ava. awt . event . * ; class MyFr ame extends JFrame implements MouseMotionListener
6 { 7 private Container cont ai ner = new Container (); 8 private JLabel l abel Dr agged = new JLabel ( " " ) ; 9 private JLabel l abel Moved = new JLabel ( " " ) ; 10 11 MyFr ame( ) 12 { 13 super ( "Test MouseLi st ener ") ; 14 15 set Def aul t Cl oseOper at i on ( JFrame . EXI T_ON_ CLOSE) ; 16 set Si ze ( 250, 80) ; 17 set Locat i on ( 100, 100) ; 18 19 // ---------------------------- ----------------20 / / mengasosi asi sel ur uh obj ek dg event - handl er 21 // ---------------------------- ----------------22 l abel Dr agged. addMouseMot i onLi st ener ( this) ; 23 l abel Moved. addMouseMot i onLi st ener ( this) ; 24 25 // ---------------------------- -26 / / penambahan komponen ke f r ame 27 // ---------------------------- -28 cont ai ner = get Cont ent Pane( ) ; 29 cont ai ner . set Layout ( new GridLayout ( 2 , 2 ) ) ; 30 cont ai ner. add ( new JLabel ( " mouseDr agged : " ) ) ; 31 cont ai ner . add ( l abel Dr agged) ; 32 cont ai ner. add ( new JLabel ( " mouseMoved : " ) ) ; 33 cont ai ner. add ( l abel Moved) ; 34 35 show( ) ; 36 } 37 38 public void mous eDr agged ( MouseEvent e) 39 { 40 l abel Dr agged. set Text ( "AKTI F") ; 41 l abel Moved. set Text ( "" ) ; 42 } 43 44 public void mouseMoved ( MouseEvent e) 45 { 46 l abel Dr agged. set Text ( "" ) ; 47 l abel Moved. set Text ( "AKTI F") ; 48 } 49 } 50 51 / / - - - - - - - - - - - - 52 / / Cl ass ut ama 53 / / - - - - - - - - - - - - 54 public class MouseMot i onLi st ener _1
275
55 56 57 58 59 60
{ public static void mai n ( String [] args)
{ new MyFr ame( ) ;
} }
Percobaan 4 4: M Mendeteksi p penekanan ttombol ENTER pada ssebuah o ob je k ttextf ield 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
import j avax. swi ng. * ; import j ava. awt . *; import j ava. awt . event . *; class MyFr ame extends JFrame implements KeyListener
{ private Container cont ai ner = new Container (); private JTextField t ext Fi el d = new JTextField ( " " ,
8) ;
MyFr ame( ) { super ( " Tebak angka" ) ;
set Def aul t Cl oseOper at i on ( JFrame. EXI T_ON_CLOSE) ; set Si ze ( 250, 150) ; set Locat i on ( 100, 100) ; // ------------------------- -------------------/ / mengasosi asi sel ur uh obj ek dg event - handl er // ------------------------- -------------------t extFi el d. addKeyLi st ener ( this) ; // ------------------------- ----/ / penambahan komponen ke f r ame // ------------------------- ----cont ai ner = get Cont ent Pane( ) ; cont ai ner . set Layout ( new GridLayout ( 3 , 1 ) ) ; cont ai ner . add ( new JPanel( ) ) ; cont ai ner . add ( t ext Fi el d) ; cont ai ner . add ( new JPanel( ) ) ; show( ) ; } public void keyTyped ( KeyEvent e)
{ if ( e. get KeyCode( ) == e. VK_ENTER)
t ext Fi el d. set Text ( " ENTER - >> di t ekan + di l epas") ; } public void keyPr essed ( KeyEvent e)
{
276
43 if ( e. get KeyCode( ) == e. VK_ENTER) 44 t ext Fi el d. set Text ( " Tombol ENTER - >> di t ekan" ) ; 45 } 46 47 public void keyRel eased ( KeyEvent e) 48 { 49 if ( e. get KeyCode( ) == e. VK_ENTER) 50 t ext Fi el d. set Text ( " Tombol ENTER - >> di l epas") ; 51 } 52 } 53 54 / / - - - - - - - - - - - - 55 / / Cl ass ut ama 56 / / - - - - - - - - - - - - 57 public class KeyLi st ener _1 58 { 59 public static void mai n ( String [] args) 60 { 61 new MyFr ame( ) ; 62 } 63 }
E.
LATIHAN
Latihan 1 1: M Membuat ttampilan iinput d data d dan m menampilkan h hasil iinput k ketika d ditekan O OK
277
Latihan 2 2 :: B Buat T Tampilan d dan e event h handling y yang ssesuai, sse perti p pada g gambar
Latihan 3 3: M Modif ikasi llatihan 2 2 u untuk p pembelian ttiket o online p pada k konser m music F.
LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan tugas yang telah dibuat.
278
PRAKTIKUM 29 GUI: KALKULATOR MINI
A.
TUJUAN PEMBELAJARAN
1. Memahami konsep Graphical User Interface (GUI). 2. Mampu membuat program yang menerapkan konsep GUI. 3. Mampu membuat program berbasis GUI yang melibatkan penggunaan komponen GUI. 4. Mampu membuat program berbasis GUI yang bisa menerima respon user, baik melalui mouse maupun keyboard. B.
DASAR TEORI
Project
ini
kami
beri
nama
Kalkulator
Mini,
sebuah
project
sederhana
yang
mengimplementasikan teori GUI di Java. Dari namanya sudah bisa ditebak kegiatan utama dari project ini adalah membuat sebuah program aplikasi yang mensimulasikan sebuah kalkulator dengan kemampuan yang sangat minim. Kalkulator ini didesain untuk bisa menangani beberapa operasi matematika biasa, meliputi penjumlahan, pengurangan, perkalian, pembagian dan perpangkatan. Karena buku ini tidak didesain sebagai buku acuan tentang materi Struktur Data, maka teknik yang digunakan untuk menangani proses matematika tersebut tidak terlalu rumit. Program akan menerima tiga inputan : •
Data pertama berupa data numerik yang bertindak sebagai data pertama yang akan diproses.
•
Data kedua berupa data karakter yang menyatakan jenis proses yang akan dilakukan.
•
Data ketiga berupa data numerik menyatakan data kedua yang akan diproses.
Seluruh data inputan tersebut diberikan melalui pengaktifan sejumlah objek button yang tersedia di layar. Kita tidak melakuan pengetikan, misalnya angka, untuk memasukkan data numerik, 279
sehingga objek textfield yang digunakan kita pasifkan. Method setEnabled(boolean) digunakan secara luas untuk tujuan mempasifkan suatu objek agar tidak bisa diakses. Desain T Tampilan
Kalkulator ini hanya memiliki 5 (lima) button untuk lima proses matematika, yaitu "+", "-", "*", " /" dan "^". Sebagai tambahan, sebuah objek berjenis JCheckBox disediakan untuk mengatur penggunaan karakter pemisah ribuan Area tampilan Pemisah ribuan Hapus Batal 7 8 4 5 1 2 0 . Area informasi
Ulang 9 6 3 =
^ * / + Exit
Berikut ini keterangan setiap item pada desain tampilan tersebut: •
"Area tampilan" merupakan objek berjenis JTextField, tempat dimana angka-angka yang diclick akan ditampilkan. Area ini juga digunakan sebagai tempat untuk menampilkan hasil
proses. •
"Pemisah ribuan" merupakan objek berjenis JCheckBox yang digunakan sebagai flag atau tanda apakah kita akan menggunakan pemisah ribuan atau tidak. Untuk deretan angka yang cukup banyak, penggunaan pemisah ribuan akan sangat membantu kita membaca data yang tersaji.
•
"Hapus" merupakan sebuah objek berjenis JButton yang digunakan untuk menghapus data yang sedang terlihat di layar satu karakter demi satu karakter dari belakang.
•
"Batal" merupakan sebuah objek berjenis JButton yang digunakan untuk membatalkan data yang kali dimasukkan terakhir. Jika button ini di-click pada saat kita memasukkan data kedua, maka data kedua akan dibatalkan sedangkan data pertama tetap dianggap valid.
•
"Ulang" merupakan sebuah objek berjenis JButton yang digunakan untuk membatalkan seluruh data yang telah dimasukkan. Dalam bagan automata di atas respon dari button ini sama dengan tindakan "cancel".
•
"Exit" merupakan sebuah objek berjenis JButton yang digunakan untuk mengakhiri jalannya program. Window akan ditutup dan kendali dikembalikan ke sistem operasi.
280
•
".", "0" sampai "9" merupakan objek berjenis JButton yang digunakan untuk memasukkan data numerik dan tanda pemisah desimal pada bilangan pecahan.
•
"^", "*", "/", "+" dan "-"
merupakan objek berjenis JButton yang digunakan untuk
menentukan jenis operator yang akan digunakan pada proses matematika. •
"=" merupakan objek berjenis JButton yang digunakan untuk memerintahkan komputer melakukan proses sesuai dengan data-data yang diberikan, lalu menampilkan hasilnya di "Area tampilan".
•
"Area informasi" merupakan objek berjenis JLabel yang kita gunakan untuk menampilkan informasi biasa, misalnya nama kita.
C.
TUGAS PENDAHULUAN
1. Pelajari kelas – kelas di Java yang berhubungan dengan User Interfaces. Kemudan buatlah daftar kelasnya dan fungsi kelas tersebut. D.
PERCOBAAN
Percobaan 1 1: IImplementasi K Kalkulator M Mini
1 2 3 4 5
import j avax. swi ng. *; import j ava. awt . *; import j ava. awt . event . * ; class Mi ni Cal cul at or extends JFrame implements ActionListener
6 7 8 9 10 11 12
{ private JPanel panel At as = new JPanel ( ) ; private JPanel panel Tengah = new JPanel ( ) ; private JPanel panel Bawah = new JPanel ( ) ; private JTextField t am pi l an = new JTextField ( " " ) ; private JCheckBox pemi sahRi buan = new JCheckBox ( " Pemi sah r i buan" ,
13 14 15 16 17 18
private Button [ ] t ombol Fungsi
{ new Button new Button new Button new Button
= ( "Hapus") , ( " Ul ang" ) , ("7"), ("9"),
true) ;
new Button ( " Bat al " ) , new Button ( " ^" ) , new Button ( " 8 " ) , new Button ( " * " ) ,
281
19 20 21 22 23 24 25 26
new Button ( " 4 " ) ,
new Button ( " 5 " ) ,
new Button ( " 6 " ) ,
new Button ( " / " ) ,
new Button ( " 1 " ) ,
new Button ( " 2 " ) ,
new Button ( " 3 " ) ,
new Button ( " - " ) ,
new Button ( " 0 " ) ,
new Button ( " . " ) ,
new Button ( " =" ) ,
new Button ( "+")
private JLabel i nf or masi
};
=
new JLabel ( " R. Pur nama, 2003" ) ;
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
private Button t om bol Exi t = new Button ( " Exi t " ) ; private char oper at or = ' private private private private private private
//--------------------/ / Const r uctor cl ass //-------------------- public Mi ni Cal cul at or ( ) { super ( "Kal kul at or seder hana") ; set Def aul t Cl oseOper at i on ( JFrame . EXI T_ON_ CLOSE) ; set Locat i on ( 100, 100) ; set Si ze ( 300, 200) ; set Resi zabl e ( f al se) ; set Panel At as( ) ; set Panel Tengah( ) ; set Panel Bawah( ) ; r es et Ni l ai ( ) ; get Cont ent Pane( ) . set Layout ( new BorderLayout ( ) ) ; get Cont ent Pane( ) . add ( panel At as, BorderLayout . NORTH) ; get Cont ent Pane( ) . add ( panel Tengah, BorderLayout . CENTER) ; get Cont ent Pane( ) . add ( panel Bawah, BorderLayout . SOUTH) ;
56 57 58 59 60 61
'; double dat aPer t ama = 0. 0; double dat aKedua = 0. 0; double dat aHasi l = 0. 0; boolean awal Ket i kan = true; boolean ent r yPer t ama = true; boolean ent r yDesi mal = false;
show( ) ; }
282
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
//------------------------/ / Mer eset sel ur uh ni l ai //------------------------ private void r es et Ni l ai ( ) { oper at or = ' ' ; dat aPer t ama = 0. 0; dat aKedua = 0. 0; dat aHasi l = 0. 0; awal Ket i kan = true; ent r yPer t ama = true; ent r yDesi mal = false; } //----------------------/ / Mengat ur panel at as //---------------------- private void set Panel At as( ) { pemi sahRi buan. set For egr ound ( new Color ( 0, 0, 0) ) ; pemi sahRi buan. set Font ( new Font ( " ar i al " , Font. PL AI N, 11) ) ; t ampi l an. set Enabl ed ( false) ; t ampi l an. set Hori zont al Al i gnment ( JTextField . RI GHT) ; t ampi l an. set Font ( new Font ( " ar i al " , Font. BOLD, 15) ) ; panel At as. set Layout ( new BorderLayout ( ) ) ; panel At as. add ( t ampi l an, BorderLayout . CENTER) ; panel At as. add ( pemi sahRi buan, BorderLayout . SOUTH) ; } //------------------------/ / Mengat ur panel t engah //------------------------ private void set Panel Tengah( ) { panel Tengah. set Layout ( new GridLayout ( 5, 4) ) ; for ( int i =0;
i <5*4; i ++)
{ t ombol Fungsi [ i ] . addAct i onLi st ener ( this) ; t ombol Fungsi [ i ] . set Font ( new Font ( " ar i al " , Font. BOLD, 11) ) ;
106
283
107 108 109 110 111 112 113 114 115 116 117 118
panel Tengah. add ( t ombol Fungsi [ i ] ) ; } } //-----------------------/ / Mengat ur panel bawah //----------------------- private void set Panel Bawah( ) { t ombol Exi t . addAct i onLi st ener ( this) ; i nf ormasi . set Font ( new Font ( " ar i al " ,
119
11) ) ;
Font. BOLD,
11) ) ;
t ombol Exi t . set Font ( new Font ( " ar i al " ,
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
Font. BOLD,
panel Bawah. set Layout ( new BorderLayout ( ) ) ; panel Bawah. add ( i nf or masi , BorderLayout . WEST) ; panel Bawah. add ( t ombol Exi t , BorderLayout . EAST) ; } //-------------------------------/ / Pr oses pemi sahan dat a r i buan //------------------------------- private String pi sahkan ( StringBuffer dat a) { String t emp = dat a. t oSt r i ng( ) ; if ( dat a. length( ) > 3)
{ t emp = dat a. subst r i ng ( dat a. length( ) - 3) ; dat a. del et e ( dat a. length ( ) - 3, dat a. length( ) ) ; t emp = pi sahkan ( dat a) + ' , ' + t emp. t oSt r i ng( ) ; } return ( t emp) ;
} //-----------------/ / Pemi sah r i buan //----------------- private String pi sahkanRi buan ( double dat a) { String st r i ng = Double . t oSt r i ng ( dat a) ; int t i t i k = s t r i ng. i ndexOf ( ' . ' ) ; String pecahan = st r i ng. subst r i ng ( t i t i k) ;
284
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
long bul at = new Double ( dat aHasi l ) . l ongVal ue( ) ;
st r i ng = Long . t oSt r i ng ( bul at ) ; st r i ng = pi sahkan ( new StringBuffer ( s t r i ng) ) ; return ( st r i ng + pecahan) ;
} //------------------------------/ / Menghapus kar akt er t erakhi r //------------------------------ private void hapusKarakt er( ) { if ( t ampi l an. get Text ( ) . length( ) > 0) { StringBuffer dat a = new StringBuffer ( t ampi l an. get Text ( ) ) ; char t er akhi r = dat a. char At ( dat a. length( ) - 1) ; if ( t er akhi r == ' . ' )
ent r yDesi mal = f al se; dat a. del et eChar At ( dat a. length( ) - 1) ; t ampi l an. set Text ( dat a. t oSt r i ng( ) ) ; } } //----------------------------/ / Membat al kan dat a t er akhi r //---------------------------- private void bat al kanDat a( ) { if ( ent r yPer t ama) dat aPer t ama = 0. 0; else
dat aKedua = 0. 0; t ampi l an. set Text ( "" ) ; } //------------------------/ / Mengupdat e dat a angka //------------------------ private void updat eDat a ( int i ndex) { if ( awal Ket i kan) t ampi l an. set Text ( "" ) ;
285
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
String l abel
= t ombol Fungsi [ i ndex]. get Label ( ) ; char kar akter = l abel . char At ( 0) ; StringBuffer dat a = new StringBuffer ( t ampi l an. get Text ( ) ) ; t ampi l an. set Text ( dat a. t oSt r i ng( ) + kar akter) ; awal Ket i kan = false; } //---------------------------/ / Mengupdat e dat a oper at or //--------------------------- private void updat eOper at or ( int i ndex) { if ( ent r yPer t ama) { StringBuffer dat a = new StringBuffer ( t ampi l an. get Text ( ) ) ; dat aPer t ama = Double . par seDoubl e ( dat a. t oSt r i ng( ) ) ; } String l abel
= t ombol Fungsi [ i ndex]. get Label ( ) ; oper at or = l abel . char At ( 0) ; ent r yPer t ama = false; awal Ket i kan = true;
} //-------------------------------/ / Mel akukan pr oses per hi t ungan //------------------------------- private void pr osesPer hi t ungan( ) { StringBuffer dat a = new StringBuffer ( t ampi l an. get Text ( ) ) ; dat aKedua = Double . par seDoubl e ( dat a. t oSt r i ng( ) ) ; switch ( oper at or )
{ case ' +'
: dat aHasi break; case ' - ' : dat aHasi break; case ' *' : dat aHasi break; case ' / ' : dat aHasi
l = dat aPer t ama + dat aKedua; l = dat aPer t ama - dat aKedua; l = dat aPer t ama * dat aKedua; l = dat aPer t ama / dat aKedua;
286
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263
break; case ' ^'
: dat aHasi l = Math. pow ( dat aPer t ama, dat aKedua) ;
} if ( pemi sahRi buan. i sSel ect ed( ) )
t ampi l an. set Text ( pi sahkanRi buan ( dat aHasi l ) ) ; else
t ampi l an. set Text ( Double . t oSt r i ng ( dat aHas i l ) ) ; ent r yPer t ama = true; awal Ket i kan = true; } //-------------------------/ / Menambah t anda desi mal //------------------------- private void t ambahTandaDesi mal ( ) { if ( ! ent r yDesi mal && ! awal Ket i kan) { ent r yDesi mal = true; StringBuffer dat a = new StringBuffer ( t ampi l an. get Text ( ) ) ;
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
t ampi l an. set Text ( dat a. t oSt r i ng( ) + ' . ' ) ; } } //------------------------------/ / Act i on t er hadap r espon user //------------------------------ public void act i onPer f or med ( ActionEvent event ) { Object obj ek = event . get Sour ce( ) ; int l okasi = 0; if ( obj ek == t om bol Exi t ) System . exi t ( 0) ; else
{ for ( ;
l okasi <20; l okasi ++) if ( obj ek == t om bol Fungsi [ l okasi ] ) break;
switch ( l okas i )
{
287
286 case 0 : hapusKar akt er ( ) ; 287 break; 288 case 1 : bat al kanDat a( ) ; 289 break; 290 case 2 : r es et Ni l ai ( ) ; 291 t ampi l an. set Text ( "" ) ; 292 break; 293 case 16 : ; 294 case 12 : ; 295 case 13 : ; 296 case 14 : ; 297 case 8 : ; 298 case 9 : ; 299 case 10 : ; 300 case 4 : ; 301 case 5 : ; 302 case 6 : updat eDat a ( l okasi ) ; 303 break; 304 case 3 : ; 305 case 7 : ; 306 case 11 : ; 307 case 15 : ; 308 case 19 : updat eOper at or ( l okasi ) ; 309 break; 310 case 18 : pr osesPer hi t ungan( ) ; 311 break; 312 case 17 : t am bahTandaDesi mal ( ) ; 313 break; 314 } 315 } 316 } 317 } 318 319 / / - - - - - - - - - - - - - - 320 / / Cl ass ut ama 321 / / - - - - - - - - - - - - - - 322 public class CobaCal cul at or 323 { 324 public static void mai n ( String [] args) 325 { 326 new Mi ni Cal c ul at or ( ) ; 327 } 328 }
288
E.
LATIHAN
Latihan 1 1: M Modif kasi p pro ject k kalkulator
Modifikasi kalkulator mini tersebut, sehingga dapat melakukan perhitungan saintifik lain, seperti trigonometri (sin, cos, dll), perpangkatan, logarirmik. Latihan 2 2: B Buatlah ssebuah a aplikasi cconverter u untuk mengubah jarak dalam ssatuan mil ke km sseperti p pada g gambar b berikut
289
Latihan 3: Buatlah sebuah aplikasi yang me nampilkan pilihan checkbox dan radiobutton seperti p pada g gambar
Latihan 4 4: M Modif ikasi llatihan 2 2 ssehingga a aplikasi d dapat m me ngubah jarak d dari k km k ke m mil.
Petunjuk : Berikan tambahan pilihan konversi berupa radio button. Latihan 5 5: A Aplikasi k konversi ssuhu F Farenheit -- C Celcius.
Buatlah aplikasi GUI untuk mengkonversi input suhu dari Farenheit ke Celcius dan sebaliknya. F.
TUGAS
Buatlah sebuah game Memory. Dalam aplikasi ini diberikan grid kotak 2 dimensi yang berisi pasangan gambar atau string yang sesuai. Ketika me ngklik kotak, isinya akan terbuka. Kemudian klik kotak yang lain. Jika isinya sama, maka kotak akan tetap terlihat isinya. Jika tidak akan tertutup kembali. Aplikasi dapat dimainkan ulang dengan posisi isi kotak yang teracak, tidak sama dengan sebelumnya. G.
LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan tugas yang telah dibuat. 290
PRAKTIKUM 30 PROYEK 1
A.
TUJUAN PEMBELAJARAN
1. Mengimplementasikan konsep pemrograman Java dalam sebuah proyek. B.
DASAR TEORI
Proyek 1 ini mengimplementasikan konsep pemrograman Java yang telah dipelajari. Mahasiswa diharapkan dapat menghasilkan aplikasi yang memiliki kegunaan dan tujuan. C.
TUGAS PENDAHULUAN
1. Pelajari kelas – kelas di Java yang berhubungan dengan proyek yang dikerjakan. D.
PERCOBAAN
Tidak Ada E.
LATIHAN
Latihan 1 1: P Petun juk P Pelaksanaan P Proyek 1 1
F.
-
Mahasiswa wajib membuat aplikasi berbasis Java yang telah diajarkan sebelumnya
-
Aplikasi yang dibuat memiliki kegunaan yang jelas beserta tujuan aplikasi tersebut
-
Aplikasi dibuat oleh masing – masing mahasiswa TUGAS
Tidak ada G.
LAPORAN RESMI
Buat laporan yang berisi progress pembuatan proyek
291
PRAKTIKUM 31 PROYEK 2
A.
TUJUAN PEMBELAJARAN
1. Mengimplementasikan konsep pemrograman Java dalam sebuah proyek. B.
DASAR TEORI
Proyek 1 ini mengimplementasikan konsep pemrograman Java yang telah dipelajari. Mahasiswa diharapkan dapat menghasilkan aplikasi yang memiliki kegunaan dan tujuan. C.
TUGAS PENDAHULUAN
1. Pelajari kelas – kelas di Java yang berhubungan dengan proyek yang dikerjakan. D.
PERCOBAAN
Tidak Ada E.
LATIHAN
Latihan 1 1: P Petun juk P Pelaksanaan P Proyek 2 2
F.
-
Mahasiswa wajib membuat aplikasi berbasis Java yang telah diajarkan sebelumnya
-
Aplikasi yang dibuat memiliki kegunaan yang jelas beserta tujuan aplikasi tersebut
-
Aplikasi dibuat oleh masing – masing mahasiswa TUGAS
Tidak ada G.
LAPORAN RESMI
Buat laporan yang berisi progress pembuatan proyek
293
PRAKTIKUM 32 PRESENTASI A.
TUJUAN PEMBELAJARAN
1. Mengimplementasikan konsep pemrograman Java dalam sebuah proyek. B.
DASAR TEORI
Presentasi bertujuan untuk mendemokan hasil aplikasi yang telah dikembangkan pada proyek 1 dan proyek 2. C.
TUGAS PENDAHULUAN
Tidak Ada D.
PERCOBAAN
Tidak Ada E.
LATIHAN
Latihan 1 1: P Petun juk P Pelaksanaan P Presentasi
-
Mahasiswa wajib mempresentasikan aplikasi yang telah dibuat pada proyek
-
Mahasiswa menjelaskan manfaat dan tujuan dikembangkannya aplikasi tersebut
-
Mahasiswa wajib menjelaskan kelas apa saja yang digunakan untuk mengembangkan aplikasi tersebut.
F.
TUGAS
Tidak ada G.
LAPORAN RESMI
Buat laporan yang berisi presentasi hasil proyek
293