modul pbo finishing

107
Asisten 113060117 Innasya Dewi K. 113060132 Rangga K. P. 113060140 Fajar 113060123 Artha 61307001 Alfian 61307002 M. Abubakar 113070103 Kuni Kiswati 113070213 Indah Rosita 113070311 Anung W. 113070316 Ni Luh Putu K. 113071007 Fransiska Amalia 113098023 Saputra Aries P. This is Property of Name ID

Upload: tjokorda-agung-budi-w

Post on 29-Jun-2015

909 views

Category:

Documents


11 download

DESCRIPTION

Ini dia Modulnya

TRANSCRIPT

Page 1: Modul PBO Finishing

Asisten 113060117 Innasya Dewi K. 113060132 Rangga K. P. 113060140 Fajar 113060123 Artha 61307001 Alfian 61307002 M. Abubakar 113070103 Kuni Kiswati 113070213 Indah Rosita 113070311 Anung W. 113070316 Ni Luh Putu K. 113071007 Fransiska Amalia 113098023 Saputra Aries P.

This is Property of

Name

ID

Page 2: Modul PBO Finishing

SURAT KETERANGAN

Saya yang bertandatangan di bawah ini:

NAMA : TJOKORDA AGUNG

NIK : 06830333-1

DOSEN PJMP : PEMROGRAMAN BERORIENTASI OBJEK

KBK : ITP

Menerangkan dengan sesungguhnya bahwa modul ini yang digunakan untuk pelaksanaan

praktikum Pemrograman Berorientasi Objek D3 Semester Genap periode 2009/2010 di

Laboratorium Common Departemen Teknik Informatika

Mengetahui, Dosen PJMP Pemrograman Berorientasi Objek D3

Tjokorda Agung NIK: 06830333-1

Page 3: Modul PBO Finishing

Modul 1 Pengenalan Java 1

Modul 2 OOP I 18

Modul 3 OOP II 33

Modul 4 Exception, I/O, dan Operasi File 42

Modul 5 Multithreading 61

Modul 6 Graphical User Interface (GUI) 69

Modul 7 Netbeans, Applet, dan JDBC 85

What’s inside of this?

Page 4: Modul PBO Finishing
Page 5: Modul PBO Finishing

1

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Apa itu Java?

Java merupakan salah satu bahasa pemrograman yang unggul dibandingkan dengan yang lain. Karena Java merupakan filter-filter dari bahasa pemrograman yang ada sebelumnya.

Java dikenal sebagai bahasa pemrograman “Modern” karena kemampuannya untuk mendukung OOP dan mempermudah pemrograman aplikasi multithreading.

Bagaimanakah sejarahnya?

Modul 1

Pengenalan Java

Tujuan:

1. Tahu dan kenal bahasa

pemrograman Java.

2. Tahu cara instalasi dan konfigurasi

Java.

3. Ngerti dan bisa implementasiin tipe

data, variabel, dan konstanta.

4. Ngerti dan bisa implementasiin

operator, variabel array, statement

kondisional, dan statement iterasi.

Java adalah bahasa pemrograman orientasi objek yang berukuran kecil, sederhana, aman, diinterpretasi atau dioptimasi secara dinamis, ber-bytecode, netral arsitektur, mempunyai garbage-collector, multithreading, memi liki mekanisme exception-handling, berbasis tipe untuk penulisan program mudah diperluas secara dinamis serta telah diperuntukkan system tersebar (distributed system).”

Bill Joy – Co-founded Sun Microsystems

Patrick Naughton

James Gosling

Di tahun 1995

Java dibuat karena ingin membuat sebuah bahasa pemrograman yang bersifat portable dan platform independent (tidak tergantung mesin dan sistem operasi), sehingga bisa digunakan untuk membuat software yang bisa ditanam pada berbagai peralatan elektronik customer biasa.

*Di tahun 1996 Java diadopsi Netscape

Page 6: Modul PBO Finishing

2

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Versi-versi JSDK (Java Software Development Kit)

Ada fitur lightweight database system, Derby. Derbymerupakan pengembangan basisdata Apache

Ada fitur generics (parameterized type), enumeration, dan metadata

Direlease tahun 2000

Berorientasi Objek, Java telah menerapkan konsep pemrograman berorientasi objek (program dilihat sebagai sekumpulan objek yang saling berinteraksi) yang modern dalam implementasinya.

Statically Typed, dimana seluruh objek harus didefinisikan terlebih dahulu sebelum dikompilasi. Tujuannya agar kode lebih dapat dioptimasi untuk menghasilkan program berkinerja tinggi.

Perlu kompilasi, dengan menggunkan Java compiler, kompilasi akan menghasilkan file ”bytecode”, kemudian file ”bytecode” ini dibaca oleh sembarang Java inpterpreter yang akan menerjemahkan menjadi bahasa mesin yang dapat dieksekusi mesin.

Robust, java mendorong pemrograman yang bebas dari kesalahan dengan bersifat strongly typed dan memiliki run-time checking, diimplematasikan dengan menggunakan exception handling.

Portable, Program Java dapat dieksekusi di platform manapun selama tersedia Java Virtual Machine untuk platform tersebut.

Multithreading, Java mendukung penggunaan multithreading yang telah terintregasi langsung dalam bahasa java. Thread = sebuah program computer melakukan lebih dari satu tugas dalam satu waktu.

Dinamis, Program java dapat melakukan suatu tindakan yang ditentukan pada saat eksekusi program dan bukan pada saat kompilasi.

Sederhana, Java menggunakan bahasa yang sederhana dan mudah dipelajari. Pekerjaan pemrograman yang dulu dikerjakan manual dikerjakan Java secara otomatis (misalnya dealokasi memory).

Terdistribusi, java didesain untuk berjalan pada lingkungan yang terdistribusi seperti halnya internet.

Aman, Java memiliki model pengamanan tiga lapis. Pertama, bytecode verifier yang memverifikasi kode Java sebelum dieksekusi. Kedua, class loader yang menangani pemuatan kelas Java ke interpreter. Ketiga, manajer keamanan yang menangani keamanan tingkat aplikasi dengan pengendalian hak akses.

Mendukung koneksi ke databse dan objek tersebar

Ada fasilitas asersi untuk mendukung design-by-contract 1998, ada toolkit “Swing” yang

mendukung GUI (Graphical UI)

1997, tambahan event model, internasionalisasi, dan JavaBeans

Page 7: Modul PBO Finishing

3

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Pernah Dengar Garbage Collector?

Ketika kita membuat program menggunakan bahasa pemrograman yang memiliki struktur data dinamis maka ia harus memilki suatu cara untuk memberi sistem operasi [tempat dia berjalan], saat dia memerlukan memori tambahan ataupun tidak butuh memori lagi.

Ketika sebuah program sudah minta memori dari sistem operasi, biasanya memori tidak pernah lagi dikembalikan tapi dipegang untuk dipake lagi sama program yang kita buat tadi. Nah, siapakah yang mengelola hal itu? Garbage Collector [salah satu pengelola penyimpanan].

Instalasi Java

Ekstraksi

file installer berupa self-installing file, berupa .exe kalau dijalankan dia sudah ekstrak dirinya untuk dikopikan ke direktori.

Pilih default untuk direktori instalasi.

Program Java melakukan garbage collection sehingga programmer tidak perlu menghapus objek-objek yang tidak digunakan lagi secara manual. Java interpreter melakukan pemeriksaan untuk mengetahui apakah objek di memori masih diacu oleh program. Java interpreter akan mengetahui objek yang telah tidak dipakai oleh program. Ketika Java interpreter mengetahui objek itu, maka Java interpreter akan memusnahkan secara aman.

Java garbage collector berjalan sebagai thread berprioritas rendah dan melakukan kerja saat tidak ada kerja lain di program. Umumnya, Java garbage collector bekerja saat idle pemakai menunggu masukan dari keyboard atau mouse. Garbage collector akan bekerja dengan prioritas tinggi saat interpreter kekurangan memori. Hal ini jarang terjadi karena thread berprioritas rendah telah melakukan tugas dengan baik secara background.

Garbage Collector pada Java

1

Page 8: Modul PBO Finishing

4

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

sediakan space minimal 300 MB 2

3

4

Page 9: Modul PBO Finishing

5

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Setelah kita install JDK, kita harus setting path sama classpath-nya.

set path=c:\jdk<versi>\bin;%path%

set classpath=c:\jdk<versi>\lib\file(*.jar);%path%

contoh:

set path=c:\jdk1.5\bin;%path%

set classpath=c:\jdk1.5\lib\tools.jar;%classpath%

set classpath=c:\jdk1.5\lib\dt.jar;%classpath%

klik startcontrol panelSystem, kemudian Environment. Pada User Variable

Window, temukan variable PATH tambahkan direktori jdk<version>\bin ke awal

dari path, menggunakan titik koma sebagai pemisah isian baru. Kemudian jangan sampai lupa untuk menambahkan direktori jdk<version>\lib\*.jar ke variable

classpath.

1 2

3

1 2

Page 10: Modul PBO Finishing

6

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Ayo, kita coba buat program Sederhana menggunakan Java!

Setelah kita menginstal JDK dan konfigurasi pathnya, mari kita buat program sederhana menggunakan Java. Tetapi sebelumnya, apakah perbedaan dari bahasa pemrograman Pascal dan C [yang sudah dipelajari sebelumnya] dengan bahasa pemrograman Java?

Bahasa C dan Pascal Java Editor Sudah ada ketika menginstal. Menggunakan software text

editor, seperti Notepad, Wordpad, Eclipse, Netbeans, dll.

Bentuk Penulisan:

Pemrograman di Java Pemrograman di Turbo C

Ketika menyimpan program di Java harus sesuai dengan nama kelas dan ingat case sensitive! [misal: pada program di atas kita simpan dengan Hello.java]

Compiling dan Menjalankan Program Java

compiling menggunakan cmd, caranya:

javac namaProgram.java

bagaimana jika ada error? Akan tampil pesan error setelah mengetik perintah di atas. Contoh disamping adalah

Menjalankan program dengan cmd, caranya:

javac namaProgram

jika tidak ada error maka akan langsung muncul tulisan Hello World seperti contoh di samping.

public class Hello {

public static void main(String args[])

{

System.out.print("Hello World");

}

}

#include<conio.h>

#include<stdio.h>

void main()

{

printf("hello word");

getch();

}

nama kelas (nama program)

Main

program

Page 11: Modul PBO Finishing

7

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Tipe data dan variabel

Program yang kita buat pasti butuh memori untuk menyimpan data yang sedang diproses. Nah, masalahnya kita nggak pernah tahu di memori sebelah mana komputer akan meletakkan data dari program kita . Untuk memudahkan pengambilan data pada lokasi memori, maka muncul lah konsep variable. Setiap variabel punya jenis alokasi memori tersendiri. Nah, variabel yang berbentuk bilangan bulat, bilangan pecahan, karakter, dan sebagainya. Sering disebut dengan tipe data.

Tiga bentuk data

Solusinyaa…. Konversi Dilakukan ketika sebuah nilai di-assign ke variabel yang berbeda tipe datanya

Tipe data dengan nilai benar (true) atau salah (false), biasanya banyak digunakan dalam kondisional.

Berbentuk karakter atau deretan karakter. Terdiri atas dua kategori:

1. Karakter tunggal (char). 2. Deretan karakter (String).

Berbentuk angka atau bilangan. Terdiri atas dua kategori:

1. Integer (Bil. Bulat), bilangan yang tidak mengandung angka pecahan. 2. F loat (Bil. Pecahan), bilangan yang mengandung angka pecahan.

Akan terjadi

masalah dalam

tipe data ketika

terdapat dua tipe

data yang berbeda

dan saling

berhubungan.

Bagaimanakah

Solusinya?

Rules in Conversion

Salah satu contoh konversi, silahkan cari contoh konversi lainnya

Page 12: Modul PBO Finishing

8

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Casting Dilakukan karena tidak bisa dilakukan konversi. Dilakukan secara manual oleh user.

Ternyata, ada dua macam tipe variabel data dalam bahasa Java lho... ayo, kita lihat...

Bagaimana bentuk umum pendeklarasiannya?

Contohnyaa...

int dataint;

char chardata;

float x = 12,67;

tipeData namaVariable1 [= nilaiAwal];

tipeData namaVariable1 [= nilaiAwal][, namaVariable2 [= nilaiAwal]…];

tipe referensi, meliputi tipe variabel data : tipe class, tipe array, tipe interface. Ada pula tipe variabel data yang khusus yang disebut null types, namun variable dalam Java tidak akan pernah memiliki tipe null ini.

tipe primitif, meliputi : tipe boolean, tipe numerik (yang meliputi : byte, short, int, long, char, float, double) dan tipe karakter (char).

Dilakukan casting karena variabel “shortAmount” memiliki range < variabel “intAmount”

Aturan Penamaan Variabel di

Java

1. Harus terdiri atas sederetan karakter Unicode yang diawali oleh karakter huruf atau garis bawah. Unicode merupakan system penkodean karakter yang dapat dibaca oleh berbagai bahasa manusia.

2. Tidak boleh berupa keyword (kata yang dicadangkan), null, atau literal true/false.

Harus unik dalam suatu scope

format nama variable

1. Diawali dengan huruf kecil. 2. Jika nama variable lebih dari satu kata,

kata ke-2, ke-3, dst, diawali dengan huruf capital dan ditulis menyatu.

Page 13: Modul PBO Finishing

9

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Konstanta Variabel dalam Java bisa dijadikan konstanta, sehingga nilainya tidak akan dapat diubah-ubah dengan mendeklarasikannya sebagai variable final.

final int x = 2;

Variabel Array

Gimana cara pendeklarasiannya?

Caranya

Data Data 1 Data 2 Data 3 …. Data N

Index 0 1 2 …. N-1

Elemen variabel array Urutan Elemen variabel

array (Harus unik)

Anggap array sebagai sebuah deretan rumah pada sebuah jalan, dan rumah-rumah tersebut memiliki bentuk yang sama. Untuk membedakan rumah yang satu dengan yang lain maka dibutuhkan sebuah nomor. Nomor itulah yang kemudian kita kenal sebagai index.

tipeData[] namaVariable [= new tipeData [jumlahElemen] ];

[atau] tipeData namaVariable[] [= new tipeData [jumlahElemen] ];

Bentuk umumnya…

TipeData bisa berupa salah satu dari berbagai tipe data seperti int, long, double ataupun nama class, baik class standar Java atau buatan sendiri

int[] namaVariableArray; namaVariableArray = new int[7];

Memesan jumlah elemen di salah satu baris Kalo jumlah elemen belum dipesan, kita gak

bisa pake variable array untuk nyimpen

data.

int[] namaVariableArray = new int[7]; Kita langsung pesen 7 elemen array

int[] varibleArray3 = {5, 3, 23, 99, 22, 1, 6};

int[] variableArray3 = new int[]{1,23,45,4,3,7,8};

Variabel array ini memiliki 7

elemen. Di mana setiap elemen

sudah terisi data.

3

1

2

Page 14: Modul PBO Finishing

10

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Gimana cara Aksesnya? pertama, kita udah bisa deklarasiin. Sekarang, saatnya buat kasih nilai ke array dan ambil nilai dari array itu. Let‟s take a look.

int[] numbers = new int[3];

numbers[0]=34;

int amount = numbers[0]+numbers[2]; Sebutkan nomor indeks dari

elemen yang akan kita isi. Sebutkan nomor indeks dari elemen

yang akan kita ambil isinya.

public class CalendarMonth

