Anda di halaman 1dari 107

Asisten

113060117 Innasya Dewi K.


113060132 Rangga K. P.
113060140 Fajar
113060123 Artha This is Property of
61307001 Alfian
61307002 M. Abubakar Name
113070103 Kuni Kiswati
113070213 Indah Rosita ID
113070311 Anung W.
113070316 Ni Luh Putu K.
113071007 Fransiska Amalia
113098023 Saputra Aries P.
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
What’s inside of this?

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


Modul 1
Pengenalan Java

Tujuan:
Apa itu Java?
1. Tahu dan kenal bahasa Java merupakan salah satu bahasa pemrograman
pemrograman Java. yang unggul dibandingkan dengan yang lain. Karena
Java merupakan filter-filter dari bahasa
2. Tahu cara instalasi dan konfigurasi pemrograman yang ada sebelumnya.
Java.
Java dikenal sebagai bahasa pemrograman “Modern”
3. Ngerti dan bisa implementasiin tipe karena kemampuannya untuk mendukung OOP
data, variabel, dan konstanta.
dan mempermudah pemrograman aplikasi
multithreading.
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

Bagaimanakah sejarahnya?
Java dibuat karena ingin
membuat sebuah bahasa
pemrograman yang bersifat
portable dan platform
independent (tidak
Di tahun 1995 tergantung mesin dan sistem
operasi), sehingga bisa
digunakan untuk membuat
software yang bisa ditanam
*Di tahun 1996 Java pada berbagai peralatan
James diadopsi Netscape elektronik customer biasa.
Patrick
Gosling Naughton

Modul Praktikum Pemrograman Berorientasi Objek


1
Common Laboratory 2009/2010
Versi-versi JSDK (Java Software Development Kit)

Ada fitur lightweight database


1997, tambahan event model, system, Derby.
Mendukung koneksi ke internasionalisasi, dan JavaBeans Derbymerupakan
databse dan objek tersebar pengembangan basisdata
Apache

Ada fasilitas asersi untuk


1998, ada toolkit “Swing” yang
mendukung design-by-contract
mendukung GUI (Graphical UI)
Ada fitur generics
(parameterized type),
Direlease tahun 2000 enumeration, dan
metadata

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.

2 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Garbage Collector pada Java
Pernah Dengar Garbage
Collector? Program Java melakukan garbage collection sehingga
programmer tidak perlu menghapus objek-objek yang
Ketika kita membuat program tidak digunakan lagi secara manual. Java interpreter
menggunakan bahasa pemrograman yang melakukan pemeriksaan untuk mengetahui apakah objek
memiliki struktur data dinamis maka ia harus di memori masih diacu oleh program. Java interpreter akan
memilki suatu cara untuk memberi sistem mengetahui objek yang telah tidak dipakai oleh program.
operasi [tempat dia berjalan], saat dia Ketika Java interpreter mengetahui objek itu, maka Java
memerlukan memori tambahan ataupun
tidak butuh memori lagi.
interpreter akan memusnahkan secara aman.

Ketika sebuah program sudah minta memori Java garbage collector berjalan sebagai thread berprioritas
dari sistem operasi, biasanya memori tidak rendah dan melakukan kerja saat tidak ada kerja lain di
pernah lagi dikembalikan tapi dipegang program. Umumnya, Java garbage collector bekerja saat
untuk dipake lagi sama program yang kita
idle pemakai menunggu masukan dari keyboard atau
buat tadi. Nah, siapakah yang mengelola hal
itu? Garbage Collector [salah satu pengelola mouse. Garbage collector akan bekerja dengan prioritas
penyimpanan]. tinggi saat interpreter kekurangan memori. Hal ini jarang
terjadi karena thread berprioritas rendah telah melakukan
tugas dengan baik secara background.

Instalasi Java
Ekstraksi
1
file installer berupa self-
installing file, berupa .exe
kalau dijalankan dia
sudah ekstrak dirinya
untuk dikopikan ke
direktori.
Pilih default untuk
direktori instalasi.

Modul Praktikum Pemrograman Berorientasi Objek


3
Common Laboratory 2009/2010
sediakan space minimal 300
2 MB

4 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 startcontrol panelSystem, 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

Modul Praktikum Pemrograman Berorientasi Objek


5
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


nama kelas (nama program) #include<conio.h>
public class Hello { #include<stdio.h>
public static void main(String args[]) void main()
Main { {
program System.out.print("Hello World");
printf("hello word");
}
getch();
}
}
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.

6 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


Berbentuk angka atau bilangan. Terdiri atas dua kategori:
Akan terjadi
1. Integer (Bil. Bulat), bilangan yang tidak mengandung angka pecahan.
2. F loat (Bil. Pecahan), bilangan yang mengandung angka pecahan. masalah dalam
tipe data ketika
terdapat dua tipe
Berbentuk karakter atau deretan karakter. Terdiri atas dua kategori: data yang berbeda
1. Karakter tunggal (char). dan saling
2. Deretan karakter (String). berhubungan.

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

Solusinyaa….

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

Rules in Conversion Salah satu contoh konversi, silahkan cari contoh konversi lainnya

Modul Praktikum Pemrograman Berorientasi Objek


7
Common Laboratory 2009/2010
Casting
Dilakukan karena tidak bisa dilakukan konversi. Dilakukan secara manual oleh user.

Dilakukan casting karena


variabel “shortAmount”
memiliki range < variabel
“intAmount”

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

tipe referensi, meliputi tipe variabel data : tipe


tipe primitif, meliputi : tipe boolean, tipe class, tipe array, tipe interface. Ada pula tipe
numerik (yang meliputi : byte, short, int, variabel data yang khusus yang disebut null
long, char, float, double) dan tipe karakter types, namun variable dalam Java tidak akan
(char). pernah memiliki tipe null ini.

Bagaimana bentuk umum pendeklarasiannya?


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

Contohnyaa...
int dataint;
char chardata; Aturan Penamaan Variabel di
float x = 12,67; Java
1. Harus terdiri atas sederetan karakter
Unicode yang diawali oleh karakter
format nama variable huruf atau garis bawah. Unicode
merupakan system penkodean karakter
1. Diawali dengan huruf kecil. yang dapat dibaca oleh berbagai
2. Jika nama variable lebih dari satu kata, bahasa manusia.
kata ke-2, ke-3, dst, diawali dengan huruf 2. Tidak boleh berupa keyword (kata yang
capital dan ditulis menyatu. dicadangkan), null, atau literal
true/false.
Harus unik dalam suatu scope

8 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
Anggap array sebagai sebuah deretan
rumah pada sebuah jalan, dan
rumah-rumah tersebut memiliki
Data Data 1 Data 2 Data 3 …. Data N
bentuk yang sama. Untuk
Index 0 1 2 …. N-1 membedakan rumah yang satu
dengan yang lain maka dibutuhkan
Elemen variabel array Urutan Elemen variabel sebuah nomor. Nomor itulah yang
kemudian kita kenal sebagai index.
array (Harus unik)

Gimana cara pendeklarasiannya?

Bentuk umumnya…
tipeData[] namaVariable [= new tipeData [jumlahElemen] ];
[atau]
tipeData namaVariable[] [= new tipeData [jumlahElemen] ];

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

Caranya
1
int[] namaVariableArray; namaVariableArray = new int[7];
Kalo jumlah elemen belum dipesan, kita gak
Memesan jumlah elemen di salah satu baris
bisa pake variable array untuk nyimpen
data.

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

3
int[] varibleArray3 = {5, 3, 23, 99, 22, 1, 6}; Variabel array ini memiliki 7
elemen. Di mana setiap elemen
int[] variableArray3 = new int[]{1,23,45,4,3,7,8};
sudah terisi data.

Modul Praktikum Pemrograman Berorientasi Objek


9
Common Laboratory 2009/2010
Gimana cara Aksesnya?
pertama, kita udah bisa deklarasiin. int[] numbers = new int[3];
Sekarang, saatnya buat kasih nilai ke array
dan ambil nilai dari array itu. Let‟s take a look. numbers[0]=34;

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


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

10 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Array 2 Dimensi
Bagaimana bentuk umumnya?
tipeData[][] namaVariable [= new tipeData[jumlahBaris][jumlahKolom]];
(atau)
tipeData namaVariable[][] [= new tipeData[jumlahBaris][jumlahKolom]];

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.

Deklarasi variabel array 2 dimensi

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


numbers.length;
numbers[i].length;
Memperlihatkan jumlah baris
Memperlihatkan jumlah kolom pada baris ke-i

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

Modul Praktikum Pemrograman Berorientasi Objek


11
Common Laboratory 2009/2010
Operator, Statement kondisional, dan Iterasi pada Java

Operator

Operator Aritmatika Jenis Operator Aritmatika

Operator ini digunakan Operator Contoh Keterangan


pada operasi-operasi
aritmatika seperti
penjumlahan,
pengurangan,
pembagian dll.

Operator Relasional
Jenis Operator Relasional

Untuk membandingkan 2 nilai Operator Contoh Keterangan


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

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

12 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Operator Shift dan Bitwise Jenis Operator Shift dan Bitwise
Operator Shift
Kedua operator ini digunakan untuk
memanipulasi nilai dari bitnya,
sehingga diperoleh nilai yang lain.

