Praktikum
Pemrograman Berorientasi Obyek
POLITEKNIK TELKOM BANDUNG
Penyusun
Budi Laksono Putro Dahliar Ananda
Kurniawan NR Lutce Rasiana
Editor
Dahliar Ananda
Dilarang menerbitkan kembali, menyebarluaskan atau menyimpan baik sebagian maupun seluruh isi buku dalam bentuk dan dengan cara apapun tanpa izin tertulis dari Politeknik Telkom.
Hak cipta dilindungi undang-undang @ Politeknik Telkom 2009
Politeknik Telkom Praktikum PBO
Kata Pengantar
Assalamu’alaikum Wr. Wb
Segala puji bagi Allah SWT karena dengan karunia-Nya courseware ini dapat diselesaikan.
Atas nama Politeknik Telkom, kami sangat menghargai dan ingin menyampaikan terima kasih kepada penulis, penerjemah dan penyunting yang telah memberikan tenaga, pikiran, dan waktu sehingga courseware ini dapat tersusun.
Tak ada gading yang tak retak, di dunia ini tidak ada yang sempurna, oleh karena itu kami harapkan para pengguna buku ini dapat memberikan masukan perbaikan demi pengembangan selanjutnya.
Semoga courseware ini dapat memberikan manfaat dan membantu seluruh Sivitas Akademika Politeknik Telkom dalam memahami dan mengikuti materi perkuliahan di Politeknik Telkom.
Amin.
Wassalamu’alaikum Wr. Wb. Bandung, Maret 2009
Christanto Triwibisono Wakil Direktur I
Bidang Akademik & Pengembangan
Telkom Polytechnic Praktikum PBO
1 Pengenalan Java...1
1.1 Instalasi...2
1.2 Tipe Data di Java...5
1.2.1 Tipe data sederhana...5
1.2.2 Tipe data komposit...7
1.3 Operator di Java...8
1.4 Percabangan pada Java...9
1.4.1 Sintaks if...9
1.4.2 Sintaks switch...9
1.5 Perulangan pada Java...10
1.5.1 Perulangan for...10
1.5.2 Perulangan while...11
1.5.3 Perulangan do....while...11
2 Kelas dan Obyek...13
2.1 Kelas dan Obyek...14
3 Hubungan antar kelas dan Inheritance...18
3.1 Array...19
3.1.1 Mendeklarasikan Array...19
3.1.2 Membuat Array...20
3.1.3 Menginisialisasi Array...20
3.1.4Array Multidimensi...21
3.1.5 Batasan Array...21
3.1.6 Manipulasi Array...22
3.2 Hubungan Antar Kelas...22
3.2.1 Asosiasi...23
3.2.2 Agregasi...25
3.2.3 Komposisi...26
3.3 Pewarisan di Java...29
3.4 Kelas Abstrak...30
3.5 Interface...31
4 Polimorfisme...42
Politeknik Telkom Praktikum PBO
4.2 Overloading...45
4.2.1Overloadingconstructor...45
4.2.2 Melakukan overloading pada method...47
4.3 Overriding...48
5 ExceptionHandling...56
6 Input/Output...64
6.1 Implementasi Kelas File...65
6.2 Penggunaan Stream dalam Java...66
6.2.1 Implementasi Byte Stream...66
6.2.2 Implementasi Character Stream...69
6.3 Implementasi RandomAccessFile...71
Daftar Pustaka...vi
Telkom Polytechnic Praktikum PBO
Daftar Gambar
Gambar 1-1 System properties dalam Windows XP...2
Gambar 1-2 Environment Varialbles pada Windows XP...3
Gambar 1-3 Mengatur path pada System variables...4
Gambar 1-4 Mengatur classpath pada User Variable...4
Gambar 1-5 Mencoba hasil pengaturan path Java...5
Gambar 3-1 Contoh hubungan asosiasi...23
Gambar 3-2 Contoh hubungan agregasi...25
Gambar 3-3 Contoh hubungan komposisi...27
Gambar 3-4 Contoh Pewarisan Kelas...29
Gambar 3-5 Contoh Interface...31
Gambar 4-1 Diagram kelas pegawai...44
Gambar 4-2 Diagram kelas Kalender...46
Politeknik Telkom Praktikum PBO
Daftar Tabel
Tabel 1-1 Tipe data Integer...6
Tabel 1-2 Tipe data floating point...6
Tabel 1-3 Karakter unicode...7
Tabel 1-4 Operator unary...8
Tabel 1-5 Operator aritmatika...8
Tabel 1-6 Operator relasi...8
Tabel 1-7 Operator boolean...9
Telkom Polytechnic Praktikum PBO
1 Pengenalan Java
Overview
Bab ini akan menjelaskan tentang dasar-dasar pemrograman menggunakan bahasa Java. Penjelasan tentang karakteristik bahasa Java, identifer, tipe data, dan operator pada Java, serta expression dan fow control pada Java..
Tujuan
1. Mengaplikasikan dasar-dasar pemrograman menggunakan Java
3. Mengaplikasikan expression dan fow control pada Java
Telkom Polytechnic Praktikum PBO
1.1 Instalasi
Instal aplikasi Java SDK pada komputer Anda. Berikut langkah-langkah untuk instalasi:
a. Jalankan installer Java SDK
b. Ikuti semua proses sampai selesai
c. Set variabel system path pada komputer Anda. Caranya:
- Buka Windows Explorer
- Klik kanan iconMy Computer, klik Properties
- Klik Tab Advanced
- Klik tombol EnvironmentVariable
Gambar 1-2 Environment Varialbles pada Windows XP
Telkom Polytechnic Praktikum PBO
- Pada bagian systemvariable, cari variabel path, kemudian klik Edit, tambahkan alamat dari folder bin pada Java kompiler Anda ke dalam
valuevariable path
Gambar 1-3 Mengatur path pada System variables
- Pada bagian user variable, tambahkan variable classpath kemudian isi nilainya dengan “ .; ” (titik dan titik koma) alamat_folder_lib_anda
Cobalah Java Anda, buka commandline
Ketikkan java<<enter>>
Ketikkan javac<<enter>>
Gambar 1-5 Mencoba hasil pengaturan path Java
Kalau kedua sintaks di atas tidak menemukan pesan
error, maka instalasi Anda berhasil
1.2 Tipe Data di Java
Tipe data dalam Java dibagi dalam dua kategori: 1. Sederhana
2. Komposit
1.2.1 Tipe data sederhana
Tipe data sederhana merupakan tipe inti. Tipe sederhana tidak diturunkan dari tipe lain. Tipe ini adalah tipe data primitif. Terdapat delapan tipe data primitif di Java:
- Empat tipe adalah untuk bilangan bulat: byte, short, int, long
- Dua untuk tipe angka pecahan (foating point): float, double
- Satu untuk tipe karakter, yaitu char
Telkom Polytechnic Praktikum PBO
- Satu untuk tipe boolean yang berisi nilai logika: true/false Tipe data integer
Tipe data integer memiliki jangkauan nilai sebagai berikut: Tabel 1-1 Tipe data Integer
Panjang Integer Tipe data
Jangkauan Nilai
8 bit byte -27 to 27-1
16 bit short -215 to 215-1
32 bit int -231 to 231-1
64 bit long -263 to 263-1
Pada kebanyakan situasi, tipe int paling banyak dipakai. Untuk data yang berukuran besar, digunakan tipe data long. Tipe short dan byte terutama digunakan untuk aplikasi khusus yang menangani fle level rendah.
Tipe data Floating Point
Tipe data ini digunakan untuk perhitungan yang melibatkan bilangan pecahan, seperti perhitungan kosinus, akar persamaan, dan sebagainya. Java mengimplementasikan standar himpunan tipe dan operator titik mengambang IEEE-754.
Keakuratan nilai untuk tipe data foating point adalah sebagai berikut:
Tabel 1-2 Tipe data floating point Panjang Float Tipe data Nilai terbesar
32 bit Float 3.40282e+38
64 bit Double 1.79769e+308
Masing-masing tipe data foating point memiliki kebutuhan memori yang berbeda. Tipe data float memerlukan 32 bit sebagai single-precision, sedangkan tipe data double
Nama double mengacu pada presisinya yang sebesar dua kali dibandingkan float. Presisi float kebanyakan tidak memadai untuk banyak aplikasi komputasi. Angka literal bertipe float
berakhiran F, contoh 3.14F sedangkan kalau tidak diberi akhiran F akan dipandang sebagai bertipe double.
Tipe data Char
Tipe data char merupakan tipe data yang direpresentasikan dengan 16-bit Unicode character. Literal dari char harus berada diantara singlequotes (‘ ‘)
Contohnya :
‘a’ huruf a
‘\t’ karakter tab
Unicode dirancang untuk menangani semua karakter di dunia dalam kode 2 byte. Kode 2 byte memungkinkan 65.536 karakter, dimulai dari nilai byte 0 sampai 65.535. Himpunan karakter ASCII dipandang sebagai bagian dari Unicode dan ditempatkan sebagai 256 karakter pertama dari Unicode. Terdapat pula beberapa barisan escape untuk karakter
Unicode yang spesial, seperti berikut:
Tabel 1-3 Karakter unicode
Barisan Escape Nama Nilai Unicode
\b Backspace \u008
\t Tab \u009
\n Linefeed \u00a
\r Carriage return \u00d
\” Petik ganda \u0022
\’ Petik tunggal \u0027
\\ Backslash \u005c
Tipe data Boolean
Tipe data boolean memiliki 2 literal yaitu : true dan false. Contoh, statement :
boolean truth = true;
mendeklarasikan variabel truth sebagai tipe data boolean dan memberikan nilai true
1.2.2 Tipe data komposit
Tipe data komposit merupakan tipe data yang disusun dari tipe data sederhana atau tipe komposit lain yang sudah ada.
Telkom Polytechnic Praktikum PBO
Tipe ini dapat berupa array, string, kelas, dan interface.
Khusus untuk String pada Java dikenali sebagai kelas, bukan sebagai array of character. String pada Java diapit oleh tanda petik ganda (“...”), contoh:
String s=”Saya makan nasi”;
1.3 Operator di Java
Java memiliki beberapa jenis operator di antaranya: Tabel 1-4 Operator unary
Nama Operator Simbol Defnisi
Increment ++ Akan menambahkan
nilai sejumlah satu
Decrement -- Akan mengurangi nilai
sejumlah satu
Contoh penggunaan: int x = 5;
int y = x++;
pada kasus di atas nilai y akan berisi 5 dan nilai x akan berisi 6 karena nilai y akan mengambil nilai x dahulu setelah itu baru nilai x ditambahkan satu, berbeda kasusnya pada contoh di bawah ini:
int x = 5; int y = ++x;
pada kasus di atas, nilai y akan berisi 6 dan x berisi 6 karena nilai x akan ditambahkan satu dahulu baru kemudian dimasukkan ke variabel y.
Tabel 1-5 Operator aritmatika Nama
Operator Simbol Deskripsi
Penambahan + Menambahkan dua buah
nilai
Pengurangan - Pengurangan dua buah
nilai
Perkalian * Perkalian dua buah nilai
Sisa bagi % Sisa pembagian dua buah nilai
Tabel 1-6 Operator relasi
Simbol Deskripsi
< Kurang dari
> Lebih dari
<= Kurang dari atau sama
dengan
>= Lebih dari atau sama
dengan
== Sama dengan
!= Tidak sama dengan
Telkom Polytechnic Praktikum PBO
Tabel 1-7 Operator boolean
Simbol Deskripsi
&& AND
|| OR
^ XOR
! NOT
1.4 Percabangan pada Java
1.4.1 Sintaks if
Sintaks if-else, sebagai berikut :
if (boolean expression) { statement or block
} else if (boolean expression) { statement or block
} else {
statement or block }
1.4.2 Sintaks switch
Syntax switch sebagai berikut : switch (expression) {
case constant1 : statements; break;
case constant2 : statements; break;
default : statements; break;
Contohnya
switch(x){
case 1: System.out.println(“Januari”); break;
case 2: System.out.println(“Februari”); break;
case 3: System.out.println(“Maret”); break;
case 4: System.out.println(“April”); break;
case 5: System.out.println(“Mei”); break;
case 6: System.out.println(“Juni”); break;
case 7: System.out.println(“Juli”); break;
case 8: System.out.println(“Agustus”); break;
case 9: System.out.println(“September”); break;
case 10: System.out.println(“Oktober”); break;
case 11: System.out.println(“November”); break;
case 12: System.out.println(“Desember”); break;
default: System.out.println(“Salah input”); break;
}
1.5 Perulangan pada Java
1.5.1 Perulangan for
Syntax for sebagai berikut :
for (init_expr;boolean testexpr;alter_expr) { statement or block
}
Telkom Polytechnic Praktikum PBO
Contoh :
for (int i=0;i<10;i++) { System.out.println(i); }
1.5.2 Perulangan while
Sintaks loopingwhile sebagai berikut :
while (boolean testexpr) { statement or block
}
Contoh :
int i = 0; while (i<10) {
System.out.println(i); i++;
}
1.5.3 Perulangan do....while
Sintaks do/whileloop, sebagai berikut
do {
statement or block } while (boolean testexpr)
Contoh :
int i = 0; do {
System.out.println(i); i++;
Latihan
1. Buatlah sebuah program dengan menggunakan bahasa Java untuk menghitung nilai dari selisih dua buah waktu, contoh:
Jam pertama: 2 jam 3 menit 25 detik Jam kedua : 2 jam 3 menit 27 detik Selisih : 0 jam 0 menit 2 detik
2. Buatlah sebuah program dengan menggunakan bahasa Java untuk menampilkan pola seperti ini:
Nilai = 5 Pola =
Nilai = 3 Pola =
3. Buatlah sebuah program dengan menggunakan bahasa Java untuk menampilkan bilangan prima antara 1 s.d. 100!
4. Buatlah sebuah program dengan menggunakan bahasa Java untuk menampilkan bilangan Fibonacci antara 1 s.d. 100!
5. Buatlah sebuah program dengan menggunakan Celcius ke Reamur, Kelvin dan Fahrenheit!
8. Buatlah sebuah program dengan menggunakan bahasa Java untuk menampilkan pola seperti berikut: Nilai = 5 bahasa Java untuk menghitung FPB antara dua buah bilangan!
2 Kelas dan Obyek
Overview
Bab ini akan menjelaskan tentang dasar Pemrograman Berorientasi Obyek yaitu Kelas dan Obyek. Penjelasan tentang karakteristik kelas dan obyek, komponen kelas, serta cara pembuatan dan pendeklarasian kelas di dalam Java. Akan dijelaskan juga tentang cara pengaksesan komponen kelas.
Tujuan
1. Mengetahui pengertian kelas dan obyek 2. Mengetahui karakteristik kelas dan obyek
3. Mengetahui ftur Pemrograman Berorientasi Obyek
5. Mengetahui cara mendeklarasikan kelas dan obyek di Java
2.1 Kelas dan Obyek
Obyek merupakan dasar dari struktur Pemograman Berorientasi Obyek (OOP). Fitur dari OOP adalah Abstraksi, Enkapsulasi, Pewarisan, dan Polymorphism.
Fitur Abstraksi yaitu mengkarakteristikan obyek yaitu dengan pemberian atribut pada suatu obyek, hal ini akan diimplementasikan dengan pembuatan kelas (class). Kelas mempunyai 2 komponen yaitu Atribut dan Method.
Sedangkan ftur Enkapsulasi digunakan untuk menyembunyikan informasi atau detil dari obyek yang tidak penting, hal ini diimplementasikan dengan access specifer.
AccessSpecifers di dalam Java terdiri dari :
o Public : kelas dapat diakses dari manapun termasuk dari kelas lain dan kelas-kelas yang berada dalam
package yang berbeda
o Private : kelas dapat diakses oleh anggota kelas itu sendiri.
o Protected : kelas dapat diakses oleh kelas turunan
o Friendly : kelas dapat diakses dari manapun tetapi harus berada dalam package yang sama.
Dari penjelasan di atas pada modul ini akan dipelajari dan diberikan latihan dalam pengimplementasikan kedua ftur OOP yaiitu Enkapsulasi dan Abstraksi.
Pembuatan kelas di dalam java :
class <classname> {
//declaration of data member //declaration of methods }
Pembuatan kelas lengkap dengan accessspecifer class <classname>
{
<access specifier> <deklarasi method> }
Karena dasar pemrograman OOP adalah obyek, sehingga class yang sudah dibuat akan dibuat obyeknya atau diinstansiasi, cara pembuatan obyek dari kelas adalah :
<class name> <object name>;
<object name> = new <class name>();
Untuk menjalankan program dibutuhkan sebuah
methodmain().Methodmain() dapat dideklarasikan di kelas manapun tetapi nama kelas tempat method main() berada harus sama dengan nama fle .java nya. Deklarasi mehod
main :
public static void main(String[] args) {
//code for the main method }
Berikut adalah contoh pembuatan kelas dan obyek secara lengkap, berikut dengan main method-nya
class book
public void show() {
System.out.println("Books Information"); System.out.println("Books Price : "+price); System.out.println("Number of pages : "+pages);
} }
public class MainBook {
public static void main(String[] args) {
book javabook=new book(); javabook.set(60000,100); javabook.show();
} }
Contoh dengan menggunakan konstruktor
public class Employee {
String EmpName; int EmpID;
String EmpPosition;
Employee (String name,int Id, String position) {
EmpName = name; EmpID = Id;
EmpPosition = position; }
void Show() {
System.out.println("Employee Information"); System.out.println("Name : "+EmpName); System.out.println("ID : "+EmpID); System.out.println("Position :
"+EmpPosition); }
public static void main(String args[]) {
Employee Empobj;
Emp_obj = new Employee("Mark",10010,"Manager"); Empobj.Show();
Latihan
1. Bank ABC menyediakan layanan kepada nasabahnya. Bank ABC mempunyai beberapa cabang, setiap cabang mempunyai ID cabang. Setiap nasabah akan disimpan informasinya seperti nama, no rekening, alamat, no telepon. Identifkasikan kelas dan atribut yang harus dibuat.
2. Buatlah sintaks Java untuk soal diatas, dimana tiap kelas diberikan method untuk menampilkan datanya, 3. Defnisikan sebuat class Account yang didalamnya
terdapat methodhitungBunga(). Method ini digunakan untuk menghitung jumlah saldo. Tiap
Account mempunyai noAccount.
4. Buatlah sebuah program Calculator, yang akan menerima 2 operand dan program tersebut
mempunyai fungsi tambah, kurang, kali, dan bagi. Identifkasi kelas, atribut, dan method yang digunakan. Implementasikan dalam program Java
5. Carilah kesalahan pada program dibawah. Kemudian lengkapilah program tersebut (area() merupakan
method untuk mencari luas)
public class SomethingIsWrong {
public static void main(String[] args) {
3 Hubungan antar kelas dan
Inheritance
Overview
Bab ini akan menjelaskan tentang hubungan antar kelas dan implementasinya pada Java. Berisi tentang hubungan asosiasi, agregasi, komposisi, diawali dengan penjelasan
array pada Java. Kemudian dilanjutkan dengan penjelasan tentang pewarisan kelas, kelas abstrak, dan juga interface
Tujuan
1. Mengaplikasikan konsep array di Java
2. Mengaplikasikan hubungan antar kelas di Java 3. Mengaplikasikan pewarisan kelas di Java 4. Mengaplikasikan konsep kelas abstrak di Java 5. Mengaplikasikan konsep interface di Java
3.1 Array
3.1.1 Mendeklarasikan Array
Array biasanya digunakan untuk mengelompokkan data atau obyek yang memiliki tipe yang sama. Array memungkinkan untuk mengacu ke sekumpulan obyek dengan nama yang
point p[]; // point adalah sebuah kelas
Dalam bahasa pemrograman Java, Array merupakan sebuah obyek meskipun ia terdiri dari elemen yang bertipe data primitif. Seperti halnya kelas yang lain, ketika mendeklarasikan Array belum dibentuk sebuah obyek Array. Deklarasi Array hanya membuat sebuah referensi yang dapat digunakan untuk mengacu ke sebuah obyek Array.
Besarnya memori yang digunakan oleh elemen-elemen Array
akan dialokasikan secara dinamis dengan menggunakan pernyataan new atau dengan array initializer.
Contoh deklarasi array di atas, dengan menggunakan kurung siku setelah nama variabel, merupakan standar penulisan
array dalam C, C++ dan Java. Format demikian agak sulit untuk dibaca. Oleh karenanya, bahasa Java menggunakan bentuk deklarasi array alternatif dengan menggunakan kurung siku di sebelah kiri seperti dalam contoh berikut :
char [] s;
point [] p; // point adalah sebuah kelas
Sebuah deklarasi array dapat ditulis sebagai pendeklarasian tipe array di bagian kiri dan nama variabel di bagian kanan. Kedua bentuk deklarasi array di atas dapat digunakan, tetapi sebaiknya konsisten dalam menggunakan satu bentuk saja. Dalam deklarasi array, tidak ditentukan ukuran aktual dari
berlaku bagi semua variabel yang berada di sebelah kanannya.
3.1.2 Membuat Array
Array dibuat dengan menggunakan keyword new. Contoh di bawah ini membuat sebuah Array dengan tipe primitif char:
s = new char[26];
Indeks array dimulai dengan angka 0. Batasan legal untuk nilai indeks ini adalah dari nol hingga jumlah elemen array – 1. Apabila program berusaha mengakses array di luar batas yang legal, maka akan muncul runtime exception.
Untuk membuat Array dengan elemen obyek, gunakan cara penulisan berikut
p = new point[10];
Pernyataan tersebut tidak membuat 10 obyek Point. Untuk membuat obyek Point, gunakan pernyataan berikut :
p[0] = new point(0, 1); p[1] = new point(1, 2); ...
3.1.3 Menginisialisasi Array
Java memiliki cara singkat untuk membuat sebuah obyek
Array dengan elemen-elemennya memiliki nilai awal :
String names[] = {"Georgianna","Jen","Simon"};
Kode di atas adalah sama dengan kode berikut ini:
String names[];
names[0] = "Georgianna"; names[1] = "Jen";
names[2] = "Simon";
Cara singkat ini dapat digunakan untuk Array dengan berbagai jenis
tipe, seperti dalam contoh berikut :
MyDate dates[] = {
3.1.4 Array Multidimensi
Dalam Java, dapat dibuat Array dari Array sehingga dinamai
Array multidimensi. Contoh berikut ini memperlihatkan cara membuat Array dua dimensi :
int twoDim [][] = new int[4][]; twoDim[0] = new int[5];
twoDim[1] = new int[5];
Array dari Array yang bersifat non-rectangular dapat dibuat seperti dalam contoh berikut :
twoDim[0] = new int[2]; twoDim[1] = new int[4]; twoDim[2] = new int[6]; twoDim[3] = new int[8];
Untuk membuat Array dari Array yang rectangular dengan cara mudah, gunakan bentuk berikut ini :
int twoDim[][] = new int[4][5];
3.1.5 Batasan Array
Dalam bahasa Java, indeks Array dimulai dengan angka nol. Jumlah elemen di dalam Array disimpan sebagai bagian dari obyek Array di dalam atribut length. Atribut ini dapat digunakan untuk melakukan proses iterasi pada Array seperti dalam contoh berikut :
int list[] = new int[10];
for(int i = 0; i < list.length; i++) { System.out.println(list[i]);
}
Dengan menggunakan atribut length, pemeliharaan kode program menjadi mudah karena program tidak perlu mengetahui jumlah eleman Array pada saat kompilasi.
3.1.6 Manipulasi Array
Mengubah Ukuran Array
Setelah membuat obyek Array, ukuran Array tersebut tidak dapat diubah. namun demikian, dapat digunakan variabel referensi yang sama untuk menunjuk ke sebuah obyek Array
baru seperti dalam contoh di bawah ini :
int myArray[] = new int[6]; myArray = new int[10];
Dalam kode program ini, obyek Array yang pertama akan hilang kecuali ada variabel lain yang dibuat untuk merujuk ke obyek Array tersebut.
Menyalin Array
Bahasa Java menyediakan method khusus untuk menyalin
Array, yaitu dengan menggunakan method arrayCopy() dari kelas System seperti dalam contoh berikut :
// array semula
int myArray[] = {1, 2, 3, 4, 5, 6}; // array engan elemen yang lebih banyak
int hold[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; //menyalin semua elemen myArray ke hold
// dimulai dengan indeks ke 0
System.arraycopy(myArray, 0, hold, 0,myArray.length);
Setelah proses pengkopian di atas, maka isi dari Array hold adalah 1, 2, 3, 4, 5, 6, 4, 3, 2, 1.
3.2 Hubungan Antar Kelas
2. Agregasi 3. Komposisi
4. Generalisasi (terkait dengan pewarisan) 5. Spesialisasi (terkait dengan pewarisan)
3.2.1 Asosiasi
Asosiasi merupakan hubungan antara dua kelas di yang merupakan hubungan struktural yang menggambarkan himpunan link antar obyek. Contoh dari hubungan asosiasi ini adalah:
Gambar 3-6 Contoh hubungan asosiasi
Bentuk implementasi dari diagram kelas tersebut di Java adalah sebagai berikut:
class Mahasiswa {
private String nim; private String nama;
public Mahasiswa(String nim, String nama) {
this.nim=nim; this.nama=nama; }
public void setnama (String nama) { this.nama = nama;
}
public void setnim (String nim) { this.nim = nim;
}
public String getNim() { return this.nim;
}
public String getNama () { return this.nama;
} }
class Dosen {
private String Kddosen;
private String[] nimMHS=new String[5]; private int jmlMahasiswa=0;
public Dosen(String kode) {
this.Kddosen=kode; }
public void setKddosen (String Kddosen) { this.Kddosen = Kddosen;
}
public void setNimMahasiswa (String nim) { nimMHS[jmlMahasiswa]=nim;
jmlMahasiswa++; }
public int getJmlMahasiswa () { return this.jmlMahasiswa;
}
public String getKddosen () { return this.Kddosen;
}
public void daftarMahasiswa() {
System.out.println("Kode Dosen "+Kddosen);
System.out.println("Daftar Mahasiswa"); for (int i=0;i<jmlMahasiswa;i++)
{
public static void main(String[] args) {
/*kode dibawah ini merupakan implementasi dari hubungan asosiasi antar kelas*/
Mahasiswa mhs1 = new Mahasiswa("30107998","Abdul Kadir");
Mahasiswa mhs2 = new Mahasiswa("30107999","Asep Sumarta");
Dosen dsn = new Dosen("SKS");
dsn.setNimMahasiswa(mhs1.getNim()); namun kedua kelas ini dapat berdiri sendiri-sendiri. Agregasi sering juga disebut relasi “part of” atau relasi “whole-part”. Contoh hubungan agregasi ini adalah:
Gambar 3-7 Contoh hubungan agregasi
Implementasi dari diagram kelas tersebut dalam Java adalah sebagai berikut:
//mahasiswa.java
public class mahasiswa {
private String NIM, Nama;
public mahasiswa(String no, String nm) { this.NIM = no;
this.Nama = nm; }
public String GetNIM() { return (NIM); }
public String GetNama() { return (Nama); }
}
//jurusan.java
public class Jurusan {
private String KodeJurusan, NamaJurusan;
/*baris dibawah ini merupakan implementasi dari hubungan agregasi antar kelas*/
private Mahasiswa[] Daftar = new Mahasiswa[10]; public Jurusan(String kode, String nama) { this.KodeJurusan = kode;
this.NamaJurusan = nama; }
private static int JmlMhs = 0;
public void AddMahasiswa(Mahasiswa m) { this.Daftar[JmlMhs] = m;
this.JmlMhs++; }
public void DisplayMahasiswa() { int i;
System.out.println("Kode Jurusan : "+this.KodeJurusan);
System.out.println("Nama Jurusan : "+this.NamaJurusan);
System.out.println("Daftar Mahasiswa :"); for (i=0;i<JmlMhs;i++)
ketika kelas yang menjadi whole dimusnahkan, maka kelas yang menjadi part ikut musnah. Contoh hubungan komposisi adalah sebagai berikut:
Gambar 3-8 Contoh hubungan komposisi
Implementasi dari diagram kelas tersebut dalam Java adalah sebagai berikut:
//CPU.java
public class CPU {
private String Merk; private int Kecepatan;
public CPU(String m, int k) { this.Merk = m;
this.Kecepatan = k; }
public void DisplaySpecCPU() {
System.out.println(this.Merk + ", " + this.Kecepatan);
} }
//Monitor.java
public class Monitor { private String Merk;
public Monitor(String m) { this.Merk = m;
}
public void DisplaySpecMonitor() { System.out.println(this.Merk); }
}
//Printer.java
public class Printer {
private String Merk, Type;
public Printer(String m, String t) { this.Merk = m;
this.Type = t; }
public void DisplaySpecPrinter() {
System.out.println(this.Merk + ", " + this.Type);
} }
//Komputer.java
public class Komputer { private String Kode; private long Harga; private CPU Proc; private Monitor Mon; private Printer Prn ;
public Komputer(String k, long h) { this.Kode = k;
this.Harga = h; if (k == "PC-01") {
/*baris dibawah ini merupakan implementasi dari hubungan komposisi antar kelas*/
Proc = new CPU("Pentium IV", 500);
Mon = new Monitor("Sony Multiscan 15sf"); Prn = new Printer("Canon BJC-210SP", "Color");
}
}
public void DisplaySpec() {
System.out.println("Kode : " + this.Kode);
System.out.print("Processor: "); Proc.DisplaySpecCPU();
System.out.print("Monitor : "); Mon.DisplaySpecMonitor();
System.out.println("Harga : Rp. " + this.Harga);
} }
3.3 Pewarisan di Java
Pewarisan di Java hanya mengenal pewarisan tunggal, artinya sebuah kelas hanya mewarisi atribut dan method dari satu kelas induk. Untuk menggunakan pewarisan di Java digunakan keywordextends.
Contoh pewarisan dapat dilihat pada diagram kelas berikut ini:
+getDetails() : String +name : String = "" +salary : double +birthDate : Date
Employee
+departement : String
Manager
Gambar 3-9 Contoh Pewarisan Kelas
Implementasi dari diagram kelas di atas dalam Java adalah sebagai berikut:
//Employee.java
public class Employee { public String name; public Date birthDate; public double salary;
public String getDetails() {...} }
//Manager.java
public class Manager extends Employee { public String department;
}
Atribut name, birthDate, dan salary serta method getDetails() diturunkan ke kelas Manager sehingga kelas
Manager dapat menggunakan atribut dan method tersebut.
Konstruktor dari kelas induk tidak dapat diturunkan kepada kelas turunannya.
Untuk menggunakan method dan konstruktor dari kelas induk pada kelas anak digunakan keywordsuper, contoh:
//Employee.java
public class Employee { private String name; private double gaji;
public Employee (String s, double g) { name = s;
gaji=g; }
public double getgaji() { return gaji;
} }
//Manager.java
public class Manager extends Employee { private String alamat;
private double tunjangan; private double bonus;
public Manager(String nama, String s) { super(nama);
alamat = s; }
Public double getgaji() {
return (super.getgaji()+tunjangan+bonus); }
}
3.4 Kelas Abstrak
Kelas abstrak merupakan suatu bentuk khusus dari kelas di mana kelas tersebut tidak dapat diinstansiasi dan digunakan hanya untuk diturunkan ke dalam bentuk kelas konkret atau kelas abstrak berikutnya.
Kelas abstrak dideklarasikan menggunakan keyword abstract. Di dalam kelas abstrak dapat dideklarasikan atribut dan
method sama seperti kelas konkret, namun ada juga method
public abstract class LivingThing { public void breath(){
System.out.println("Living Thing breathing..."); }
public void eat(){
System.out.println("Living Thing eating..."); }
public abstract void walk(); //merupakan method abstrak
}
Ketika sebuah kelas mewarisi sebuah kelas abstrak, kelas tersebut harus mendefnisikan implementasi dari method
abstrak yang ada dalam kelas induknya. Jika tidak didefnisikan implementasinya, maka kelas tersebut akan menjadi kelas abstrak juga, contoh:
public class Human extends LivingThing {
//implementasi dari method abstrak walk() public void walk(){
System.out.println("Human walks..."); }
}
3.5 Interface
Interface adalah prototype kelas yang berisi defnisi konstanta dan deklarasi method (hanya nama method tanpa defnisi kode programnya). Dalam sebuah interface:
o Semua atribut adalah public, static dan fnal
(semua atribut bertindak sebagai konstanta)
o Semua method adalah abstract dan public o Tidak boleh ada deklarasi konstruktor
Dengan adanya interface, Java menyediakan sebuah ftur untuk keperluan pewarisan jamak (multiple inheritance). Contoh interface dan kegunaannya:
Gambar 3-10 Contoh Interface
Untuk membuat interface di Java digunakan keyword
interface. Source code untuk diagram kelas di atas dalam Java adalah sebagai berikut:
//Relation.java
public interface Relation {
public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); }
//Line.java
public class Line implements Relation { private double x1;
private double x2; private double y1; private double y2;
public Line(double x1, double x2, double y1, double y2){
this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2; }
public double getLength(){
double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1));
}
public boolean isGreater( Object a, Object b){ double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength(); return (aLen > bLen);
}
public boolean isLess( Object a, Object b){ double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength(); return (aLen < bLen);
}
public boolean isEqual( Object a, Object b){ double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength(); return (aLen == bLen);
Latihan
1. Latihan 1
Penjual nama : String alamat : String barang : String[5] hargaBeli : Double[5] jumlahBarang : Integer[5] hargaJual : Double[5] jumlahTerjual : Integer[5] keuntungan : Double
Penjual()
Diketahui sebuah class diagram seperti di atas. Kelas penjual
o Atribut nama menyimpan nama penjual
o Atribut alamat menyimpan alamat penjual
o Atribut barang menyimpan jenis barang yang dijual oleh penjual. Maksimal seorang penjual membeli 5 jenis barang
o Atribut hargabeli menyimpan harga beli barang per satuannya
o Atribut jumlahbarang menyimpan jumlah barang yang dibeli tiap jenisnya
o Atribut hargajual menyimpan harga jual tiap barang per satuannya
o Atribut jumlahterjual menyimpan jumlah barang yang berhasil dijual tiap jenisnya
o Atribut keuntungan menyimpan total keuntungan penjual
o Konstruktor penjual digunakan untuk mengeset nama dan alamat penjual
o Method getKeuntungan digunakan untuk menghitung keuntungan seorang penjual dengan persamaan: Keuntungan = (JumlahTerjual x HargaJual) – (JumlahBarang x HargaBeli)
Tugas :
Buatlah code Java untuk diagram kelas di atas!
Buatlah sebuah class driver dengan menggunakan Java yang menggunakan kelas di atas di mana driver
akan memanggil array bertipe kelas penjual berisi 5 orang penjual. Class driver harus menampilkan nama dan alamat setiap penjual, beserta data barang dagangan masing-masing penjual (jumlahBarang, hargaBeli, jumlahTerjual, hargaJual), dan juga keuntungan masing-masing penjual! (data diasumsikan sendiri)
2. Latihan 2
Mobil antara kelas Pemilik dan kelas Mobil.
Pada kelas mobil:
mobil, dan tahunKeluaran untuk menyimpan tahun keluaran mobil
o Terdapat konstruktor mobil untuk mengeset nilai
merek, noPlat, dan tahunKeluaran mobil
Pada kelas pemilik:
o Terdapat atribut nama untuk menyimpan nama pemilik, alamat untuk menyimpan alamat pemilik,
jumlahMobil untuk menyimpan jumlah mobil pemilik, dan noPlatMobil untuk menyimpan nomor plat mobil pemilik
o Seorang pemilik maksimal memiliki 5 mobil
o Terdapat konstruktor pemilik untuk mengeset nama dan alamat pemilik
o Terdapat method beliMobil untuk menambahkan nomor plat mobil baru seorang pemilik
o Terdapat method jualMobil untuk mengurangi nomor plat mobil seorang pemilik
Tugas:
Buatlah kode Java untuk mengimplementasikan class diagram di atas!
Buatlah class driver untuk menampilkan data seorang pemilik dan mobilnya dengan jumlah mobilnya 5! (data diasumsikan sendiri)
3. Latihan 3
Diketahui class diagram di atas menggambarkan hubungan antara kelas nasabah dan kelas rekening. Seorang nasabah bisa membuat maksimal 5 rekening pada sebuah bank.
Pada kelas nasabah:
o Terdapat konstruktor nasabah untuk mengeset nama dan alamat nasabah
o Terdapat method bukaRekening untuk mengeset rekening baru
Pada kelas rekening:
o Terdapat atribut noRekening untuk menyimpan nomor rekening dan saldo untuk menyimpan nilai saldo
o Terdapat method deposit untuk menambahkan nilai saldo
o Terdapat method withdraw untuk mengurangi nilai saldo
Tugas:
Buatlah code Java untuk mengimplementasikan class diagram di atas!
Buatlah class driver untuk menampilkan data seorang nasabah dan rekeningnya! (data diasumsikan sendiri)
4. Latihan 4
Kelas antara class Kelas dan class Mahasiswa. Satu kelas maksimal memiliki 40 orang mahasiswa.
Pada class Kelas:
o Terdapat atribut idKelas untuk menyimpan ID Kelas, angkatan untuk menyimpan angkatan,
jumlahMahasiswa untuk menyimpan jumlah mahasiswa pada kelas tersebut, dan juga mhs untuk menyimpan data mahasiswa sebuah kelas
o Terdapat konstruktor kelas untuk mengeset
idKelas dan angkatan
o Terdapat method tambahMahasiswa untuk menambahkan data mahasiswa suatu kelas
Tugas:
Buatlah code Java untuk mengimplementasikan class diagram di atas!
Buatlah class driver untuk menampilkan data kelas dan mahasiswanya! (data diasumsikan sendiri)
5. Latihan 5 Employee
Keterangan kelasEmployee:
Konstruktor mengeset nilai nama, nip, dan golongan
Keterangan kelasManager:
Konstruktor mengeset nilai nama, nip, golongan, dan
departemen
Buatlah kelas employee dan kelas Manager sesuai class diagram di atas!
Buatlah sebuah driver class yang menampilkan data
Employee dan data Manager jika diketahui sebagai berikut: Employee
Nama : Andi
NIP : 12345
Golongan : 8
Manager
Nama : Joni
NIP : 11111
6. Latihan 6
Keterangan kelas Employee:
o Merupakan kelas abstrak
o Memiliki method abstrak setGolongan() dan
getGaji()
o Memiliki konstruktor yang mengeset nama
Employee
o Golongan 1 s.d. 7 termasuk ke dalam staf sedangkan golongan 8 s.d. 15 termasuk ke dalam dosen
Keterangan kelasStaf:
o Memiliki konstruktor untuk mengeset nama
o Gaji seorang karyawan adalah Rp 8000/jam kerja Keterangan kelasDosen:
o Memiliki atribut departemen
o Memiliki konstruktor untuk mengeset nama
o Gaji seorang dosen adalah Rp 10000/jam kerja
Jika data seorang dosen dan staf adalah sebagai berikut:
Dosen
Nama : Budi
NIP : 11111
Departemen : IF
Golongan : 8
Jam kerja : 9 jam
Staf
Nama : Joni
NIP : 22222
Golongan : 3
Jam kerja : 6 jam
Maka buatlah implementasi dari class diagram di atas dalam Java dan buatlah sebuah class driver untuk :
o Menghitung gaji dosen dan staf tersebut
o Menampilkan data dosen dan staf tersebut
7. Latihan 7
Buatlah Interface Employee sesuai dengan class diagram di atas :
a. Terdapat 3 buah method :
- getNama() yang mengembalikan nilai nama dari seorang pegawai
- getGol() yang mengembalikan nilai golongan dari seorang pegawai
Buatlah Class Manager sesuai dengan class diagram di atas :
a. Terdapat 3 buah atribut : nama,nip, dan gol
b. Terdapat 2 buah method :
- setNip (n:String) untuk memberikan nilai atribut nip
- setGol (g:int) untuk memberikan nilai atribut gol, dimana nilai dari golongan seorang employee adalah 7 s.d. 15. Selain itu dianggap golongannya 7.
c. Terdapat 1 buah constructor untuk memberikan nilai atribut
nama
Misalkan diberikan aplikasi TestEmployee.java :
public class TestEmployee {
public static void main(String[] args) { Manager m = new Manager("Joni"); m.setNip("11111");
m.setGol(10);
System.out.println("Nama: "+m.getNama()); System.out.println("NIP :"+m.getNip()); System.out.println("Gol :"+m.getGol()); }
}
Compile Employee.java, Manager.java & TestEmployee.java
Jalankan TestEmployee.class
4 Polimorfisme
Overview
Polymorphism merupakan konsep OOP yang memberikan feksibilitas kepada programmer dalam menulis program.
Dengan mengaplikasikan konsep polymorphism,
programmer dapat memperlakukan seluruh object yang berasal dari superclass yang sama seakan-akan mereka adalah object dari superclass.
Pada Java, konsep polymorphism diimplementasikan melalui beberapa cara yaitu overloading, overriding, abstract class
dan melalui interface.
Tujuan
Dengan praktikum ini mahasiswa diharapkan dapat:
1. Memahami dan menerapkan konsep polimorfsme dalam pemrograman
2. Memahami proses terjadinya Virtual Method Invocation
3. Memahami dan menerapkan polymorphicarguments
dalam pemrograman
4. Memahami penggunaan instanceof dan cara melakukan
5. Memahami tentang overloading
6. Memahami tentang overriding
7. Memahami aturan tentang overridden
4.1 Polymorphism
Memahami proses terjadinya Virtual Method
Ketika program tersebut dijalankan, akan tampak hasil seperti dibawah ini :
Nilai x = 5 Ini class Child
Mengimplementasikan UML classdiagram dalam program Suatu program terdiri dari class Pegawai sebagai parent class, dan kelas Manajer dan kelas Kurir sebagai subclass. Buatlah suatu program yang menerapkan konsep
polymorphic argument sebagaimana yang telah disinggung dalam pembahasan sebelumnya.
Gambar 4-11 Diagram kelas pegawai
Transformasikan class diagram diatas ke dalam bentuk program?. Tulislah listing program berikut ini sebagai pengetesan.
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.
Bayaran untuk Manajer : 850 Bayaran untuk Programmer : 630
4.2 Overloading
4.2.1 Overloadingconstructor
Gambar 4-12 Diagram kelas 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.
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.
Waktu awal : 8-1-2000
1 hari setelah waktu awal : 9-1-2000 Waktu berubah : 1-6-2003
1 bulan setelah itu : 1-7-2003 Waktu berubah : 20-10-2004 1 tahun setelah itu : 20-10-2005
4.2.2 Melakukan overloading pada method
Mengimplementasikan UML class diagram
dalam program
Gambar 4-13 Contoh overloading
4.3 Overriding
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 3. Return type harus sama
Berikut ini contoh terjadinya overriding dimana
method Info() pada class Child meng-override methodInfo() pada classparent:
Method yang terkena override (overridden method) diharuskan tidak boleh mempunyai modifer yang lebih luas aksesnya dari method yang meng-override
Latihan
1. Buatlah kelas BEM (Badan Eksekutif Mahasiswa) yang merupakan kelas turunan dari Mahasiswa dan buatlah metodhmetodhnya.
2. Buatlah 1 objek untuk menginstantiasi kelas BEM (Badan Eksekutif Mahasiswa) dan
mengimplementasikan beberapa metodh yang telah Anda defnisikan dalam kelas BEM (Badan Eksekutif Mahasiswa).
3. Panggilllah objek yang telah Anda buat pada kelas Pecinta Alam dan BEM (Badan Eksekutif Mahasiswa) untuk bekerja sehingga tampil efek-efek polymorfsme
4. Buatlah Program seperti berikut :
Kompilasilah dan jalankan program tersebut. Apa hasil program tersebut? Analisalah hasil tersebut!
5. Salinlah program pada latihan 1 dengan nama KelasMobil2.java. Selanjutnya, ubahlah perintah
System.out.println("Warna : " + mobil_dia.warna);
System.out.println("Tahun : " + mobil_dia.tahun_produksi);
agar tidak menggunakan pemanggilan variabel instan untuk memperoleh warna dan tahun produksi. Sebagai pengganti, gunakan metode perolehWarna() dan
6. Salinlah program pada Latihan 1 dengan nama KelasMobil3. Modifkasilah program agar kelas Mobil memiliki variabel instan bernama merk (isinya seperti Suzuki, Honda, Mitsubishi, dsb). Selanjutnya, modifkasilah metode isiDataMobil sehingga secara berturut-turut dapat digunakan untuk mengisikan merk mobil, warna mobil, dan tahun produksi. Buatlah pula metode bernama
perolehMerk untuk mendapatkan merk mobil. Kemudian, dalam program utama, buatlah objek untuk mengisikan data berikut:
Merk : Honda Warna: Biru
Tahun produksi: 2003
Program juga bisa menampilkan ketiga informasi di atas dengan menggunakan metode.
7. Modifkasilah program pada latihan 4 sehingga data merk, warna, dan tahun produksi dapat dimasukkan dari
keyboard sewaktu program dieksekusi.
8. Memperlihatkan efek penggunakan private pada variabel instan. Modifkasilah kelas Mobil hasil Latihan 1 agar menjadi seperti berikut:
Perubahan sebenarnya hanya berupa tambahan dua kata private (dinyatakan dengan cetak tebal pada contoh di atas). Bila Anda menyimpan program ini dengan nama yang berbeda, jangan lupa mengubah nama kelas pada program utama!
Selanjutnya, cobalah untuk mengompilasi. Apa yang terjadi? Apa kesalahannya? Mengapa? Lalu, bagaimana kalau mau menampilkan informasi warna dan tahun produksi?
Kompilasilah dan jalankan. Perhatikan, apa bedanya dengan program pada Latihan 1?
10. Kembangkanlah agar program pada Latihan 6, memungkinkan overloading dengan bentuk:
mobil_ku = new Mobil("Honda","Hijau", 2004);
11. Modifkasilah program pada Latihan 7 agar kelas Mobil memiliki metode bernama infoMobil, yang digunakan untuk menampilkan data mobil. Atur pula agar variabel instan tidak bisa diakses di luar kelas Mobil.
12. Invoking parent class constructor (Employee1.java)
5
Exception Handling
Overview
Bab ini akan menjelaskan tentang Exception di Java, apa yang dimaksud dengan Exception, bagaimana menangkap
Exception. Serta akan dijelaskan throwing exception dan membuat user defne exception.
Tujuan
1. Mengetahui tentang Exception di Java. 2. Mengetahui kelas-kelas exception di Java
3. Mengetahui bagaimana Exception muncul dan cara menangkap Exception
4. Mengetahui cara melempar Exception
5. Mengetahui tentang User Defne Exception
Exception merupakan suatu kejadian yang tidak biasa atau event abnormal yang muncul ketika sedang menjalankan program. Exception merupakan runtime error. Ketika
Exception muncul maka akan melempar sebuah obyek
Exception, jika obyek yang dilempar ini tidak kitangani atau ditangkap maka akan mengakibatkan program diterminasi (berhenti), hal ini dapat menyebabkan program menjadi tidak handal. Untuk mengatasi hal ini dibutuhkan sesuatu untuk menangani Exception.
Exception mempunyai beberapa subclass. Tiap
subclassException akan dilempar dengan sebab sebab tertentu. Untuk menangani Exception dibutuhkan
Exception handling. Exception handling diimplementasikan di Java dengan keyword
o Try
Blok try digunakan untuk meletakkan code yang kemungkinan akan memunculkan Exception
o Catch
Blok catch digunakan sebagai Exception handler, blok ini akan menangkap Exception yang dilempar di dalam
blok try. Blok catch digunakan untuk
menspesifkasikan tipe Exception yang akan ditangani. Minimal 1 blok try mempunyai 1 blok catch, jadi 1 blok
try dapat mempunyai lebih dari 1 blok catch, hal ini dapat berlaku jika terdapat lebih dari 1 Exception yang akan dilempar didalam blok try.
o Finally
Blok fnally merupakan optional, boleh ada atau tidak. Satu blok try catch hanya 1 blok fnally. Blok fnally
diakses pada urutan terakir dalam blok try catch fnally, blok tetap diakses meskipun ada atau tidak ada
Exception.
o Throw
Statement throw digunakan untuk melempar
Exception secara eksplisit.
o Throws
method tersebut tidak menyediakan Exception handling.
Contoh penggunaan Try Catch dan Finally public class ArrayException
{
public static void main (String[] args) {
try {
System.out.println("Your name is "+args[0]);
}
catch (ArrayIndexOutOfBoundsException obj) {
System.out.println("Run the code with the argument");
}
finally {
System.out.println("Your school is TELKOM POLYTECHNIC");
} } }
Contoh penggunaan throw statement
public class ThrowingStatement {
static double root(double A,double B, double C) {
throw new IllegalArgumentException("A can't be zero");
} else {
disc = (B*B)-(4*A*C); if (disc<0)
System.out.println("Illegal Argument in : "+obj);
}
return ((-B + Math.sqrt(disc))/(2*A)); }
public static void main(String[] args) {
double Ans = root(0,2,4); }
}
User defned Exception merupakan Exception
yang didefnisikan oleh programmer sesuai dengan kebutuhan. User defned Exception yang dibuat harus menuruni (inheritance) method-method dari kelas
Exception.
Contoh UserdefnedException
class UserException extends Exception {
int num1,num2,sum;
UserException(int a,int b) {
num1 = a; num2 = b; sum = a + b; }
return "UserException Caught: The sum of the numbers Exceeds 20..";
}
throws new UserException(a,b);
System.out.println("The Value of the sum of two numbers is:" + sum);
}
catch (UserException Obja) {
System.out.println("Caught:" + Obja); }
} }
Latihan
1. Tipe Exception apa saja yang dapat ditangkap oleh handler
berikut?
catch (Exception e) { }
2. Modifkasi method cat dibawah agar bisa di compile public static void cat(File file) {
{System.out.println(line); }
3. Perhatikan kode berikut, lengkapi dan perbaiki kode berikut
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
// Enter the following values and see what Exception is caught.
String value = JOptionPane.showInputDialog(null, "Enter value:"); int divisor = Integer.parseInt(value);
System.out.println(3/divisor);
}
System.out.println("After Exception."); }
}
Lengkapilah blok catch sehingga Exception yang mungkin muncul bisa ditangani.
4. Fungsi factorial biasanya didefnisikan untuk nilai yang tidak negatif, jika parameter bernilai negatif diterima oleh
method maka harus ada suatu reaksi. Hal ini bisa diatasi dengan mengembalikan hasil = 1, tetapi penanganan tersebut tidak sesuai karena yang salah adalah parameter inputannya. Maka diperlukan untuk melempar Exception
jika method menerima inputan berupa bilangan negatif.
public int factorial(int n) {
melempar sebuah Exception
java.lang.IllegalArgumentException. 5.
Diberikan kode berikut:
public class TestExceptions{
public static void main( String[] args ){ for( int i=0; true; i++ ){
System.out.println("args["+i+"]="+ args[i]);
} } }
Compile dan jalankan program TestExceptions. Keluarannya akan tampak seperti ini:
javac TestExceptions one two three args[0]=one
args[1]=two args[2]=three
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: 3 at TestExceptions.main(1.java:4)
Ubah program TestExceptions untuk menangani Exception, keluaran program setelah ditangkap
Exception-nya akan seperti ini:
javac TestExceptions one two three args[0]=one
args[1]=two args[2]=three Exception caught:
java.lang.ArrayIndexOutOfBoundsException: 3 Quiting...
Overview
Dalam bab ini akan dibahas tentang bagaimana cara melakukan pengaksesan data kedalam fle, baik melakukan proses pembacaan ataupun penulisan. Akan dibahas tentang pengaksesan data menggunakan stream dan random access fle.
Tujuan
1. Penggunaan file menggunakan kelas File.
2. Penggunaan byte stream.
3. Penggunaan character stream.
4. Pengaksesan dengan random-access file
6.1 Implementasi Kelas File
Salah satu kelas yang ada dalam packagejava.io adalah kelas File, yang digunakan untuk melakukan pembuatan file dan direktori. Kelas file dalam package java.io menyediakan berbagai macam method untuk mengakses atribut-atribut dari file dan direktori, seperti hak akses dari, tanggal pembuatan dan akses, alamat dari direktori dimana file tersebut berada, dll.
Berikut adalah contoh penggunaan kelas File. import java.io.*;
public class MetadataFile {
public static void main(String args[]) { String fileName = args[0];
File fn = new File(fileName);
System.out.println("Nama: " + fn.getName());
if (!fn.exists()) {
System.out.println(fileName + " file tidak ditemukan");
return; }
System.out.println(fileName + " adalah sebuah " + (fn.isFile()?"file":"folder"));
if (fn.isDirectory()) {
String isi[] = fn.list();
System.out.println("Daftar isi dari direktori:");
for (int i = 0; i<isi.length; i++) { System.out.println(isi[i]); }
}
if (!fn.canRead()) {
System.out.println(fileName + " tidak bisa dibaca.");
System.out.println(fileName+" memiliki panjang "+fn.length()+" bytes");
System.out.println(fileName+" terakhir dimodifikasi "+fn.lastModified());
if (!fn.canWrite()) {
System.out.println(fileName + " tidak bisa ditulisi.");
} }
}
6.2 Penggunaan Stream dalam Java
Stream dalam sebuah program java digunakan untuk melakukan pembacaan atau penulisan kedalam sebuah asal (source) atau tujuan (destination). Operasi Input output (I/O) terdiri dari dua bagian, yaitu input yang berasal dari sebuah sumber (misal sebuah
keyboard, jaringan komputer, file) kemudian data inputan tadi akan diproses dan akan dikeluarkan menuju sebuah tujuan (misal monitor, jaringan komputer, file).
6.2.1 Implementasi Byte Stream /*
Program: Contoh pengaksesan [baca/tulis] kedalam file menggunakan byte stream
Baca dari file menggunakan FileInputStream Tulis ke file menggunakan FileOutputStream Menerima inputan user menggunakan
BufferedInputStream
private byte bufferDariFile[]=new byte[100]; private byte bufferInputan[]=new byte[100]; String dariFile=null;
public void ambilData(String namaFile) {
FileInputStream file=null; try
catch (Exception e) {
System.out.println(e); }
}
} //akhir method ambilData
public void simpanData(String namaFile) {
FileOutputStream objFOS=null; try
{
objFOS= new FileOutputStream(namaFile); for (int i=0;i<bufferDariFile.length;i++) {
if (bufferDariFile[i]==0) {
continue; }
objFOS.write(bufferDariFile[i]); }
objFOS.write(10);
for (int i=0;i<bufferInputan.length;i++) {
if (bufferInputan[i]==0) {
continue; }
objFOS.write(bufferInputan[i]); }
System.out.println("Data ditulis..."); }
catch(FileNotFoundException f) {
catch (Exception e) {
System.out.println(e); }
}
} //akhir method simpanData
public void inputData(String namaFile) {
BufferedInputStream bis=new
BufferedInputStream(System.in); try
{
System.out.print("Ketik sesuatu, "); System.out.println("akhiri dgn enter :"); bis.read(bufferInputan);
simpanData(namaFile);
}//akhir method inputData
public void tampilkanData(String namaFile) {
System.out.println(); ambilData(namaFile);
System.out.println("Isi "+namaFile+" :"); String str=new String(bufferDariFile); System.out.println(str);
} //akhir method tampilkanData } // akhir kelas AksesData
class ByteStream {
public static void main(String[] args) {
AksesData ad = new AksesData(); ad.tampilkanData("dataFIOS.txt");
ad.inputData("dataFIOS.txt"); ad.tampilkanData("dataFIOS.txt");
} }
6.2.2 Implementasi Character Stream import java.io.*;
class AksesDataStreamKarakter {
String str=null;
public void inputData() {
BufferedReader br=new BufferedReader(new
}//akhir method inputData
public void cetakData(String namaFile) {
PrintWriter pw=null; try
{
FileWriter file;
File=new FileWriter(namaFile,true); pw=new PrintWriter(file,true);
pw.println(str); pw.close();
}//akhir method cetakData
public void ambilData(String namaFile) {
System.out.println("Isi dari file "+namaFile+" adalah :");
try {
File file=new File(namaFile); FileReader f=new FileReader(file);
int ch;
while((ch=f.read())!=-1) {
System.out.print((char)ch);
}
}//akhir method ambilData
}//akhir kelas AksesDataStreamKarakter
class CharacterStream {
public static void main(String[] args) {
AksesDataStreamKarakter sk;
sk = new AksesDataStreamKarakter(); sk.inputData();
sk.cetakData("dataCharStream.txt"); sk.ambilData("dataCharStream.txt"); }
}
6.3 Implementasi RandomAccessFile
Random access fle (pengaksesan fle secara acak) memungkinkan kita untuk mengakses isi dari sebuah fle secara acak. Dengan cara ini kita bisa membaca dan menulis data teks pada lokasi manapun dalam sebuah fle. Ambil sebuah kasus ketika yang kita inginkan tidak semua teks dari sebuah fle kita butuhkan, tetapi hanya pada posisi tertentu saja, misal mulai pada karakter ke-sekian. Maka dengan menggunakan RandomAccessFile ini kita bisa langsung menuju ke posisi yang diinginkan dan mengambil teks yang kita butuhkan saja.
class AksesFileAcak {
RandomAccessFile file=null; byte arrByte[];
public AksesFileAcak(String namaFile) {
try {
file=new RandomAccessFile(namaFile,"rw"); }
catch(IOException e) {
System.out.println(e); }
} //akhir konstruktor
public void ambilData(int awal, int jumlah) {
System.out.println("Cetak data mulai posisi "+awal+" sebanyak "+jumlah+" karakter");
arrByte = new byte[jumlah]; try String str=new String(arrByte); System.out.println(str);
System.out.println(); }
else {
System.out.println("Inputan pada posisi "+awal);
System.out.println("Panjang data: "+file.length());
}
}
catch(IOException e) {
System.out.println(e); }
}//akhir ambilData(int awal, int jumlah)
public void ambilData(int awal) {
System.out.println("Cetak data mulai posisi "+awal);
while (i<file.length()) {
System.out.println("Inputan pada posisi "+awal);
}//akhir ambilData(int awal)
public void ambilData() {
System.out.println("Cetak data mulai posisi depan");
try {
file.seek(0); int i=0;
while (i<file.length()) {
}//akhir ambilData()
public void tulisData(String kalimat) {
System.out.println("Cetak data mulai posisi depan");
System.out.println("Data awal akan ditimpa"); try
System.out.println(e);
}//akhir method tulisData(String kalimat)
public void tulisData(int pos, String kal) {
System.out.println("Cetak data mulai posisi " + pos);
System.out.println("Data awal akan ditimpa");
}//akhir tulisData(int pos, String kal)
System.out.println(e); }
} //akhir method tutupKoneksiFile()
}//akhir kelas AksesFileAcak
class MainAksesFileAcak {
public static void main(String[] args) {
AksesFileAcak obj;
obj= new AksesFileAcak("dataRAC.txt"); obj.ambilData(0,10);
obj.ambilData(8);
obj.tulisData("Cetak ini ke file"); obj.ambilData();
obj.tulisData(8,"Tulisan yang lainnya"); obj.ambilData();
obj.tutupKoneksiFile(); }
}