{

public static void main(String[] args)

{

String month_days[] = new String[12];

month_days[0] = "Januari";

month_days[1] = "Februari";

month_days[2] = "Maret";

month_days[3] = "April";

month_days[4] = "Mei";

month_days[5] = "Juni";

month_days[6] = "Juli";

month_days[7] = "Agustus";

month_days[8] = "September";

month_days[9] = "Oktober";

month_days[10] = "November";

month_days[11] = "Desember";

int day=9;

System.out.println("Bulan ke "+day+ " adalah” +month_days[day]);

}

}

public class CopyArray{

Public static void main (String args[]){

int[] n1= {1,2,3,4,5,6};

int[] n2= new int[n1.length];

//mengcopy semua elemen array n1 ke n2

System.arraycopy(n1,0,n2,0,n1.length);

int[] n3= new int[n1.length];

//mengcopy elemen 2-4 sebanyak 3 elemen ke n3

System.arraycopy(n1,2,n3,4,3);

}

}

Page 15: Modul PBO Finishing

11

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

long[][] numbers = new long[5][5];

numbers.length;

numbers[i].length;

Array 2 Dimensi

Bagaimana bentuk umumnya?

Bagaimana pendeklarasian dan pengaksesannya?

Pendeklarasian, pengisian variabel array 2 dimensi, mengambil nilai pada variabel array dua dimensi memiliki cara yang sama seperti pada array satu dimensi tetapi bedanya pada array dua dimensi harus menyebutkan indeks baris dan indeks kolom.

Ternyata kita bisa lho menghitung jumlah elemen pada array dua dimensi.

tipeData[][] namaVariable [= new tipeData[jumlahBaris][jumlahKolom]];

(atau)

tipeData namaVariable[][] [= new tipeData[jumlahBaris][jumlahKolom]];

public class Matrik2

{

public static void main(String[] args)

{

double m[][];

m = new double[4][4];

m[0][0] = 1;

m[1][1] = 1;

m[2][2] = 1;

m[3][3] = 1;

System.out.println(m[0][0]+" "+m[0][1]+" "+m[0][2]+" "+m[0][3]);

System.out.println(m[1][0]+" "+m[1][1]+" "+m[1][2]+" "+m[1][3]);

System.out.println(m[2][0]+" "+m[2][1]+" "+m[2][2]+" "+m[2][3]);

System.out.println(m[3][0]+" "+m[3][1]+" "+m[3][2]+" "+m[3][3]);

}

}

Deklarasi variabel array 2 dimensi

Memperlihatkan jumlah baris

Memperlihatkan jumlah kolom pada baris ke-i

Page 16: Modul PBO Finishing

12

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Operator, Statement kondisional, dan Iterasi pada Java

Operator

Operator Aritmatika

Operator ini digunakan pada operasi-operasi aritmatika seperti penjumlahan, pengurangan, pembagian dll.

Operator Relasional Untuk membandingkan 2 nilai (variabel) atau lebih digunakan operator Relasional, dimana operator ini akan mengembalikan atau menghasilkan nilai True atau False.

Operator Kondisional

Operator ini menghasilkan nilai yang sama dengan operator relasional, hanya saja penggunaanya lebih pada operasi-operasi boolean.

Operator Contoh Keterangan

Operator Contoh Keterangan

Operator Contoh Keterangan

Jenis Operator Aritmatika

Jenis Operator Relasional

Jenis Operator Kondisional

Page 17: Modul PBO Finishing

13

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Operator Shift dan Bitwise

Kedua operator ini digunakan untuk memanipulasi nilai dari bitnya, sehingga diperoleh nilai yang lain.

Operator Assignment

Operator assignment dalam Java digunakan untuk memberikan sebuah nilai ke sebuah variable. Operator assignment hanya berupa „=‟, namun selain itu dalam Java dikenal beberapa shortcut assignment operator yang penting.

Pernyataan kondisional Statement if

Statement if memungkinkan sebuah program untuk dapat memilih beberapa operasi untuk di eksekusi, berdasarkan beberapa pilihan. Dalam bentuknya yang paling sederhana, bentuk if mengandung sebuah pernyataan tunggal yang dieksekusi jika ekspresi bersyarat adalah benar

Operator Shift

Operator Bitwise

Operator Contoh Ekivalen dengan

+= a += b a = a + b

-= a -= b a = a - b

*= a *= b a = a * b

/= a /= b a = a / b

%= a %= b a = a % b

&= a &= b a = a & b

|= a |= b a = a | b

^= a ^= b a = a ^ b

<<= a <<= b a = a << b

>>= a >>= b a = a >> b

>>>= a >>>= b a = a >>> b

Jenis Operator Shift dan Bitwise

Jenis Operator Assignment

if (ekspresi_kondisional){

statement1;

statement2;

}

Page 18: Modul PBO Finishing

14

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Statement if-else

Untuk melakukan beberapa operasi yang berbeda jika salah satu ekspresi_kondisional bernilai salah, maka digunakan statement else. Bentuk if-else memungkinkan kode Java memungkinkan dua alternatif operasi pemrosesan : satu jika statement bersyarat adalah benar dan satu jika salah.

Bentuk statement if – else dengan 2

pilihan operasi pemrosesan :

Bentuk statement if– else dengan beberapa

pilihan operasi pemrosesan

if (ekspresi_kondisional){

statement1;

statement2;

}else{

statement1;

statement2;

}

if (ekspresi_kondisional_A){

statement1;

statement2;

}else if (ekspresi_kondisional_B){

statement1;

statement2;

}else{

statement1;

statement2;

}

public class IfElse {

public static void main(String args[]) {

int month = 4;

String season;

if (month == 12 || month == 1 || month == 2) {

season = "Dingin";

} else if (month == 3 || month == 4 || month == 5) {

season = "Semi";

} else if (month == 6 || month == 7 || month == 8) {

season = "Panas";

} else if (month == 9 || month == 10 || month == 11) {

season = "Gugur";

} else {

season = "";

}

System.out.println("Bulan April masuk musim " + season + ".");

}

}

Page 19: Modul PBO Finishing

15

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Statement switch

Bentuk umum pernyataan switch

public class Coba{

public static void main(String[] args)

{

int N=6;

switch (N) { /* asumsi N adalah variabel bertype integer */

case 1:

System.out.println("Angka 1.");

break;

case 2:

case 4:

case 8:

System.out.println("Angka 2, 4, atau 8.");

System.out.println("(Kelipatan dari 2!)");

break;

case 3:

case 6:

case 9:

System.out.println("Angka 3, 6, or 9.");

System.out.println("(Faktor dari 3!)");

break;

case 5:

System.out.println("Angka 5.");

break;

default:

System.out.println("Angka 7,");

System.out.println("atau Angka Lebih dari Range 1-9.");

}}

}

switch ( expression ) {

case value_1:

statement1;

statement2;

. . .

break;

case value_2:

statement1;

statement2;

. . .

break;

[default: ]

statement1;

statement2;

. . .

break;}}

case: menandai posisi kode di mana eksekusi dilaksanakan.

value_1, dst.: konstanta integer atau konstanta karakter, ataupun ekspresi yang mengevaluasi keduanya.

default: sama kayak “else” pada statement if.

Page 20: Modul PBO Finishing

16

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Ekspresi bersyarat (Ternary Operator)

Kita menggunakan sebuah ekspresi bersyarat untuk menggantikan sebuah bentuk if-else. Sintaks adalah sebagai berikut:

Statement Iterasi (Perulangan) While

Pada java terdapat 2 statement yang biasanya digunakan pada setiap bentuk iterasi diatas. Statement tersebut yaitu: , dapat menghentikan perulangan walaupun kondisi untuk berhenti belum terpenuhi.

, dengan statement ini kita bisa melewatkan operasi yang dilakukan dalam iterasi sesuai dengan kondisi tertentu.

while( expression ){

statement1;

statement2;

.......

}

exp1 ? exp2 : exp3

Arti dari sintaks di sebelah sama dengan: if (exp1==true) then exp2 else exp3

public class TernaryExample{

public static void main (String args[]){

int x=3, y=6, m;

int a=2,b=3,c=4;

m = x > y ? x : y;

System.out.println(m);}

}

Berapakah outputnya?

Answer:

Do

do {

statement1;

statement2;

.......

} while(expression)

while ( expression );

For for (initialization;expression;step){

statement1;

statement2;

...

}

Selama expression benar, while akan

dieksekusi

Hasil dari while akan dikembalikan kepada

do

public class Angka{

public static void main (String[] args){

int i;

for(i=1;i<=10;i++){

System.out.println(Integer.toString(i));

}

i=1;

while(i<=10){

System.out.println(Integer.toString(i));

}

do{

System.out.println(Integer.toString(i));

i++;

}while(i<=10)

}

}

Page 21: Modul PBO Finishing

17

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

1. Buatlah program untuk mencari dan menampilkan bilangan prima diantara 2 bilangan yang

diinputkan melalui argument.

Misal : java Prima 3 30

Output : 3 5 7 11 13 17 19 23 29

2. Buatlah program untuk penjumlahan 2 buah matrik (3X3). Nilai matrik dapat bersifat

statis ataupun dirandom.

3. Buat program untuk mencari huruf yang paling banyak muncul pada suatu kalimat.

Misal : kalimat : praktikum pemrograman java

Huruf yang paling banyak muncul : a

Jumlah kemunculan : 5

Modul praktikum PBO 2008-2009

Hariyanto, Bambang, Esensi-Esensi Bahasa Pemrograman

Java , Informatika Bandung, Bandung, 2003.

http://eecchhoo.wordpress.com/2008/08/11/download-

tutorial-pemrograman-java-bahasa-indonesia/

Linden, Peter van der. Just Java: Edisi Bahasa Indonesia .

Yogyakarta: 1997

Badriyah, Tessy. Dasar Pemrograman Java .

Page 22: Modul PBO Finishing

18

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Apa itu OOP?

Merupakan teknik membuat suatu program berdasarkan objek dan apa yang bisa dilakukan objek tersebut.

Object-oriented program terdiri dari objek-objek yang

berinteraksi satu sama lain untuk menyelesaikan sebuah tugas.

Kenapa menggunakan OOP?

Apakah OOP punya karakteristik?

Abstraksi

Menemukan hal-hal yang penting pada suatu objek dan mengabaikan hal-hal yang sifatnya insidental.

Tentukan apa ciri-ciri (atribut) objek.

Tentukan apa yang bisa dilakukan objek.

Modul 2

Object Oriented Programming (OOP) I

Tujuan:

1. Mengerti konsep dasarnya.

2. Bisa membandingkan pemrograman

berorientasi objek dengan prosedural.

3. Ngerti dan bisa implementasiin Class,

Object, Method, dan Constructor

pada program sederhana.

Pemrograman prosedural

mengatur program dalam barisan-barisan linier yang bekerja dari atas ke bawah. Kumpulan tahapan yang dijalankan setelah yang lain berjalan.

Baik untuk program kecil yang berisi sedikit code.

Tidak dianjurkan diimplementasikan pada program berukuran besar, karena susah untk di-manage dan di-debug.

OOP

Kode-kode di-breakdown agar lebih mudah di-manage. Breakdown berdasarkan objek-objek yang ada pada program tersebut.

Dianjurkan diimplementasikan untuk program dengan berbagai ukuran karena lebih mudah untuk men-debug.

Ciri-ciri (atribut): punya

tangan, berat, tinggi, dll.. (kata

benda, atau kata sifat)

Fungsi (method) : makan,

minum, berjalan, dll. (kata

kerja)

Contoh abstraksi pada manusia

Page 23: Modul PBO Finishing

19

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Enkapsulasi

Pembungkusan data bersama method yang dimiliki oleh objek sehingga rincian-rincian implementasi internal suatu objek tidak dapat dilihat dari pemakai/objek lain yang tidak berhak.

Enkapsulasi ini melindungi proses dari interferensi atau penyalahgunaan dari luar sistem.

Fungsi:

Pewarisan (Inheritance)

Proses penciptaan kelas baru (subclass/kelas turunan) dengan mewarisi karakteristik dari kelas yang udah ada (superclass/kelas induk), ditambah karakteristik unik kelas baru itu.Karakteristik unik bisa berupa perluasan atau spesialisasi dari superclass.

Kelas turunan bisa mewarisi anggota-anggota suatu kelas yang berupa, data dan method, dan bisa terdapat data dan method tambahan yang baru.

OOP tidak selalu memiliki inheritance. Kita pakai inheritance kalau superclass sudah mendefinisikan perilaku yang kita butuhkan. Sehingga kita tinggal buat subclass dari superclass yang udah punya perilaku yang kita butuhin.

Data Hiding (Penyembunyian Data) Mengacu pada perlindungan data internal objek. Objek disusun dari antarmuka public dan bagian private yang merupakan kombinasi data dan method internal. Manfaat utamanya adalah bagian internal dapat berubah tanpa mempengaruhi bagian-bagian program yang lain.

Modularitas Modularitas (modularity) berarti objek dapat dikelola secara independen. Karena kode sumber bagian internal objek dikelola secara terpisah dari antarmuka, maka kita bebas melakukan modifikasi yang tidak menyebabkan masalah pada bagian-bagian lain. Manfaat ini mempermudah mendistribusikan objek-objek di sistem.

System transmisi mobil yang

menyembunyikan bagaimana

cara dia bekerja mengatur

percepatan. Tongkat transmisi merupakan

interface untuk mengatur

system transmisi. Menaikkan

percepatan, dsb.

Pedal rem tidak bisa digunakan untuk

mengakses system transmisi

Televisi

Televisi

tabung

Televisi

layar datar Televisi

plasma

Contoh inheritance

Page 24: Modul PBO Finishing

20

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Reusability

kemampuan untuk menggunakan kembali kelas yang sudah ada. Karakteristik ini dimiliki oleh OOP, sehingga kita tidak perlu membuat ulang definisi perilaku jika perilaku tersebut sudah ada di suatu class lain.

Message Passing (Komunikasi antar objek)

Polymorphism

Polymorphism berasal dari bahasa Yunani yang berarti banyak bentuk.

Konsep ini memungkinkan digunakannya suatu antarmuka (interface) yang sama untuk memerintah suatu objek agar dapat melakukan suatu aksi atau tindakan yang mungkin secara prinsip sama tapi secara proses berbeda.

Seringkali Polymorphism disebut dalam istilah “satu interface banyak aksi”. Mekanisme Polymorphism dapat dilakukan dengan dengan beberapa cara, seperti overloading method, overloading constructor, maupun overriding method. Semua akan dibahas pada bab selanjutnya.

Lonely object is useless

Object needs each other

Bagaimana cara objek

tersebut saling berkomunikasi

dan berinteraksi? Bagaimana

caranya?

Message + info

Object A Object B

Object A berkomunikasi dengan Object B.

Object A meminta Object B melakukan sesuatu

untuknya.

Object A kirim pesan disertai informasi ke Object B

FYI, info yang dikirim bersama message

adalah parameter message

A B

Kedua mobil di atas sama-sama punya setir, pedal

transmisi, rem, gas, dsb.

Kita kendarai mobil A, tekan pedal gas kemudian mobil

A akan bergerak sangat cepat.

Sedangkan, ketika kita kendarai mobil B, tekan

pedal gas, yang terjadi adalah sebaliknya.

Berarti, kedua mobil sama-sama punya pedal gas,

tapi memiliki hasil akhir yang berbeda

Page 25: Modul PBO Finishing

21

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Java Modifier

Apa itu modifier dan kenapa kita butuh itu?

Modifier merupakan bentuk pengimplementasian konsep enkapsulasi. Dengan adanya modifier maka class, interface, method, dan variabel akan terkena suatu dampak tertentu.

Access Modifier :

Modifier Class dan Interface Method dan Variabel

Default (tak ada modifier )

Friendly

Dikenali di paketnya Diwarisi subclass di paket yang sama dengan superclassnya. Dapat diakses oleh method-method di class-class yang sepaket.

Public Dikenali di manapun Diwarisi oleh semua subclassnya.

Dapat diakses dimanapun.

Protected Tidak dapat diterapkan

Diwarisi oleh semua subclassnya.

Dapat diakses oleh method-method di class-class yang sepaket.

Private Tidak dapat diterapkan

Tidak diwarisi oleh subclassnya

Tidak dapat diakses oleh class lain.

Kelompok Modifier Berlaku untuk

Meliputi Class Method Variabel

Access modifier √ √ √ public, protected,

private, dan friendly

(default/ tak ada

modifier).

Final modifier √ √ √ final

Static modifier √ √ static

Abstract modifier √ √ abstract

Syncronized modifier √ synchronized

Native modifier √ native

Storage modifier √ transient dan volatile

Page 26: Modul PBO Finishing

22

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Permitted Modifier:

Modifier Class Interface Method Variabel

Abstract Class dapat berisi method abstract. Class tidak dapat diinstantiasi

Tidak

mempunyai

constructor

Optional untuk dituliskan di interface karena interface secara inheren adalah abstract.

Tidak ada method body yang didefinisikan. Method memerlukan class kongkret yang merupakan subclass yang akan mengimplementasikan method abstract.

Tidak dapat diterapkan.

Final Class tidak dapat diturunkan.

Tidak dapat diterapkan.

Method tidak dapat ditimpa oleh method di subclass-subclassnya

Berperilaku sebagai konstanta

Static Tidak dapat diterapkan.

Tidak dapat diterapkan.

Mendefinisikan method (milik) class. Dengan demikian tidak memerlukan instant object untuk menjalankanya. Method ini tidak dapat menjalankan method yang bukan static serta tidak dapat mengacu variable yang bukan static.

Mendefinisikan variable milik class. Dengan demikian, tidak memerlukan instant object untuk mengacunya. Variabel ini dapat digunakan bersama oleh semua instant objek.

synchronized Tidak dapat diterapkan.

Tidak dapat diterapkan.

Eksekusi dari method adalah secara mutual exclusive diantara semua thread. Hanya satu thread pada satu saat yang dapat menjalankan method

Tidak dapat diterapkan pada deklarasi. Diterapkan pada instruksi untuk menjaga haya satu thread yang mengacu variable pada satu saat.

Native Tidak dapat diterapkan.

Tidak dapat diterapkan.

Tidak ada method body yang diperlukan karena implementasi dilakukan dengan bahasa lain.

Tidak dapat diterapkan.

Transient Tidak dapat diterapkan.

Tidak dapat diterapkan.

Tidak dapat diterapkan. Variable tidak akan diserialisasi

Volatile Tidak dapat diterapkan.

Tidak dapat diterapkan.

Tidak dapat diterapkan. Variabel diubah secara asinkron. Kompilator tidak pernah melakukan optimasi atasnya.

Page 27: Modul PBO Finishing

23

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

[Modifier] class/interface [nama class/interface]

[Modifier][TypeData][nama Atribut];

[Modifier]{[TypeData]}[nama method](parameter_1,parameter_2,parameter_n)

{}

Bagaimana cara mendeklarasi modifier dalam java?

Contoh :

Class dan Object

Class

Class adalah cetak biru (rancangan) atau prototype atau template dari objek.

Kita bisa membuat banyak objek dari satu macam class. Class mendefiniskan sebuah tipe dari objek.

Di dalam class kita dapat mendeklarasikan variabel dan menciptakan objek (instansiasi). Sebuah class mempunyai anggota yang terdiri dari atribut dan method.

Atribut adalah semua field identitas yang kita berikan pada suatu class, misal class manusia memiliki field atribut berupa nama dan umur.

Method dapat kita artikan sebagai semua fungsi ataupun prosedur yang merupakan perilaku (behaviour) dari suatu class.

Manusia

- nama : String

- umur : int

+ setNama : void

+ getNama : String

+ setUmur : void

+ getUmur : int

Deklarasi modifier di class/interface

Deklarasi modifier di atribut

Deklarasi modifier di method

public class Manusia {}

private int tinggi;

public int getTinggi(){}

Contoh modifier di class

Contoh modifier di atribut

Contoh modifier di method

Keterangan tanda : - artinya memiliki access modifier private + artinya memiliki access modifier public # artinya memiliki access modifier protected

Bagaimana mengaplikasikan class diagram di

atas dalam program?

Class diagram manusia

Page 28: Modul PBO Finishing

24

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Contoh implementasi di dalam program:

public class Manusia {

//definisi atribut

private String nama;

private int umur;

//definisi method

public void setNama(String a){

nama=a;

}

public String getNama(){

return nama;

}

public void setUmur(int a){

umur=a;

}

public int getUmur(){

return umur;

}

}

Kesepakatan umum penamaan:

1) Nama Class – gunakan kata benda dan huruf pertama dari tiap kata ditulis dengan huruf besar dan umumnya memiliki access modifier public : Manusia.

2) Pada umumnya, atribut diberi access modifier private, dan method diberi access modifier public. Hal ini diterapkan untuk mendukung konsep OO yaitu enkapsulasi mengenai data hiding. Jadi, kita tidak langsung menembak data/ atribut pada kelas tersebut, tetapi kita memberikan suatu antarmuka method yang akan mengakses data/ atribut yang disembunyikan tersebut.

3) Nama atribut - gunakan kata benda, dan diawali dengan huruf kecil : nama, umur

4) Nama Method – gunakan kata kerja; kecuali huruf yang pertama, huruf awal tiap kata ditulis kapital : getNama(), getUmur()

5) Untuk method yang akan memberikan atau mengubah nilai dari suatu atribut, nama method ditambah dengan kata kunci ”set” : setUmur(int a), setNama(String a)