Operator Bitwise

Operator Assignment Jenis Operator Assignment


Operator Contoh Ekivalen dengan
Operator assignment dalam Java digunakan
+= a += b a=a+b
untuk memberikan sebuah nilai ke sebuah
-= a -= b a=a-b
variable. Operator assignment hanya berupa
„=‟, namun selain itu dalam Java dikenal *= a *= b a=a*b
beberapa shortcut assignment operator yang /= a /= b a=a/b
penting. %= 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
Pernyataan kondisional

Statement if

Statement if memungkinkan sebuah program untuk


dapat memilih beberapa operasi untuk di eksekusi,
if (ekspresi_kondisional){ berdasarkan beberapa pilihan. Dalam bentuknya
statement1;
yang paling sederhana, bentuk if mengandung sebuah
statement2;
… pernyataan tunggal yang dieksekusi jika ekspresi
} bersyarat adalah benar

Modul Praktikum Pemrograman Berorientasi Objek


13
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 Bentuk statement if– else dengan beberapa
pilihan operasi pemrosesan : pilihan operasi pemrosesan

if (ekspresi_kondisional){ if (ekspresi_kondisional_A){
statement1; statement1;
statement2; statement2;
… …
}else{ }else if (ekspresi_kondisional_B){
statement1; statement1;
statement2; 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 + ".");


}
}

14 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Statement switch

Bentuk umum pernyataan switch


switch ( expression ) {
case value_1:
statement1; case: menandai posisi kode di mana
statement2;
eksekusi dilaksanakan.
. . .
break;
case value_2: value_1, dst.: konstanta integer atau
statement1; konstanta karakter, ataupun
statement2; ekspresi yang mengevaluasi
. . . keduanya.
break;
[default: ] default: sama kayak “else” pada
statement1;
statement2; statement if.
. . .
break;}}

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

Modul Praktikum Pemrograman Berorientasi Objek


15
Common Laboratory 2009/2010
Ekspresi bersyarat (Ternary Operator)

Kita menggunakan sebuah ekspresi bersyarat


untuk menggantikan sebuah bentuk if-else. Arti dari sintaks di sebelah sama dengan:
Sintaks adalah sebagai berikut: if (exp1==true) then exp2 else exp3

exp1 ? exp2 : exp3

public class TernaryExample{


Berapakah outputnya?
public static void main (String args[]){
int x=3, y=6, m; Answer:
int a=2,b=3,c=4;
m = x > y ? x : y;
System.out.println(m);}
}

Statement Iterasi (Perulangan)

While Do For
while( expression ){ do { for (initialization;expression;step){
statement1; statement1; statement1;
statement2; statement2; statement2;
....... ....... ...
} } while(expression) }
while ( expression );
Selama expression benar, while akan Hasil dari while akan dikembalikan kepada
dieksekusi do

Pada java terdapat 2 statement


yang biasanya digunakan pada
public class Angka{ setiap bentuk iterasi diatas.
public static void main (String[] args){ Statement tersebut yaitu:
int i; , dapat menghentikan
for(i=1;i<=10;i++){ perulangan walaupun kondisi
System.out.println(Integer.toString(i)); untuk berhenti belum
} terpenuhi.
i=1;
while(i<=10){ , dengan statement ini
System.out.println(Integer.toString(i)); kita bisa melewatkan operasi
} yang dilakukan dalam iterasi
do{ sesuai dengan kondisi tertentu.
System.out.println(Integer.toString(i));
i++;
}while(i<=10)
}
}

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

Modul Praktikum Pemrograman Berorientasi Objek


17
Common Laboratory 2009/2010
Modul 2
Object Oriented Programming (OOP) I

Tujuan:
Apa itu OOP?
1. Mengerti konsep dasarnya. Merupakan teknik membuat suatu program
2. Bisa membandingkan pemrograman berdasarkan objek dan apa yang bisa dilakukan
objek tersebut.
berorientasi objek dengan prosedural.

3. Ngerti dan bisa implementasiin Class, Object-oriented program terdiri dari objek-objek yang
Object, Method, dan Constructor berinteraksi satu sama lain untuk menyelesaikan
sebuah tugas.
pada program sederhana.

Kenapa menggunakan OOP?


OOP Pemrograman prosedural

Kode-kode di-breakdown agar lebih mengatur program dalam barisan-barisan linier


mudah di-manage. Breakdown yang bekerja dari atas ke bawah. Kumpulan
berdasarkan objek-objek yang ada tahapan yang dijalankan setelah yang lain
pada program tersebut. berjalan.

Dianjurkan diimplementasikan Baik untuk program kecil yang berisi sedikit code.
untuk program dengan berbagai
ukuran karena lebih mudah untuk Tidak dianjurkan diimplementasikan pada
men-debug. program berukuran besar, karena susah untk di-
manage dan di-debug.

Apakah OOP punya karakteristik?


Abstraksi Ciri-ciri (atribut): punya
tangan, berat, tinggi, dll.. (kata
Menemukan hal-hal yang penting pada suatu
objek dan mengabaikan hal-hal yang sifatnya benda, atau kata sifat)
insidental.

Tentukan apa ciri-ciri (atribut) objek.


Fungsi (method) : makan,
Tentukan apa yang bisa dilakukan objek.
minum, berjalan, dll. (kata
kerja)

Contoh abstraksi pada manusia

18 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
Pedal rem tidak bisa digunakan untuk
berhak.
mengakses system transmisi
Enkapsulasi ini melindungi proses dari
interferensi atau penyalahgunaan dari luar System transmisi mobil yang
sistem. menyembunyikan bagaimana
cara dia bekerja mengatur
Tongkat transmisi merupakan
percepatan. interface untuk mengatur
Fungsi:
system transmisi. Menaikkan
Modularitas percepatan, dsb.
Modularitas (modularity) berarti objek dapat
dikelola secara independen. Karena kode Data Hiding (Penyembunyian Data)
sumber bagian internal objek dikelola secara Mengacu pada perlindungan data
terpisah dari antarmuka, maka kita bebas internal objek. Objek disusun dari
melakukan modifikasi yang tidak menyebabkan antarmuka public dan bagian private
masalah pada bagian-bagian lain. Manfaat ini yang merupakan kombinasi data dan
mempermudah mendistribusikan objek-objek di method internal. Manfaat utamanya
sistem. adalah bagian internal dapat berubah
tanpa mempengaruhi bagian-bagian
program yang lain.

Pewarisan (Inheritance)

Proses penciptaan kelas baru (subclass/kelas turunan)


Televisi
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 Televisi Televisi Televisi
perilaku yang kita butuhin. layar datar
tabung plasma

Contoh inheritance

Modul Praktikum Pemrograman Berorientasi Objek


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

Bagaimana cara objek


tersebut saling berkomunikasi
dan berinteraksi? Bagaimana
Lonely object is useless caranya?

Object needs each other

Message + info Object A berkomunikasi dengan Object B.


Object A meminta Object B melakukan sesuatu
Object B untuknya.
Object A
Object A kirim pesan disertai informasi ke Object B
FYI, info yang dikirim bersama message
adalah parameter message

Polymorphism

Polymorphism berasal dari bahasa Yunani yang


berarti banyak bentuk.

Konsep ini memungkinkan digunakannya suatu


A B
antarmuka (interface) yang sama untuk
Kedua mobil di atas sama-sama punya setir, pedal
memerintah suatu objek agar dapat
melakukan suatu aksi atau tindakan yang transmisi, rem, gas, dsb.
mungkin secara prinsip sama tapi secara proses
berbeda. Kita kendarai mobil A, tekan pedal gas kemudian mobil
A akan bergerak sangat cepat.
Seringkali Polymorphism disebut dalam istilah
“satu interface banyak aksi”. Mekanisme
Polymorphism dapat dilakukan dengan Sedangkan, ketika kita kendarai mobil B, tekan
dengan beberapa cara, seperti overloading pedal gas, yang terjadi adalah sebaliknya.
method, overloading constructor, maupun
overriding method. Semua akan dibahas pada Berarti, kedua mobil sama-sama punya pedal gas,
bab selanjutnya.
tapi memiliki hasil akhir yang berbeda

20 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Java Modifier
Apa itu modifier Berlaku untuk
dan kenapa kita Kelompok Modifier Meliputi
butuh itu? Class Method Variabel

Access modifier √ √ √ public, protected,


Modifier merupakan
private, dan friendly
bentuk
(default/ tak ada
pengimplementasian
modifier).
konsep enkapsulasi.
Dengan adanya Final modifier √ √ √ final
modifier maka class,
interface, method, Static modifier √ √ static
dan variabel akan
terkena suatu Abstract modifier √ √ abstract
dampak tertentu.
Syncronized modifier √ synchronized

Native modifier √ native

Storage modifier √ transient dan volatile

Access Modifier :

Modifier Class dan Interface Method dan Variabel

Default (tak ada modifier ) Dikenali di paketnya Diwarisi subclass di paket yang sama
dengan superclassnya. Dapat diakses oleh
Friendly method-method di class-class yang sepaket.

Public Dikenali di manapun Diwarisi oleh semua subclassnya.


Dapat diakses dimanapun.

Protected Tidak dapat Diwarisi oleh semua subclassnya.


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

Private Tidak dapat Tidak diwarisi oleh subclassnya


