• Tidak ada hasil yang ditemukan

Kata Pengantar - IS521 Praktikum Pemrograman Berorientasi Objek

N/A
N/A
Protected

Academic year: 2018

Membagikan "Kata Pengantar - IS521 Praktikum Pemrograman Berorientasi Objek"

Copied!
97
0
0

Teks penuh

(1)

Praktikum

Pemrograman Berorientasi Obyek

POLITEKNIK TELKOM BANDUNG

(2)

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

(3)
(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(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

(10)

3. Mengaplikasikan expression dan fow control pada Java

(11)

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

(12)

- Klik tombol EnvironmentVariable

Gambar 1-2 Environment Varialbles pada Windows XP

(13)

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

(14)

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

(15)

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

(16)

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.

(17)

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

(18)

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

(19)

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;

(20)

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

}

(21)

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++;

(22)

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!

(23)
(24)

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!

(25)

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

(26)

5. Mengetahui cara mendeklarasikan kelas dan obyek di Java

(27)

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>

{

(28)

<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 {

(29)

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();

(30)

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) {

(31)
(32)

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

(33)

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

(34)

berlaku bagi semua variabel yang berada di sebelah kanannya.

(35)

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[] = {

(36)

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.

(37)

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

(38)

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;

}

(39)

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++)

(40)

{

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; }

(41)

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++)

(42)

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); }

}

(43)

//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();

(44)

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.

(45)

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

(46)

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:

(47)

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));

(48)

}

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);

}

(49)

public boolean isEqual( Object a, Object b){ double aLen = ((Line)a).getLength();

double bLen = ((Line)b).getLength(); return (aLen == bLen);

(50)

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

(51)

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:

(52)

mobil, dan tahunKeluaran untuk menyimpan tahun keluaran mobil

o Terdapat konstruktor mobil untuk mengeset nilai

merek, noPlat, dan tahunKeluaran mobil

(53)

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:

(54)

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

(55)

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

(56)

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

(57)

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

(58)

- 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

(59)

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

(60)

5. Memahami tentang overloading

6. Memahami tentang overriding

7. Memahami aturan tentang overridden

(61)

4.1 Polymorphism

 Memahami proses terjadinya Virtual Method

(62)

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.

(63)

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

(64)

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.

(65)

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

(66)

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:

(67)

Method yang terkena override (overridden method) diharuskan tidak boleh mempunyai modifer yang lebih luas aksesnya dari method yang meng-override

(68)

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 :

(69)

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

(70)

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:

(71)

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?

(72)

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);

(73)

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)

(74)

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

(75)

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

(76)

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) {

(77)

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; }

(78)

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); }

} }

(79)

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.

(80)

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.

(81)

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...

(82)

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

(83)

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.");

(84)

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;

(85)

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]); }

(86)

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);

(87)

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() {

(88)

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);

(89)

}

}//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.

(90)

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());

}

(91)

}

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);

(92)

}//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

(93)

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)

(94)

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(); }

}

Gambar

Gambar 1-1 System properties dalam Windows XP
Gambar 1-2 Environment Varialbles pada Windows XP
Gambar 1-4 Mengatur classpath pada User Variable
Gambar 1-5 Mencoba hasil pengaturan path Java
+7

Referensi

Dokumen terkait

maka dapat disimpulkan bahwa komunikasi antar pribadi adalah suatu proses.. pengiriman pesan dari seseorang kepada orang lain, baik secara

“I told you I was going to take piano lessons at the Shreek School, remember.. Then you got this strange look on your face, and you

Terdapat beberapa definisi dalam sistem kontrol yang dapat diuraikan, yaitu (1) sistem adalah kombinasi dari beberapa komponen yang bekerja bersama- sama melakukan sesuatu

a) Bagaimana tingkat efisiensi biaya industri perbankan Indonesia yang terdaftar di Bursa Efek Indonesia periode Tahun 2004-2007 berdasarkan pendekatan parametrik. b)

Menimbang, bahwa dari surat-surat tersebut ternyata bahwa sekarang Termohon Kasasi dahulu sebagai Penggugat telah menggugat cerai terhadap Pemohon Kasasi dahulu sebagai Tergugat

Penelitian ini bertujuan untuk mengetahui Langkah – langkah apa yang diambil dalam persiapan Dinas Pendidikan Provinsi Jawa Tengah untuk menghadapi Alih Kewenangan

Kata Kunci: Pemahaman, Fikih, Model Pembelajaran Kooperatif Tipe jigsaw Latar belakang penulisan ini berdasarkan hasil observasi dengan guru mata pelajaran fikih, bahwa

Pergaulan bebas di antara muda-mudi, seperti yang terjadi sekarang ini seringkali membawa kepada hal-hal yang tidak di kehendaki, yakni terjadinya kehamilan