6) Untuk method yang akan mengambil nilai dari atribut, nama method ditambah dengan kata kunci ”get” : getUmur(), getNama()

7) Konstanta - Semuanya ditulis dengan huruf besar; pemisah antar kata menggunakan garis bawah: MAX_VALUE, DECIMAL_DIGIT_NUMBER

Page 29: Modul PBO Finishing

25

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Object

Object (objek) secara lugas dapat diarikan sebagai instansiasi atau hasil ciptaan dari suatu class. Asumsikan cetakan kue adalah class, maka kue yang dihasilkan dari cetakan tersebut merupakan objek dari class cetakan kue.

Dalam pengembangan OOP lebih lanjut, sebuah objek dapat dimungkinkan terdiri atas objek-objek lain.

atau, bisa jadi sebuah objek merupakan turunan dari objek lain, sehingga mewarisi sifat-sifat induknya dan memiliki sifat tambahan

Keyword “new”

“new” digunakan untuk melakukan instansiasi/ membuat sebuah object baru.

mencetak

Objek mobil terdiri atas

ban

Kerangka mobil

pintu

mesin

Kendaraan Bermotor

Manusia objekManusia = new Manusia();

Membuat objek manusia

Contoh disamping merupakan contoh objek

yang merupakan turunan dari objek lain serta

memiliki sifat tambahan pada dirinya.

Coba jelaskan dengan kata-katamu sendiri

gambar di samping…!

Answer:

Page 30: Modul PBO Finishing

26

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Method dan Constructor

Apa itu method? Method biasa kita kenal sebagai function dan procedure. Dikatakan fungsi bila method tersebut melakukan suatu proses dan mengembalikan suatu nilai (return value), dan dikatakan prosedur bila method tersebut hanya melakukan suatu proses dan tidak mengembalikan nilai (void).

Dalam OOP, method digunakan untuk memodularisasi program melalui pemisahan tugas dalam suatu class. Pemanggilan method menspesifikasikan nama method dan menyediakan informasi (parameter) yang diperlukan untuk melaksanakan tugasnya.

Deklarasi method yang mengembalikan nilai (fungsi)

Deklarasi method yang tidak mengembalikan nilai (prosedur)

Ada dua cara melewatkan argumen ke method, yaitu:

Melewatkan secara Nilai (Pass by Value) Digunakan untuk argumen yang mempunyai tipe data primitif (byte, short, int, long, float, double, char, dan boolean). Prosesnya adalah compiler hanya menyalin isi memori (pengalokasian suatu variable), dan kemudian menyampaikan salinan tersebut kepada method. Isi memory ini merupakan data “sesungguhnya” yang akan dioperasikan. Karena hanya berupa salinan isi memory, maka perubahan yang terjadi pada variable akibat proses di dalam method tidak akan berpengaruh pada nilai variable asalnya.

[modifier]void namaMethod(parameter1,parameter2,…parameterN)

{

Deklarasi-deklarasi dan proses ;

}

public int jumlahAngka(int x, int y){

int z = x+y;

return z;

}

[modifier]Type-data namaMethod(parameter1,parameter2,…parameterN)

{

Deklarasi-deklarasi dan proses ;

return nilai-kembalian;

}

n = 4

compiler

method

Isi memori

n=4

n=4

n = 8

Salinan isi memori

menyalin isi

memori

Page 31: Modul PBO Finishing

27

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

public class PassedByValue {

public static void main(String[] args) {

int x,y;

TestPass z;

z = new TestPass(50,100);

x = 10;

y = 20;

System.out.println("Nilai sebelum passed by value : ");

System.out.println("x = " + x);

System.out.println("y = " + y);

//passed by value

z.calculate(x,y);

System.out.println("Nilai sesudah passed by value : ");

System.out.println("x = " + x);

System.out.println("y = " + y);

System.out.println("Nilai sebelum passed by reference : ");

System.out.println("z.i = " + z.i);

System.out.println("z.j = " + z.j);

//passed by reference

z.calculate(z);

System.out.println("Nilai sesudah passed by reference : ");

System.out.println("z.i = " + z.i);

System.out.println("z.j = " + z.j);

}

}

Melewatkan secara Referensi (Pass by Reference)

Digunakan pada array dan objek. Prosesnya isi memory pada variable array dan objek merupakan penunjuk ke alamat memory yang mengandung data sesungguhnya yang akan dioperasikan. Dengan kata lain, variable array atau objek menyimpan alamat memory bukan isi memory. Akibatnya, setiap perubahan variable di dalam method akan mempengaruhi nilai pada variable asalnya.

Bagaimanakah keluaran dari program di bawah?

public class TestPass {

int i,j;

public TestPass(int a,int b) {

i =a;

j = b;

}

//passing by value

public void calculate(int m,int n) {

m = m*10;

n = n/2;

}

//passing by reference

public void calculate(TestPass e) {

e.i = e.i*10;

e.j = e.j/2;

}

}

Page 32: Modul PBO Finishing

28

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Answer:

Constructor Tipe khusus method yang digunakan untuk menginstansiai atau menciptakan sebuah objek. Nama constructor = nama kelas. Constructor TIDAK BISA mengembalikan nilai. Tanpa membuat constructor secara eksplisit-pun, Java akan menambahkan constructor default secara implisit. Tetapi jika kita sudah mendefinisikan minimal sebuah constructor, maka Java tidak akan menambah constructor default. Constructor default tidak punya parameter. Constructor bisa digunakan untuk membangun suatu objek, langsung ngeset atribut-atributnya. Construktor seperti ini harus memiliki parameter masukkan untuk ngeset nilai atribut. Access Modifier constructor selayaknya adalah public, karena constructor akan diakses di luar kelasnya. Cara panggil constructor adalah dengan tambahin keyword “new”. Keyword new dalam deklarasi ini artinya kita mengalokasikan pada memory sekian blok memory untuk menampung objek yang baru kita buat.

Nilai sebelum passed by value :

x = 10

y = 20

Nilai sesudah passed by value :

x = 10

y = 20

Nilai sebelum passed by reference :

z.i = 50

z.j = 100

Nilai sesudah passed by reference :

z.i = 500

z.j = 50

Keterangan

Pada saat pemanggilan method calculate() dengan metode pass by value, hanya nilai dari variable x dan y saja yang dilewatkan ke variable m dan n , sehingga perubahan pada variable m dan n tidak akan mengubah nilai dari variable x dan y.

Sedangkan pada saat pemanggilan method calculate() dengan metode pass by reference yang menerima parameter bertipe class Test. Pada waktu kita memanggil method calculate(), nilai dari variable z yang berupa referensi ke obyek sesungguhnya dilewatkan ke variable a, sehingga variable a menunjukkan ke obyek yang sama dengan yang ditunjuk oleh variable z dan setiap perubahan pada objek tersebut dengan menggunakan variable a akan terlihat efeknya pada variable z yang terdapat pada kode yang memanggil method tersebut.

[modifier] namaclass(parameter1){

Body constructor;

}

[modifier] namaclass(parameter1,parameter2){

Body constructor;

}

[modifier] namaclass(parameter1,parameter2,…,parameterN){

Body constructor;

}

Deklarasi Constructor:

Page 33: Modul PBO Finishing

29

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