diterapkan
Tidak dapat diakses oleh class lain.

Modul Praktikum Pemrograman Berorientasi Objek


21
Common Laboratory 2009/2010
Permitted Modifier:

Modifier Class Interface Method Variabel

Abstract Class dapat Optional untuk Tidak ada method body Tidak dapat diterapkan.
berisi method dituliskan di yang didefinisikan. Method
abstract. Class interface memerlukan class kongkret
tidak dapat karena yang merupakan subclass
diinstantiasi interface secara yang akan
inheren adalah mengimplementasikan
Tidak
abstract. method abstract.
mempunyai
constructor

Final Class tidak Tidak dapat Method tidak dapat Berperilaku sebagai
dapat diterapkan. ditimpa oleh method di konstanta
diturunkan. subclass-subclassnya

Static Tidak dapat Tidak dapat Mendefinisikan method Mendefinisikan variable milik
diterapkan. diterapkan. (milik) class. Dengan class. Dengan demikian, tidak
demikian tidak memerlukan instant object
memerlukan instant object untuk mengacunya. Variabel
untuk menjalankanya. ini dapat digunakan
Method ini tidak dapat bersama oleh semua instant
menjalankan method yang objek.
bukan static serta tidak
dapat mengacu variable
yang bukan static.

synchronized Tidak dapat Tidak dapat Eksekusi dari method Tidak dapat diterapkan
diterapkan. diterapkan. adalah secara mutual pada deklarasi. Diterapkan
exclusive diantara semua pada instruksi untuk
thread. Hanya satu thread menjaga haya satu thread
pada satu saat yang dapat yang mengacu variable pada
menjalankan method satu saat.

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

Transient Tidak dapat Tidak dapat Tidak dapat diterapkan. Variable tidak akan
diterapkan. diterapkan. diserialisasi

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

22 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Bagaimana cara mendeklarasi modifier dalam java? Deklarasi modifier di class/interface
[Modifier] class/interface [nama class/interface]
[Modifier][TypeData][nama Atribut]; Deklarasi modifier di atribut
[Modifier]{[TypeData]}[nama method](parameter_1,parameter_2,parameter_n)
{}
Deklarasi modifier di method

Contoh :
public class Manusia {} Contoh modifier di class
private int tinggi; Contoh modifier di atribut

public int getTinggi(){} Contoh modifier di method

Class dan Object


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

Kita bisa membuat banyak objek dari satu - nama : String


macam class. Class mendefiniskan sebuah tipe
dari objek. - umur : int

Di dalam class kita dapat mendeklarasikan + setNama : void


variabel dan menciptakan objek (instansiasi).
Sebuah class mempunyai anggota yang terdiri + getNama : String
dari atribut dan method.
+ setUmur : void
Atribut adalah semua field identitas yang kita
berikan pada suatu class, misal class manusia
+ getUmur : int
memiliki field atribut berupa nama dan umur.

Method dapat kita artikan sebagai semua


fungsi ataupun prosedur yang merupakan
perilaku (behaviour) dari suatu class.
Keterangan tanda :
- artinya memiliki access modifier private
Bagaimana mengaplikasikan class diagram di + artinya memiliki access modifier public
# artinya memiliki access modifier protected
atas dalam program?

Modul Praktikum Pemrograman Berorientasi Objek


23
Common Laboratory 2009/2010
Contoh implementasi di dalam program:
public class Manusia {

//definisi atribut

private String nama; Kesepakatan umum penamaan:


private int umur; 1) Nama Class – gunakan kata benda dan huruf pertama dari
tiap kata ditulis dengan huruf besar dan umumnya memiliki
access modifier public : Manusia.
//definisi method 2) Pada umumnya, atribut diberi access modifier private, dan
method diberi access modifier public. Hal ini diterapkan
public void setNama(String a){ untuk mendukung konsep OO yaitu enkapsulasi mengenai
data hiding. Jadi, kita tidak langsung menembak data/
nama=a; 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
public String getNama(){ 4) Nama Method – gunakan kata kerja; kecuali huruf yang
pertama, huruf awal tiap kata ditulis kapital : getNama(),
return nama;
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)
public void setUmur(int a){ 6) Untuk method yang akan mengambil nilai dari atribut,
nama method ditambah dengan kata kunci ”get” :
umur=a; getUmur(), getNama()
} 7) Konstanta - Semuanya ditulis dengan huruf besar; pemisah
antar kata menggunakan garis bawah: MAX_VALUE,
DECIMAL_DIGIT_NUMBER

public int getUmur(){

return umur;

24 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Object
Object (objek) secara lugas dapat diarikan
sebagai instansiasi atau hasil ciptaan dari
mencetak
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, Objek mobil terdiri atas


sebuah objek dapat dimungkinkan terdiri atas
objek-objek lain.
mesin
atau, bisa jadi sebuah objek merupakan
turunan dari objek lain, sehingga mewarisi
sifat-sifat induknya dan memiliki sifat
tambahan
pintu
Keyword “new”
ban
“new” digunakan untuk melakukan instansiasi/
Kerangka mobil
membuat sebuah object baru.

Manusia objekManusia = new Manusia();

Membuat objek manusia

Contoh disamping merupakan contoh objek


Kendaraan Bermotor
yang merupakan turunan dari objek lain serta
memiliki sifat tambahan pada dirinya.

Coba jelaskan dengan kata-katamu sendiri


gambar di samping…!

Answer:

Modul Praktikum Pemrograman Berorientasi Objek


25
Common Laboratory 2009/2010
Method dan Constructor

Apa itu method?


Method biasa kita kenal sebagai function dan
public int jumlahAngka(int x, int y){
procedure. Dikatakan fungsi bila method
tersebut melakukan suatu proses dan int z = x+y;
mengembalikan suatu nilai (return value), dan
dikatakan prosedur bila method tersebut return z;
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)


[modifier]Type-data namaMethod(parameter1,parameter2,…parameterN)
{
Deklarasi-deklarasi dan proses ;
return nilai-kembalian;
}

Deklarasi method yang tidak mengembalikan nilai (prosedur)

[modifier]void namaMethod(parameter1,parameter2,…parameterN)
{
Deklarasi-deklarasi dan proses ;
}

Ada dua cara melewatkan argumen ke method, yaitu:


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

26 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Melewatkan secara Referensi (Pass by Reference) public class TestPass {
int i,j;
public TestPass(int a,int b) {
Digunakan pada array dan objek. Prosesnya isi i =a;
memory pada variable array dan objek j = b;
merupakan penunjuk ke alamat memory yang }
mengandung data sesungguhnya yang akan
dioperasikan. Dengan kata lain, variable array //passing by value
public void calculate(int m,int n) {
atau objek menyimpan alamat memory bukan isi m = m*10;
memory. Akibatnya, setiap perubahan variable di n = n/2;
dalam method akan mempengaruhi nilai pada }
variable asalnya.
//passing by reference
public void calculate(TestPass e) {
Bagaimanakah keluaran dari program di bawah?
e.i = e.i*10;
e.j = e.j/2;
}
}

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

Modul Praktikum Pemrograman Berorientasi Objek


27
Common Laboratory 2009/2010
Answer: Keterangan
Nilai sebelum passed by value :
x = 10 Pada saat pemanggilan method calculate() dengan
y = 20 metode pass by value, hanya nilai dari variable x dan y
Nilai sesudah passed by value : saja yang dilewatkan ke variable m dan n , sehingga
x = 10 perubahan pada variable m dan n tidak akan mengubah
y = 20
nilai dari variable x dan y.
Nilai sebelum passed by reference :
z.i = 50 Sedangkan pada saat pemanggilan method calculate()
z.j = 100
Nilai sesudah passed by reference : dengan metode pass by reference yang menerima
z.i = 500 parameter bertipe class Test. Pada waktu kita memanggil
z.j = 50 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.

Constructor
Tipe khusus method yang digunakan untuk
menginstansiai atau menciptakan sebuah objek.

Nama constructor = nama kelas. Deklarasi Constructor:


Constructor TIDAK BISA mengembalikan nilai.

Tanpa membuat constructor secara eksplisit-pun, [modifier] namaclass(parameter1){


Java akan menambahkan constructor default Body constructor;
secara implisit. Tetapi jika kita sudah }
[modifier] namaclass(parameter1,parameter2){
mendefinisikan minimal sebuah constructor, maka Body constructor;
Java tidak akan menambah constructor default. }
[modifier] namaclass(parameter1,parameter2,…,parameterN){
Body constructor;
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.

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

Hasil output adalah seperti ini:


Nama : Markonah Coba Anda analisis mengapa hasilnya seperti di samping ?
Umur : 76 Apakah program di atas constructornya eksplisit atau
implisit?
Nama : Mat Conan
Umur : 0 Answer:

Nama : Bajuri
Umur : 13

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.

Modul Praktikum Pemrograman Berorientasi Objek


29
Common Laboratory 2009/2010
Keyword “this”

Apa itu? Kapan dipake?


Suatu besaran referensi khusus yang
Ketika nama atribut yang sama
digunakan di dalam method yang dirujuk
dengan nama variable lokal, maka
untuk objek yang sedang belaku. Nilai this,
gunakan lah this.namaAtribut untuk
sedang berjalan dipanggil.
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:


Judul : Dance Beside
Pencipta: All American Reject 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
FYI, Keyword this juga dapat digunakan
mengakses property judul dan band di dalam method
untuk memanggil suatu konstruktor dari IsiParam() tersebut. Apa yang terjadi jika pada method
konstruktor lainnya. IsiParam() keyword this dihilangkan?

30 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
public class Buku { Keyword this untuk memanggil
private String pengarang;
private String judul; constructor yang menerima
dua parameter
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();
}
}
Hasil output adalah seperti ini:
Judul : Edensor , Pengarang : Andrea Hirata

Judul : The Naked Traveller , Pengarang : Trinity

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.

Modul Praktikum Pemrograman Berorientasi Objek


31
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
Keuntungan pengorganisasian
Yang paling penting dari inner class adalah
bahwa dengan inner class kita bisa Dari sudut pandang
meng‟objekkan‟ sesuatu yang awalnya tidak pengorganisasian, inner class
bisa dianggap sebagai objek. Hal ini memungkinkan kita mengatur
memungkinkan code menjadi lebih object- struktur paket. Daripada
oriented daripada ketika tidak menggunakan menjadikan segala sesuatu menjadi
inner class. Karena setiap instansiasi inner class
flat-package, kelas dapat
merupakan instansiasi dari top-level classnya
juga, maka objek inner class juga memiliki disarangkan dalam kelas lain.
akses ke setiap member dan method kelas
induknya.
Hirarki tanpa inner class
Hirarki dengan inner class
package
package

class1 class2 class3 classN class2

Class3
class1

Modul Praktikum Pemrograman Berorientasi Objek innerclassB


Common Labz 2008-2009. innerclassC
http://java.lyracc.com innerclassA
http://battleprogrammer.wordpress.com
http://www.javaworld.com
http://bernazlionk.wordpress.com
http://www.wikipedia.org
http://one.indoskripsi.com

32 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Modul 3
Object Oriented Programming (OOP) II
Pada Modul 2, kita sudah mempelajari dasar-dasar
Tujuan: OOP. Di modul ini kita akan mempelajari OOP
lebih dalam. Mari kita mulai dari Inheritance.
1. Mengerti konsep OOP lebih dalam.
Inheritance
2. Ngerti konsep dan bisa implementasiin

inheritance, polymorphisme, interface, Apa itu inheritance?


dan abstract class pada program.
Pewarisan merupakan proses peciptaan kelas baru
3. Ngerti perbedaan class dengan dengan mewarisi karakteristik kelas yang sudah
ada, ditambah dengan karakteristik unik kelas
interface, interface dengan abstract
baru itu.
class.
Sebelumnya inheritance sudah dijelaskan pada
modul 2.
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”

Modul Praktikum Pemrograman Berorientasi Objek


33
Common Laboratory 2009/2010
Pendeklarasian Inheritance
[modifier] class NamaKelasInduk {
// deklarasi konstanta
// deklarasi method
}
[modifier] class NamaKelasAnak extends NamaKelasInduk{
// deklarasi konstanta
// deklarasi method
}

Dibawah ini kita akan membuat kelas Balok


public class PersegiPanjang{ sebagai kelas turunan dari kelas PersegiPanjang
private int panjang;
private int lebar; public class Balok extends PersegiPanjang{
private int tinggi;
public void setPanjang(int p){
panjang=p; public void setTinggi(int t){
} tinggi=t;
public void setLebar(int l){ }
lebar=l; public int getTinggi(){
} return tinggi;
public int getPanjang(){ }
return panjang; public int Volume(){
} int v=getPanjang()*getLebar()*tinggi;
public int getLebar(){ return v;
return lebar; }
} }
public int Luas(){
int luas=panjang*lebar;
return luas;
}
}
Output dari program:

Bagaimanakah bentuk
program utama agar output
yang dihasilkan seperti di
samping?

34 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Answer:
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());
}
}

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 void setHarga(int harga){}