public class DemoManusia {

public static void main(String[] args) { //program utama

Manusia arrMns[] = new Manusia[3]; //buat array of object

Manusia objMns1 = new Manusia(); //constructor pertama

objMns1.setNama("Markonah");

objMns1.setUmur(76);

Manusia objMns2 = new Manusia("Mat Conan"); //constructor kedua

Manusia objMns3 = new Manusia("Bajuri", 45); //constructor ketiga

arrMns[0] = objMns1;

arrMns[1] = objMns2;

arrMns[2] = objMns3;

for(int i=0; i<3; i++) {

System.out.println("Nama : "+arrMns[i].getNama());

System.out.println("Umur : "+arrMns[i].getUmur());

System.out.println();

}

}

Nama : Markonah

Umur : 76

Nama : Mat Conan

Umur : 0

Nama : Bajuri

Umur : 13

Hasil output adalah seperti ini:

Coba Anda analisis mengapa hasilnya seperti di samping ?

Apakah program di atas constructornya eksplisit atau

implisit?

Answer:

FYI, pada kode program di atas terdapat dua buah constructor dengan parameter berbeda. Program

akan secara otomatis memilih constructor sesuai dengan parameter masukan pada saat

pembuatan objek. Hal ini disebut overloading.

Page 34: Modul PBO Finishing

30

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Judul : Dance Beside

Pencipta: All American Reject

Keyword “this”

Apa itu?

Suatu besaran referensi khusus yang digunakan di dalam method yang dirujuk untuk objek yang sedang belaku. Nilai this, sedang berjalan dipanggil.

Kapan dipake?

Ketika nama atribut yang sama dengan nama variable lokal, maka gunakan lah this.namaAtribut untuk merefer ke namaAtribut.

public class Lagu {

private String band;

private String judul;

public void IsiParam(String judul,String band) {

this.judul = judul;

this.band = band;

}

public void cetakKeLayar() {

if(judul==null && band==null) return;

System.out.println("Judul : " + judul +"\nBand : " + pencipta);

}

}

public class DemoLagu {

public static void main(String[] args) {

Lagu song = new Lagu();

song.IsiParam("Dance Beside","All American Reject ");

song.cetakKeLayar();

}

}

Hasil output adalah seperti ini:

Keterangan

Perhatikan pada method IsiParam() di atas. Di sana kita mendeklarasikan nama variable yang menjadi parameternya sama dengan nama variabel yang merupakan atribut dari class lagu (judul dan band). Dalam hal ini, kita perlu menggunakan keyword this (keyword ini merefer ke objek itu sendiri) agar dapat

mengakses property judul dan band di dalam method IsiParam() tersebut. Apa yang terjadi jika pada method IsiParam() keyword this dihilangkan?

FYI, Keyword this juga dapat digunakan

untuk memanggil suatu konstruktor dari

konstruktor lainnya.

Page 35: Modul PBO Finishing

31

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

public class Buku {

private String pengarang;

private String judul;

private Buku() {

this("The Naked Traveller", "Trinity");

}

private Buku(String judul,String pengarang) {

this.judul = judul;

this.pengarang = pengarang;

}

private void cetakKeLayar() {

System.out.println("Judul : " + judul + " Pengarang : " + pengarang);

}

public static void main(String[] args){

Buku a,b ;

a = new Buku("Edensor", "Andrea Hirata");

b = new Buku();

a.cetakKeLayar();

b.cetakKeLayar();

}

}

Judul : Edensor , Pengarang : Andrea Hirata

Judul : The Naked Traveller , Pengarang : Trinity

Keyword this untuk memanggil

constructor yang menerima

dua parameter

Hasil output adalah seperti ini:

Pada contoh program di atas, kita juga dapat mengambil pelajaran bahwa penggunaan modifier private

pada constructor mengakibatkan constructor tersebut hanya dapat dikenali dalam satu class saja,

sehingga pembuatan objek hanya dapat dilakukan dalam lokal class tersebut.

Catatan penting lainnya : bahwa method void main(String[] args) haruslah bersifat public static.

Page 36: Modul PBO Finishing

32

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Inner Class

Apa itu Inner Class?

Inner class disebut juga sebagai nested class, artinya adalah suatu kelas yang dideklarasikan di dalam bodan class atau interface lain.

Kelas dimana inner class didefinisikan disebut top level class yang merupakan (kelas) anggota langsung dari sebuah paket. Inner class berbeda dengan subclass, karena subclass berada pada kelas yang terpisah dengan superclassnya. Berbeda dengan kelas „normal‟ yang dapat diinstansiasi secara independen, inner-class harus selalu melibatkan top level class-nya untuk melakukan instansiasi.

Adakah keuntungan menggunakan inner class?

Keuntungan object-oriented

Yang paling penting dari inner class adalah bahwa dengan inner class kita bisa meng‟objekkan‟ sesuatu yang awalnya tidak bisa dianggap sebagai objek. Hal ini memungkinkan code menjadi lebih object-oriented daripada ketika tidak menggunakan inner class. Karena setiap instansiasi inner class merupakan instansiasi dari top-level classnya juga, maka objek inner class juga memiliki akses ke setiap member dan method kelas induknya.

package

class2 class1 class3 classN

package

class1

class2

Class3

innerclassA

innerclassB

innerclassC

Keuntungan pengorganisasian

Dari sudut pandang pengorganisasian, inner class memungkinkan kita mengatur struktur paket. Daripada menjadikan segala sesuatu menjadi flat-package, kelas dapat disarangkan dalam kelas lain.

Hirarki tanpa inner class Hirarki dengan inner class

Modul Praktikum Pemrograman Berorientasi Objek

Common Labz 2008-2009.

http://java.lyracc.com

http://battleprogrammer.wordpress.com

http://www.javaworld.com

http://bernazlionk.wordpress.com

http://www.wikipedia.org

http://one.indoskripsi.com

Page 37: Modul PBO Finishing

33

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Pada Modul 2, kita sudah mempelajari dasar-dasar OOP. Di modul ini kita akan mempelajari OOP lebih dalam. Mari kita mulai dari Inheritance.

Inheritance

Apa itu inheritance?

Pewarisan merupakan proses peciptaan kelas baru dengan mewarisi karakteristik kelas yang sudah ada, ditambah dengan karakteristik unik kelas baru itu.

Sebelumnya inheritance sudah dijelaskan pada modul 2.

Modul 3

Object Oriented Programming (OOP) II

Tujuan:

1. Mengerti konsep OOP lebih dalam.

2. Ngerti konsep dan bisa implementasiin

inheritance, polymorphisme, interface,

dan abstract class pada program.

3. Ngerti perbedaan class dengan

interface, interface dengan abstract

class.

Contoh pewarisan pada Class manusia Penjelasan diagram di sebelah:

Manusia adalah superclass dari pria dan wanita. Pria dan wanita mewarisi semua state dan juga behaviour yang dimiliki class manusia. Coba kita lihat perbedaannya, pada kelas manusia terdapat atribut berat, tinggi dan usia. Untuk kelas turunannya yaitu pria, terdapat atribut tambahan yang unik yaitu alat reproduksi pria. Jadi disini kelas pria mempunyai atribut total : berat, tinggi, usia dan juga alat reproduksi pria.

Petunjuk Ringkas penggunaan pewarisan:

a. Tempatkan operasi dan field yang sama di superclass

b. Jangan gunakan protected fields c. Jangan gunakan pewarisan kecuali semua

method yang diturunkan adalah berarti d. Gunakan pewarisan untuk memodelkan

hubungan “is-a”

Page 38: Modul PBO Finishing

34

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

[modifier] class NamaKelasInduk {

// deklarasi konstanta

// deklarasi method

}

[modifier] class NamaKelasAnak extends NamaKelasInduk{

// deklarasi konstanta

// deklarasi method

}

Pendeklarasian Inheritance

public class PersegiPanjang{

private int panjang;

private int lebar;

public void setPanjang(int p){

panjang=p;

}

public void setLebar(int l){

lebar=l;

}

public int getPanjang(){

return panjang;

}

public int getLebar(){

return lebar;

}

public int Luas(){

int luas=panjang*lebar;

return luas;

}

}

public class Balok extends PersegiPanjang{

private int tinggi;

public void setTinggi(int t){

tinggi=t;

}

public int getTinggi(){

return tinggi;

}

public int Volume(){

int v=getPanjang()*getLebar()*tinggi;

return v;

}

}

Dibawah ini kita akan membuat kelas Balok

sebagai kelas turunan dari kelas PersegiPanjang

Output dari program:

Bagaimanakah bentuk

program utama agar output

yang dihasilkan seperti di

samping?

Page 39: Modul PBO Finishing

35

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Overloading

Apa itu overloading?

Didalam java, kita dapat membuat dua atau lebih konstruktor/ method yang mempunyai nama sama dalam satu kelas, tetapi jumlah dan tipe argumen dari masing-masing kontrukstor atau method haruslah berbeda satu dengan yang lainnya. Hal ini yang dinamakan overloading.

public class Demo{

public static void main(String args[]){

PersegiPanjang a= new PersegiPanjang();

a.setPanjang(5);

a.setLebar(5);

System.out.println("");

System.out.println(" DEMO INHERITANCE ");

System.out.println("");

System.out.println(" SuperClass ==PERSEGIPANJANG==");

System.out.println(" Panjang : "+a.getPanjang());

System.out.println(" Lebar : "+a.getLebar());

System.out.println(" Luas : "+a.Luas());

System.out.println("");

Balok b= new Balok();

//kelas balok tinggal memanggil method yang ada didalam kelas persegi

b.setPanjang(4);

b.setLebar(3);

b.setTinggi(5);

System.out.println(" SubClass ==BALOK==");

System.out.println(" Panjang : "+b.getPanjang());

System.out.println(" Lebar : "+b.getLebar());

System.out.println(" Tinggi : "+b.getTinggi());

System.out.println(" Volume : "+b.Volume());

}

}

Answer:

public void setHarga(int harga){}

public void setHarga(double harga){}

public void setHarga(float harga){}

public void setHarga(float harga, String jumlah){}

Yang penting tipe data dalam

parameter method yang dioverload

itu HARUS BERBEDA!!!

Page 40: Modul PBO Finishing

36

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

public class Phone{

private String merk;

private int harga;

public Phone(){

}

public Phone(String merk){

this.merk=merk;

}

public Phone(String merk, int harga){

this.merk=merk;

this.harga=harga;

}

public void isiPhone(String merk){

this.merk=merk;

}

public void isiPhone(String merk, int harga){

this.merk=merk;

this.harga=harga;

}

public void lihatPhone(){

System.out.println(" Merk : "+merk);

System.out.println(" Harga : "+harga);

System.out.println("");

}

}

overloading konstruktor, disini

terdapat 3 konstruktor

dengan nama sama dengan

parameter inputan yang

berbeda

overloading method, disini

terdapat dua method

dengan nama sama dengan

parameter inputan yang

berbeda

public class DemoOverLoading{

public static void main(String args[]){

System.out.println("");

Phone p1 = new Phone();

Phone p2 = new Phone("Nokia");

Phone p3 = new Phone("Sony Ericsoon",500);

System.out.println("Perbedaan Output dari masing2 konstruktor");

p1.lihatPhone();

p2.lihatPhone();

p3.lihatPhone();

Phone p4,p5;

p4 = new Phone();

p5 = new Phone();

p4.isiPhone("Samsung");

p5.isiPhone("Samsung", 5000);

System.out.println("Perbedaan Output dari masing2 method");

p4.lihatPhone();

p5.lihatPhone();

}

}

Output dari program:

Page 41: Modul PBO Finishing

37

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Overriding

Apa itu overriding?

Method yang ada pada parent class(Superclass) didefinisikan kembali oleh kelas anaknya (subclass).

Jika kita panggil method yang udah di-override dari instance kelas anaknya, maka method yang dipanggil itu punyanya si kelas anak bukan punya kelas parentnya lagi.

Pada overriding kita hanya bisa override methodnya.

public class Induk{

public void panggilAku(){

System.out.println("");

System.out.println("Hallo, ini induk yang dipanggil");

}

}

public class Anak{

//method sama dengan method induk

public void panggilAku(){

System.out.println("");

System.out.println("Hallo, ini anak yang dipanggil");

}

}

public class DemoOverride{

public static void main(String args[]){

Anak a= new Anak();

a.panggilAku();

}

}

Output dari program:

Page 42: Modul PBO Finishing

38

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Abstract Class

Apa itu Abstract class?

kelas murni yang tidak boleh memiliki objek, dan satu/lebih method-methodnya yang abstract harus diimplementasikan (override) oleh kelas turunannya.

Sebuah kelas Dosen bisa diinstansiasi menjadi heru, heri, badu, budi, dsb, tetapi tidak mungkin dapat menginstansiasi kelas MakhlukHidup, kelas Hewan. Karena kedua kelas tersebut terlalu umum (abstract), kelas seperti inilah yang disebut kelas abstract. Dibutuhkan kelas turunan yang lebih khusus.

Bila kelas MahlukHidup mempunyai method bernafas, maka tidak dapat ditentukan cara suatu mahluk hidup tersebut bernafas (dengan paru-paru, insang, atau stomata), method seperti inilah yang disebut method abstract. Dibutuhkan kelas turunan yang khusus dan method override dari method

yang abstract.

[modifier] abstract class NamaKelas {

// deklarasi attribute

// definisi/prototype method

}

Bentuk Umum:

Seperti apakah bentuk Hewan?

Ini? Ini?

Ini?

Ketika kamu sudah tidak bisa membayangkan

bagaimana bentuk suatu kelas seperti

MakhlukHidup atau pun Hewan karena terlalu

abstraknya/terlalu umum, maka kelas tersebut

bisa dijadikan kelas abstrak.

abstract class Hewan {

protected String nama;

protected int jumKaki;

protected boolean bisaTerbang = false;

public Hewan(String nama, int kaki, boolean terbang) {

this.nama = nama;

jumKaki = kaki;

bisaTerbang = terbang;

}

public abstract void bersuara();

public static void makan() {

System.out.println("nyam, nyam, nyam");

}

public void lihatHewan() {

System.out.println("");

System.out.println("nama : "+nama);

System.out.println("jumlah kaki : "+jumKaki);

System.out.println("bisa terbang : "+bisaTerbang);

}

}

Page 43: Modul PBO Finishing

39

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

class Sapi extends Hewan {

public Sapi() {

super("sapi", 4, false);

}

public void bersuara() {

System.out.println("\n moooaahhhh,mooooaaahhh");

}

public static void main(String[] args) {

Sapi s = new Sapi();

s.lihatHewan();

s.bersuara();

}

}

class Perkutut extends Hewan {

public Perkutut(){

super("perkutut",2,true);

}

public void bersuara() {

System.out.println("\ncuit, cuit, cuit");

}

public static void main(String[] args) {

Perkutut p = new Perkutut();

p.lihatHewan();

p.bersuara();

}

}

Output dari program:

Page 44: Modul PBO Finishing

40

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Interface Apa itu interface? Interface adalah kelas yang paling abstract, yang berisi daftar deklarasi method (seluruh method belum memiliki implementasi). Analogi Interface Interface dapat dianalogikan sebagai kontrak yang dapat dipakai oleh setiap kelas. Dalam kehidupan nyata dapat diketahui ada manusia yang bekerja sebagai da‟i, dosen, tentara, penyanyi, pengacara, dan sebagainya, tentunya manusia-manusia tersebut selain harus memiliki method standard sebagai seorang manusia, juga harus memiliki method yang sesuai dengan pekerjaannya. Dengan demikian untuk membuat objek seorang budi bekerja sebagai dosen, harus dibuat kelas yang merupakan turunan kelas manusia yang meng-implementasikan interface dosen. Bagaimana bentuk deklarasinya?

Bagaimana bentuk Implementasinya?

[modifier] interface NamaInterface {

// deklarasi konstanta

// deklarasi method

} // catatan : modifier static tidak boleh digunakan dalam interface

[modifier] class NamaKelas implements NamaInterface {

// penggunaan konstanta

// implementasi method

}

public interface TkPhone{

static final String MAKER= "YES-KIA";

public int getHarga(int id);

}

public class PhoneImpl implements TkPhone{

public int getHarga(int id){

int hr=0;

if (id==1){

hr=500;

}

if (id==2){

hr=1000;

}

return hr;

}

}

public class TokoHP{

public static void main(String args[]){

PhoneImpl pp = new PhoneImpl();

System.out.println("");

System.out.println("HP ini dibuat oleh PT "+pp.MAKER);

System.out.println("Harga HP in sekitar $ "+pp.getHarga(1));

}

}

Output dari program:

Page 45: Modul PBO Finishing

41

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Keyword super

Maksudnya??

Keyword super digunakan untuk merefer/ mengacu superclass dari suatu class, yaitu member dari suatu superclass, baik method maupun atribut.

Supaya kita lebih mengerti, maka mari kita lihat dan coba kode berikut ini!

public class PersegiPanjang{

private int p;

private int l;

public PersegiPanjang(int p, int l){

this.p=p;

this.l=l;

}

public int Luas(){

return p*l;

}

}

public class Balok extends PersegiPanjang{

private int t;

public Balok(int p, int l,int t){

super(p,l);

this.t=t;

}

public void LihatVolume(){

int v= super.Luas()*t;

System.out.println("");

System.out.println("Volume = "+v);

}

public static void main(String args[]){

Balok b = new Balok(5,4,3);

b.LihatVolume();

}

}

Page 46: Modul PBO Finishing

42

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Sering kali, ketika menjalankan sebuah program kita menemukan kesalahan. Kesalahan itu bisa berasal dari hardware, software, atau bahkan dalam algoritma atau kesalahan logika itu sendiri.

Nah, jadi masing-masing kesalahan punya solusi yang beda-beda dan teknik penanganannya juga berbeda-beda untuk kesalahan yang satu dengan yang lain.

Untuk itu, mari kita bahas satu-satu kesalahan yang ada.

Kesalahan itu ada apa aja sih?

Kesalahan Hardware dan Software

Hardware saja

Jika sebuah aplikasi berusaha membuka sebuah file yang gak ada, misalnya ngirimin karakter ke printer yang belom kita nyalain atau ketika berkomunikasi dengan port serial yang gak merespon.

Biasanya, kesalahan menyangkut hardware dideteksi dan dilaporkan oleh sistem.

Modul 4

Exception, I/O, dan Operasi File

Tujuan:

1. Mengerti konsep exception, I/O, dan

operasi file.

2. Bisa implementasiin konsep exception

dan I/O dalam sebuah pemrograman

sederhana untuk operasi file dengan

tepat.

Software saja

Ketika kode berusaha mengakses sebuah elemen yang di luar ikatan array atau berusaha nyimpen nilai yang ngelewatin kapasitas format data.

Kesalahan yang terkait sama software, dipihak lain, harus dideteksi sama kode

Hardware dan Software sebuah aplikasi mungkin memeriksa operan pembagi untuk memastikan bahwa sebuah pembagi dengan nol tidak dicoba. Bagaimanapun juga, jika sebuah pembagian oleh nol terjadi, perangkat-keras dalam sebagaian besar sistem komputer menghasilkan sebuah respon kesalahan.

Page 47: Modul PBO Finishing

43

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Kesalahan Algoritma

berhubungan dengan kesalahan atau keterbatasan intrinsik dari pemodelan dunia-nyata yang dilakukan oleh komputer.

Untuk mengatasi kesalahan pembulatan dan pemotongan pada berbagai algoritma muncullah disiplin ilmu bernama analisa numerik.

Jenis kesalahan ini adalah yang paling sering diabaikan oleh programmer.

Exception

Exception adalah kondisi abnormal / tidak wajar yang terjadi pada saat pengeksekusian suatu perintah. Dalam java ada lima keywords yang digunakan untuk menangani eksepsi ini yaitu : try,

catch, finally, throw, dan throws.

Semua class exception terdapat dalam package java.lang.

Exception yang tidak dicek

Semua yang bertipe Runtime Exception dan turunannya tidak harus ditangani dalam program kita.

binary decimal

Menggunakan perkiraan binary terbaik

untuk pecahan decimal menurut

panjang kata mesin tersebut.

konversi

Perkiraan yang dilakukan oleh komputer

bisa menyebabkan kesalahan pembulatan

yang bisa menyebar dalam perhitungan

dan mengakibatkan kesalahan hasil.

Superclass tertinggi Tidak ditangani dengan

menggunakan block try-catch

karena berhubungan dengan java

run-time system.

Eksepsi yang sebaiknya

ditangani oleh program kita

secara langsung.

class RuntimeException

{

public static void main (String [] args)

{

int[] arr = new int[1];

System.out.println(arr[1]);

}

}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

at RuntimeException.main(RuntimeException.java:6)

Outputnya:

Terjadi kesalahan ArrayIndexOutOfBoundsException karena array pada contoh diatas Cuma

punya 1 record arr[0], tapi program minta nampilin arr[1].

Page 48: Modul PBO Finishing

44

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Exception yang dicek

Semua tipe eksepsi yang bukan turunan dari class RuntimeException merupakan eksepsi yang harus ditangani oleh program anda. Java bahkan tidak mengijinkan anda mengompilasi program yang anda buat, jika tidak menangani eksepsi tersebut. (BIASANYA YANG BERHUBUNGAN DENGAN

PENGAKSESAN I/O).

Penggunaan Try Catch

Untuk menangani eksepsi yang terjadi dalam program, Anda cukup meletakkan kode yang ingin anda inspeksi terhadap kemungkinan eksepsi di dalam blok try, diikuti dengan blok catch yang menentukan jenis eksepsi apa yang ingin Anda tangani.

Try menyatakan bahwa dalam blok program dapat terjadi suatu eksepsi dan bila itu terjadi, maka eksekusi program berlanjut dalam blok catch sesuai dengan tipe eksepsi yang terjadi. Variabel obyek e dari tipe exception dapat digunakan sebagai referensi / informasi untuk mengetahui penyebab exception tersebut.

Dapat terjadi code yang terdapat dalam blok try mengakibatkan lebih dari satu jenis eksepsi. Dalam hal ini, kita dapat menuliskan lebih dari satu blok catch untuk setiap blok try.

Kira-kira seperti apa ya bentuk kodenya??

try{

......//blok program

} catch (tipeException e) {

......//blok program

}

Struktur penulisan:

public class TryCatch {

public static void main (String[] args){

try{

int[] arr = new int[1];

System.out.println(arr[1]);

System.out.println("Baris ini tidak akan dieksekusi,

karena statement baris diatas terkadi exception");

}catch (ArrayIndexOutOfBoundsException e){

System.out.println("Terjadi exception karena indeks di luar

kapasitas array");

}

System.out.println("Setelah blok try catch");

}

}

Terjadi exception karena indeks di luar kapasitas array

Setelah blok try catch

Outputnya:

Perhatikan baris ini!

Page 49: Modul PBO Finishing

45

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Penggunaan Throw

Mekanisme throw memungkinkan program untuk mengirim / melempar exception untuk kemudian program menyikapi (bereaksi) atas exception tersebut.

ObjekEksepsi adalah semua objek yang merupakan turunan dari class Throwable. Salah satu contoh objek eksepsi adalah ArrayIndexOutOfBounds.

Seperti apa kira-kira bentuk programnya?

public class TryCatch2 {

public static void main (String [] args){

try{

int x = args.length; //banyak argumen

int y = 100/x;

int[] arr = {10,11};

y = arr[x];

System.out.println("Tidak terjadi exception");

}catch (ArithmeticException e){

System.out.println("Terjadi exeption karena

pembagian dengan nol");

}catch (ArrayIndexOutOfBoundsException e){

System.out.println("Terjadi exeption karena indeks

di luar kapasitas array");

}

System.out.println("Setelah blok try catch");

}

}

C:\Java_projects >java TryCatch2

Terjadi exception karena pembagian dengan nol

Setelah blok try catch C:\Java_projects >java TryCatch2 param1

Tidak terjadi exception

Setelah blok try catch

C:\Java_projects >java TryCatch2 param1 param2

Terjadi exception karena indeks di luar kapasitas array

Setelah blok try catch

Outputnya jika tanpa

parameter

Outputnya jika dengan

sebuah parameter

Outputnya jika

dengan 2 parameter

Throw ObjekEksepsi;

Cara penulisan:

Page 50: Modul PBO Finishing

46

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Eksepsi juga dapat dibangkitkan secara manual melalui kode yang kita tulis. Kita dapat melakukan hal tersebut dengan kata kunci throw ini, seperti pada contoh diatas.

Penggunaan Throws

Sangat erat hubungannya dengan penggunaan exception yang dicek oleh Java.

Keyword ini dipake kalo misalnya ada method yang mungkin menyebabkan exception tapi dia gak menangani exception tersebut.

Exception akan dilempar ke luar, maka dari itu ketika keyword ”throws” digunakan saat pendeklarasian method.

Masih bingung? Let‟s see the code..

Penanganan exception dalam method methodLain()

Penanganan exception dalam method main()

public class CobaThrow{

public static void methodLain() {

try{

throw new ArrayIndexOutOfBoundsException(1);

}catch(ArrayIndexOutOfBoundsException e) {

System.out.println("Penanganan exception

dalam method methodLain()");

throw e;

}

}

public static void main (String [] args){

try{

methodLain();

}catch (ArrayIndexOutOfBoundsException e) {

System.out.println("Penanganan exception

dalam method main()");

}

}

}

Outputnya:

obyek dari class ArrayIndexOutOfBoundsException,

yang kemudian dikreasi dengan konstruktor plus

parameter integer sebagai identitas obyek tersebut.

int[] arr = new int[1];

System.out.println(arr[1]);

Eksepsi ini gak perlu ditulis lagi, karena kita

udah pake throw

Cara penulisan:

class NamaClass throws Exception{

.........

}

atau fungsi / prosedur

int f1() throws Exception{

..........

}

Page 51: Modul PBO Finishing

47

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Penanganan Dengan Finally

Apa itu Finally?

Penggunaan blok try catch terkadang

membingungkan karena kita tidak dapat

menentukan dengan pasti alur mana yang

akan dieksekusi. Apalagi penggunaan throw yang mengakibatkan kode setelah throw tidak akan dieksekusi atau justru terjadi kesalahan pada blok catch, menyebabkan program akan berhenti. Untuk mengatasi problem ini, Java memperkenalkan keyword finally. Dimana semua kode yang ada dalam

blok finally “pasti” akan dieksekusi apapun yang terjadi di dalam blok try catch.

public class DemoThrows{

public static void main (String [] args){

CobaThrows c = new CobaThrows ();

try {

c.tampil();

}catch (Exception e) {

System.out.println(e.getMessage());

}

System.out.println ("Program selesai");

}

}

public class CobaThrows{

public void tampil() throws Exception {

int x=0;

if (x<5)

throw new Exception ("Lebih kecil 5");

}

}

Lebih kecil 5 Program selesai

Outputnya:

Karena ada ini, makanya gak ada

blok try-catch nya

Nah, pas method di atas

dipanggil di sini, makanya,

method itu ada di antara

blok try-catch

try{

......//blok program

} catch (tipeException1 e) {

......//blok program untuk

TipeException1

} catch (tipeException2 e) {

......//blok program untuk

TipeException2

} finally {

......//blok program

}

Terjadi exception

Program Selesai

Exception in thread "main"

java.lang.ArrayIndexOutOfBoundsException: -1

at DemoFinally.main(DemoFinally.java:11)

Cara penulisan:

Supaya output yang

terjadi seperti ini,

bagaimana kah kodenya?

Page 52: Modul PBO Finishing

48

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

I/O (Input dan Output)

public class DemoFinally{

public static void main (String [] args){

int x = 3;

int [] arr = {10,11,12};

try {

System.out.println(arr[x]);

System.out.println("Tidak terjadi exception");

}catch(ArrayIndexOutOfBoundsException e) {

System.out.println("Terjadi exception");

System.out.println(arr[x-4]);

}

finally {

System.out.println("Program Selesai");

}

}

}

arr[3], padahal isi arr cuma ampe 2

arr[-1], kan arr ke-negative itu gak ada

Dieksekusi meskipun di

catch ada exception

Hardware

Data

info

Data

info

Data

info

Data

info

output input

Input: mengambil informasi data dari hardware

Output: mengirim informasi data ke hardware

Stream adalah aliran proses informasi data yang direpresentasikan secara abstrak untuk untuk menulis/menghasilkan/output dan membaca/mendapatkan suatu informasi/input.

semua streams punya sifat yang sama meskipun peralatan fisik yang berhubungan dengannya beda-beda (missal: keyboard, jaringan, dll.)

sebuah program membuka stream dari sebuah

sumber informasi (source) seperti file, memory,

socket. Kemudian membaca informasi secara

sekuensial.

sebuah program dapat mengirim informasi dengan

membuka stream ke sebuah tujuan informasi

(destination).kemudian menuliskan informasi ke

tujuan secara sekuensial.

Paket yang menangani pembacaan dan penulisan info untuk pemrograman java, java io. Ada 2 tipe, Byte Stream dan Character Stream

Page 53: Modul PBO Finishing

49

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Byte Stream

Byte Streams digunakan untuk operasi I/O yang menggunakan data biner (byte). Pada java byte stream mempunyai 2 buah superclass yaitu InputStream dan OutputStream yang merupakan class

abstract.

Masukkan data : commonlabz

Yang anda ketik : commonlabz

Masukkan data : common

Yang anda ketik : common

Panjang Karakter : 8

Index ke-1 sebnyk 3 : omm

DataInputStream dalam jdk 1.5 hanya mempunyai 1 konstruktor dan 17 method yang ada dalam classnya, selebihnya turunan dari class parentnya. Berikut ini akan dijelaskan konstruktor dan method yang sering digunakan.

1. DataInputStream(InputStream in) Untuk membuat sebuah objek DataInputStream dengan spesifikasi InputStream yang diinginkan.

2. xxx readXxx() xxx disini dapat diganti dengan tipe data primitif seperti int, float, byte, boolean, byte, char, dll. Digunakan untuk membaca dari stream tipe data tertentu secara langsung.

DataOutputStream dalam jdk 1.5 hanya mempunyai 1 kostruktor dan 15 method yang ada dalam classnya selebihnya turunan dari class parentnya. Berikut ini akan dijelaskan konstruktor dan method yang sering digunakan. DataOutputStream(OutputStream out) Untuk membuat sebuah objek DataOutputStream dengan spesifikasi OutputStream yang diinginkan. void writeXxx(xxx v) xxx disini dapat diganti dengan tipe data primitif seperti int, float, byte, boolean, byte, char, dll.

Output untuk contoh input data Output untuk contoh input dan output data

Kira-kira seperti apa ya bentuk kodenya?

Page 54: Modul PBO Finishing

50

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Contoh input data

import java.io.*;

public class DemoStream1

{

public static void main(String[] args) {

byte[] data = new byte[10];

System.out.print("Masukkan data : ");

try {

System.in.read(data);

} catch (IOException e) {

System.out.print("Terjadi Exception");

}

System.out.print("Yang anda ketik : ");

for (int i=0;i<data.length;i++) {

System.out.print((char)data[i]);

//(cahr) diatas disebut posting yakni untuk

mengubah format menjadi char

}

}

}

import java.io.*;

public class DemoStream3

{

public static void main(String[] args) {

byte[] data = new byte[10];

int panjang=0;

System.out.print("Masukkan data : ");

try {

panjang=System.in.read(data);

//sebenarnya Sistem.in.read mengembalikan panjang karakter yang

//diinputkan (termasuk enter yang dianggap 2 karakater..)

System.out.print("Yang anda ketik : ");

System.out.write(data);

System.out.println("Panjang Karakter : "+panjang);

System.out.print("index ke-1 sebnyk 3 : ");

System.out.write(data,1,3);

} catch (IOException e) {

System.out.print("Terjadi Exception");

}

}

}

/* write mencetak apapun tipe data yang ada, sedangkan print dan

println mencetak data ke dalam tipe string */

Contoh input dan output data

Page 55: Modul PBO Finishing

51

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Character Stream Apa itu character stream?

Digunakan untuk menangani operasi I/O yang menggunakan character dan merupakan sebuah objek yang dapat membaca dan menuliskan byte stream, kayak byte stream itu sendiri.

Jadi, character stream itu adalah sebuah byte stream yang diteruskan oleh class Reader dan Writer yang merupakan Abstract class.

FYI, karena karakter dalam java menggunakan Unicode (16 bit length) maka penggunaan character streams dapat digunakan untuk menangani karakter-karakter internasional (karakter diluar ASCII standar).

Hierarki Kelas Reader Hierarki Kelas Writer

BufferedReader dalam jdk 1.5 hanya mempunyai 2 kostruktor dan 9 method yang ada dalam classnya selebihnya turunan dari class parentnya. Berikut ini akan dijelaskan konstruktor dan method yang sering digunakan. BufferedReader(Reader in) dan BufferedReader(Reader in,int size) Membuat objek BufferedReader dengan karakter buffer inputstream atau objek Reader yang lain. Int sz digunakan untuk ukuran buffer yang digunakan. String readLine() readLine digunakan untuk membaca satu baris penuh text, yaitu mengembalikan String dari objek BufferedReader yang digunakan.

BufferedWriter dalam jdk 1.5 hanya mempunyai 2 kostruktor dan 6 method yang ada dalam classnya selebihnya turunan dari class parentnya. Berikut ini akan dijelaskan konstruktor dan method yang sering digunakan. BufferedWriter (Writer in) dan BufferedWriter(Writer in,int size) Membuat objek BufferedWriter dengan karakter buffer outputstream atau objek Writer yang lain. Int sz digunakan untuk ukuran buffer yang digunakan. void write(String s, int of, int len) Untuk menuliskan sebuah String s ke sebuah media yang telah dispesifikasikan oleh objek BufferedWriter. Dimulai dari karakter of(integer), ke berapa banyak karakter yang akan ditulis len(integer).

Page 56: Modul PBO Finishing

52

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Jadi jika ingin membaca dari console dengan Character Streams, dapat ditulis dengan cara :

atau

import java.io.*;

public class DemoStream6 {

public static void main(String[] args) throws IOException {

char data;

String str="";

BufferedReader buff =

new BufferedReader(new InputStreamReader(System.in));

System.out.print("Ketik : ");

data = (char) buff.read();

while (data!='\r') {

str+=data;

data = (char) buff.read();

}

System.out.println("Yang diketik : "+str);

System.out.println("Program Selesai");

}

}

Ketik : common

Yang diketik : common

Program Selesai

import java.io.*;

public class DemoStream8 {

public static void main(String[] args) throws IOException {

PrintWriter output = new PrintWriter (System.out,true);

output.println("Hello World");

}

}

Hello World

InputStreamReader input = new InputStreamReader(System.in);

BufferedReader buff = new BufferedReader(input);

BufferedReader buff = new BufferedReader(new InputStreamReader(System.n));

Outputnya:

Outputnya:

Contoh input:

Contoh output:

Variabel Streams Standar Secara default, Java telah menyediakan 3 buah variabel streams yang dapat langsung digunakan, karena variabel ini member public static dari class System, yaitu : in,out,err. System.out : output stream standar. Secara default outputnya adalah console. System.in : input stream standar. Secara default inputya adalah keyboard. System.err : output stream untuk mencetak pesan kesalahan pada console (default). (System boleh langsung diakses karena println bertipe static sama dengan main, sehingga dapat langsung dijalankan tanpa melalui instansiasi)

Additional stuff

FYI, kalo kamu mo instan objek dari paket

java io, error harus selalu ditangkap oleh

Exception, seperti IOException yang

digunakan untuk menangkap kesalahan dari

error IO.

Page 57: Modul PBO Finishing

53

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Operasi File

File digunakan sebagai media penyimpan. Untuk mengakses file kita harus menspesifikasikan dimana file yang akan kita akses, atau file baru yang akan disimpan. Dalam java kita dapat melakukan operasi file, yaitu membuat file baru atau menulis dan membaca file dengan character stream atau dengan byte stream.

Untuk menciptakan sebuah file dengan mengakses class java.io.File dan menciptakan objek dari class tersebut, ini tanpa harus menangkap error io. Berbeda dengan menciptakan file yang langsung diakses oleh stream, file tersebut harus dapat menangkap error io ketika penciptaan objek class file.

java.io.File terdapat 4 atribut, 4 konstruktor dan 39 method yang ada didalam class untuk menspesifikasikan file yang dibuat. File(),File(String path),File(String dir,String nm) Konstruktor diatas adalah yang sering digunakan yaitu membuat objek file kemudian digunakan dengan pengesetan methodnya, atau menginstan langsung dengan nama file beserta pathnya. boolean createNewFile(), boolean delete(),boolean exists() method-method diatas untuk mengeset dengan pengecekan, untuk createNewFile digunakan untuk menciptakan file kemudian mengembalikan nilai true jika file dibuat.

java.io.FileInputStream dengan byte stream terdapat 3 konstruktor dan 9 method yang ada. Digunakan untuk mengambil file yang telah dideskripsikan untuk dibaca dengan byte stream. FileInputStream(File of), FileInputStream(String nama) Digunakan untuk mengambil file untuk dibaca secara byte stream,bisa memasukan deskripsi file yang telah ada dengan String, atau dengan file yang telah diinstan dengan jelas.

java.io.FileOutputStream dengan byte stream terdapat 5 konstruktor dan 7 method untuk membuat file yang akan diakses menggunakan byte stream. FileOutputStream(File of), FileOutputStream(File of,boolean append) Digunakan untuk penciptaan objek file yang akan diakses dengan byte stream, dan untuk variabel append digunakan untuk apakah isi file akan dilanjutkan ke akhir dari isi file.

java.io.FileWriter dengan character stream terdapat 5 konstruktor dan tidak ada method yang dideskripsikan didalam class ini. FileWriter(File of), FileWriter(File of,boolean append) Digunakan untuk penciptaan objek file yang akan diakses dengan character stream, dan untuk variabel append digunakan untuk apakah isi file akan dilanjutkan ke akhir dari isi file.

java.io.FileReader dengan character stream terdapat 3 konstruktor dan tidak ada method yang dideskripsikan didalam class ini. FileReader(File of), FileReader(String nama). Digunakan untuk mengambil file untuk dibaca secara character stream,bisa memasukan deskripsi file yang telah ada dengan String, atau dengan file yang telah diinstan dengan jelas.

Kira-kira seperti apa yah

implementasinya di kode? Any idea?

Page 58: Modul PBO Finishing

54

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

input file dengan byte stream

import java.io.*;

public class DemoStream5 {

public static void main(String[] args) {

byte data;

String namaFile = "test.txt";

FileOutputStream fout = null;

try {

fout = new FileOutputStream(namaFile, true);

//true artinya menambahkan kedalam file, tidak menimpa

System.out.print("Ketik : ");

data = (byte)System.in.read();

while (data!=(byte)'\r') {

fout.write(data);

data = (byte)System.in.read();

}

}

catch (FileNotFoundException e) {

System.out.println("File "+namaFile+" tidak dapat dicreate");

}

catch (IOException e) {

System.out.println("Terjadi Exception");

}

finally {

if (fout!=null) {

try {

fout.close();

}

catch (IOException e) {

System.out.println("Terjadi Exception");

}

}

}

}

}

enter

Ketik : commonlabz

Outputnya:

Page 59: Modul PBO Finishing

55

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

input file dengan byte stream

Komunikasi antar objek

import java.io.*;

public class DemoStream4 {

public static void main(String[] args) {

byte data;

String namaFile = "test.txt";

FileInputStream fin = null;

try {

fin = new FileInputStream(namaFile);

do {

data = (byte)fin.read();

System.out.print((char)data);

}

while (data!=-1);

//pada saat eol/eof nilai yang dikembalikan -1

}

catch (FileNotFoundException e) {

System.out.println("File "+namaFile+" tidak ditemukan");

}

catch (IOException e) {

System.out.println("Terjadi Exception");

}

finally {

if (fin!=null) {

try {

fin.close();

}

catch (IOException e) {

System.out.println("Terjadi Exception");

}

}

}

}

}

commonlabz? Outputnya:

Objek komputer

Objek manusia

interface

Agar satu objek bisa berkomunikasi

dengan objek lain maka setiap objek

pasti memiliki definisi interface.

Proses A Proses B

Objek L sing()

Objek P

sit()

Objek X

bark()

Objek Y eat()

Remote method

invocation

Local method

invocation

Remote

object

Remote object dipanggil oleh objek lain melalui remote object

references yang merupakan sebuah ID yang dapat digunakan untuk

menunjuk pada suatu remote object tertentu, di dalam ID ada info

alamat host di mana remote object yang ditunjuk lagi jalan. Method

mana aja yang bisa dipanggil secara remote didefinisiin di remote

interface

Page 60: Modul PBO Finishing

56

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Object Serialization

Apa itu object serialization?

Suatu mekanisme yang dapat membuat sebuah objek dapat dikirimkan seperti mengirimkan data.

Object serialization merupakan perluasan dari inti class java io yang digunakan untuk objek dan bisa digunakan untuk pengkodean (encoding) untuk objek dan membuat objek tersebut dapat diraih atau digunakan, dengan melalui bit-bit stream, kemudian dapat digunakan untuk penyusunan kembali objek tersebut dari bit-bit stream yang dikodekan, dan saling melengkapi. Serialisasi merupakan mekanisme yang ringan dan kuat untuk komunikasi dengan sockets atau RMI(Remote Method Invocation). Selain untuk komunikasi dengan sockets teknik ini dapat digunakan juga untuk menyimpan keadaan suatu status dari suatu objek ke dalam file, seperti yang sudah dijelaskan di pendahuluan.

Jika kita ingin membuat sebuah objek yang dapat diserialisasikan, maka kita harus mengimplementasikan salah satu interface java.io.Serializable atau java.io.Externalizable pada class yang ingin dibuat objek yang dapat diserialisasikan. Untuk lebih jelas tentang serialisasi objek dibawah ini akan diberikan sedikit penjelasan yang terkait dengan objek serialisasi.

Interface java.io.Serializable

Interface serializable harus di implementasikan jika ingin membuat objek yang dapat diserialisasi, implementasi interface serializable tergolong sederhana karena tidak terdapat method yang harus didefinisikan untuk di override.

Tujuan mengimplementasikan interface serializable adalah untuk memberitahukan kepada JVM (Java Virtual Machine), bahwa objek yang menerapkan serializabel merupakan objek yang dapat diserialisasikan.

Class java.io.ObjectOutputStream Class objectoutputstream adalah kelas yang digunakan untuk mengirimkan objek menjadi stream yang kemudian dapat dikirimkan ke file atau ke socket (jaringan). Class ObjectOutputStream mempunyai 2 constructor dan 31 method untuk versi jdk 1.5. Adapun method dan constructor yang sering digunakan adalah ObjectOutputStream(OutputStream out) Membuat ObjectOutputStream yang akan menuliskan ke spesifik OutputStream yang dikehendaki. void writeObject(Object obj) menuliskan objek yang akan dikirimkan ke ObjectOutputStream.

Class java.io.ObjectInputStream Class ObjectInputStream adalah kelas yang digunakan untuk mengambil objek dari stream yang dikirimkan melalui file atau socket (jaringan). Class ObjectInputStream mempunyai 2 Constructors, 31 methods untuk versi jdk 1.5. Method dan constructor yang sering digunakan adalah ObjectInputStream(InputStream in) Membuat ObjectInputStream yang akan mengambil spesifik stream dari InputStream yang dikehendaki. Object readObject() Membaca objek yang telah diddefinisikan.

Page 61: Modul PBO Finishing

57

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

import java.io.*;

public class BarangSer implements Serializable{

private String nama;

private int jumlah;

public BarangSer (String nm, int jml){

nama=nm;

jumlah=jml;

}

public void tampil(){

System.out.println("nama barang: "+nama);

System.out.println("jumlah barang: "+jumlah);

}

public void simpanObject(BarangSer ob){

try{

FileOutputStream fos= new FileOutputStream("dtBrg.txt");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(ob);

oos.flush();

}catch(IOException ioe){

System.err.println("error"+ioe);

}

}

public void bacaObject(BarangSer obb){

try{

FileInputStream fis= new FileInputStream("dtBrg.txt");

ObjectInputStream ois = new ObjectInputStream(fis);

while( (obb=(BarangSer)ois.readObject())!=null)

obb.tampil();

}catch(IOException ioe){

System.exit(1);

}catch(Exception e){

System.exit(1);

}

}

public static void main(String[] args){

BarangSer a1 = new BarangSer("Baju",5);

a1.simpanObject(a1);

a1.bacaObject(a1);

}

}

nama barang : Baju

jumlah barang : 5

Output program:

Page 62: Modul PBO Finishing

58

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Modifier Transient

Buat apa modifier transient ?

Pada contoh di atas, objek yang kita simpan itu bisa dibaca oleh siapapun yang punya hak akses. Nah buat antisipasi hal itu, kita bisa buat atribut tidak diserialisasikan. Makanya kita pake modifier transient pada atribut yang ngga pengen kita serialisasikan.

Misalnya, dari contoh diatas, salah satu atributnya nggak kita serialisasikan maka pada saat dijalankan hasil dari atribut tersebut mengeluarkan nilai defaultnya untuk yang tak mempunyai nilai. Dalam kasus ini kita dapat melakukan manipulasi, sehingga atribut transient dapat diserialisasikan dengan dienkripsikan terlebih dahulu kemudian didekripsikan ketika dibaca. Untuk melakukan itu kita harus mengoverriding method writeObject yang ada pada kelas ObjectOutputStream dan readObject yang ada pada kelas ObjectInputStream.

Selain dengan cara diatas ada cara lain yang mungkin lebih mudah untuk dipahami yaitu dengan mengimplementasikan interface java.io.Externalizable.

Interface java.io.Externalizable

Interface Externalizable merupakan subclass dari interface Serializable. Akan tetapi interface Externalizable terdapat 2 method yang harus dioverriding dan didefinisikan yaitu writeExternal dan readExternal. Berikut ini penjelasan kedua method tersebut.

void writeExternal(ObjectOutput out) throws IOException digunakan untuk menyimpan objek kedalam suatu metode operasi, seperti file/socket. Terdapat parameter ObjecOutput yang bernama out, ObjectOutput adalah jenis interface yang dijadikan tipe variable parameter. Dan berikut beberapa method yang dapat digunakan parameter tersebut.

Method-method ini yang sering dapat

digunakan untuk menuliskan tipe

data, yang ada dalam method

writeExternal ini, meskipun banyak

method lain lagi yang dapat

digunakan untuk keperluan yang lain.

Nama Method Keterangan

void writeBoolean(Boolean b) Menuliskan nilai bertipe Boolean

void writeByte(int i) Menuliskan nilai bertipe byte

void writeChar(int c) Menuliskan nilai character dengan (byte)(0xff & (c >> 8)) (byte)(0xff & c)

void writeDouble(double d) Menuliskan nilai bertipe double

void writeFloat(float f) Menuliskan nilai bertipe float

void writeInt(int i) Menuliskan nilai bertipe integer

void writeLong(long l) Menuliskan nilai bertipe long

void writeShort(int s) Menuliskan nilai bertipe short

void writeObject(Object o) Menuliskan objek atau tipe data referensi

Page 63: Modul PBO Finishing

59

Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

void readExternal(ObjectInput in) throws IOException, ClassNotFoundException Digunakan untuk membaca objek yang telah dikirimkan melalui suatu metode operasi, seperti file atau socket. Terdapat parameter bertipe ObjecInput yang bernama in, sama seperti ObjectOutput, ObjectInput merupakan interface yang dijadikan tipe parameter. Berikut beberapa method read yang dapat digunakan untuk membaca nilai dari input stream.

Jika kita ingin membuat kelas yang mampu menserialisasikan objeknya dan dapat mengontrol dan memanipulasi atribut yang diserialisasikan maka kita dapat membuat kelas tersebut mengimplementasikan interface Externalizable, kemudian mengoverriding kedua method diatas. Kedua method diatas akan dipanggil secara otomatis ketika operasi baca dan tulis ke atau dari input/output stream terjadi.

Nama Method Keterangan

boolean readBoolean() Membaca nilai boolean dan meng-embalikannya

byte readByte() Membaca nilai byte dan meng-embalikannya

char readChar() Membaca nilai karakter dan meng-embalikannya

double readDouble() Membaca nilai double dan meng-embalikannya

float readFloat() Membaca nilai float dan meng-embalikannya

int readInt() Membaca nilai integer dan meng-embalikannya

long readLong() Membaca nilai long dan meng-embalikannya

Object readObject() Membaca objek dan mengembalik-an ke tipe Object

short readShort() Membaca nilai boolean dan meng-embalikannya

Method-method ini yang sering dapat digunakan untuk membaca tipe

data, yang ada dalam method readExternal, meskipun banyak method lain

lagi yang dapat digunakan untuk keperluan yang lain.

data barang : sepatu

jumlah barang : 2

Jika output programnya seperti di

bawah ini, bagaimana bentuk kode

programnya? Mari kita lihat kodenya di

halaman sebelah 1. [Booch95] Grady Booch, “Object Oriented Analysis and

Design with Application”, The Benjamin/ Cumming

Publishing Company, 1995.

2. [Coad91] Coad, Peter, Yourdon, “Object Oriented Design”,

Second Edition, Prentice Hall, 1991

3. [Darwin01] Ian Darwin, “Java CookBook”, First Edition,

O’Reilly, 2001

4. [Deitel04] H.M Deitel, “Java How to Program”, Sixth

Edition, Prentice Hall, 2004

5. [Meyer97] Bertrand Meyer, “Object Oriented Software

Construction”, Second Edition, Prentice Hall, 1997

Page 64: Modul PBO Finishing

60

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

import java.io.*;

public class BarangEx implements Externalizable{

private String nama;

private int jumlah;

public BarangEx(){ //konstruktor 1

}

public BarangEx(String nm, int jml){ //konstruktor2

nama=nm;

jumlah=jml;

}

public void writeExternal(ObjectOutput out) throws IOException{

out.writeObject(nama); //string adalah tipe data referensi

out.writeInt(jumlah);

}

public void readExternal(ObjectInput in) throws IOException,

ClassNotFoundException{

this.nama = (String) in.readObject();

this.jumlah= in.readInt();

}

public String toString(){

return "data barang: "+nama+"\n"+"jumlah barang: "+jumlah;

}

public static void simpanObjek(BarangEx brg) throws IOException{

FileOutputStream fos = new FileOutputStream("dtEx.txt");

ObjectOutputStream oos=new ObjectOutputStream(fos);

oos.writeObject(brg);

oos.flush();

}

public static BarangEx bacaObjek() throws

ClassNotFoundException,IOException{

FileInputStream fis= new FileInputStream("dtEx.txt");

ObjectInputStream ois = new ObjectInputStream(fis);

return(BarangEx)ois.readObject();

}

public static void main(String[] args) throws

ClassNotFoundException,IOException{

BarangEx awal = new BarangEx("sepatu",2);

simpanObjek(awal);

System.out.println(bacaObjek());

}

}

Page 65: Modul PBO Finishing

61 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Apa itu thread?

Inget waktu kita buat suatu program? Misalkan pas kita buat program mengurutkan bilangan, kita tahunya kalo program itu dibuat secara sekuensial. Ada awal, terus eksekusi programnya, dan akhir.

Nah, aliran eksekusi dari suatu “task” pada sebuah program itu kita sebut thread. Masih bingung? Let‟s take a look gambar di bawah ini.

Kenapa kita harus tahu thread??

Karena ketika kita membuat sebuah program, supaya interaktif terkadang kita nggak cuma jalanin satu task aja.

Kita pasti pernah main game kan? Ketika main game, terjadi beberapa task di sana. Ada yang tasknya ngurusin visual, ngurusin logikanya, perhitungan score, dan sebagainya. Jadi, ada banyak thread yang jalan di program game yang kita mainin.

Nah, kemampuan menjalankan beberapa thread pada waktu yang bersamaan yang mana masing-masing mengerjakan task yang berbeda dalam satu program, kita sebut dia sebagai multithreading.

Modul 5

Multithreading

Tujuan:

1. Kenal konsepnya

2. Bisa implementasiinnya

3. Ngerti dan paham serta bisa

implementasiin sinkronisasi di

multithreading

Satu program

Satu thread

Satu program

Dua

threads

mandi()

x.sikatGigi()

x.selesai()

x.sabunan()

mandi()

x.sabunan()

x.bilasSabun()

x.selesaiSabun()

mandi()

x.sikatGigi()

x.kumur2()

x.selesaiSikat()

Page 66: Modul PBO Finishing

62

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Bagaimana hidup tanpa thread?

Ketika kita belum mengenal thread:

Di suatu pagi, kita bangun kesiangan, masuk kuliah jam 7, dosen killer, kuis setiap hari, jadi nggak mungkin nggak masuk.

Karena belum kenal thread, kita biasanya menghabiskan waktu untuk mandi lebih dari 5 menit, jadi kita lebih sering memilih untuk tidak mandi daripada telat.

Ayo, kita coba dan kemudian lihat hasilnya.

Yang terjadi adalah seperti ini:

Nanti kalo udah kenal thread

Yang sebenarnya

Page 67: Modul PBO Finishing

63 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Setelah kita kenal thread…

Bagaimana cara membuat dan menggunakan Threads?

Untuk jalanin threadnya:

1. Buat objeknya 2. Panggil method start()

Kita bangun kesiangan, masuk kuliah jam 7, dosen killer, ada kuis, dan nggak mungkin kita nggak mandi karena udah 5 hari nggak mandi karena sibuk buat tubes. Gimana caranya supaya mandi kita kurang dari 1 menit? Ayo kita coba, sabunan sambil sikat gigi untuk menghemat waktu.

1

Class java.lang.Thread Subclass yang extends

Page 68: Modul PBO Finishing

64

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Masih pada kasus yang sama kayak sebelumnya, tapi kali ini kita pake cara yang berbeda. Carilah perbedaan kode pada Class Mandi di atas dengan yang di sini…! Perbedaan ada karena Runnable itu megang task yang harus dikerjain sama Thread.

2

Interface Runnable ada di java.lang package

Page 69: Modul PBO Finishing

65 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Ketika kita menggunakan anonymous object, kita tidak perlu mengimplement ataupun membuat kelas yang kita buat menjadi subkelas dari Thread. Dengan menggunakan kasus yang sama, cobalah menggunakan anonymous object. Lihat dan rasakan perbedaannya.

Carilah perbedaan di antara

ketiganya...!

Answer:

Dari ketiga cara untuk menggunakan thread,

manakah cara yang paling mudah? Kenapa?

Answer:

3

http://java.lyracc.com/belajar/java-untuk-

pemula/

headfirst Java, O’reilly

Page 70: Modul PBO Finishing

66

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Gimana kalau misalnya kita maunya sikat gigi dulu baru

sabunan?

FYI, setiap thread itu punya prioritas lho.

Prioritas berupa int:

MIN_PRIORITY: 1

MAX_PRIORITY: 10

Thread dengan prioritas lebih tinggi akan dieksekusi lebih dulu.

Bagaimana jika kedua thread punya prioritas sama?

CPU akan milih di antara kedua thread mana yang akan dieksekusi lebih dulu.

Daur Hidup Thread

setPriority(int arg())

digunakan untuk modifikasi prioritas

thread tertentu.

New Thread Runnable Not Runnable

Dead

Kondisi awal dari sebuah thread, ketika objek thread dibuat

thread telah selesai eksekusi task

thread sedang eksekusi task (method run lagi dijalanin)

thread lagi running tapi gak ngelakuin apa-apa.

start

running

run method selesai

yield

Page 71: Modul PBO Finishing

67 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Sinkronisasi Thread

Kenapa harus ada sinkronisasi thread?

Kalo misalnya ada beberapa thread yang membutuhkan sebuah resource yang sama, nah supaya cuma ada satu thread aja yang menggunakan resource dalam satu waktu maka butuh sebuah aturan dalam pengaksesannya. Nah, aturan dalam pengaksesannya kita kenal kemudian sebagai

sinkronisasi thread.

Misalnya saja pada saat penulisan file, dalam satu waktu cuma boleh ada satu thread aja yang boleh menulisi file. Kalo misalnya file ditulisi secara bersama-sama maka isi filenya bisa jadi ngga valid nanti. Maka dari itu, pada saat penulisan file ini kita butuh sinkronisasi.

Mengubah nama thread. Apakah thread masih hidup?

Menjalankan aktivitas thread yang tersuspend.

Mengetahui prioritas thread.

Menjalankan thread.

Menghentikan aktivitas thread selama waktu dalam parameter (in milisecond).

Mengetahui nama thread.

Menghentikan aktivitas thread sementara sampai method resume( ) dipanggil.

Menghentikan thread. Mengubah prioritas thread

Dan lain-lain….

Page 72: Modul PBO Finishing

68

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Jika suatu method atau objek dilakukan sinkronisasi, maka otomatis objek atau method tersebut dilock dan jika ada thread lain yang mau akses, dia harus menunggu sampai method tersebut selesai dijalanin atau objek tersebut dilepas.

Bagaimana sintaks sinkronisasi?

public synchronized int namaMethod(){

//isi method

}

synchronized(object){

//isi method

}

Sinkronisasi method, yang hanya dilakukan

terhadap method yang punya identifier

synchronized.

Sinkronisasi objek, dilakukan terhadap seluruh

method pada objek.

Public class SinkronisasiThread{

private static Resources r;

public static void main(String[] args){

r = new Resources();

new Ambil().start();

new Tambah().start();

}

}

static class Ambil extends Thread{

public void run(){

System.out.println(“Ambil berjalan”);

for(int a=0;a<10;a++){

r.ambil();

}

}

}

static class Tambah extends Thread{

public void run(){

System.out.println(“Ambil berjalan”);

for(int a=0;a<10;a++){

r.tambah();

}

}

}

static class Resources{

private Boolean b = false;

private byte nilai = 0;

private synchronized void tambah(){

while(b==true){

try{

System.out.println(“Menunggu untuk ambil”);

wait();

}catch(InterruptedException e){}

}

System.out.println(“Tambah nilai “+ ++nilai);

b=true;

notifyAll();

}

private synchronized void ambil(){

while(b==false){

try{

System.out.println(“Menunggu untuk tambah”);

wait();

}catch(InterruptedException e){}

}

System.out.println(“Ambil nilai “+ ++nilai);

b=false;

notifyAll();

}

}

1

2

1 2

Lengkapilah kode disamping berdasarkan urutan

nomor yang telah disediakan!

Page 73: Modul PBO Finishing

69 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Setelah kita lalui modul-modul sebelumnya yang mana programnya cuma pake console, nah sekarang kita masuk ke modul 6 yang ngebahas tentang GUI.

Berarti di modul ini kita bisa buat program yang ada tampilannya yaa.

Awt dan swing

Beberapa fasilitas yang disediakan oleh kedua class tersebut adalah sebagai berikut:

Pengaturan tata letak (layout management) komponen dalam suatu container.

Mendukung event handling, yaitu mekanisme pendeteksian event dan penentuan respons yang akan diberikan ketika pengguna (user) mengakses komponen tersebut.

Manipulasi grafis komponen seperti font, warna, icon, dll.

Swing components

AWT Swing Platform Platform oriented multiplatform package Java.awt Javax.swing

Modul 6

Graphical User Interface (GUI)

Tujuan:

1. Kenal komponen-komponen dasar

dalam pembuatan UI dalam Java.

2. Ngerti konsep GUI dan bisa

implementasiin di program sederhana

serta bisa integrasiin dengan salah satu

DBMS.

3. Ngerti konsep dari event handling.

AWT components

Label Button Checkbox Choice List MenuItem TextField Scrollbar TextArea ScrollPanel Canvas

Swing component pada dasarnya sama kayak AWT tapi ada penambahan fitur pada Swing.

Page 74: Modul PBO Finishing

70

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Komponen utama dalam GUI

Containers. Adalah tempat dimana componen lain bisa di tempatkan didalamnya, contohnya adalah panel.

Canvases. Digunakan untuk menampilkan image atau pembuatan program yang berbasis grafik. Kita bias menggambar titik, lingkaran dan sebagainya.

UI components. contohnya buttons, lists, simple pop-up menus, check boxes, text fields, dan elemen khusus lain untuk user interface.

Window contsruction components. Contohnya windows, frames, menu bars, dan dialog boxes.

The Basic User Interface Components with Swing

Top Level Container

Frame (JFrame) : Constructor yang dapat digunakan untuk membuat frame adalah JFrame() dan JFrame(String title). Contoh penggunaannya adalah sbb:

Top-Level Container

Intermediate-Level Container

Atomic Component

Container dasar dimana komponen lain diletakkan.

Ex : Frame (JFrame), Dialog (JDialog) & Applet

(JApplet)

Container perantara dimana komponen lain diletakkan

Ex : JPanel, dimana umumnya hanya digunakan sebagai

tempat untuk meletakkan/mengelompokkan komponen-

komponen yang digunakan, baik container atau berupa

atomic component. Dan digunakan juga sebagai scroll pane

(JScrollPane & JTabbed Pane).

Komponen yang memiliki fungsi spesifik, dimana umumnya

user langsung berinteraksi dengan komponen ini

Ex : JButton, JLabel, JTextField, JTextArea.

import javax.swing.*;

public class FrameDemo {

public static void main(String[] args) {

JFrame frame = new JFrame("Frame Demo");

frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

frame.setSize(400,150);

frame.show();

}

}

Page 75: Modul PBO Finishing

71 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Class JFrame memiliki banyak method, salah satu method yang sering digunakan adalah setDefaultCloseOperation(int operation) yang berfungsi untuk mengatur aksi yang akan dilakukan ketika tombol close diklik dimana operation mencakup:

DO_NOTHING_ON_CLOSE (tidak ada aktivitas apapun yang dilakukan secara otomatis jika kita menutup frame tsb. Biasanya digunakan jika kita ingin menangani sendiri aktivitas tsb).

HIDE_ON_CLOSE (Merupakan aktivitas default, dimana frame hanya disembunyikan atau tidak ditampilkan ke layar, namun secara fisik frame ini masih ada di memori sehingga jika diinginkan dapat ditampilkan kembali).

DISPOSE_ON_CLOSE (Menghapus tampilan frame dari layar, menghapusnya dari memori & membebaskan resource yang dipakai)

EXIT_ON_CLOSE (Menghentikan eksekusi program. Cocok digunakan untuk frame utama, dimana jika frame tsb ditutup mengakibatkan eksekusi program berhenti).

Dialog (JDialog): Perbedaan utama Frame dengan Dialog adalah: Dialog tidak berdiri sendiri (biasa dibuat bersama dengan frame sebagai parentnya sehingga Dialog akan dihapus dari memori jika Frame parentnya juga dihapus). Dialog bersifat modal (memblok semua input terhadap parentnya sampai Dialog tersebut ditutup).

import javax.swing.*;

public class DialogDemo {

public static void main(String[] args) {

JFrame frame = new JFrame("Contoh Frame");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.show();

JOptionPane.showConfirmDialog(frame,

"Contoh dialog konfirmasi ...",

"Judul Dialog",

JOptionPane.OK_CANCEL_OPTION,

JOptionPane.QUESTION_MESSAGE);

}

}

frame sbg parent bagi dialog

informasi dialog

Judul dialog

jenis tombol

icon

Page 76: Modul PBO Finishing

72

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Pengaturan Layout

Pengaturan dengan BorderLayout

BorderLayout adalah kelas yang menempatkan komponen dengan pendekatan arah mata angin. Pada program dibawah ini kelima tombol diletakkan pada posisi yang berbeda-beda, ditentukan konstanta: NORTH, EAST, SOUTH, WEST, CENTER.

//file BorderLayoutDemo.java

import javax.swing.*;

import java.awt.*;

public class BorderLayoutDemo {

public static void main(String[] args) {

JFrame frame = new JFrame ("Contoh Border Layout");

BorderLayout layout = new BorderLayout(1,1);

frame.getContentPane().setLayout(layout);

JButton btnNorth = new JButton("Posisi NORTH");

JButton btnSouth = new JButton("Posisi SOUTH");

JButton btnEast = new JButton("Posisi EAST");

JButton btnWest = new JButton("Posisi WEST");

JButton btnCenter = new JButton("Posisi CENTER");

frame.getContentPane().add(btnNorth,BorderLayout.NORTH);

frame.getContentPane().add(btnSouth,BorderLayout.SOUTH);

frame.getContentPane().add(btnEast,BorderLayout.EAST);

frame.getContentPane().add(btnWest,BorderLayout.WEST);

frame.getContentPane().add(btnCenter,BorderLayout.CENTER);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.show();

}

}

Page 77: Modul PBO Finishing

73 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Pengaturan dengan BoxLayout

BoxLayout meletakkan komponen- komponen dalam satu baris atau kolom saja.

//file BoxLayoutDemo.java

import javax.swing.*;

import java.awt.*;

public class BoxLayoutDemo {

public static void main(String[] args) {

JFrame frame = new JFrame ("BoxLayoutDemo");

Box comp = new Box(BoxLayout.Y_AXIS); //X_AXIS

JButton btn1 = new JButton("Button 1");

JButton btn2 = new JButton("Button 2");

JButton btn3 = new JButton("Button 3");

JButton btn4 = new JButton("Long Named Button 4");

JButton btn5 = new JButton("Button 5");

btn1.setAlignmentX(Component.CENTER_ALIGNMENT);

btn2.setAlignmentX(Component.CENTER_ALIGNMENT);

btn3.setAlignmentX(Component.CENTER_ALIGNMENT);

btn4.setAlignmentX(Component.CENTER_ALIGNMENT);

btn5.setAlignmentX(Component.CENTER_ALIGNMENT);

comp.add(btn1);

comp.add(btn2);

comp.add(btn3);

comp.add(btn4);

comp.add(btn5);

frame.getContentPane().add(comp);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.show();

}

}

Page 78: Modul PBO Finishing

74

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Pengaturan dengan Card Layout

CardLayout berguna untuk menampilkan objek Container seperti tumpukan kartu. Oleh karena itu, hanya satu Container yang tertampil untuk setiap waktu.

import javax.swing.*;

import java.awt.*;

public class CardLayoutDemo {

public static void main(String[] args) {

JFrame frame = new JFrame ("CardLayoutDemo");

JPanel panel1 = new JPanel();

JPanel panel2 = new JPanel();

JButton btn1 = new JButton("Tombol 1");

JButton btn2 = new JButton("Tombol 2");

JTextField text1 = new JTextField(20);

panel1.add(btn1);

panel1.add(btn2);

panel2.add(text1);

JTabbedPane tab = new JTabbedPane();

tab.add(panel1,"Tab dengan Button");

tab.add(panel2,"Tab dengan TextField");

frame.getContentPane().add(tab,BorderLayout.NORTH);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(300,150);

frame.show();

}

}

Page 79: Modul PBO Finishing

75 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Pengaturan dengan FlowLayout

FlowLayout melakukan pengaturan komponen – komponen dalam objek Container dengan urutan dari kiri ke kanan dan dari atas ke bawah. Pengaturan rata kiri, rata kanan, atau rata tengah bisa dilakukan dengan melibatkan konstanta LEFT, RIGHT, CENTER.

import javax.swing.*;

import java.awt.*;

import javax.swing.*;

import java.awt.*;

public class FlowLayoutDemo {

public static void main(String[] args) {

JFrame frame = new JFrame ("FlowLayoutDemo");

FlowLayout layout = new FlowLayout(FlowLayout.LEFT);

layout.setVgap(20);//jarak vertikal antar komponen

layout.setHgap(10);//jarak horisontal antar komponen

frame.getContentPane().setLayout(layout);

JButton btn1 = new JButton("Button 1");

JButton btn2 = new JButton("Button 2");

JButton btn3 = new JButton("Button 3");

JButton btn4 = new JButton("Long-Named Button 4");

JButton btn5 = new JButton("Button 5");

frame.getContentPane().add(btn1);

frame.getContentPane().add(btn2);

frame.getContentPane().add(btn3);

frame.getContentPane().add(btn4);

frame.getContentPane().add(btn5);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(300,150);

frame.show();

}

}

Page 80: Modul PBO Finishing

76

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Pengaturan dengan GridLayout

GridLayout merupakan manajer tataletak komponen yang menggunakan bentuk grid dengan ukuran yang sama untuk setiap komponen

Pengaturan dengan GridBagLayout

GridBagLayout merupakan kelas yang dapat digunakan untuk meletakkan komponen secara bebas. Hal ini berbeda dengan GridLayout. Jika menggunakan GridBagLayout, setiap komponen dapat menempati ukuran yang berbeda dengan yang lain, setiap komponen dapat menempati lebih dari satu grid.

import javax.swing.*;

import java.awt.*;

public class GridLayoutDemo {

public static void main(String[] args) {

JFrame frame = new JFrame ("GridLayoutDemo");

GridLayout layout = new GridLayout(3,2);

layout.setHgap(5);

layout.setVgap(10);

frame.getContentPane().setLayout(layout);

JButton btn1 = new JButton("Button 1");

JButton btn2 = new JButton("Button 2");

JButton btn3 = new JButton("Button 3");

JButton btn4 = new JButton("Long-Named Button 4");

JButton btn5 = new JButton("Button 5");

frame.getContentPane().add(btn1);

frame.getContentPane().add(btn2);

frame.getContentPane().add(btn3);

frame.getContentPane().add(btn4);

frame.getContentPane().add(btn5);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.show();

}

}

Page 81: Modul PBO Finishing

77 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

import javax.swing.*;

import java.awt.*;

public class GridBagLayoutDemo {

public static void main(String[] args) {

JFrame frame = new JFrame ("GridBagLayoutDemo");

GridBagLayout layout = new GridBagLayout();

GridBagConstraints c = new GridBagConstraints();

frame.getContentPane().setLayout(layout);

c.fill = GridBagConstraints.HORIZONTAL;

JButton btn1 = new JButton("Button 1");

c.weightx = 0.5;

c.gridx = 0; //kolom 0

c.gridy = 0; //baris 0

layout.setConstraints(btn1,c);

frame.getContentPane().add(btn1);

JButton btn2 = new JButton("Button 2");

c.gridx = 1; //kolom 1

c.gridy = 0; //baris 0

layout.setConstraints(btn2,c);

frame.getContentPane().add(btn2);

JButton btn3 = new JButton("Long-Named Button 3");

c.ipady = 30;//perbesar tinggi

c.gridwidth = 2; //menempati 2 kolom

c.gridx = 0; //kolom 0

c.gridy = 1; //baris 1

layout.setConstraints(btn3,c);

frame.getContentPane().add(btn3);

JButton btn4 = new JButton("Button 4");

c.ipady = 50;//perbesar tinggi

c.gridwidth = 1; //menempati 1 kolom

c.gridx = 0; //kolom 0

c.gridy = 2; //baris 2

layout.setConstraints(btn4,c);

frame.getContentPane().add(btn4);

JButton btn5 = new JButton("Button 5");

c.ipady = 0; //tinggi normal

c.gridwidth = 1; //menempati 1 kolom

c.gridx = 1; //kolom 1

c.gridy = 2; //baris 2

c.insets = new Insets(10,0,0,0); //t,l,b,r

c.anchor = GridBagConstraints.SOUTH;

layout.setConstraints(btn5,c);

frame.getContentPane().add(btn5);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.show();

}

}

c.gridy = 2; //baris 2

c.insets = new Insets(10,0,0,0); //t,l,b,r

c.anchor = GridBagConstraints.SOUTH;

Page 82: Modul PBO Finishing

78

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Pengaturan dengan GroupLayout

GroupLayout menggunakan dua tipe penyusunan, yaitu sequential dan parallel.

1. Penyusunan secara sequential sangatlah sederhana, yaitu menempatkan komponen-komponen dengan berurutan setelah komponen pertama diletakan, mirip dengan BoxLayout atau FlowLayout yang menempatkan komponen-komponen berikutnya dalam satu line yang sama.

2. Dalam penyusunan secara parallel, komponen dapat ditaruh sebagai baseline-, top-, atau bottom- jika mengukuti sumbu vertikal. Komponen juga ditaruh sebagai left-, right- atau center- jika mengukuti sumbu horizontal.

Pembahasannya:

Horizontal Layout

Contoh: Terdapat tiga buah komponen C1, C2, C3. Komponen-

komponen berikut akan disusun dengan cara sequential group dan

parallel group.

layout.setHorizontalGroup ( layout.createSequentialGroup()

.addComponent(label)

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))

);

Kelompokan komponen-komponen diatas menjadi beberapa grup yang

tersusun secara berurutan dan horizontal. Maka dari kelompok-

kelompok tersebut dapat dibuat code awal sebagai berikut.

Kemudian grup yang ada, di bagi-bagi kembali. Maka code akan

berkembang menjadi,

Page 83: Modul PBO Finishing

79 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Setelah itu grup terakhir yang berisi dua buah button, tambahkan pada code. Maka code akan berkembang menjadi,

Pengaturan dengan SpringLayout

SpringLayout mulai ada di JDK pada versi 1.4. SpringLayout merupakan layout manager yang sangat flexibel dan dapat meniru fitur-fitur dari Layout Manager yang lain. Ukuran komponen dapat berubah-ubah secara otomatis sesuai dengan keinginan dengan cara mendefnisikan constraints atau batasan/jarak antar komponen.

layout.setHorizontalGroup(layout.createSequentialGroup()

.addComponent(label)

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addComponent(textField)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addComponent(caseCheckBox)

.addComponent(wholeCheckBox))

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addComponent(wrapCheckBox)

.addComponent(backCheckBox))))

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))

.addComponent(findButton)

.addComponent(cancelButton))

);

layout.setHorizontalGroup(layout.createSequentialGroup()

.addComponent(label)

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addComponent(textField)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addComponent(caseCheckBox)

.addComponent(wholeCheckBox))

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addComponent(wrapCheckBox)

.addComponent(backCheckBox))))

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))

);

Print Screen window dengan SpringLayout dimana

ukuran Labelnya statis dan ukuran Text fieldnya

fleksibel mengikuti ukuran window jika diresize

Page 84: Modul PBO Finishing

80

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

// Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.

import javax.swing.SpringLayout;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JTextField;

import java.awt.Container;

public class SpringDemo {

static void createAndShowGUI() {

//Membuat dan mengatur jendela utama

JFrame frame = new JFrame("SpringDemo");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Mengatur content pane.

Container contentPane = frame.getContentPane();

SpringLayout layout = new SpringLayout();

contentPane.setLayout(layout);

//Membuat dan menambahkan komponen

JLabel label = new JLabel("Label: ");

JTextField textField = new JTextField("Text field", 15);

contentPane.add(label);

contentPane.add(textField);

//Mengatur constraints untuk label sehingga posisinya=(5,5).

layout.putConstraint(SpringLayout.WEST, label,5,

SpringLayout.WEST, contentPane);

layout.putConstraint(SpringLayout.NORTH, label,5,

SpringLayout.NORTH, contentPane);

//Mengatur text field sehingga posisinya=(sisi_kanan_label + 5, 5)

layout.putConstraint(SpringLayout.WEST, textField,5,

SpringLayout.EAST, label);

layout.putConstraint(SpringLayout.NORTH, textField,5,

SpringLayout.NORTH, contentPane);

//Mengatur constraints content pane sehingga

//sisi kanan content pane=5 pixel diluar sisi kanan text field

//sisi bawah content pane =5 pixel dibawah sisi bawah komponen terpanjang

layout.putConstraint(SpringLayout.EAST, contentPane,5,

SpringLayout.EAST, textField);

layout.putConstraint(SpringLayout.SOUTH, contentPane,5,

SpringLayout.SOUTH, textField);

//Display the window.

frame.pack();

frame.setVisible(true);

}

public static void main(String[] args) {

createAndShowGUI();

}

}