Yang penting tipe data dalam
public void setHarga(double harga){}
parameter method yang dioverload
public void setHarga(float harga){} itu HARUS BERBEDA!!!

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

Modul Praktikum Pemrograman Berorientasi Objek


35
Common Laboratory 2009/2010
public class Phone{
private String merk;
private int harga; overloading konstruktor, disini
terdapat 3 konstruktor
public Phone(){
} dengan nama sama dengan
public Phone(String merk){ parameter inputan yang
this.merk=merk;
berbeda
}
public Phone(String merk, int harga){
this.merk=merk; overloading method, disini
this.harga=harga; terdapat dua method
}
dengan nama sama dengan
public void isiPhone(String merk){
this.merk=merk; parameter inputan yang
} berbeda
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("");
}
}

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(); Output dari program:
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();
}
}

36 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:

Modul Praktikum Pemrograman Berorientasi Objek


37
Common Laboratory 2009/2010
Abstract Class
Apa itu Abstract class? Bentuk Umum:

kelas murni yang tidak boleh memiliki objek, [modifier] abstract class NamaKelas {
dan satu/lebih method-methodnya yang // deklarasi attribute
abstract harus diimplementasikan (override) // definisi/prototype method
oleh kelas turunannya. }

Sebuah kelas Dosen bisa diinstansiasi menjadi Seperti apakah bentuk Hewan?
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.
Ini?
Ini? Ini?

Bila kelas MahlukHidup mempunyai method


bernafas, maka tidak dapat ditentukan cara Ketika kamu sudah tidak bisa membayangkan
suatu mahluk hidup tersebut bernafas bagaimana bentuk suatu kelas seperti
(dengan paru-paru, insang, atau stomata),
MakhlukHidup atau pun Hewan karena terlalu
method seperti inilah yang disebut method
abstract. Dibutuhkan kelas turunan yang abstraknya/terlalu umum, maka kelas tersebut
khusus dan method override dari method bisa dijadikan kelas abstrak.
yang abstract.

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

38 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:

Modul Praktikum Pemrograman Berorientasi Objek


39
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?


[modifier] interface NamaInterface {
// deklarasi konstanta
// deklarasi method

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

Bagaimana bentuk Implementasinya?


[modifier] class NamaKelas implements NamaInterface {
// penggunaan konstanta
// implementasi method
}

public class PhoneImpl implements TkPhone{


public interface TkPhone{ public int getHarga(int id){
static final String MAKER= "YES-KIA"; int hr=0;
public int getHarga(int id); if (id==1){
} hr=500;
}
Output dari program: 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));
}
}

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

Modul Praktikum Pemrograman Berorientasi Objek


41
Common Laboratory 2009/2010
Modul 4
Exception, I/O, dan Operasi File

Tujuan: Sering kali, ketika menjalankan sebuah program


kita menemukan kesalahan. Kesalahan itu bisa
berasal dari hardware, software, atau bahkan
1. Mengerti konsep exception, I/O, dan
dalam algoritma atau kesalahan logika itu sendiri.
operasi file.
Nah, jadi masing-masing kesalahan punya solusi
2. Bisa implementasiin konsep exception yang beda-beda dan teknik penanganannya juga
dan I/O dalam sebuah pemrograman berbeda-beda untuk kesalahan yang satu dengan
yang lain.
sederhana untuk operasi file dengan
Untuk itu, mari kita bahas satu-satu kesalahan
tepat.
yang ada.

Kesalahan itu ada apa aja sih?


Kesalahan Hardware dan Software

Hardware saja Software saja


Jika sebuah aplikasi berusaha membuka Ketika kode berusaha mengakses sebuah
sebuah file yang gak ada, misalnya ngirimin elemen yang di luar ikatan array atau
karakter ke printer yang belom kita nyalain
atau ketika berkomunikasi dengan port serial berusaha nyimpen nilai yang ngelewatin
yang gak merespon. kapasitas format data.

Biasanya, kesalahan menyangkut hardware Kesalahan yang terkait sama software,


dideteksi dan dilaporkan oleh sistem. 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.

42 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Kesalahan Algoritma konversi
decimal binary
berhubungan dengan kesalahan atau
keterbatasan intrinsik dari pemodelan dunia-
nyata yang dilakukan oleh komputer.
Menggunakan perkiraan binary terbaik
Untuk mengatasi kesalahan pembulatan dan untuk pecahan decimal menurut
pemotongan pada berbagai algoritma
panjang kata mesin tersebut.
muncullah disiplin ilmu bernama analisa
numerik.
Perkiraan yang dilakukan oleh komputer
Jenis kesalahan ini adalah yang paling sering
bisa menyebabkan kesalahan pembulatan
diabaikan oleh programmer.
yang bisa menyebar dalam perhitungan
dan mengakibatkan kesalahan hasil.

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.
Tidak ditangani dengan Superclass tertinggi
menggunakan block try-catch
Eksepsi yang sebaiknya
karena berhubungan dengan java
ditangani oleh program kita
run-time system.
secara langsung.

Semua class exception terdapat dalam package java.lang.

Exception yang tidak dicek class RuntimeException


{
public static void main (String [] args)
Semua yang bertipe Runtime Exception dan {
turunannya tidak harus ditangani dalam int[] arr = new int[1];
program kita. System.out.println(arr[1]);
}
}
Outputnya:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at RuntimeException.main(RuntimeException.java:6)

Terjadi kesalahan ArrayIndexOutOfBoundsException karena array pada contoh diatas Cuma


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