Page 85: Modul PBO Finishing

81 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Event Handling

Untuk mendeteksi atas apa yang dilakukan oleh user, diperlukan penanganan khusus terhadap event (peristiwa yang di-stimulasikan/di-trigger) yang diperlukan oleh user terhadap komponen GUI tertentu. Penanganan ini disebut Event Handling Component. Event Handling Component dibagi atas 2 bagian, yaitu Event Listener dan Event Handler. Untuk mengenal 2 Method Event tersebut dapat diilustrasikan sbb: Bila kita mengklik suatu object button, maka suatu event tercipta. Event ini akan ditangkap oleh Event Listener karena setiap komponen secara otomatis akan diberi ID (identitas) seperti button1, button2, textfield1, dll atau kita dapat memberikan ID atas komponen tersebut dengan memberi nama suatu object. Sehingga java mengenal event mana yang ditangkap.

Selanjutnya kita harus menentukan Event Handler dari komponen tersebut, yaitu berupa blok program/statement yang akan memproses bila terjadi suatu event yang ditangkap oleh Event Listener. Event Handler dapat dianalogian seperti pada fungsi operasi +, -, :, x, = pada aplikasi kalkulator. Jika ingin mengalikan 2 bilangan maka kita harus menekan tombol ‟x‟. Setiap tombol operasi tersebut akan mengasilkan pemrosesan yang berbeda-beda.