Modul Praktikum Pemrograman Berorientasi Objek


43
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 Struktur penulisan:


program, Anda cukup meletakkan kode yang
try{
ingin anda inspeksi terhadap kemungkinan
......//blok program
eksepsi di dalam blok try, diikuti dengan blok } catch (tipeException e) {
catch yang menentukan jenis eksepsi apa ......//blok program
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.

public class TryCatch {


public static void main (String[] args){
try{
int[] arr = new int[1]; Perhatikan baris ini!
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");
}
}

Outputnya: Terjadi exception karena indeks di luar kapasitas array


Setelah blok try catch

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

44 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
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 Outputnya jika tanpa


Terjadi exception karena pembagian dengan nol parameter

Setelah blok try catch


Outputnya jika dengan C:\Java_projects >java TryCatch2 param1

sebuah parameter Tidak terjadi exception

Setelah blok try catch


C:\Java_projects >java TryCatch2 param1 param2 Outputnya jika
Terjadi exception karena indeks di luar kapasitas array dengan 2 parameter

Setelah blok try catch

Penggunaan Throw
Cara penulisan:
Mekanisme throw memungkinkan program
untuk mengirim / melempar exception untuk Throw ObjekEksepsi;
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?

Modul Praktikum Pemrograman Berorientasi Objek


45
Common Laboratory 2009/2010
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()");
} obyek dari class ArrayIndexOutOfBoundsException,
}
} yang kemudian dikreasi dengan konstruktor plus
parameter integer sebagai identitas obyek tersebut.
Outputnya:
Penanganan exception dalam method methodLain()
Penanganan exception dalam method main()

Eksepsi juga dapat dibangkitkan secara int[] arr = new int[1];


manual melalui kode yang kita tulis. Kita dapat System.out.println(arr[1]);
melakukan hal tersebut dengan kata kunci Eksepsi ini gak perlu ditulis lagi, karena kita
throw ini, seperti pada contoh diatas.
udah pake throw

Penggunaan Throws
Cara penulisan:
Sangat erat hubungannya dengan class NamaClass throws Exception{
penggunaan exception yang dicek oleh Java. .........
}
Keyword ini dipake kalo misalnya ada method
yang mungkin menyebabkan exception tapi atau fungsi / prosedur
dia gak menangani exception tersebut.
int f1() throws Exception{
Exception akan dilempar ke luar, maka dari ..........
itu ketika keyword ”throws” digunakan saat }
pendeklarasian method.

Masih bingung? Let‟s see the code..

46 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Karena ada ini, makanya gak ada

public class CobaThrows{ blok try-catch nya


Outputnya:
public void tampil() throws Exception {
Lebih kecil 5 int x=0;
if (x<5)
Program selesai throw new Exception ("Lebih kecil 5");
}

public class DemoThrows{


public static void main (String [] args){
CobaThrows c = new CobaThrows ();
Nah, pas method di atas try {
c.tampil();
dipanggil di sini, makanya,
}catch (Exception e) {
method itu ada di antara System.out.println(e.getMessage());
}
blok try-catch System.out.println ("Program selesai");
}
}

Penanganan Dengan Finally

Apa itu Finally?


Cara penulisan:
Penggunaan blok try catch terkadang
membingungkan karena kita tidak dapat try{
menentukan dengan pasti alur mana yang ......//blok program
} catch (tipeException1 e) {
akan dieksekusi. Apalagi penggunaan throw ......//blok program untuk
yang mengakibatkan kode setelah throw TipeException1
tidak akan dieksekusi atau justru terjadi } catch (tipeException2 e) {
kesalahan pada blok catch, menyebabkan ......//blok program untuk
program akan berhenti. Untuk mengatasi TipeException2
problem ini, Java memperkenalkan keyword } finally {
......//blok program
finally. Dimana semua kode yang ada dalam
}
blok finally “pasti” akan dieksekusi apapun
yang terjadi di dalam blok try catch.

Supaya output yang Terjadi exception


Program Selesai
terjadi seperti ini, Exception in thread "main"
bagaimana kah kodenya? java.lang.ArrayIndexOutOfBoundsException: -1
at DemoFinally.main(DemoFinally.java:11)

Modul Praktikum Pemrograman Berorientasi Objek


47
Common Laboratory 2009/2010
public class DemoFinally{
public static void main (String [] args){
int x = 3;
int [] arr = {10,11,12};
arr[3], padahal isi arr cuma ampe 2
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]);
}
arr[-1], kan arr ke-negative itu gak ada
finally {
System.out.println("Program Selesai");
}
}
Dieksekusi meskipun di
}
catch ada exception

I/O (Input dan Output)

Data Data
info info
output input
Hardware
Data Data
info info
sebuah program membuka stream dari sebuah
Input: mengambil informasi data dari hardware sumber informasi (source) seperti file, memory,
Output: mengirim informasi data ke hardware socket. Kemudian membaca informasi secara
sekuensial.

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

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

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

1. DataInputStream(InputStream in) DataOutputStream(OutputStream out)


Untuk membuat sebuah objek DataInputStream Untuk membuat sebuah objek DataOutputStream
dengan spesifikasi InputStream yang diinginkan. dengan spesifikasi OutputStream yang diinginkan.

2. xxx readXxx() void writeXxx(xxx v)


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

Output untuk contoh input data Output untuk contoh input dan output data
Masukkan data : commonlabz Masukkan data : common

Yang anda ketik : commonlabz Yang anda ketik : common

Panjang Karakter : 8

Kira-kira seperti apa ya bentuk kodenya? Index ke-1 sebnyk 3 : omm

Modul Praktikum Pemrograman Berorientasi Objek


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

Contoh input dan output data

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

50 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 BufferedWriter dalam jdk 1.5 hanya mempunyai 2
mempunyai 2 kostruktor dan 9 method yang kostruktor dan 6 method yang ada dalam classnya
ada dalam classnya selebihnya turunan dari selebihnya turunan dari class parentnya. Berikut ini
class parentnya. Berikut ini akan dijelaskan akan dijelaskan konstruktor dan method yang
konstruktor dan method yang sering sering digunakan.
digunakan.
BufferedWriter (Writer in) dan
BufferedReader(Reader in) dan BufferedWriter(Writer in,int size)
BufferedReader(Reader in,int size) Membuat objek BufferedWriter dengan karakter
Membuat objek BufferedReader dengan buffer outputstream atau objek Writer yang lain.
karakter buffer inputstream atau objek Int sz digunakan untuk ukuran buffer yang
Reader yang lain. Int sz digunakan untuk digunakan.
ukuran buffer yang digunakan.
void write(String s, int of, int len)
String readLine() Untuk menuliskan sebuah String s ke sebuah media
readLine digunakan untuk membaca satu yang telah dispesifikasikan oleh objek
baris penuh text, yaitu mengembalikan String BufferedWriter. Dimulai dari karakter of(integer),
dari objek BufferedReader yang digunakan. ke berapa banyak karakter yang akan ditulis
len(integer).

Modul Praktikum Pemrograman Berorientasi Objek


51
Common Laboratory 2009/2010
Jadi jika ingin membaca dari console dengan Character Streams, dapat ditulis dengan cara :
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader buff = new BufferedReader(input);

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

Contoh input:
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");
}
}
Outputnya: Ketik : common

Yang diketik : common

Program Selesai
Contoh output:
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");
}
}

Outputnya: Hello World


Additional stuff
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. FYI, kalo kamu mo instan objek dari paket
System.in : input stream standar. Secara default inputya
adalah keyboard. java io, error harus selalu ditangkap oleh
System.err : output stream untuk mencetak pesan Exception, seperti IOException yang
kesalahan pada console (default).
(System boleh langsung diakses karena println bertipe digunakan untuk menangkap kesalahan dari
static sama dengan main, sehingga dapat langsung error IO.
dijalankan tanpa melalui instansiasi)

52 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 java.io.FileInputStream  dengan byte stream
yang ada didalam class untuk menspesifikasikan
file yang dibuat. terdapat 3 konstruktor dan 9 method yang ada. Digunakan
File(),File(String path),File(String dir,String nm) untuk mengambil file yang telah dideskripsikan untuk dibaca
Konstruktor diatas adalah yang sering digunakan dengan byte stream.
yaitu membuat objek file kemudian digunakan FileInputStream(File of), FileInputStream(String nama)
dengan pengesetan methodnya, atau menginstan Digunakan untuk mengambil file untuk dibaca secara byte
langsung dengan nama file beserta pathnya. stream,bisa memasukan deskripsi file yang telah ada dengan
String, atau dengan file yang telah diinstan dengan jelas.
boolean createNewFile(), boolean delete(),boolean
exists()
method-method diatas untuk mengeset dengan
pengecekan, untuk createNewFile digunakan
untuk menciptakan file kemudian java.io.FileOutputStream  dengan byte stream
mengembalikan nilai true jika file dibuat. terdapat 5 konstruktor dan 7 method untuk membuat file
yang akan diakses menggunakan byte stream.

FileOutputStream(File of), FileOutputStream(File of,boolean


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

FileWriter(File of), FileWriter(File of,boolean


append)
Digunakan untuk penciptaan objek file yang
java.io.FileReader  dengan character stream
akan diakses dengan character stream, dan
untuk variabel append digunakan untuk terdapat 3 konstruktor dan tidak ada method yang
apakah isi file akan dilanjutkan ke akhir dari isi dideskripsikan didalam class ini.
file.
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
Kira-kira seperti apa yah diinstan dengan jelas.
implementasinya di kode? Any idea?

Modul Praktikum Pemrograman Berorientasi Objek


53
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); enter
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");
}
}
}
}
}

Outputnya:
Ketik : commonlabz

54 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
input file dengan byte stream
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");
}
}
}
}
}

Outputnya: commonlabz?

Komunikasi antar objek Proses A Proses B


Remote method
Objek komputer Objek X invocation Objek L
bark() sing()
Remote
Local method object
invocation Objek P
interface Objek Y
sit()
eat()

Remote object dipanggil oleh objek lain melalui remote object


Objek manusia
references yang merupakan sebuah ID yang dapat digunakan untuk
Agar satu objek bisa berkomunikasi menunjuk pada suatu remote object tertentu, di dalam ID ada info
dengan objek lain maka setiap objek
alamat host di mana remote object yang ditunjuk lagi jalan. Method
pasti memiliki definisi interface.
mana aja yang bisa dipanggil secara remote didefinisiin di remote
interface
Modul Praktikum Pemrograman Berorientasi Objek
55
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 java.io.ObjectInputStream
Class objectoutputstream adalah kelas yang Class ObjectInputStream adalah kelas yang
digunakan untuk mengirimkan objek digunakan untuk mengambil objek dari
menjadi stream yang kemudian dapat stream yang dikirimkan melalui file atau
dikirimkan ke file atau ke socket (jaringan). socket (jaringan). Class ObjectInputStream
Class ObjectOutputStream mempunyai 2 mempunyai 2 Constructors, 31 methods untuk
constructor dan 31 method untuk versi jdk 1.5. versi jdk 1.5. Method dan constructor yang
Adapun method dan constructor yang sering sering digunakan adalah
digunakan adalah
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out) Membuat ObjectInputStream yang akan
Membuat ObjectOutputStream yang akan mengambil spesifik stream dari InputStream
menuliskan ke spesifik OutputStream yang yang dikehendaki.
dikehendaki.
Object readObject()
void writeObject(Object obj) Membaca objek yang telah diddefinisikan.
menuliskan objek yang akan dikirimkan ke
ObjectOutputStream.

56 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


Output program:
jumlah barang : 5

Modul Praktikum Pemrograman Berorientasi Objek


57
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
Nama Method Keterangan
kedalam suatu metode operasi,
seperti file/socket. Terdapat void writeBoolean(Boolean b) Menuliskan nilai bertipe Boolean
parameter ObjecOutput yang
bernama out, ObjectOutput adalah void writeByte(int i) Menuliskan nilai bertipe byte
jenis interface yang dijadikan tipe
variable parameter. Dan berikut void writeChar(int c) Menuliskan nilai character dengan
(byte)(0xff & (c >> 8))
beberapa method yang dapat
(byte)(0xff & c)
digunakan parameter tersebut. void writeDouble(double d) Menuliskan nilai bertipe double

void writeFloat(float f) Menuliskan nilai bertipe float

void writeInt(int i) Menuliskan nilai bertipe integer


Method-method ini yang sering dapat
void writeLong(long l) Menuliskan nilai bertipe long
digunakan untuk menuliskan tipe
void writeShort(int s) Menuliskan nilai bertipe short
data, yang ada dalam method
writeExternal ini, meskipun banyak void writeObject(Object o) Menuliskan objek atau tipe data
referensi
method lain lagi yang dapat
digunakan untuk keperluan yang lain.

58 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
Digunakan untuk Nama Method Keterangan
membaca objek yang
telah dikirimkan boolean readBoolean() Membaca nilai boolean dan meng-embalikannya
melalui suatu metode
operasi, seperti file atau byte readByte() Membaca nilai byte dan meng-embalikannya
socket. Terdapat
parameter bertipe char readChar() Membaca nilai karakter dan meng-embalikannya
ObjecInput yang
bernama in, sama double readDouble() Membaca nilai double dan meng-embalikannya
seperti ObjectOutput,
ObjectInput float readFloat() Membaca nilai float dan meng-embalikannya
merupakan interface
int readInt() Membaca nilai integer dan meng-embalikannya
yang dijadikan tipe
parameter. Berikut long readLong() Membaca nilai long dan meng-embalikannya
beberapa method read
yang dapat digunakan Object readObject() Membaca objek dan mengembalik-an ke tipe Object
untuk membaca nilai
dari input stream. 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.

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.

Jika output programnya seperti di


bawah ini, bagaimana bentuk kode
programnya? Mari kita lihat kodenya di
1. [Booch95] Grady Booch, “Object Oriented Analysis and
halaman sebelah
Design with Application”, The Benjamin/ Cumming
Publishing Company, 1995.
data barang : sepatu 2. [Coad91] Coad, Peter, Yourdon, “Object Oriented Design”,
Second Edition, Prentice Hall, 1991
jumlah barang : 2
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

Modul Praktikum Pemrograman Berorientasi Objek


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

60 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Modul 5
Multithreading

Tujuan:
Apa itu thread?

1. Kenal konsepnya Inget waktu kita buat suatu program? Misalkan pas
kita buat program mengurutkan bilangan, kita
2. Bisa implementasiinnya
tahunya kalo program itu dibuat secara sekuensial.
3. Ngerti dan paham serta bisa Ada awal, terus eksekusi programnya, dan akhir.
implementasiin sinkronisasi di
Nah, aliran eksekusi dari suatu “task” pada sebuah
multithreading 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 Satu program
mandi()
program, supaya interaktif terkadang
kita nggak cuma jalanin satu task aja.
x.sabunan() Satu thread
Kita pasti pernah main game kan? Ketika
main game, terjadi beberapa task di
sana. Ada yang tasknya ngurusin visual,
ngurusin logikanya, perhitungan score, x.sikatGigi()
dan sebagainya. Jadi, ada banyak thread
yang jalan di program game yang kita
mainin. x.selesai()

Nah, kemampuan menjalankan


beberapa thread pada waktu yang
bersamaan yang mana masing-masing
mengerjakan task yang berbeda dalam
Satu
satu program, kita sebut dia sebagai mandi() mandi()
program
multithreading.

x.sabunan() x.sikatGigi()

Dua
x.bilasSabun() x.kumur2()
threads

x.selesaiSabun() x.selesaiSikat()

Modul Praktikum Pemrograman Berorientasi Objek 61


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

62 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Setelah kita kenal thread…

Bagaimana cara membuat dan menggunakan Threads?

Subclass yang extends Class java.lang.Thread

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.

Modul Praktikum Pemrograman Berorientasi Objek 63


Common Laboratory 2009/2010
2

Interface Runnable ada


di java.lang package

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.

64 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
3

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,

http://java.lyracc.com/belajar/java-untuk- manakah cara yang paling mudah? Kenapa?

pemula/ Answer:

headfirst Java, O’reilly

Modul Praktikum Pemrograman Berorientasi Objek 65


Common Laboratory 2009/2010
Gimana kalau misalnya kita maunya sikat gigi dulu baru
sabunan?
FYI, setiap thread itu punya prioritas lho.
setPriority(int arg())
Prioritas berupa int:

MIN_PRIORITY: 1 digunakan untuk modifikasi prioritas


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


thread sedang eksekusi
task (method run lagi
dijalanin)
yield
running

start
New Thread Runnable Not Runnable

Kondisi awal dari sebuah run method thread lagi running tapi
thread, ketika objek selesai gak ngelakuin apa-apa.
thread dibuat

Dead

thread telah selesai eksekusi


task

66 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Apakah thread masih hidup?
Mengubah nama thread.

Menjalankan thread. Menghentikan thread.


Mengubah prioritas thread

Menghentikan aktivitas thread


Menghentikan aktivitas thread sementara sampai method resume( )
selama waktu dalam parameter (in dipanggil.
milisecond).

Mengetahui prioritas thread. Mengetahui nama thread.

Menjalankan aktivitas thread yang Dan lain-lain….


tersuspend.

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.

Modul Praktikum Pemrograman Berorientasi Objek 67


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(){ Sinkronisasi method, yang hanya dilakukan


//isi method terhadap method yang punya identifier
}
synchronized.

Sinkronisasi objek, dilakukan terhadap seluruh synchronized(object){


method pada objek. //isi method
}

Public class SinkronisasiThread{ Lengkapilah kode disamping berdasarkan urutan


private static Resources r;
public static void main(String[] args){ nomor yang telah disediakan!
r = new Resources();
new Ambil().start();
new Tambah().start();
}
1
2
}