Class-Class Event

Sebuah event objek mempunyai sebuah class event sebagai tipe data acuannya. Akar dari hierarki class event adalah class EventObject, yang dapat di temukan pada paket java.util. Immediate

subclass dari class EventObject adalah class AWTEvent yang didefinisikan pada paket java.awt.

Berikut ini beberapa dari kelas-kelas AWTEvent:

Classs Event Deskripsi

ComponentEvent Merupakan extend dari AWTEvent yang dijalankan ketika sebuah komponen dijalankan, di resize, dibuat visible atau hidden.

InputEvent Merupakan extend dari ComponentEvent dan Abstract root class Event untuk semua komponent input.

ActionEvent

Merupakan extend dari AWTEvent yang dijalankan ketika sebuah tombol ditekan, melakukan double klik daftar item, atau memilih menu.

ItemEvent Merupakan extend dari AWTEvent.Dijalankan ketika sebuah item di select seperti pada combobox dan list.

KeyEvent Merupakan extend InputEvent yang di jalankan saat sebuah key di tekan, dilepas, atau diketikan.

MouseEvent Merupakan extend InputEvent dijalankan ketika sebuah mouse ditekan, dilepas, diklik, atau sebuah mouse masuk dan keluar dari bagian visible suatu component.

TextEvent Merupakan extend dari AWTEvent, dijalankan ketika sebuah nilai text berubah.

WindowEvent Merupakan extend dari ComponentEvent yang di jalankan ketika sebuah object window di buka, ditutup, diaktifkan, dan dinonaktifkan.

Page 86: Modul PBO Finishing

82

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Event Listener

Event Listener merupakan class yang mengimplementasikan interface <Type> Listener. Berikut ini merupakan beberapa listener yang sering digunakan:

Event Listener Deskripsi ActionListener Bereaksi atas perubahan mouse atau keyboard Mouse Listener Bereaksi atas pergerakan mouse MouseMotionListener Menyediakan method untuk memantau pergerakan mouse seperti

drag dan pemindahan mouse. Window Listener Bereaksi atas perubahan window

Kira-kira bagaimanakah source code pada program dari gambar di samping ini?

/*author : andy*/

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class event_handling{

private JButton b1,b2,b3,b4;

private JTextField text1,text2;

//private JPanel panel1,panel2;

private JLabel label1,label2;

private JFrame frame;

private int a,b;

private String hasilJum=”Hasil Penjumlahan adalah: “;

}

3

1

2

Lengkapilah kode disamping sesuai dengan nomornya!

Page 87: Modul PBO Finishing

83 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

public event_handling(){

frame = new JFrame(“EventHandler Demo”);

text1 = new JTextField(10);

text2 = new JTextField(10);

b1 = new JButton(“tambah”);

b2 = new JButton(“kurang”);

b3 = new JButton(“kali”);

b4 = new JButton(“bagi”);

label1 = new JLabel(“Bilangan 1: “);

label2 = new JLabel(“Bilangan 2: “);

}

1

public void launch()

{

FlowLayout layout = new FlowLayout(FlowLayout.CENTER);

frame.getContentPane().setLayout(layout);

//frame.setLayout(new FlowLayout(FlowLayout.CENTER));

b1.addActionListener(new tambahHandler());

b2.addActionListener(new kurangHandler());

b3.addActionListener(new kaliHandler());

b4.addActionListener(new bagiHandler());

JPanel panel1 = new JPanel();

JPanel panel2 = new JPanel();

panel1.add(label1);

panel1.add(text1);

panel1.add(label2);

panel1.add(text2);

panel2.add(b1);

panel2.add(b2);

panel2.add(b3);

panel2.add(b4);

frame.getContentPane().add(panel1);

frame.getContentPane().add(panel2);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(400,200);

frame.show();

}

private void getText(){

a = Integer.parseInt(text1.getText());

b = Integer.parseInt(text2.getText());

}

private class tambahHandler implements ActionListener {

public void actionPerformed(ActionEvent e) {

getText();

int c = a + b;

JOptionPane.showConfirmDialog(null,hasilJum,c,"Result",

JOptionPane.OK_OPTION,JOptionPane.INFORMATION_MESSAGE);

} }

2

Page 88: Modul PBO Finishing

84

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

private class kurangHandler implements ActionListener {

public void actionPerformed(ActionEvent e) {

getText();

int c = a - b;

JOptionPane.showConfirmDialog(null,"Hasil Pengurangan adalah:"+c,"Result",

JOptionPane.OK_OPTION,JOptionPane.INFORMATION_MESSAGE);

}

}

private class kaliHandler implements ActionListener {

public void actionPerformed(ActionEvent e) {

getText();

double c = a * b;

JOptionPane.showConfirmDialog(null,"Hasil Perkalian adalah: "+c,"Result",

JOptionPane.OK_OPTION,JOptionPane.INFORMATION_MESSAGE);

}

}

private class bagiHandler implements ActionListener {

public void actionPerformed(ActionEvent e) {

getText();

double c = a / b;

JOptionPane.showConfirmDialog(null,"Hasil Pembagian adalah: "+c,"Result",

JOptionPane.OK_OPTION,JOptionPane.INFORMATION_MESSAGE);

}

}

public static void main(String[] args) {

event_handling gui = new event_handling();

gui.launch();

}

3

http://edn.embarcadero.com/article/26970

http://en.wikipedia.org/wiki/Swing_(Java)

http://en.wikipedia.org/wiki/Abstract_Window_Toolkit

Page 89: Modul PBO Finishing

85 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Netbeans

Apa itu Netbeans?

Netbeans merupakan sebuah software yang mengacu pada dua hal, yaitu sebagai platform framework Java untuk aplikasi desktop dan sebagai 'integrated development environtment' (IDE) untuk membangun aplikasi yang menggunakan Java, javaScript, PHP, Python, Ruby, Groovy, C, dan C++.

NetBeans IDE dibangun dalam bahasa Java dan dapat dijalankan dimana saja yang telah terinstal JVM, termasuk Windows, Mac OS, Linux, dan Solaris. JDK diperlukan untuk pembangunan fungsionalitas Java. NetBeans merupakan software yang open source dan dapat di-download di www.netbeans.org. Untuk praktikum kali ini Netbeans yang digunakan adalah Netbeans IDE 6.8 dan JDK1.6.

Bagaimana cara menggunakan netbeans?

Di dalam netbeans, semua perancangan dan pemrograman dilakukan di dalam kerangka sebuah proyek. Proyek netbeans merupakan sekumpulan file yang dikelompokkan di dalam suatu kesatuan.

Jadi, kita buat proyek dulu yaa…

Jalankan menu File | Project (Ctrl+Shift+N) untuk membuka suatu dialog New Project.

Modul 7

Netbeans, Applet, dan JDBC

Tujuan:

1. Pahamdan bisa implementasiin cara buat

desain interface menggunakan Netbeans.

2. Ngerti konsep JDBC.

3. Bisa implementasiin JDBC ke suatu

program Java.

4. Ngerti dan bisa implementasiin program

Java Applet.

Download links

http://java.sun.com/javase/downloads/index.jsp

www.netbeans.org

klik disini, untuk membuat

proyek baru.

Page 90: Modul PBO Finishing

86

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Jika menggunakan Netbeans yang mendukung beberapa bahasa

pemrograman lainnya seperti Python, Ruby dll, ataupun J2EE,

J2ME, maka dalam kolom ‘Categories’ akan tampil list pilihan

sesuai kebutuhan.

Pilih Categories:Java, dan Project: Java

Aplication, kemudian klik, ‘next’

Secara ‘default’ proyek

yang anda bikin akan

diletakan ke directori

berikut.

Proyek yang dibuat

secara otomatis telah

memiliki class main

yang memiliki nama

yang sama dengan

dengan nama proyek. kemudian klik, ‘Finish’

Page 91: Modul PBO Finishing

87 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Setelah itu mari kita membuat kelas. Bagaimana caranya?

Jendela untuk melihat

hasilcompile dan

runing program yang

telah dibuat...

Work area...

Project View

Members View

Klik kanan pada

‘pakage’ yang dituju Klik pada jenis kelas

yang akan dibuat.

Digunakan untuk rename,

memindahkan lokasi proyek,

copy dan menghapus proyek

dari jendela proyek sekaligus

dari directorinya. Lakukan

rename pakage menjadi,

javaaplicationData

Digunakan untuk meng-

compile seluruh kelas yang

berada di pakage tersebut.

Digunakan jika ingin

Membuat kelas GUI

Page 92: Modul PBO Finishing

88

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Setelah meng-klik menu „Java Class‟, maka akan muncul jendela sebagai berikut. Pada contoh modul ini akan dibuat kelas yang bernama „Barang‟.

Setelah kelas Barang dibuat, masukan contoh kode berikut ini pada work area:

Klik ‘Finish’

Biasakan nama kelas

diawali dengan huruf besar

F9 F6 Shift +

Page 93: Modul PBO Finishing

89 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Membuat Kelas Inteface

Setelah kita berhasil buat kelas Barang di atas, mari kita buat kelas Interface.

Langkah untuk membuat kelas interface atau GUI yang baru, sama dengan langkah membuat kelas sebelumnya, yang berbeda adalah pilih tipe file kelas „JframeFrom‟. Buatlah pakage baru yang bernama javaaplicationGUI dan taruh kelas interface didalamnya. Pada contoh ini akan dibuat kelas Interface yang bernama „FormInsert‟.

Untuk memulai membuat interface, drag komponen Jlabel dari panel kedalam work area.

JFrame (work area)

Drag salah satu component

dari palette kedalam work

area

Klik ‘properties’

Atau melalui jendela

properties

Digunakan untuk

merumah nama

variabel Jlabel

Swing

Components

Properties

Components yang

sedang aktif

Untuk mengubah-ubah properti dari Jlabel,

dapat dilakukan di ‘properties’, klik kanan

pada Jlabel

Page 94: Modul PBO Finishing

90

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Lakukan hal yang sama, sehingga membentuk sebuah interface sebagai berikut. Ubahlah nama varibael setiap kompunen JTextField agar mudah dalam penggunaannya.

Jika ingin melihat hasil design, dapat

dilakukan dengan meng-klik kanan

pada work area (JFrame).

Page 95: Modul PBO Finishing

91 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Membuat Action Listener

Untuk apa ActionListener? Supaya ketika kita klik tombol yang udah kita buat bisa kelihatan responnya.

Setelah membuat kelas interface, kita akan membuat action dari tombol Submit.

Setelah itu akan tampil pada source :

Untuk menyisipkan action, klik kanan pada

tombol submit, pilih Events-Action-

actionPerformed. Atau dengan double klik

pada tombol.

Disinilah kita akan menuliskan

kode program action dari tombol

save

Page 96: Modul PBO Finishing

92

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Tuliskan kode berikut (tambahkan atribut Barang b; dikelas FormInput sebelumnya):

compile dan running FormInput.java, maka akan keluar tampilan interface :

www.netbeans.org/

smapluspgri.sch.id/KnowledgeSharing/wp.../tutorial-netbeans.pdf

Mau tau lebih jauh??

Page 97: Modul PBO Finishing

93 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

JDBC (JAVA DATABASE CONNECTIVITY) Kita kan udah bisa buat program secara Object Oriented terus kita udah bisa buat GUI juga kan. Nah, sekarang saatnya kita buat program yang pake database buat nyimpen data. Apa itu JDBC? Fungsi yang disediakan oleh Java untuk menghubungkan aplikasi yang dibangun menggunakan bahasa pemrograman java dengan database yang ada. Dengan menggunakan JDBC, kita bisa menggunakan SQL statement untuk ngebuat, manipulasi, atau pelihara suatu data. JDBC adalah versi ODBC yang dibuat oleh Sun Microsystem. JDBC dibangun dengan Java API sehingga bisa untuk cross platform, serta didasarkan pada X/Open SQL Level Intervace (CLI). ODBC dibangun dengan bahasa C sehingga Cuma bisa dibangun pada platform spesifik. Inisialisasi Driver

Untuk nama_driver berbeda-beda tiap database yang digunakan :

Untuk microsoft access yaitu sun.jdbc.odbc.jdbcOdbcDriver.

Untuk oracle yaitu oracle.jdbc.driver.OracleDriver.

Untuk mysql yaitu org.gjt.mm.mysql.Driver.

Koneksi ke database menggunakan URL

Tiap database mempunyai nama_URL yang berbeda-beda yaitu :

Pada access jdbc:odbc:nama_database Pada Oracle jdbc:oracle:thin:localhost:1521:ORCL Pada mysql jdbc:mysql://localhost/nama_database

Keuntungannya? Kalo pake JDBC API, kita bisa akses database dari vendor-vendor ternama seperti Oracle, Sysbase, Informix, Interbase. Kita dapat melakukan mengirimkan perintah-perintah SQL ke RDBMS. Kelas-kelas serta interface JDBC API dapat diakses dalam paket java,sql (core API) atau javax.sql(Standard Extension API).

Gimana cara dapetin JDBC? Kita butuh driver buat akses database di server dari dalem program kita. Setiap server dari vendor punya driver yang beda-beda.

Download di: http://java.sun.com/products/jdbc

Class.forName( “nama_driver” );

Catatan :

Pada Netbeans 6.5, sudah terdapat beberapa driver yang dapat digunakan langsung seperti Java DB, MySQL, dan PostgreSQL. Cara penggunaannya yaitu dengan mengklik kanan pada folder library dalam project yang dibuat kemudian pilih Add Library.., lalu pilih driver yang akan kita pakai.

Connection var_koneksi =

DriverManager.getConnection(“nama_URL”,”nama_user”,”password”);

Page 98: Modul PBO Finishing

94

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

stmnt.close();

DriverMana

ger.getCon

nection(“n

ama_URL”,”

nama_user”

,”password

”);

Penggunaan Database

Statement

Statement merupakan suatu class pada java yang digunakan untuk mengeksekusi suatu query, digunakan setelah menginisialisasi variable koneksi pada Connection di point ke-2. Inisialisasinya yaitu :

ResultSet

Setelah menginisialisai variabel statement maka selanjutnya menginisialisai variabel ResultSet yang nantinya akan digunakan untuk menyimpan suatu baris record pada database, dengan kata lain variabel ini merupakan pointer yang akan menunjuk suatu baris pada table.

Mengakhiri Koneksi.

Untuk menjaga keamanan data maka kita perlu mengakhiri koneksinya (misal variabel koneksinya conn) .

kasih liat contohnya dongg??

Mari kita buat aplikasi penjualan sederhana

Dibawah ini adalah penggunaan JDBC

Database: MySQL

Username: root

Password: „‟

Jalan di localhost.

Selanjutnya, pada project yang sudah kita buat sebelumnya yaitu Project javaaplication, lakukan sedikit perubahan pada kelas FormPenjualan dimana tombol submit dan textarea output dihapus dari panel dan tambahkan dua button baru dengan label dan nama variabel insert dan view, serta tambahkan satu komponen JTable dengan nama variabel tabel. Gambar dibawah adalah kelas FormInput setelah diedit.

Statement var_statement = conn.createStatement();

DriverManager.getConnection(“nama_URL”,”nama_u

ser”,”password”);

misal : variabel koneksinya yaitu conn , maka

Untuk mengakhiri suatu transaksi dengan menggunakan query dengan cara menutup variable statement yang sudah diinisialisasi.

misal : variable statementnya, stmnt

ResultSet var_set;

DriverManager.get

Connection(“nama_

URL”,”nama_user”,

”password”);

Caranyaa….

A.

B.

Caranyaa….

conn.close();

DriverManag

er.getConne

ction(“nama

_URL”,”nama

_user”,”pas

sword”);

CREATE DATABASE `db_barang` ;

CREATE TABLE `db_barang`.`tabel_barang` (

`nama` VARCHAR( 20 ) NOT NULL ,

`suplier` VARCHAR( 20 ) NOT NULL ,

`jumlah` INT NOT NULL

)

Nama databasenya db_penjualan

Page 99: Modul PBO Finishing

95 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Maka akan muncul tampilan seperti berikut.

Untuk merubah tampilan awal

tabel agar menyerupai contoh,

Klik kanan pada tabel, pilih Tabel

Contens

Nama kolom (title1,

title2, title3) dapat

diatur di sini.

Mengatur jumlah

kolom dan baris

Page 100: Modul PBO Finishing

96

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Setelah kelas FormInput diedit, tambahkan driver MySQL dengan cara klik kanan pada folder library, pilih Add Library, lalu pilih MySQL JDBC Driver kemudian klik add library.

Klik kanan pada folder

library, pilih Add Library

Kira-kira seperti apa ya kodenya?

package data;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import javax.swing.JOptionPane;

public class Database {

private String dbuser = "root";

private String dbpasswd = "";

private Statement stmt = null;

private Connection con = null;

private ResultSet rs = null;

private String error = "Communication Error”;

}

3

1

2

Lengkapilah kode disamping

dengan kode dibawah sesuai

nomor urutnya!

Page 101: Modul PBO Finishing

97 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Setelah membuat kelas Database, selanjutnya edit kelas barang dengan menambahkan 2 method baru, yaitu saveBarang dan getBarang. Berikut adalah potongan kode pada kelas Barang. Tambahkan import java.sql.ResultSet;

public Database(){

//Loads JDBC driver

try {

Class.forName("org.gjt.mm.mysql.Driver");

}catch(Exception e) {

JOptionPane.showMessageDialog(null,""+e.getMessage(),"JDBC Driver Error",JOptionPane.WARNING_MESSAGE);

}

try {

con = DriverManager.getConnection("jdbc:mysql://localhost/db_barang",dbuser, dbpasswd);

stmt = con.createStatement();

}catch (Exception e) {

JOptionPane.showMessageDialog(null,""+e.getMessage(),"Connection Error",JOptionPane.WARNING_MESSAGE);

}

}

1

public ResultSet getData(String SQLString){

try {

rs = stmt.executeQuery(SQLString);

}catch (Exception e) {

JOptionPane.showMessageDialog(null,"Error :"+ e.getMessage(),error ,JOptionPane.WARNING_MESSAGE);

}

return rs;

}

2

public void query(String SQLString) {

int i=0;

try {

stmt.executeUpdate(SQLString);

i=1;

}catch (Exception e) { JOptionPane.showMessageDialog(null,"error:"+e.getMessage(),error,JOptionPane.WARNING_MESSAGE);

}

return i;

}

3

Page 102: Modul PBO Finishing

98

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Setelah kelas Database dibuat dan kelas Barang diedit, selanjutnya perlu ditambahkan action listener pada button yang ada di kelas FormInput untuk menangkap even yang terjadi, dalam hal ini JButton insert dan view. Berikut adalah kode action listener untuk tombol insert dan view.

Selanjutnya lakukan deploy aplikasi ini dengan mengklik Run → Clean and Build Project atau tekan Shift + F11. Aplikasi dapat dijalankan dengan mengeksekusi file javaaplication.jar yang ada di folder dist pada project folder yang kita buat. Namun sebelumnya jalankan terlebih dahulu server MySQL nya.

Page 103: Modul PBO Finishing

99 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Insert barang

View barang

Page 104: Modul PBO Finishing

100

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Applet Apa itu Applet? Adalah suatu program yang didownload dari server untuk dijalankan di client. Dijamin aman, stabil, dan memungkinkan halaman web jadi lebih dinamis. Ada 4 method yang sering diturunkan dari superclass. Keempat method ini menentukan life-cycle dari applet dan disebut sebagai mile-stone method dari applet. Method init() Dengan demikian class Applet dapat dikembangkan dengan melakukan “override” pada metoda tersebut.

fase terakhir dari life-cycle applet.Ia dipanggil untuk melakukan pembersihan terhadap objek dari applet itu sendiri.Ia dipanggil ketika applet ditutup atau ketika suatu browser yang menampilkan applet ditutup.

berpasangan dengan method start().Berfungsi menghentikan applet tapi tidak menghapus dari memori.Ini misalnya ketika user pindah dari halaman browser yang menampilkan applet ke aplikasi lain. Pada saat itu applet akan dihentikan.

Untuk inisialisasi. Dipanggil pertama kali dan hanya sekali ketika applet dieksekusi. Merupakan awal dari life-cycle suatu applet.

Transmisi

ByteCode

init()

start()

stop()

destroy() inisialisasi

Page

aktif

Page

nonaktif

terminasi

Yang pertama kali dijalankan setelah init( ), memulai fase kedua dari life-cycle yaitu mulai menjalankan applet. Dijalankan berkali-kali. Setelah stop( ) akan dijalankan lagi

import java.applet.*;

public class MyApplet extends Applet {

public void init(){

//inisialisasi variabel dan lainnya

}

public void start(){

//lakukan bila page aktif

}

public void stop(){

// lakukan bila page akan nonaktif

}

public void destroy(){

//terminasi clean-up variabel dan lainnya sebelum applet selesai

}

}

Catatan: Mengganti (override) metoda init(), start(), stop() dan destroy() hanya dilakukan bila memang dibutuhkan oleh pembuat program.

Page 105: Modul PBO Finishing

101 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

Kelas java.applet. Applet juga merupakan subclass dari java.awt.Panel, sehingga applet sering menurunkan beberapa method dari superclass java.awt.Panel seperti method paint( ) dan update( ). Umumnya pada saat applet aktif, maka setelah applet menjalankan metoda start() kemudian otomatis akan memanggil metoda paint(), yaitu metoda untuk menampilkan grafik pada layar. Layar dan Frame

Applet membentuk layar berdasarkan dimensi WIDTH dan HEIGHT yang diberikan melalui parameter dari <APPLET>

Perhitungan dimensi layar dimulai dari layar sudut kiri paling atas, yaitu dimulai dengan (0,0), kemudian picel ke kanan (1,0), (2,0) dan seterusnya sampai dengan (WIDTH-1,0).

Baris berikutnya dimulai (0,1) dan seterusnya sampai dengan (WIDTH-1,1).

Dimensi terakhir adalah pixel sebelah kanan paling bawah, yaitu (WIDTH-1,HEIGHT-1).

Atribut HTML Applet

Applet dapat ditampilkan bersama HTML code dengan menggunakan HTML-TAG <APPLET> dan ditutup dengan </APPLET>.

Applet minimal memerlukan 3 parameter, yaitu:

code nama applet (class) width lebar layar (frame dan pixel) height tinggi layar (frame dan pixel)

Method update sebenarnya dipanggil oleh repaint(). Method ini dalam implementasi aslinya akan membersihkan tampilan applet dan kemudian memanggil paint().

Method ini adalah method terpenting dalam applet karena tanpa method ini, kita tidak dapat menampilkan apa-apa dalam applet.Method ini bisa dipanggil ribuan kali dalam life-cycle. Method ini dipanggil setiap applet perlu digambar ulang.

0,0 WIDTH-1,0

0, HEIGHT-1

init() start() paint()

Dimensi dari layar tersebut adalah WIDTHxHEIGHT. Program tidak boleh menggambar atau meletakkan obyek diluar dari dimensi tersebut, karena gambar tersebut tidak akan tampil di layar.

<APPLET CODE=Contoh WIDTH=300 HEIGHT=200>

</APPLET>

Contohnya adalah sebagai berikut

Melalui parameter pada APPLET, program java Applet dapat menerima nilai parameter tersebut dari HTML.

<APPLET CODE=Contoh WIDTH=300 HEIGHT=200> <PARAM NAME=namaparam1 VALUE=nilai1>

<PARAM NAME=namaparam2 VALUE=nilai2>

<PARAM NAME=namaparam3 VALUE=nilai3>

...

</APPLET>

Page 106: Modul PBO Finishing

102

Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010

Parameter dapat diberikan dalam jumlah yang tidak terbatas dan Java Applet menggunakan metoda getParameter() untuk membaca nama dan nilai parameter tersebut.

String str1,str2,str3;

str1 = getParameter(“namaparam1”).

str2 = getParameter(“namaparam2”).

str3 = getParameter(“namaparam3”).

Bila nama parameter tidak ditemukan, maka nilai string adalah null.

Perhatikan gambar di bawah ini

Dengan bentuk hasil output seperti di atas, kira-kira bagaimanakah kode programnya?

Page 107: Modul PBO Finishing

103 Modul Praktikum Pemrograman Berorientasi Objek

Common Laboratory 2009/2010

import java.applet.Applet;

import java.awt.*;

public class Contoh extends Applet implements Runnable {

String msg_1 = " Pemrograman Berorientasi Objek

(PBO)";

String msg_2 = " -----------Contoh Applet-----------

";

String s1,s2;

Thread t = null;

int state;

boolean stopFlag;

public void init() {

setBackground(Color.ORANGE);

setForeground(Color.BLACK);

s1 = getParameter("nama");

s2 = getParameter("jurusan");

}

public void start() {

t = new Thread(this);

stopFlag = false;

t.start();

}

public void run() {

char ch;

// Display banner

for( ; ; ) {

try {

repaint();

Thread.sleep(250);

ch = msg_1.charAt(0);

msg_1 = msg_1.substring(1, msg_1.length());

msg_1 += ch;

if(stopFlag)

break;

}

catch(InterruptedException e) {}

}

}

public void stop() {

stopFlag = true;

t = null;

}

public void paint(Graphics g) {

g.drawString(msg_1, 10, 60);

g.drawString(msg_2, 50, 40);

g.drawString("Nama Praktikan : " + s1, 20 , 100);

g.drawString("Jurusan : " + s2, 20 , 120);

}

}

<APPLET CODE=Contoh WIDTH=300 HEIGHT=200>

<PARAM NAME=nama VALUE="Siapa Ya Namanya">

<PARAM NAME=jurusan VALUE="Teknik Informatika">

</APPLET>

Untuk menjalankan di web browser,

applet harus dimasukkan ke dalam

kode HTML.