static class Resources{


2 static class Ambil extends Thread{
private Boolean b = false;
public void run(){ 1
private byte nilai = 0;
System.out.println(“Ambil berjalan”);
private synchronized void tambah(){
for(int a=0;a<10;a++){
while(b==true){
r.ambil();
try{
}
System.out.println(“Menunggu untuk ambil”);
}
wait();
}
}catch(InterruptedException e){}
}
static class Tambah extends Thread{
System.out.println(“Tambah nilai “+ ++nilai);
public void run(){
b=true;
System.out.println(“Ambil berjalan”);
notifyAll();
for(int a=0;a<10;a++){
}
r.tambah();
}
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();
}

68 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Modul 6
Graphical User Interface (GUI)

Tujuan: Setelah kita lalui modul-modul sebelumnya


yang mana programnya cuma pake console,
1. Kenal komponen-komponen dasar nah sekarang kita masuk ke modul 6 yang
dalam pembuatan UI dalam Java.
ngebahas tentang GUI.

2. Ngerti konsep GUI dan bisa Berarti di modul ini kita bisa buat program yang
implementasiin di program sederhana ada tampilannya yaa.
serta bisa integrasiin dengan salah satu

DBMS.

3. Ngerti konsep dari event handling.

Awt dan swing AWT components

AWT Swing Label


Platform Platform oriented multiplatform Button
package Java.awt Javax.swing Checkbox
Choice
Beberapa fasilitas yang disediakan oleh kedua List
class tersebut adalah sebagai berikut: MenuItem
TextField
Pengaturan tata letak (layout management) Scrollbar
komponen dalam suatu container.
TextArea
Mendukung event handling, yaitu mekanisme
pendeteksian event dan penentuan respons yang ScrollPanel
akan diberikan ketika pengguna (user) Canvas
mengakses komponen tersebut.
Manipulasi grafis komponen seperti font, warna,
icon, dll.

Swing components

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

Modul Praktikum Pemrograman Berorientasi Objek 69


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

Container dasar dimana komponen lain diletakkan.


Top-Level Container
Ex : Frame (JFrame), Dialog (JDialog) & Applet
(JApplet)
Container perantara dimana komponen lain diletakkan
Intermediate-Level Container Ex : JPanel, dimana umumnya hanya digunakan sebagai
tempat untuk meletakkan/mengelompokkan komponen-
komponen yang digunakan, baik container atau berupa
Atomic Component
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.

Top Level Container

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

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

70 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Class JFrame memiliki banyak method, salah Dialog (JDialog): Perbedaan utama
satu method yang sering digunakan adalah Frame dengan Dialog adalah: Dialog
setDefaultCloseOperation(int operation) yang tidak berdiri sendiri (biasa dibuat
berfungsi untuk mengatur aksi yang akan bersama dengan frame sebagai
dilakukan ketika tombol close diklik dimana parentnya sehingga Dialog akan
operation mencakup: dihapus dari memori jika Frame
parentnya juga dihapus). Dialog
bersifat modal (memblok semua
 DO_NOTHING_ON_CLOSE (tidak ada input terhadap parentnya sampai
aktivitas apapun yang dilakukan secara Dialog tersebut ditutup).
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).

import javax.swing.*;
public class DialogDemo {
public static void main(String[] args) { frame sbg parent bagi dialog
JFrame frame = new JFrame("Contoh Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();

JOptionPane.showConfirmDialog(frame,
"Contoh dialog konfirmasi ...", informasi dialog
"Judul Dialog", Judul dialog
JOptionPane.OK_CANCEL_OPTION,
jenis tombol
JOptionPane.QUESTION_MESSAGE);
} icon
}

Modul Praktikum Pemrograman Berorientasi Objek 71


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

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

Modul Praktikum Pemrograman Berorientasi Objek 73


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

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

Modul Praktikum Pemrograman Berorientasi Objek 75


Common Laboratory 2009/2010
Pengaturan dengan GridLayout

GridLayout merupakan manajer tataletak


komponen yang menggunakan bentuk
grid dengan ukuran yang sama untuk
setiap komponen

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

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.

76 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();
}
}
Modul Praktikum Pemrograman Berorientasi Objek 77
c.gridy = 2; //baris 2
Common Laboratory 2009/2010
c.insets = new Insets(10,0,0,0); //t,l,b,r
Pengaturan dengan GroupLayout

GroupLayout menggunakan dua tipe Contoh: Terdapat tiga buah komponen C1, C2, C3. Komponen-
penyusunan, yaitu sequential dan parallel. komponen berikut akan disusun dengan cara sequential group dan
parallel group.
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

Kelompokan komponen-komponen diatas menjadi beberapa grup yang


tersusun secara berurutan dan horizontal. Maka dari kelompok-
kelompok tersebut dapat dibuat code awal sebagai berikut.

layout.setHorizontalGroup ( layout.createSequentialGroup()
.addComponent(label)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))
);

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


berkembang menjadi,

78 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
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))
);

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

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

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.
Print Screen window dengan SpringLayout dimana
ukuran Labelnya statis dan ukuran Text fieldnya
fleksibel mengikuti ukuran window jika diresize

Modul Praktikum Pemrograman Berorientasi Objek 79


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

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

Modul Praktikum Pemrograman Berorientasi Objek 81


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

Lengkapilah kode
public class event_handling{ disamping sesuai
private JButton b1,b2,b3,b4;
private JTextField text1,text2; dengan nomornya!
//private JPanel panel1,panel2;
private JLabel label1,label2;
private JFrame frame;
private int a,b;
private String hasilJum=”Hasil Penjumlahan adalah: “;

1
2

82 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
1 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: “);
}

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

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

Modul Praktikum Pemrograman Berorientasi Objek 83


Common Laboratory 2009/2010
private class kurangHandler implements ActionListener { 3
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();
}

http://edn.embarcadero.com/article/26970
http://en.wikipedia.org/wiki/Swing_(Java)
http://en.wikipedia.org/wiki/Abstract_Window_Toolkit

84 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Modul 7
Netbeans, Applet, dan JDBC

Tujuan: Netbeans

1. Pahamdan bisa implementasiin cara buat Apa itu Netbeans?


desain interface menggunakan Netbeans.
Netbeans merupakan sebuah software yang
2. Ngerti konsep JDBC. mengacu pada dua hal, yaitu sebagai platform
3. Bisa implementasiin JDBC ke suatu framework Java untuk aplikasi desktop dan
program Java.
sebagai 'integrated development environtment'
(IDE) untuk membangun aplikasi yang
4. Ngerti dan bisa implementasiin program menggunakan Java, javaScript, PHP, Python,
Java Applet. Ruby, Groovy, C, dan C++.

NetBeans IDE dibangun dalam bahasa Java dan


dapat dijalankan dimana saja yang telah Download links
terinstal JVM, termasuk Windows, Mac OS, Linux,
dan Solaris. JDK diperlukan untuk pembangunan
fungsionalitas Java. NetBeans merupakan http://java.sun.com/javase/downloads/
index.jsp
software yang open source dan dapat di-
download di www.netbeans.org. Untuk
praktikum kali ini Netbeans yang digunakan www.netbeans.org
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.
klik disini, untuk membuat
Jadi, kita buat proyek dulu yaa…
proyek baru.

Jalankan menu File | Project


(Ctrl+Shift+N) untuk membuka suatu
dialog New Project.

Modul Praktikum Pemrograman Berorientasi Objek 85


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’

86 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Work area...

Project View

Jendela untuk melihat


Members View
hasilcompile dan
runing program yang
telah dibuat...

Setelah itu mari kita membuat kelas. Bagaimana caranya?

Klik kanan pada


‘pakage’ yang dituju Klik pada jenis kelas
yang akan dibuat.

Digunakan jika ingin


Membuat kelas GUI

Digunakan untuk rename,


memindahkan lokasi proyek,
Digunakan untuk meng-
copy dan menghapus proyek
compile seluruh kelas yang
dari jendela proyek sekaligus
berada di pakage tersebut.
dari directorinya. Lakukan
rename pakage menjadi,
javaaplicationData
Modul Praktikum Pemrograman Berorientasi Objek 87
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‟. Biasakan nama kelas
diawali dengan huruf besar

Klik ‘Finish’

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

F9 Shift + F6
88 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‟.

JFrame (work area)

Drag salah satu component Properties Swing


dari palette kedalam work Components yang Components
area sedang aktif

Untuk memulai membuat interface, drag komponen Jlabel dari panel kedalam work area.
Untuk mengubah-ubah properti dari Jlabel,
dapat dilakukan di ‘properties’, klik kanan
pada Jlabel

Digunakan untuk
merumah nama
variabel Jlabel

Atau melalui jendela


properties

Klik ‘properties’

Modul Praktikum Pemrograman Berorientasi Objek 89


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

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

Untuk menyisipkan action, klik kanan pada


tombol submit, pilih Events-Action-
actionPerformed. Atau dengan double klik
Setelah itu akan tampil pada source :
pada tombol.

Disinilah kita akan menuliskan


kode program action dari tombol
save

Modul Praktikum Pemrograman Berorientasi Objek 91


Common Laboratory 2009/2010
Tuliskan kode berikut (tambahkan atribut Barang b; dikelas FormInput sebelumnya):

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

Mau tau lebih jauh??

www.netbeans.org/

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

92 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? Keuntungannya?

Fungsi yang disediakan oleh Java untuk Kalo pake JDBC API, kita bisa akses database dari
menghubungkan aplikasi yang dibangun vendor-vendor ternama seperti Oracle, Sysbase, Informix,
menggunakan bahasa pemrograman java Interbase. Kita dapat melakukan mengirimkan perintah-
dengan database yang ada. Dengan perintah SQL ke RDBMS. Kelas-kelas serta interface JDBC
menggunakan JDBC, kita bisa menggunakan API dapat diakses dalam paket java,sql (core API) atau
SQL statement untuk ngebuat, manipulasi, javax.sql(Standard Extension API).
atau pelihara suatu data.

JDBC adalah versi ODBC yang dibuat oleh Sun Gimana cara dapetin JDBC?
Microsystem. Kita butuh driver buat akses database di
server dari dalem program kita.
JDBC dibangun dengan Java API sehingga bisa Setiap server dari vendor punya driver
untuk cross platform, serta didasarkan pada yang beda-beda.
X/Open SQL Level Intervace (CLI).
Download di:
ODBC dibangun dengan bahasa C sehingga
Cuma bisa dibangun pada platform spesifik. http://java.sun.com/products/jdbc

Inisialisasi Driver

Class.forName( “nama_driver” );
Catatan :
Untuk nama_driver berbeda-beda tiap
database yang digunakan :
Pada Netbeans 6.5, sudah terdapat beberapa driver
Untuk microsoft access yaitu yang dapat digunakan langsung seperti Java DB,
sun.jdbc.odbc.jdbcOdbcDriver. MySQL, dan PostgreSQL. Cara penggunaannya yaitu
Untuk oracle yaitu dengan mengklik kanan pada folder library dalam
oracle.jdbc.driver.OracleDriver. project yang dibuat kemudian pilih Add Library..,
Untuk mysql yaitu lalu pilih driver yang akan kita pakai.
org.gjt.mm.mysql.Driver.

Koneksi ke database menggunakan URL


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

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

Modul Praktikum Pemrograman Berorientasi Objek 93


Common Laboratory 2009/2010
Penggunaan Database

A. Statement

Statement merupakan suatu class pada java misal : variabel koneksinya yaitu conn , maka
yang digunakan untuk mengeksekusi suatu Statement var_statement = conn.createStatement();
query, digunakan setelah menginisialisasi UntukDriverManager.getConnection(“nama_URL”,”nama_u
mengakhiri suatu transaksi dengan menggunakan query
variable koneksi pada Connection di point ser”,”password”);
dengan cara menutup variable statement yang sudah diinisialisasi.
ke-2. Inisialisasinya yaitu :
misal : variable statementnya, stmnt stmnt.close();
DriverMana
ger.getCon
B. ResultSet nection(“n
ama_URL”,”
Setelah menginisialisai variabel statement nama_user”
Caranyaa…. ,”password
maka selanjutnya menginisialisai variabel ”);
ResultSet yang nantinya akan digunakan ResultSet var_set;
untuk menyimpan suatu baris record pada
DriverManager.get
database, dengan kata lain variabel ini Connection(“nama_
merupakan pointer yang akan menunjuk URL”,”nama_user”,
suatu baris pada table. ”password”);

Mengakhiri Koneksi.

Untuk menjaga keamanan data maka kita Caranyaa….


perlu mengakhiri koneksinya (misal variabel conn.close();
koneksinya conn) .
DriverManag
er.getConne
ction(“nama
kasih liat contohnya dongg?? _URL”,”nama
Mari kita buat aplikasi penjualan sederhana _user”,”pas
sword”);
Dibawah ini adalah penggunaan JDBC Nama databasenya db_penjualan
Database: MySQL CREATE DATABASE `db_barang` ;
Username: root CREATE TABLE `db_barang`.`tabel_barang` (
`nama` VARCHAR( 20 ) NOT NULL ,
Password: „‟ `suplier` VARCHAR( 20 ) NOT NULL ,
`jumlah` INT NOT NULL
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.

94 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Untuk merubah tampilan awal
tabel agar menyerupai contoh,
Klik kanan pada tabel, pilih Tabel
Contens

Maka akan muncul tampilan seperti berikut.

Mengatur jumlah
Nama kolom (title1, kolom dan baris
title2, title3) dapat
diatur di sini.

Modul Praktikum Pemrograman Berorientasi Objek 95


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;
Lengkapilah kode disamping
import java.sql.Connection; dengan kode dibawah sesuai
import java.sql.DriverManager;
import java.sql.ResultSet; nomor urutnya!
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”;

96 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
public Database(){ 1
//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);
}
}

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

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

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;

Modul Praktikum Pemrograman Berorientasi Objek 97


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.

98 Modul Praktikum Pemrograman Berorientasi Objek


Common Laboratory 2009/2010
Insert barang

View barang

Modul Praktikum Pemrograman Berorientasi Objek 99


Common Laboratory 2009/2010
Transmisi
Applet ByteCode
Apa itu Applet? start()
Adalah suatu program yang didownload dari
server untuk dijalankan di client.
Page Page
Dijamin aman, stabil, dan memungkinkan init()
halaman web jadi lebih dinamis. aktif nonaktif
Ada 4 method yang sering diturunkan dari destroy()
superclass. inisialisasi
Keempat method ini menentukan life-cycle stop()
dari applet dan disebut sebagai mile-stone
method dari applet.
terminasi

Untuk inisialisasi. Dipanggil pertama Yang pertama kali dijalankan setelah init( ),
kali dan hanya sekali ketika applet memulai fase kedua dari life-cycle yaitu
dieksekusi. Merupakan awal dari mulai menjalankan applet. Dijalankan
life-cycle suatu applet. berkali-kali. Setelah stop( ) akan dijalankan
lagi

berpasangan dengan method start().Berfungsi


menghentikan applet tapi tidak menghapus fase terakhir dari life-cycle applet.Ia dipanggil
dari memori.Ini
Method init() misalnya ketika user pindah untuk melakukan pembersihan terhadap
dari halaman browser yang menampilkan objek dari applet itu sendiri.Ia dipanggil ketika
applet ke aplikasi lain. Pada saat itu applet applet ditutup atau ketika suatu browser
akan dihentikan. yang menampilkan applet ditutup.

Dengan demikian class Applet dapat dikembangkan dengan melakukan “override” pada metoda
tersebut.
import java.applet.*;
public class MyApplet extends Applet {
Catatan:
public void init(){
//inisialisasi variabel dan lainnya
Mengganti (override)
} metoda init(), start(), stop()
public void start(){ dan destroy() hanya
//lakukan bila page aktif dilakukan bila memang
} dibutuhkan oleh pembuat
public void stop(){ program.
// lakukan bila page akan nonaktif
}
public void destroy(){
//terminasi clean-up variabel dan lainnya sebelum applet selesai
}
}

100 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 Method ini adalah method terpenting dalam
superclass java.awt.Panel seperti method applet karena tanpa method ini, kita tidak
paint( ) dan update( ). dapat menampilkan apa-apa dalam
applet.Method ini bisa dipanggil ribuan kali
Umumnya pada saat applet aktif, maka dalam life-cycle. Method ini dipanggil setiap
setelah applet menjalankan metoda start() applet perlu digambar ulang.
kemudian otomatis akan memanggil metoda
paint(), yaitu metoda untuk menampilkan
grafik pada layar.
Method update sebenarnya dipanggil oleh
repaint(). Method ini dalam implementasi
init() start() paint() aslinya akan membersihkan tampilan applet
dan kemudian memanggil paint().

Layar dan Frame

Applet membentuk layar berdasarkan dimensi


WIDTH dan HEIGHT yang diberikan melalui 0,0 WIDTH-1,0
parameter dari <APPLET>

Perhitungan dimensi layar dimulai dari layar


0, HEIGHT-1
sudut kiri paling atas, yaitu dimulai dengan
(0,0), kemudian picel ke kanan (1,0), (2,0) dan
seterusnya sampai dengan (WIDTH-1,0). Dimensi dari layar tersebut adalah
WIDTHxHEIGHT. Program tidak
Baris berikutnya dimulai (0,1) dan seterusnya boleh menggambar atau
sampai dengan (WIDTH-1,1). meletakkan obyek diluar dari
dimensi tersebut, karena gambar
Dimensi terakhir adalah pixel sebelah kanan
tersebut tidak akan tampil di layar.
paling bawah, yaitu (WIDTH-1,HEIGHT-1).

Atribut HTML Applet


Contohnya adalah sebagai berikut
Applet dapat ditampilkan bersama HTML <APPLET CODE=Contoh WIDTH=300 HEIGHT=200>
code dengan menggunakan HTML-TAG </APPLET>
<APPLET> dan ditutup dengan </APPLET>.
Melalui parameter pada APPLET, program java
Applet minimal memerlukan 3 parameter, Applet dapat menerima nilai parameter
yaitu: tersebut dari HTML.
code  nama applet (class) <APPLET CODE=Contoh WIDTH=300 HEIGHT=200>
width  lebar layar (frame dan pixel) <PARAM NAME=namaparam1 VALUE=nilai1>
height tinggi layar (frame dan pixel) <PARAM NAME=namaparam2 VALUE=nilai2>
<PARAM NAME=namaparam3 VALUE=nilai3>
...
</APPLET>

Modul Praktikum Pemrograman Berorientasi Objek 101


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?

102 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> Untuk menjalankan di web browser,


<PARAM NAME=nama VALUE="Siapa Ya Namanya">
<PARAM NAME=jurusan VALUE="Teknik Informatika"> applet harus dimasukkan ke dalam
</APPLET> kode HTML.

Modul Praktikum Pemrograman Berorientasi Objek 103


Common Laboratory 2009/2010

Anda mungkin juga menyukai