SlideShare una empresa de Scribd logo
1 de 103
Descargar para leer sin conexión
Modul 1
Pengenalan Java
Tujuan:
1.

Apa itu Java?

Tahu dan kenal bahasa pemrograman
Java.

2.

Tahu cara instalasi dan konfigurasi
Java.

3.

Ngerti dan bisa implementasiin tipe
data, variabel, dan konstanta.

4.

Ngerti dan bisa implementasiin

Java merupakan salah satu bahasa pemrograman
yang unggul dibandingkan dengan yang lain. Karena
Java merupakan filter-filter dari bahasa
pemrograman yang ada sebelumnya.
Java dikenal sebagai bahasa pemrograman “Modern”
karena kemampuannya untuk mendukung OOP
dan mempermudah pemrograman aplikasi
multithreading.

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?

Di tahun 1995

James
Gosling

Patrick
Naughton

*Di tahun 1996 Java
diadopsi Netscape

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

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

1
Versi-versi JSDK (Java Software Development Kit)

Mendukung koneksi ke
databse dan objek tersebar

1998, ada toolkit “Swing” yang
mendukung GUI (Graphical UI)

1997, tambahan event model,
internasionalisasi, dan JavaBeans

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

Ada fasilitas asersi untuk
mendukung design-by-contract

Direlease tahun 2000

Ada fitur generics
(parameterized type),
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
Pernah Dengar Garbage
Collector?
Ketika kita membuat program
menggunakan bahasa pemrograman yang
memiliki struktur data dinamis maka ia harus
memilki suatu cara untuk memberi sistem
operasi [tempat dia berjalan], saat dia
memerlukan memori tambahan ataupun
tidak butuh memori lagi.
Ketika sebuah program sudah minta memori
dari sistem operasi, biasanya memori tidak
pernah lagi dikembalikan tapi dipegang
untuk dipake lagi sama program yang kita
buat tadi. Nah, siapakah yang mengelola hal
itu? Garbage Collector [salah satu pengelola
penyimpanan].

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

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

Instalasi Java
Ekstraksi

1

file installer berupa selfinstalling file, berupa .exe
kalau dijalankan dia
sudah ekstrak dirinya
untuk dikopikan ke
direktori.
Pilih default untuk
direktori instalasi.

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

3
sediakan space minimal 300
MB

2

3

4

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>libfile(*.jar);%path%

contoh:
set path=c:jdk1.5bin;%path%
set classpath=c:jdk1.5libtools.jar;%classpath%
set classpath=c:jdk1.5libdt.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

3

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

5
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
Sudah ada ketika menginstal.

Editor

Java
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[])
Main

{

void main()
{

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

program

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:
1. Integer (Bil. Bulat), bilangan yang tidak mengandung angka pecahan.
2. F loat (Bil. Pecahan), bilangan yang mengandung angka pecahan.

Akan terjadi
masalah dalam
tipe data ketika
terdapat dua tipe

Berbentuk karakter atau deretan karakter. Terdiri atas dua kategori:

data yang berbeda
dan saling

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

berhubungan.
Bagaimanakah

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

Solusinya?

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

7
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 primitif, meliputi : tipe boolean, tipe
numerik (yang meliputi : byte, short, int,
long, char, float, double) dan tipe karakter
(char).

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

Bagaimana bentuk umum pendeklarasiannya?
tipeData namaVariable1 [= nilaiAwal];
tipeData namaVariable1 [= nilaiAwal][, namaVariable2 [= nilaiAwal]…];

Contohnyaa...
int dataint;
char chardata;

Aturan Penamaan Variabel di
Java

float x = 12,67;

1.

format nama variable
1. Diawali dengan huruf kecil.
2. Jika nama variable lebih dari satu kata,
kata ke-2, ke-3, dst, diawali dengan huruf
capital dan ditulis menyatu.

8

Harus terdiri atas sederetan karakter
Unicode yang diawali oleh karakter
huruf atau garis bawah. Unicode
merupakan system penkodean karakter
yang dapat dibaca oleh berbagai
bahasa manusia.
2. Tidak boleh berupa keyword (kata yang
dicadangkan),
null,
atau
literal
true/false.
Harus unik dalam suatu scope

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;

V
ariabel Array

Data
Index

Data 1
0

Data 2
1

Elemen variabel array

Data 3
2

….
….

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

Data N
N-1

Urutan Elemen variabel
array (Harus unik)

Gimana cara pendeklarasiannya?
tipeData[] namaVariable [= new tipeData [jumlahElemen] ];

Bentuk umumnya…

[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;
Kalo jumlah elemen belum dipesan, kita gak
bisa pake variable array untuk nyimpen

namaVariableArray = new int[7];
Memesan jumlah elemen di salah satu baris

data.
2

int[] namaVariableArray = new int[7];

Kita langsung pesen 7 elemen array

3

int[] varibleArray3 = {5, 3, 23, 99, 22, 1, 6};
int[] variableArray3 = new int[]{1,23,45,4,3,7,8};

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

Variabel array ini memiliki 7
elemen. Di mana setiap elemen
sudah terisi data.

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

int[] numbers = new int[3];
numbers[0]=34;
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]
m[1][1]
m[2][2]
m[3][3]

=
=
=
=

1;
1;
1;
1;

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

"+m[0][1]+"
"+m[1][1]+"
"+m[2][1]+"
"+m[3][1]+"

"+m[0][2]+"
"+m[1][2]+"
"+m[2][2]+"
"+m[3][2]+"

"+m[0][3]);
"+m[1][3]);
"+m[2][3]);
"+m[3][3]);

}
}

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

11
Operator, Statement kondisional, dan Iterasi pada Java
Operator
Operator Aritmatika
Operator ini digunakan
pada operasi-operasi
aritmatika seperti
penjumlahan,
pengurangan,
pembagian dll.

Jenis Operator Aritmatika
Operator

Contoh

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

Keterangan

Jenis Operator Relasional
Operator

Contoh

Keterangan

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

12

Jenis Operator Kondisional
Operator

Contoh

Keterangan

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
Operator assignment dalam Java digunakan
untuk memberikan sebuah nilai ke sebuah
variable. Operator assignment hanya berupa
„=‟, namun selain itu dalam Java dikenal
beberapa shortcut assignment operator yang
penting.

Pernyataan kondisional

Jenis Operator Assignment
Operator
Contoh
Ekivalen dengan
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
>>>=

a += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b
a >>>= b

a=a+b
a=a-b
a=a*b
a=a/b
a=a%b
a=a&b
a=a|b
a=a^b
a = a << b
a = a >> b
a = a >>> b

Statement if

if (ekspresi_kondisional){
statement1;
statement2;
…
}

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

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

13
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 beberapa
pilihan operasi pemrosesan

Bentuk statement if – else dengan 2
pilihan operasi pemrosesan :

if (ekspresi_kondisional_A){
statement1;
statement2;
…
}else if (ekspresi_kondisional_B){
statement1;
statement2;
…
}else{
statement1;
statement2;
…
}

if (ekspresi_kondisional){
statement1;
statement2;
…
}else{
statement1;
statement2;
…
}

public class IfElse {
public static void main(String args[]) {
int month = 4;
String season;
if (month == 12 || month
season = "Dingin";
} else if (month == 3 ||
season = "Semi";
} else if (month == 6 ||
season = "Panas";
} else if (month == 9 ||
season = "Gugur";
} else {
season = "";
}

== 1 || month == 2) {
month == 4 || month == 5) {
month == 7 || month == 8) {
month == 10 || month == 11) {

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;
statement2;
.
.
.
break;
case value_2:
statement1;
statement2;
.
.
.
break;
[default: ]
statement1;
statement2;
.
.
.
break;}}

case: menandai posisi kode di mana
eksekusi dilaksanakan.
value_1, dst.: konstanta integer atau
konstanta karakter, ataupun
ekspresi yang mengevaluasi
keduanya.
default: sama kayak “else” pada
statement if.

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

15
Ekspresi bersyarat (Ternary Operator)
Kita menggunakan sebuah ekspresi bersyarat
untuk menggantikan sebuah bentuk if-else.
Sintaks adalah sebagai berikut:

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

exp1 ? exp2 : exp3

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

Berapakah outputnya?
Answer:

Statement Iterasi (Perulangan)
While

For

Do

while( expression ){
statement1;
statement2;
.......

do {
statement1;
statement2;
.......
} while(expression)

}

for (initialization;expression;step){
statement1;
statement2;
...
}

while ( expression );

Selama expression benar, while akan Hasil dari while akan dikembalikan kepada
dieksekusi

do

public class Angka{
public static void main (String[] args){
int i;
for(i=1;i<=10;i++){
System.out.println(Integer.toString(i));
}
i=1;
while(i<=10){
System.out.println(Integer.toString(i));
}
do{
System.out.println(Integer.toString(i));
i++;
}while(i<=10)
}
}

16

Pada java terdapat 2 statement
yang biasanya digunakan pada
setiap bentuk iterasi diatas.
Statement tersebut yaitu:
, dapat menghentikan
perulangan walaupun kondisi
untuk berhenti belum
terpenuhi.
, dengan statement ini
kita bisa melewatkan operasi
yang dilakukan dalam iterasi
sesuai dengan kondisi tertentu.

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

17
Modul 2
Object Oriented Programming (OOP) I
Tujuan:

Apa itu OOP?

1. Mengerti konsep dasarnya.

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

2. Bisa membandingkan pemrograman
berorientasi objek dengan prosedural.
3. Ngerti dan bisa implementasiin Class,

Object-oriented program terdiri dari objek-objek yang
berinteraksi satu sama lain untuk menyelesaikan
sebuah tugas.

Object, Method, dan Constructor
pada program sederhana.

Kenapa menggunakan OOP?
OOP

Pemrograman prosedural

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

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

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

Baik untuk program kecil yang berisi sedikit code.
Tidak dianjurkan diimplementasikan pada
program berukuran besar, karena susah untk dimanage dan di-debug.

debug.

Apakah OOP punya karakteristik?
Abstraksi

Ciri-ciri

Menemukan hal-hal yang penting pada suatu
objek dan mengabaikan hal-hal yang sifatnya
insidental.
Tentukan apa ciri-ciri (atribut) objek.
Tentukan apa yang bisa dilakukan objek.

(atribut):

punya

tangan, berat, tinggi, dll.. (kata
benda, atau kata sifat)

Fungsi (method) : makan,
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
berhak.
Enkapsulasi ini melindungi proses dari
interferensi atau penyalahgunaan dari luar
sistem.

Pedal rem tidak bisa digunakan untuk
mengakses system transmisi
System transmisi mobil yang
menyembunyikan bagaimana
cara dia bekerja mengatur

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

percepatan.

Tongkat transmisi merupakan
interface untuk mengatur
system transmisi. Menaikkan
percepatan, dsb.

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

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

Televisi

Kelas turunan bisa mewarisi anggota-anggota suatu
kelas yang berupa, data dan method, dan bisa
terdapat data dan method tambahan yang baru.
OOP tidak selalu memiliki inheritance. Kita pakai
inheritance kalau superclass sudah mendefinisikan
perilaku yang kita butuhkan. Sehingga kita tinggal
buat subclass dari superclass yang udah punya
perilaku yang kita butuhin.

Televisi
tabung

Televisi

Televisi
plasma

layar datar
Contoh inheritance

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

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

Lonely object is useless
Object needs each other

Object A berkomunikasi dengan Object B.
Object A meminta Object B melakukan sesuatu
untuknya.
Object A kirim pesan disertai informasi ke Object B

Message + info
Object A

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
antarmuka (interface) yang sama untuk
memerintah suatu objek agar dapat
melakukan suatu aksi atau tindakan yang
mungkin secara prinsip sama tapi secara proses
berbeda.

B
A
Kedua mobil di atas sama-sama punya setir, pedal

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

A akan bergerak sangat cepat.

20

transmisi, rem, gas, dsb.
Kita kendarai mobil A, tekan pedal gas kemudian mobil

Sedangkan, ketika kita kendarai mobil B, tekan
pedal gas, yang terjadi adalah sebaliknya.
Berarti, kedua mobil sama-sama punya pedal gas,
tapi memiliki hasil akhir yang berbeda

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010
Java Modifier
Apa itu modifier
dan kenapa kita
butuh itu?
Modifier merupakan
bentuk
pengimplementasian
konsep enkapsulasi.
Dengan adanya
modifier maka class,
interface, method,
dan variabel akan
terkena suatu
dampak tertentu.

Berlaku untuk
Kelompok Modifier

Meliputi
Class

Method

Variabel

Access modifier

√

√

√

public, protected,
private, dan friendly
(default/ tak ada
modifier).

Final modifier

√

√

√

final

√

√

static

Static modifier
Abstract modifier

√

abstract

Syncronized modifier

√

synchronized

Native modifier

√

native

√

Storage modifier

√

transient dan volatile

Access Modifier :
Modifier

Default (tak ada modifier )

Class dan Interface
Dikenali di paketnya

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

Dikenali di manapun

Diwarisi oleh semua subclassnya.

Friendly
Public

Method dan Variabel

Dapat diakses dimanapun.

Protected

Private

Tidak dapat
diterapkan

Diwarisi oleh semua subclassnya.

Tidak dapat
diterapkan

Tidak diwarisi oleh subclassnya

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

Tidak dapat diakses oleh class lain.

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

21
Permitted Modifier:
Modifier
Abstract

Class
Class dapat
berisi method
abstract. Class
tidak dapat
diinstantiasi
Tidak
mempunyai
constructor

Interface

Method

Variabel

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

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

Tidak dapat diterapkan.

Final

Class tidak
dapat
diturunkan.

Tidak dapat
diterapkan.

Method tidak dapat
ditimpa oleh method di
subclass-subclassnya

Berperilaku sebagai
konstanta

Static

Tidak dapat
diterapkan.

Tidak dapat
diterapkan.

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

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

synchronized

Tidak dapat
diterapkan.

Tidak dapat
diterapkan.

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

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

Native

Tidak dapat
diterapkan.

Tidak dapat
diterapkan.

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

Tidak dapat diterapkan.

Transient

Tidak dapat
diterapkan.

Tidak dapat
diterapkan.

Tidak dapat diterapkan.

Variable tidak akan
diserialisasi

Volatile

Tidak dapat
diterapkan.

Tidak dapat
diterapkan.

Tidak dapat diterapkan.

Variabel diubah secara
asinkron. Kompilator tidak
pernah melakukan optimasi
atasnya.

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 adalah cetak biru (rancangan) atau
prototype atau template dari objek.
Kita bisa membuat banyak objek dari satu
macam class. Class mendefiniskan sebuah tipe
dari objek.
Di dalam class kita dapat mendeklarasikan
variabel dan menciptakan objek (instansiasi).
Sebuah class mempunyai anggota yang terdiri
dari atribut dan method.
Atribut adalah semua field identitas yang kita
berikan pada suatu class, misal class manusia
memiliki field atribut berupa nama dan umur.

Class diagram manusia
Manusia
- nama : String
- umur : int
+ setNama : void
+ getNama : String
+ setUmur : void
+ getUmur : int

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

Bagaimana mengaplikasikan class diagram di
atas dalam program?

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

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

23
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
untuk mendukung konsep OO yaitu enkapsulasi mengenai
data hiding. Jadi, kita tidak langsung menembak data/
atribut pada kelas tersebut, tetapi kita memberikan suatu
antarmuka method yang akan mengakses data/ atribut
yang disembunyikan tersebut.

public void setNama(String a){
nama=a;
}

3) Nama atribut - gunakan kata benda, dan diawali dengan
huruf kecil : nama, umur
public String getNama(){
return nama;

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

}

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

public void setUmur(int a){

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

umur=a;

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
suatu class. Asumsikan cetakan kue adalah
class, maka kue yang dihasilkan dari cetakan
tersebut merupakan objek dari class cetakan
kue.
Dalam pengembangan OOP lebih lanjut,
sebuah objek dapat dimungkinkan terdiri atas
objek-objek lain.

mencetak

Objek mobil terdiri atas
mesin

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

pintu

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

ban
Kerangka mobil

Manusia objekManusia = new Manusia();

Membuat objek manusia

Kendaraan Bermotor

Contoh disamping merupakan contoh objek
yang merupakan turunan dari objek lain serta
memiliki sifat tambahan pada dirinya.
Coba jelaskan dengan kata-katamu sendiri
gambar di samping…!
Answer:

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

25
Method dan Constructor
Apa itu method?

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

public int jumlahAngka(int x, int y){
int z = x+y;
return z;
}

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

26

Isi memori
n= 4

n=4

Salinan isi memori

menyalin isi
memori

n=4

compiler

method

n= 8

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010
Melewatkan secara Referensi (Pass by Reference)
Digunakan pada array dan objek. Prosesnya isi
memory pada variable array dan objek
merupakan penunjuk ke alamat memory yang
mengandung data sesungguhnya yang akan
dioperasikan. Dengan kata lain, variable array
atau objek menyimpan alamat memory bukan isi
memory. Akibatnya, setiap perubahan variable di
dalam method akan mempengaruhi nilai pada
variable asalnya.
Bagaimanakah keluaran dari program di bawah?

public class TestPass {
int i,j;
public TestPass(int a,int b) {
i =a;
j = b;
}
//passing by value
public void calculate(int m,int n) {
m = m*10;
n = n/2;
}
//passing by reference
public void calculate(TestPass e) {
e.i = e.i*10;
e.j = e.j/2;
}
}

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

27
Answer:
Nilai sebelum
x = 10
y = 20
Nilai sesudah
x = 10
y = 20
Nilai sebelum
z.i = 50
z.j = 100
Nilai sesudah
z.i = 500
z.j = 50

Keterangan

passed by value :
passed by value :
passed by reference :
passed by reference :

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

Constructor

Tipe khusus method yang digunakan untuk
menginstansiai atau menciptakan sebuah objek.
Nama constructor = nama kelas.
Constructor TIDAK BISA mengembalikan nilai.
Tanpa membuat constructor secara eksplisit-pun,
Java akan menambahkan constructor default
secara implisit. Tetapi jika kita sudah
mendefinisikan minimal sebuah constructor, maka
Java tidak akan menambah constructor default.
Constructor default tidak punya parameter.

Deklarasi Constructor:

[modifier] namaclass(parameter1){
Body constructor;
}
[modifier] namaclass(parameter1,parameter2){
Body constructor;
}
[modifier] namaclass(parameter1,parameter2,…,parameterN){
Body constructor;
}

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
Umur : 76
Nama : Mat Conan
Umur : 0

Coba Anda analisis mengapa hasilnya seperti di samping ?
Apakah program di atas constructornya eksplisit atau
implisit?
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
Common Laboratory 2009/2010

29
Keyword “this”
Apa itu?
Suatu besaran referensi khusus yang
digunakan di dalam method yang dirujuk
untuk objek yang sedang belaku. Nilai this,
sedang berjalan dipanggil.

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

public class Lagu {
private String band;
private String judul;
public void IsiParam(String judul,String band) {
this.judul = judul;
this.band = band;
}
public void cetakKeLayar() {
if(judul==null && band==null) return;
System.out.println("Judul : " + judul +"nBand : " + pencipta);
}
}
public class DemoLagu {
public static void main(String[] args) {
Lagu song = new Lagu();
song.IsiParam("Dance Beside","All American Reject ");
song.cetakKeLayar();
}
}
Hasil output adalah seperti ini:
Judul : Dance Beside
Pencipta: All American Reject

FYI, Keyword this juga dapat digunakan
untuk memanggil suatu konstruktor dari
konstruktor lainnya.

30

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

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010
public class Buku {
private String pengarang;
private String judul;

Keyword this untuk memanggil
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
Common Laboratory 2009/2010

31
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
meng‟objekkan‟ sesuatu yang awalnya tidak
bisa dianggap sebagai objek. Hal ini
memungkinkan code menjadi lebih objectoriented daripada ketika tidak menggunakan
inner class. Karena setiap instansiasi inner class
merupakan instansiasi dari top-level classnya
juga, maka objek inner class juga memiliki
akses ke setiap member dan method kelas
induknya.
Hirarki tanpa inner class

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

Hirarki dengan inner class

package
package

class1

class2

class3

classN

class2
Class3

class1
Modul Praktikum Pemrograman Berorientasi Objek
Common Labz 2008-2009.
http://java.lyracc.com
http://battleprogrammer.wordpress.com
http://www.javaworld.com
http://bernazlionk.wordpress.com
http://www.wikipedia.org
http://one.indoskripsi.com

32

innerclassB
innerclassC
innerclassA

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010
Modul 3
Object Oriented Programming (OOP) II
Tujuan:
1. Mengerti konsep OOP lebih dalam.
2. Ngerti konsep dan bisa implementasiin
inheritance, polymorphisme, interface,
dan abstract class pada program.
3. Ngerti perbedaan class dengan
interface, interface dengan abstract
class.

Contoh pewarisan pada Class manusia

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

Inheritance
Apa itu inheritance?
Pewarisan merupakan proses peciptaan kelas baru
dengan mewarisi karakteristik kelas yang sudah
ada, ditambah dengan karakteristik unik kelas
baru itu.
Sebelumnya inheritance sudah dijelaskan pada
modul 2.
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
Common Laboratory 2009/2010

33
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{
private int panjang;
private int lebar;
public void setPanjang(int p){
panjang=p;
}
public void setLebar(int l){
lebar=l;
}
public int getPanjang(){
return panjang;
}
public int getLebar(){
return lebar;
}
public int Luas(){
int luas=panjang*lebar;
return luas;
}

sebagai kelas turunan dari kelas PersegiPanjang
public class Balok extends PersegiPanjang{
private int tinggi;
public void setTinggi(int t){
tinggi=t;
}
public int getTinggi(){
return tinggi;
}
public int Volume(){
int v=getPanjang()*getLebar()*tinggi;
return v;
}
}

}

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("
System.out.println("
System.out.println("
System.out.println("
System.out.println("

SubClass ==BALOK==");
Panjang
: "+b.getPanjang());
Lebar
: "+b.getLebar());
Tinggi
: "+b.getTinggi());
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){}
public void setHarga(double harga){}
public void setHarga(float harga){}

Yang penting tipe data dalam
parameter method yang dioverload
itu HARUS BERBEDA!!!

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

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

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

37
Abstract Class
Bentuk Umum:

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

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

[modifier] abstract class NamaKelas {
// deklarasi attribute
// definisi/prototype method
}

Seperti apakah bentuk Hewan?

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

Ini?
Ini?

Ketika kamu sudah tidak bisa membayangkan
bagaimana bentuk suatu kelas seperti
MakhlukHidup atau pun Hewan karena terlalu
abstraknya/terlalu umum, maka kelas tersebut
bisa dijadikan kelas abstrak.

abstract class Hewan {
protected String nama;
protected int jumKaki;
protected boolean bisaTerbang = false;
public Hewan(String nama, int kaki, boolean terbang) {
this.nama = nama;
jumKaki = kaki;
bisaTerbang = terbang;
}
public abstract void bersuara();
public static void makan() {
System.out.println("nyam, nyam, nyam");
}
public void lihatHewan() {
System.out.println("");
System.out.println("nama
: "+nama);
System.out.println("jumlah kaki : "+jumKaki);
System.out.println("bisa terbang : "+bisaTerbang);
}
}

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

39
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 interface TkPhone{
static final String MAKER= "YES-KIA";
public int getHarga(int id);
}

Output dari program:

public class PhoneImpl implements TkPhone{
public int getHarga(int id){
int hr=0;
if (id==1){
hr=500;
}
if (id==2){
hr=1000;
}
return hr;
}
}

public class TokoHP{
public static void main(String args[]){
PhoneImpl pp = new PhoneImpl();
System.out.println("");
System.out.println("HP ini dibuat oleh PT "+pp.MAKER);
System.out.println("Harga HP in sekitar $ "+pp.getHarga(1));
}
}

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

41
Modul 4
Exception, I/O, dan Operasi File
Sering kali, ketika menjalankan sebuah program
kita menemukan kesalahan. Kesalahan itu bisa
berasal dari hardware, software, atau bahkan
dalam algoritma atau kesalahan logika itu sendiri.

Tujuan:
1. Mengerti konsep exception, I/O, dan
operasi file.

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

2. Bisa implementasiin konsep exception
dan I/O dalam sebuah pemrograman
sederhana untuk operasi file dengan

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

tepat.

Kesalahan itu ada apa aja sih?
Kesalahan Hardware dan Software
Hardware saja

Software saja

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

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

Biasanya, kesalahan menyangkut hardware
dideteksi dan dilaporkan oleh sistem.

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

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

42

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010
Kesalahan Algoritma
berhubungan dengan kesalahan atau
keterbatasan intrinsik dari pemodelan dunianyata yang dilakukan oleh komputer.

binary

Menggunakan perkiraan binary terbaik

Untuk mengatasi kesalahan pembulatan dan
pemotongan pada berbagai algoritma
muncullah disiplin ilmu bernama analisa
numerik.
Jenis kesalahan ini adalah yang paling sering
diabaikan oleh programmer.

konversi

decimal

untuk pecahan decimal menurut panjang
kata mesin tersebut.
Perkiraan yang dilakukan oleh komputer
bisa menyebabkan kesalahan pembulatan
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
Semua yang bertipe Runtime Exception dan
turunannya tidak harus ditangani dalam
program kita.
Outputnya:

class RuntimeException
{
public static void main (String [] args)
{
int[] arr = new int[1];
System.out.println(arr[1]);
}
}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at RuntimeException.main(RuntimeException.java:6)

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

43
Exception yang dicek
Semua tipe eksepsi yang bukan turunan dari class RuntimeException merupakan eksepsi yang harus
ditangani oleh program anda. Java bahkan tidak mengijinkan anda mengompilasi program yang
anda buat, jika tidak menangani eksepsi tersebut. (BIASANYA YANG BERHUBUNGAN DENGAN
PENGAKSESAN I/O).

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

Struktur penulisan:
try{
......//blok program
} catch (tipeException e) {
......//blok program
}

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
Mekanisme throw memungkinkan program
untuk mengirim / melempar exception untuk
kemudian program menyikapi (bereaksi) atas
exception tersebut.

Cara penulisan:
Throw ObjekEksepsi;

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

45
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
manual melalui kode yang kita tulis. Kita dapat
melakukan hal tersebut dengan kata kunci
throw ini, seperti pada contoh diatas.

Penggunaan Throws
Sangat erat hubungannya dengan
penggunaan exception yang dicek oleh Java.
Keyword ini dipake kalo misalnya ada method
yang mungkin menyebabkan exception tapi
dia gak menangani exception tersebut.
Exception akan dilempar ke luar, maka dari
itu ketika keyword ”throws” digunakan saat
pendeklarasian method.

int[] arr = new int[1];
System.out.println(arr[1]);
Eksepsi ini gak perlu ditulis lagi, karena kita
udah pake throw

Cara penulisan:
class NamaClass throws Exception{
.........
}
atau fungsi / prosedur
int f1() throws Exception{
..........
}

Masih bingung? Let‟s see the code..

46

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010
Karena ada ini, makanya gak ada
Outputnya:
Lebih kecil 5
Program selesai

blok try-catch nya

public class CobaThrows{
public void tampil() throws Exception {
int x=0;
if (x<5)
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) {
System.out.println(e.getMessage());
method itu ada di antara
}
blok try-catch
System.out.println ("Program selesai");
}
}

Penanganan Dengan Finally
Apa itu Finally?
Penggunaan blok try catch terkadang
membingungkan karena kita tidak dapat
menentukan dengan pasti alur mana yang
akan dieksekusi. Apalagi penggunaan throw
yang mengakibatkan kode setelah throw
tidak akan dieksekusi atau justru terjadi
kesalahan pada blok catch, menyebabkan
program akan berhenti. Untuk mengatasi
problem ini, Java memperkenalkan keyword
finally. Dimana semua kode yang ada dalam
blok finally “pasti” akan dieksekusi apapun
yang terjadi di dalam blok try catch.

Supaya output yang
terjadi seperti ini,
bagaimana kah kodenya?

Cara penulisan:
try{
......//blok
} catch (tipeException1
......//blok
TipeException1
} catch (tipeException2
......//blok
TipeException2
} finally {
......//blok
}

program
e) {
program untuk
e) {
program untuk
program

Terjadi exception
Program Selesai
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: -1
at DemoFinally.main(DemoFinally.java:11)

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

47
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

output

Data

Hardware

input

info
Data
info

info

Input: mengambil informasi data dari hardware
Output: mengirim informasi data ke hardware

sebuah program membuka stream dari sebuah
sumber informasi (source) seperti file, memory,
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 bedabeda (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
mempunyai 1 konstruktor dan 17 method yang
ada dalam classnya, selebihnya turunan dari class
parentnya. Berikut ini akan dijelaskan
konstruktor dan method yang sering digunakan.
1.

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

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

DataOutputStream(OutputStream out)
Untuk membuat sebuah objek DataOutputStream
dengan spesifikasi OutputStream yang diinginkan.

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

Output untuk contoh input data

void writeXxx(xxx v)
xxx disini dapat diganti dengan tipe data primitif
seperti int, float, byte, boolean, byte, char, dll.

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

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

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

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

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

Additional stuff

Outputnya:

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

52

Hello World

FYI, kalo kamu mo instan objek dari paket
java io, error harus selalu ditangkap oleh
Exception, seperti IOException yang
digunakan untuk menangkap kesalahan dari
error IO.

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010
Operasi File
File digunakan sebagai media penyimpan. Untuk mengakses file kita harus menspesifikasikan
dimana file yang akan kita akses, atau file baru yang akan disimpan. Dalam java kita dapat
melakukan operasi file, yaitu membuat file baru atau menulis dan membaca file dengan character
stream atau dengan byte stream.
Untuk menciptakan sebuah file dengan mengakses class java.io.File dan menciptakan objek dari class
tersebut, ini tanpa harus menangkap error io. Berbeda dengan menciptakan file yang langsung
diakses oleh stream, file tersebut harus dapat menangkap error io ketika penciptaan objek class file.
java.io.File

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

java.io.FileWriter  dengan character
stream

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

Kira-kira seperti apa yah

java.io.FileInputStream  dengan byte stream

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

java.io.FileOutputStream  dengan byte stream

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

java.io.FileReader  dengan character stream

terdapat 3 konstruktor dan tidak ada method yang
dideskripsikan didalam class ini.

FileReader(File of), FileReader(String nama).
Digunakan untuk mengambil file untuk dibaca secara
character stream,bisa memasukan deskripsi file yang
telah ada dengan String, atau dengan file yang telah
diinstan dengan jelas.

implementasinya di kode? Any idea?

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

53
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') {
enter
fout.write(data);
data = (byte)System.in.read();
}
}
catch (FileNotFoundException e) {
System.out.println("File "+namaFile+" tidak dapat dicreate");
}
catch (IOException e) {
System.out.println("Terjadi Exception");
}
finally {
if (fout!=null) {
try {
fout.close();
}
catch (IOException e) {
System.out.println("Terjadi Exception");
}
}
}
}
}

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

Proses A

Remote method

Objek X
bark()

invocation
Local method

interface

Objek manusia
Agar satu objek bisa berkomunikasi
dengan objek lain maka setiap objek
pasti memiliki definisi interface.

Objek Y
eat()

invocation

Proses B
Objek L
sing()
Objek P

object

sit()

Remote object dipanggil oleh objek lain melalui remote object
references yang merupakan sebuah ID yang dapat digunakan untuk
menunjuk pada suatu remote object tertentu, di dalam ID ada info
alamat host di mana remote object yang ditunjuk lagi jalan. Method
mana aja yang bisa dipanggil secara remote didefinisiin di remote
interface

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

Remote

55
Object Serialization
Apa itu object serialization?
Suatu mekanisme yang dapat membuat sebuah objek dapat dikirimkan seperti mengirimkan data.
Object serialization merupakan perluasan dari inti class java io yang digunakan untuk objek dan bisa
digunakan untuk pengkodean (encoding) untuk objek dan membuat objek tersebut dapat diraih
atau digunakan, dengan melalui bit-bit stream, kemudian dapat digunakan untuk penyusunan
kembali objek tersebut dari bit-bit stream yang dikodekan, dan saling melengkapi. Serialisasi
merupakan mekanisme yang ringan dan kuat untuk komunikasi dengan sockets atau RMI(Remote
Method Invocation). Selain untuk komunikasi dengan sockets teknik ini dapat digunakan juga untuk
menyimpan keadaan suatu status dari suatu objek ke dalam file, seperti yang sudah dijelaskan di
pendahuluan.
Jika kita ingin membuat sebuah objek yang dapat diserialisasikan, maka kita harus
mengimplementasikan salah satu interface java.io.Serializable atau java.io.Externalizable pada
class yang ingin dibuat objek yang dapat diserialisasikan. Untuk lebih jelas tentang serialisasi objek
dibawah ini akan diberikan sedikit penjelasan yang terkait dengan objek serialisasi.

Interface java.io.Serializable
Interface serializable harus di implementasikan jika ingin membuat objek yang dapat diserialisasi,
implementasi interface serializable tergolong sederhana karena tidak terdapat method yang harus
didefinisikan untuk di override.
Tujuan mengimplementasikan interface serializable adalah untuk memberitahukan kepada JVM
(Java Virtual Machine), bahwa objek yang menerapkan serializabel merupakan objek yang dapat
diserialisasikan.
Class java.io.ObjectOutputStream
Class objectoutputstream adalah kelas yang
digunakan untuk mengirimkan objek
menjadi stream yang kemudian dapat
dikirimkan ke file atau ke socket (jaringan).
Class ObjectOutputStream mempunyai 2
constructor dan 31 method untuk versi jdk 1.5.
Adapun method dan constructor yang sering
digunakan adalah
ObjectOutputStream(OutputStream out)
Membuat ObjectOutputStream yang akan
menuliskan ke spesifik OutputStream yang
dikehendaki.
void writeObject(Object obj)
menuliskan objek yang akan dikirimkan ke
ObjectOutputStream.

56

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

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

Output program:

nama barang : Baju
jumlah barang : 5

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

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

Keterangan
Menuliskan nilai bertipe Boolean
Menuliskan nilai bertipe byte
Menuliskan nilai character dengan
(byte)(0xff & (c >> 8))
(byte)(0xff & c)

Menuliskan nilai bertipe double

void writeFloat(float f)
void writeInt(int i)
Method-method ini yang sering dapat
digunakan untuk menuliskan tipe
data, yang ada dalam method
writeExternal ini, meskipun banyak
method lain lagi yang dapat

Menuliskan nilai bertipe float
Menuliskan nilai bertipe integer

void writeLong(long l)

Menuliskan nilai bertipe long

void writeShort(int s)

Menuliskan nilai bertipe short

void writeObject(Object o)

Menuliskan objek atau tipe data
referensi

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
char readChar()
Membaca nilai karakter dan meng-embalikannya
parameter bertipe
ObjecInput yang
double readDouble()
Membaca nilai double dan meng-embalikannya
bernama in, sama
seperti ObjectOutput,
float readFloat()
Membaca nilai float dan meng-embalikannya
ObjectInput
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
halaman sebelah
data barang : sepatu
jumlah barang : 2

1.

2.
3.

[Booch95] Grady Booch, “Object Oriented Analysis and
Design with Application”, The Benjamin/ Cumming
Publishing Company, 1995.
[Coad91] Coad, Peter, Yourdon, “Object Oriented Design”,
Second Edition, Prentice Hall, 1991
[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
Common Laboratory 2009/2010

59
import java.io.*;
public class BarangEx implements Externalizable{
private String nama;
private int jumlah;
public BarangEx(){
}

//konstruktor 1

public BarangEx(String nm, int jml){
nama=nm;
jumlah=jml;
}

//konstruktor2

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

Modul 5
Multithreading
Tujuan:
1. Kenal konsepnya
2. Bisa implementasiinnya
3. Ngerti dan paham serta
bisa implementasiin
sinkronisasi di
multithreading

Apa itu thread?
Inget waktu kita buat suatu program? Misalkan pas
kita buat program mengurutkan bilangan, kita
tahunya kalo program itu dibuat secara sekuensial.
Ada awal, terus eksekusi programnya, dan akhir.
Nah, aliran eksekusi dari suatu “task” pada sebuah
program itu kita sebut thread. Masih bingung? Let‟s
take a look gambar di bawah ini.

mandi()

Kenapa kita harus tahu
thread??

Satu program
x.sabunan()

Karena ketika kita membuat sebuah
program, supaya interaktif terkadang
kita nggak cuma jalanin satu task aja.
Kita pasti pernah main game kan? Ketika
main game, terjadi beberapa task di
sana. Ada yang tasknya ngurusin visual,
ngurusin logikanya, perhitungan score,
dan sebagainya. Jadi, ada banyak thread
yang jalan di program game yang kita
mainin.
Nah, kemampuan menjalankan
beberapa thread pada waktu yang
bersamaan yang mana masing-masing
mengerjakan task yang berbeda dalam
satu program, kita sebut dia sebagai
multithreading.

x.sikatGigi()

x.selesai()

mandi()

x.sabunan()

Satu
program

mandi()

x.sikatGigi()

Dua
x.bilasSabun()

x.selesaiSabun()

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

Satu thread

x.kumur2()

threads

x.selesaiSikat()

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

62

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010
Modul 5
Multithreading

Setelah kita kenal thread…
Bagaimana cara membuat dan menggunakan Threads?
1
Subclass yang extends

Class java.lang.Thread

Untuk jalanin threadnya:
1.
2.

Buat objeknya
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
Common Laboratory 2009/2010

63
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
Modul 5
Multithreading
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,
manakah cara yang paling mudah? Kenapa?
Answer:

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

65
Gimana kalau misalnya kita maunya sikat gigi dulu baru
sabunan?
FYI, setiap thread itu punya prioritas lho.

setPriority(int arg())

Prioritas berupa int:

digunakan untuk modifikasi prioritas

MIN_PRIORITY: 1

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
Kondisi awal dari sebuah
thread, ketika objek
thread dibuat

Runnable

Not Runnable
thread lagi running tapi
gak ngelakuin apa-apa.

run method
selesai
Dead
thread telah selesai eksekusi
task

66

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010
Modul 5
Multithreading

Mengubah nama thread.

Apakah thread masih hidup?

Menjalankan thread.

Menghentikan thread.

Mengubah prioritas thread

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

Mengetahui prioritas thread.

Menjalankan aktivitas thread yang
tersuspend.

Menghentikan aktivitas thread
sementara sampai method resume( )
dipanggil.

Mengetahui nama thread.

Dan lain-lain….

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

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

Bagaimana sintaks sinkronisasi?
public synchronized int namaMethod(){
//isi method
}

Sinkronisasi method, yang hanya dilakukan
terhadap method yang punya identifier

synchronized.

Sinkronisasi objek, dilakukan terhadap seluruh
method pada objek.

Public class SinkronisasiThread{
private static Resources r;
public static void main(String[] args){
r = new Resources();
new Ambil().start();
new Tambah().start();
}

synchronized(object){
//isi method
}

Lengkapilah kode disamping berdasarkan urutan
nomor yang telah disediakan!

1
}

2

static class Resources{
2
private Boolean b = false;
private byte nilai = 0;
private synchronized void tambah(){
while(b==true){
try{
System.out.println(“Menunggu untuk ambil”);
wait();
}catch(InterruptedException e){}
}
System.out.println(“Tambah nilai “+ ++nilai);
b=true;
notifyAll();
}
private synchronized void ambil(){
while(b==false){
try{
System.out.println(“Menunggu untuk tambah”);
wait();
}catch(InterruptedException e){}
}
System.out.println(“Ambil nilai “+ ++nilai);
b=false;
notifyAll();
}

static class Ambil extends Thread{
1
public void run(){
System.out.println(“Ambil berjalan”);
for(int a=0;a<10;a++){
r.ambil();
}
}
}
static class Tambah extends Thread{
public void run(){
System.out.println(“Ambil berjalan”);
for(int a=0;a<10;a++){
r.tambah();
}
}
}

}

68

Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010
Modul 6
Graphical User Interface (GUI)
Tujuan:
5.

Kenal komponen-komponen dasar
dalam pembuatan UI dalam Java.

6.

Ngerti konsep GUI dan bisa
implementasiin di program sederhana

Setelah kita lalui modul-modul sebelumnya
yang mana programnya cuma pake console,
nah sekarang kita masuk ke modul 6 yang
ngebahas tentang GUI.
Berarti di modul ini kita bisa buat program yang
ada tampilannya yaa.

serta bisa integrasiin dengan salah satu
DBMS.
7.

Ngerti konsep dari event handling.

Awt dan swing
Platform
package

AWT
Platform oriented
Java.awt

AWT components
Swing
multiplatform
Javax.swing

Beberapa fasilitas yang disediakan oleh kedua
class tersebut adalah sebagai berikut:
Pengaturan tata letak (layout management)
komponen dalam suatu container.
Mendukung event handling, yaitu mekanisme
pendeteksian event dan penentuan respons yang
akan diberikan ketika pengguna (user)
mengakses komponen tersebut.
Manipulasi grafis komponen seperti font, warna,
icon, dll.

Label
Button
Checkbox
Choice
List
MenuItem
TextField
Scrollbar
TextArea
ScrollPanel
Canvas

Swing components

Swing component pada dasarnya sama kayak AWT tapi ada penambahan fitur pada Swing.
Modul Praktikum Pemrograman Berorientasi Objek
Common Laboratory 2009/2010

69
Komponen utama dalam GUI
Containers. Adalah tempat dimana componen lain bisa di tempatkan didalamnya, contohnya

adalah panel.
Canvases. Digunakan untuk menampilkan image atau pembuatan program yang berbasis
grafik. Kita bias menggambar titik, lingkaran dan sebagainya.
UI components. contohnya buttons, lists, simple pop-up menus, check boxes, text fields, dan
elemen khusus lain untuk user interface.
Window contsruction components. Contohnya windows, frames, menu bars, dan dialog boxes.

The Basic User Interface Components with Swing
Top-Level Container
Intermediate-Level Container
Atomic Component

Container dasar dimana komponen lain diletakkan.
Ex : Frame (JFrame), Dialog (JDialog) & Applet
(JApplet)
Container perantara dimana komponen lain diletakkan
Ex : JPanel, dimana umumnya hanya digunakan sebagai
tempat untuk meletakkan/mengelompokkan komponenkomponen yang digunakan, baik container atau berupa
atomic component. Dan digunakan juga sebagai scroll pane
(JScrollPane & JTabbed Pane).
Komponen yang memiliki fungsi spesifik, dimana umumnya
user langsung berinteraksi dengan komponen ini
Ex : JButton, JLabel, JTextField, JTextArea.

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
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO
Modul praktikum PBO

Más contenido relacionado

La actualidad más candente

Konsep-Konsep Dasar Pengembangan Perangkat Lunak dan Gim(Pert 1 - 3) PPLG-MA...
Konsep-Konsep Dasar Pengembangan Perangkat Lunak dan Gim(Pert 1 - 3)  PPLG-MA...Konsep-Konsep Dasar Pengembangan Perangkat Lunak dan Gim(Pert 1 - 3)  PPLG-MA...
Konsep-Konsep Dasar Pengembangan Perangkat Lunak dan Gim(Pert 1 - 3) PPLG-MA...MayaEndah1
 
Pertemuan 8 google map
Pertemuan 8 google mapPertemuan 8 google map
Pertemuan 8 google mapheriakj
 
Modul PBO Bab-06 - Polimorfisme (Polymorphism)
Modul PBO Bab-06 - Polimorfisme (Polymorphism)Modul PBO Bab-06 - Polimorfisme (Polymorphism)
Modul PBO Bab-06 - Polimorfisme (Polymorphism)Rakhmat Dedi Gunawan
 
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)Debby Ummul
 
Pengertian dan Representasi Graph
Pengertian dan Representasi GraphPengertian dan Representasi Graph
Pengertian dan Representasi GraphZaldy Eka Putra
 
Soal latihan perancangan basis data 1 6 semester 2
Soal latihan perancangan basis data 1 6 semester 2Soal latihan perancangan basis data 1 6 semester 2
Soal latihan perancangan basis data 1 6 semester 2Bina Sarana Informatika
 
Pertemuan 9 Representasi Pengetahuan
Pertemuan 9 Representasi PengetahuanPertemuan 9 Representasi Pengetahuan
Pertemuan 9 Representasi PengetahuanEndang Retnoningsih
 
Layout Java dengan netbeans
Layout Java dengan netbeansLayout Java dengan netbeans
Layout Java dengan netbeansdaffa12
 
Teori bahasa-dan-otomata
Teori bahasa-dan-otomataTeori bahasa-dan-otomata
Teori bahasa-dan-otomataBanta Cut
 
Modul Pemrograman Berorientasi Objek
Modul Pemrograman Berorientasi ObjekModul Pemrograman Berorientasi Objek
Modul Pemrograman Berorientasi ObjekWahyu Widodo
 
[PBO] Pertemuan 11 - GUI Java Desktop
[PBO] Pertemuan 11 - GUI Java Desktop[PBO] Pertemuan 11 - GUI Java Desktop
[PBO] Pertemuan 11 - GUI Java Desktoprizki adam kurniawan
 
Array Dimensi banyak struktur data pertemuan ke 3
Array Dimensi banyak struktur data pertemuan ke 3Array Dimensi banyak struktur data pertemuan ke 3
Array Dimensi banyak struktur data pertemuan ke 3said zulhelmi
 
6. analisis semantik
6. analisis semantik6. analisis semantik
6. analisis semantikyuster92
 

La actualidad más candente (20)

Konsep-Konsep Dasar Pengembangan Perangkat Lunak dan Gim(Pert 1 - 3) PPLG-MA...
Konsep-Konsep Dasar Pengembangan Perangkat Lunak dan Gim(Pert 1 - 3)  PPLG-MA...Konsep-Konsep Dasar Pengembangan Perangkat Lunak dan Gim(Pert 1 - 3)  PPLG-MA...
Konsep-Konsep Dasar Pengembangan Perangkat Lunak dan Gim(Pert 1 - 3) PPLG-MA...
 
Struktur data soal-latihan
Struktur data soal-latihanStruktur data soal-latihan
Struktur data soal-latihan
 
Pertemuan 8 google map
Pertemuan 8 google mapPertemuan 8 google map
Pertemuan 8 google map
 
Contoh soal uts struktur data
Contoh soal uts struktur dataContoh soal uts struktur data
Contoh soal uts struktur data
 
Modul PBO Bab-06 - Polimorfisme (Polymorphism)
Modul PBO Bab-06 - Polimorfisme (Polymorphism)Modul PBO Bab-06 - Polimorfisme (Polymorphism)
Modul PBO Bab-06 - Polimorfisme (Polymorphism)
 
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
 
Pengertian dan Representasi Graph
Pengertian dan Representasi GraphPengertian dan Representasi Graph
Pengertian dan Representasi Graph
 
Soal latihan perancangan basis data 1 6 semester 2
Soal latihan perancangan basis data 1 6 semester 2Soal latihan perancangan basis data 1 6 semester 2
Soal latihan perancangan basis data 1 6 semester 2
 
Pertemuan 9 Representasi Pengetahuan
Pertemuan 9 Representasi PengetahuanPertemuan 9 Representasi Pengetahuan
Pertemuan 9 Representasi Pengetahuan
 
Jurnal Reservasi Hotel
Jurnal Reservasi HotelJurnal Reservasi Hotel
Jurnal Reservasi Hotel
 
Layout Java dengan netbeans
Layout Java dengan netbeansLayout Java dengan netbeans
Layout Java dengan netbeans
 
Pertemuan 9 ok
Pertemuan 9 okPertemuan 9 ok
Pertemuan 9 ok
 
Teori bahasa-dan-otomata
Teori bahasa-dan-otomataTeori bahasa-dan-otomata
Teori bahasa-dan-otomata
 
Java generics
Java genericsJava generics
Java generics
 
Modul Pemrograman Berorientasi Objek
Modul Pemrograman Berorientasi ObjekModul Pemrograman Berorientasi Objek
Modul Pemrograman Berorientasi Objek
 
[PBO] Pertemuan 11 - GUI Java Desktop
[PBO] Pertemuan 11 - GUI Java Desktop[PBO] Pertemuan 11 - GUI Java Desktop
[PBO] Pertemuan 11 - GUI Java Desktop
 
Soal uas struktur data
Soal uas struktur dataSoal uas struktur data
Soal uas struktur data
 
Array Dimensi banyak struktur data pertemuan ke 3
Array Dimensi banyak struktur data pertemuan ke 3Array Dimensi banyak struktur data pertemuan ke 3
Array Dimensi banyak struktur data pertemuan ke 3
 
Pertemuan 5 Stack atau Tumpukan
Pertemuan 5 Stack atau TumpukanPertemuan 5 Stack atau Tumpukan
Pertemuan 5 Stack atau Tumpukan
 
6. analisis semantik
6. analisis semantik6. analisis semantik
6. analisis semantik
 

Similar a Modul praktikum PBO

Similar a Modul praktikum PBO (20)

Java
JavaJava
Java
 
Kk 14
Kk 14Kk 14
Kk 14
 
Network Programming 2 - Dasar Pemrograman Java
Network Programming 2 - Dasar Pemrograman JavaNetwork Programming 2 - Dasar Pemrograman Java
Network Programming 2 - Dasar Pemrograman Java
 
Pengenalan_Materi-Paradigman_PBO-fix.pptx
Pengenalan_Materi-Paradigman_PBO-fix.pptxPengenalan_Materi-Paradigman_PBO-fix.pptx
Pengenalan_Materi-Paradigman_PBO-fix.pptx
 
Makalah java
Makalah javaMakalah java
Makalah java
 
Makalah java
Makalah javaMakalah java
Makalah java
 
Java
JavaJava
Java
 
Makalah java
Makalah javaMakalah java
Makalah java
 
Makalah java
Makalah javaMakalah java
Makalah java
 
Makalah java
Makalah javaMakalah java
Makalah java
 
Pengenalan pemrograman java
Pengenalan pemrograman javaPengenalan pemrograman java
Pengenalan pemrograman java
 
Pengenalan pemrograman java
Pengenalan pemrograman javaPengenalan pemrograman java
Pengenalan pemrograman java
 
Java
JavaJava
Java
 
Java
JavaJava
Java
 
Fajar Satrio Java
Fajar Satrio JavaFajar Satrio Java
Fajar Satrio Java
 
Pertemuan 1
Pertemuan 1Pertemuan 1
Pertemuan 1
 
JAVA
JAVAJAVA
JAVA
 
JAVA
JAVAJAVA
JAVA
 
PPT JAVA
PPT JAVAPPT JAVA
PPT JAVA
 
150 Rahasia Pemrograman Java
150 Rahasia Pemrograman Java150 Rahasia Pemrograman Java
150 Rahasia Pemrograman Java
 

Último

Bab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptx
Bab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptxBab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptx
Bab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptxrizalhabib4
 
AKSI NYATA BERBAGI PRAKTIK BAIK MELALUI PMM
AKSI NYATA BERBAGI PRAKTIK BAIK MELALUI PMMAKSI NYATA BERBAGI PRAKTIK BAIK MELALUI PMM
AKSI NYATA BERBAGI PRAKTIK BAIK MELALUI PMMIGustiBagusGending
 
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdfSalinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdfWidyastutyCoyy
 
mengapa penguatan transisi PAUD SD penting.pdf
mengapa penguatan transisi PAUD SD penting.pdfmengapa penguatan transisi PAUD SD penting.pdf
mengapa penguatan transisi PAUD SD penting.pdfsaptari3
 
algoritma dan pemrograman komputer, tugas kelas 10
algoritma dan pemrograman komputer, tugas kelas 10algoritma dan pemrograman komputer, tugas kelas 10
algoritma dan pemrograman komputer, tugas kelas 10maulitaYuliaS
 
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdf
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdfContoh Laporan Observasi Pembelajaran Rekan Sejawat.pdf
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdfCandraMegawati
 
vIDEO kelayakan berita untuk mahasiswa.ppsx
vIDEO kelayakan berita untuk mahasiswa.ppsxvIDEO kelayakan berita untuk mahasiswa.ppsx
vIDEO kelayakan berita untuk mahasiswa.ppsxsyahrulutama16
 
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdfAksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdfJarzaniIsmail
 
Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)
Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)
Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)MustahalMustahal
 
bab 6 ancaman terhadap negara dalam bingkai bhinneka tunggal ika
bab 6 ancaman terhadap negara dalam bingkai bhinneka tunggal ikabab 6 ancaman terhadap negara dalam bingkai bhinneka tunggal ika
bab 6 ancaman terhadap negara dalam bingkai bhinneka tunggal ikaAtiAnggiSupriyati
 
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptxKontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptxssuser50800a
 
Membuat Komik Digital Berisi Kritik Sosial.docx
Membuat Komik Digital Berisi Kritik Sosial.docxMembuat Komik Digital Berisi Kritik Sosial.docx
Membuat Komik Digital Berisi Kritik Sosial.docxNurindahSetyawati1
 
KELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKA
KELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKAKELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKA
KELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKAppgauliananda03
 
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptx
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptxMODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptx
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptxSlasiWidasmara1
 
MAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdf
MAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdfMAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdf
MAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdfChananMfd
 
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptx
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptxPPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptx
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptxdpp11tya
 
MODUL AJAR BAHASA INDONESIA KELAS 6 KURIKULUM MERDEKA.pdf
MODUL AJAR BAHASA INDONESIA KELAS 6 KURIKULUM MERDEKA.pdfMODUL AJAR BAHASA INDONESIA KELAS 6 KURIKULUM MERDEKA.pdf
MODUL AJAR BAHASA INDONESIA KELAS 6 KURIKULUM MERDEKA.pdfAndiCoc
 
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptxBAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptxJuliBriana2
 
7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx
7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx
7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptxSusanSanti20
 
MATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITAS
MATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITASMATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITAS
MATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITASbilqisizzati
 

Último (20)

Bab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptx
Bab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptxBab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptx
Bab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptx
 
AKSI NYATA BERBAGI PRAKTIK BAIK MELALUI PMM
AKSI NYATA BERBAGI PRAKTIK BAIK MELALUI PMMAKSI NYATA BERBAGI PRAKTIK BAIK MELALUI PMM
AKSI NYATA BERBAGI PRAKTIK BAIK MELALUI PMM
 
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdfSalinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
 
mengapa penguatan transisi PAUD SD penting.pdf
mengapa penguatan transisi PAUD SD penting.pdfmengapa penguatan transisi PAUD SD penting.pdf
mengapa penguatan transisi PAUD SD penting.pdf
 
algoritma dan pemrograman komputer, tugas kelas 10
algoritma dan pemrograman komputer, tugas kelas 10algoritma dan pemrograman komputer, tugas kelas 10
algoritma dan pemrograman komputer, tugas kelas 10
 
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdf
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdfContoh Laporan Observasi Pembelajaran Rekan Sejawat.pdf
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdf
 
vIDEO kelayakan berita untuk mahasiswa.ppsx
vIDEO kelayakan berita untuk mahasiswa.ppsxvIDEO kelayakan berita untuk mahasiswa.ppsx
vIDEO kelayakan berita untuk mahasiswa.ppsx
 
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdfAksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
 
Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)
Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)
Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)
 
bab 6 ancaman terhadap negara dalam bingkai bhinneka tunggal ika
bab 6 ancaman terhadap negara dalam bingkai bhinneka tunggal ikabab 6 ancaman terhadap negara dalam bingkai bhinneka tunggal ika
bab 6 ancaman terhadap negara dalam bingkai bhinneka tunggal ika
 
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptxKontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
 
Membuat Komik Digital Berisi Kritik Sosial.docx
Membuat Komik Digital Berisi Kritik Sosial.docxMembuat Komik Digital Berisi Kritik Sosial.docx
Membuat Komik Digital Berisi Kritik Sosial.docx
 
KELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKA
KELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKAKELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKA
KELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKA
 
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptx
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptxMODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptx
MODUL P5 KEWIRAUSAHAAN SMAN 2 SLAWI 2023.pptx
 
MAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdf
MAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdfMAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdf
MAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdf
 
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptx
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptxPPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptx
PPT PERUBAHAN LINGKUNGAN MATA PELAJARAN BIOLOGI KELAS X.pptx
 
MODUL AJAR BAHASA INDONESIA KELAS 6 KURIKULUM MERDEKA.pdf
MODUL AJAR BAHASA INDONESIA KELAS 6 KURIKULUM MERDEKA.pdfMODUL AJAR BAHASA INDONESIA KELAS 6 KURIKULUM MERDEKA.pdf
MODUL AJAR BAHASA INDONESIA KELAS 6 KURIKULUM MERDEKA.pdf
 
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptxBAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
BAB 5 KERJASAMA DALAM BERBAGAI BIDANG KEHIDUPAN.pptx
 
7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx
7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx
7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx
 
MATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITAS
MATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITASMATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITAS
MATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITAS
 

Modul praktikum PBO

  • 1. Modul 1 Pengenalan Java Tujuan: 1. Apa itu Java? Tahu dan kenal bahasa pemrograman Java. 2. Tahu cara instalasi dan konfigurasi Java. 3. Ngerti dan bisa implementasiin tipe data, variabel, dan konstanta. 4. Ngerti dan bisa implementasiin Java merupakan salah satu bahasa pemrograman yang unggul dibandingkan dengan yang lain. Karena Java merupakan filter-filter dari bahasa pemrograman yang ada sebelumnya. Java dikenal sebagai bahasa pemrograman “Modern” karena kemampuannya untuk mendukung OOP dan mempermudah pemrograman aplikasi multithreading. 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? Di tahun 1995 James Gosling Patrick Naughton *Di tahun 1996 Java diadopsi Netscape Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 Java dibuat karena ingin membuat sebuah bahasa pemrograman yang bersifat portable dan platform independent (tidak tergantung mesin dan sistem operasi), sehingga bisa digunakan untuk membuat software yang bisa ditanam pada berbagai peralatan elektronik customer biasa. 1
  • 2. Versi-versi JSDK (Java Software Development Kit) Mendukung koneksi ke databse dan objek tersebar 1998, ada toolkit “Swing” yang mendukung GUI (Graphical UI) 1997, tambahan event model, internasionalisasi, dan JavaBeans Ada fitur lightweight database system, Derby. Derbymerupakan pengembangan basisdata Apache Ada fasilitas asersi untuk mendukung design-by-contract Direlease tahun 2000 Ada fitur generics (parameterized type), 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
  • 3. Pernah Dengar Garbage Collector? Ketika kita membuat program menggunakan bahasa pemrograman yang memiliki struktur data dinamis maka ia harus memilki suatu cara untuk memberi sistem operasi [tempat dia berjalan], saat dia memerlukan memori tambahan ataupun tidak butuh memori lagi. Ketika sebuah program sudah minta memori dari sistem operasi, biasanya memori tidak pernah lagi dikembalikan tapi dipegang untuk dipake lagi sama program yang kita buat tadi. Nah, siapakah yang mengelola hal itu? Garbage Collector [salah satu pengelola penyimpanan]. Garbage Collector pada Java Program Java melakukan garbage collection sehingga programmer tidak perlu menghapus objek-objek yang tidak digunakan lagi secara manual. Java interpreter melakukan pemeriksaan untuk mengetahui apakah objek di memori masih diacu oleh program. Java interpreter akan mengetahui objek yang telah tidak dipakai oleh program. Ketika Java interpreter mengetahui objek itu, maka Java interpreter akan memusnahkan secara aman. Java garbage collector berjalan sebagai thread berprioritas rendah dan melakukan kerja saat tidak ada kerja lain di program. Umumnya, Java garbage collector bekerja saat idle pemakai menunggu masukan dari keyboard atau mouse. Garbage collector akan bekerja dengan prioritas tinggi saat interpreter kekurangan memori. Hal ini jarang terjadi karena thread berprioritas rendah telah melakukan tugas dengan baik secara background. Instalasi Java Ekstraksi 1 file installer berupa selfinstalling file, berupa .exe kalau dijalankan dia sudah ekstrak dirinya untuk dikopikan ke direktori. Pilih default untuk direktori instalasi. Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 3
  • 4. sediakan space minimal 300 MB 2 3 4 4 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 5. Setelah kita install JDK, kita harus setting path sama classpath-nya. set path=c:jdk<versi>bin;%path% set classpath=c:jdk<versi>libfile(*.jar);%path% contoh: set path=c:jdk1.5bin;%path% set classpath=c:jdk1.5libtools.jar;%classpath% set classpath=c:jdk1.5libdt.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 3 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 5
  • 6. 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 Sudah ada ketika menginstal. Editor Java 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[]) Main { void main() { System.out.print("Hello World"); program 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
  • 7. 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: 1. Integer (Bil. Bulat), bilangan yang tidak mengandung angka pecahan. 2. F loat (Bil. Pecahan), bilangan yang mengandung angka pecahan. Akan terjadi masalah dalam tipe data ketika terdapat dua tipe Berbentuk karakter atau deretan karakter. Terdiri atas dua kategori: data yang berbeda dan saling 1. Karakter tunggal (char). 2. Deretan karakter (String). berhubungan. Bagaimanakah Tipe data dengan nilai benar (true) atau salah (false), biasanya banyak digunakan dalam kondisional. Solusinya? 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 Common Laboratory 2009/2010 7
  • 8. 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 primitif, meliputi : tipe boolean, tipe numerik (yang meliputi : byte, short, int, long, char, float, double) dan tipe karakter (char). tipe referensi, meliputi tipe variabel data : tipe class, tipe array, tipe interface. Ada pula tipe variabel data yang khusus yang disebut null types, namun variable dalam Java tidak akan pernah memiliki tipe null ini. Bagaimana bentuk umum pendeklarasiannya? tipeData namaVariable1 [= nilaiAwal]; tipeData namaVariable1 [= nilaiAwal][, namaVariable2 [= nilaiAwal]…]; Contohnyaa... int dataint; char chardata; Aturan Penamaan Variabel di Java float x = 12,67; 1. format nama variable 1. Diawali dengan huruf kecil. 2. Jika nama variable lebih dari satu kata, kata ke-2, ke-3, dst, diawali dengan huruf capital dan ditulis menyatu. 8 Harus terdiri atas sederetan karakter Unicode yang diawali oleh karakter huruf atau garis bawah. Unicode merupakan system penkodean karakter yang dapat dibaca oleh berbagai bahasa manusia. 2. Tidak boleh berupa keyword (kata yang dicadangkan), null, atau literal true/false. Harus unik dalam suatu scope Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 9. Konstanta Variabel dalam Java bisa dijadikan konstanta, sehingga nilainya tidak akan dapat diubah-ubah dengan mendeklarasikannya sebagai variable final. final int x = 2; V ariabel Array Data Index Data 1 0 Data 2 1 Elemen variabel array Data 3 2 …. …. Anggap array sebagai sebuah deretan rumah pada sebuah jalan, dan rumah-rumah tersebut memiliki bentuk yang sama. Untuk membedakan rumah yang satu dengan yang lain maka dibutuhkan sebuah nomor. Nomor itulah yang kemudian kita kenal sebagai index. Data N N-1 Urutan Elemen variabel array (Harus unik) Gimana cara pendeklarasiannya? tipeData[] namaVariable [= new tipeData [jumlahElemen] ]; Bentuk umumnya… [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; Kalo jumlah elemen belum dipesan, kita gak bisa pake variable array untuk nyimpen namaVariableArray = new int[7]; Memesan jumlah elemen di salah satu baris data. 2 int[] namaVariableArray = new int[7]; Kita langsung pesen 7 elemen array 3 int[] varibleArray3 = {5, 3, 23, 99, 22, 1, 6}; int[] variableArray3 = new int[]{1,23,45,4,3,7,8}; Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 Variabel array ini memiliki 7 elemen. Di mana setiap elemen sudah terisi data. 9
  • 10. Gimana cara Aksesnya? pertama, kita udah bisa deklarasiin. Sekarang, saatnya buat kasih nilai ke array dan ambil nilai dari array itu. Let‟s take a look. Sebutkan nomor indeks dari int[] numbers = new int[3]; numbers[0]=34; 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
  • 11. 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] m[1][1] m[2][2] m[3][3] = = = = 1; 1; 1; 1; System.out.println(m[0][0]+" System.out.println(m[1][0]+" System.out.println(m[2][0]+" System.out.println(m[3][0]+" "+m[0][1]+" "+m[1][1]+" "+m[2][1]+" "+m[3][1]+" "+m[0][2]+" "+m[1][2]+" "+m[2][2]+" "+m[3][2]+" "+m[0][3]); "+m[1][3]); "+m[2][3]); "+m[3][3]); } } Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 11
  • 12. Operator, Statement kondisional, dan Iterasi pada Java Operator Operator Aritmatika Operator ini digunakan pada operasi-operasi aritmatika seperti penjumlahan, pengurangan, pembagian dll. Jenis Operator Aritmatika Operator Contoh Operator Relasional Untuk membandingkan 2 nilai (variabel) atau lebih digunakan operator Relasional, dimana operator ini akan mengembalikan atau menghasilkan nilai True atau False. Keterangan Jenis Operator Relasional Operator Contoh Keterangan Operator Kondisional Operator ini menghasilkan nilai yang sama dengan operator relasional, hanya saja penggunaanya lebih pada operasi-operasi boolean. 12 Jenis Operator Kondisional Operator Contoh Keterangan Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 13. 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 Operator assignment dalam Java digunakan untuk memberikan sebuah nilai ke sebuah variable. Operator assignment hanya berupa „=‟, namun selain itu dalam Java dikenal beberapa shortcut assignment operator yang penting. Pernyataan kondisional Jenis Operator Assignment Operator Contoh Ekivalen dengan += -= *= /= %= &= |= ^= <<= >>= >>>= a += b a -= b a *= b a /= b a %= b a &= b a |= b a ^= b a <<= b a >>= b a >>>= b a=a+b a=a-b a=a*b a=a/b a=a%b a=a&b a=a|b a=a^b a = a << b a = a >> b a = a >>> b Statement if if (ekspresi_kondisional){ statement1; statement2; … } Statement if memungkinkan sebuah program untuk dapat memilih beberapa operasi untuk di eksekusi, berdasarkan beberapa pilihan. Dalam bentuknya yang paling sederhana, bentuk if mengandung sebuah pernyataan tunggal yang dieksekusi jika ekspresi bersyarat adalah benar Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 13
  • 14. 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 beberapa pilihan operasi pemrosesan Bentuk statement if – else dengan 2 pilihan operasi pemrosesan : if (ekspresi_kondisional_A){ statement1; statement2; … }else if (ekspresi_kondisional_B){ statement1; statement2; … }else{ statement1; statement2; … } if (ekspresi_kondisional){ statement1; statement2; … }else{ statement1; statement2; … } public class IfElse { public static void main(String args[]) { int month = 4; String season; if (month == 12 || month season = "Dingin"; } else if (month == 3 || season = "Semi"; } else if (month == 6 || season = "Panas"; } else if (month == 9 || season = "Gugur"; } else { season = ""; } == 1 || month == 2) { month == 4 || month == 5) { month == 7 || month == 8) { month == 10 || month == 11) { System.out.println("Bulan April masuk musim " + season + "."); } } 14 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 15. Statement switch Bentuk umum pernyataan switch switch ( expression ) { case value_1: statement1; statement2; . . . break; case value_2: statement1; statement2; . . . break; [default: ] statement1; statement2; . . . break;}} case: menandai posisi kode di mana eksekusi dilaksanakan. value_1, dst.: konstanta integer atau konstanta karakter, ataupun ekspresi yang mengevaluasi keduanya. default: sama kayak “else” pada statement if. 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 Common Laboratory 2009/2010 15
  • 16. Ekspresi bersyarat (Ternary Operator) Kita menggunakan sebuah ekspresi bersyarat untuk menggantikan sebuah bentuk if-else. Sintaks adalah sebagai berikut: Arti dari sintaks di sebelah sama dengan: if (exp1==true) then exp2 else exp3 exp1 ? exp2 : exp3 public class TernaryExample{ public static void main (String args[]){ int x=3, y=6, m; int a=2,b=3,c=4; m = x > y ? x : y; System.out.println(m);} } Berapakah outputnya? Answer: Statement Iterasi (Perulangan) While For Do while( expression ){ statement1; statement2; ....... do { statement1; statement2; ....... } while(expression) } for (initialization;expression;step){ statement1; statement2; ... } while ( expression ); Selama expression benar, while akan Hasil dari while akan dikembalikan kepada dieksekusi do public class Angka{ public static void main (String[] args){ int i; for(i=1;i<=10;i++){ System.out.println(Integer.toString(i)); } i=1; while(i<=10){ System.out.println(Integer.toString(i)); } do{ System.out.println(Integer.toString(i)); i++; }while(i<=10) } } 16 Pada java terdapat 2 statement yang biasanya digunakan pada setiap bentuk iterasi diatas. Statement tersebut yaitu: , dapat menghentikan perulangan walaupun kondisi untuk berhenti belum terpenuhi. , dengan statement ini kita bisa melewatkan operasi yang dilakukan dalam iterasi sesuai dengan kondisi tertentu. Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 17. 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/downloadtutorial-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 Common Laboratory 2009/2010 17
  • 18. Modul 2 Object Oriented Programming (OOP) I Tujuan: Apa itu OOP? 1. Mengerti konsep dasarnya. Merupakan teknik membuat suatu program berdasarkan objek dan apa yang bisa dilakukan objek tersebut. 2. Bisa membandingkan pemrograman berorientasi objek dengan prosedural. 3. Ngerti dan bisa implementasiin Class, Object-oriented program terdiri dari objek-objek yang berinteraksi satu sama lain untuk menyelesaikan sebuah tugas. Object, Method, dan Constructor pada program sederhana. Kenapa menggunakan OOP? OOP Pemrograman prosedural Kode-kode di-breakdown agar lebih mudah di-manage. Breakdown berdasarkan objek-objek yang ada pada program tersebut. mengatur program dalam barisan-barisan linier yang bekerja dari atas ke bawah. Kumpulan tahapan yang dijalankan setelah yang lain berjalan. Dianjurkan diimplementasikan untuk program dengan berbagai ukuran karena lebih mudah untuk men- Baik untuk program kecil yang berisi sedikit code. Tidak dianjurkan diimplementasikan pada program berukuran besar, karena susah untk dimanage dan di-debug. debug. Apakah OOP punya karakteristik? Abstraksi Ciri-ciri Menemukan hal-hal yang penting pada suatu objek dan mengabaikan hal-hal yang sifatnya insidental. Tentukan apa ciri-ciri (atribut) objek. Tentukan apa yang bisa dilakukan objek. (atribut): punya tangan, berat, tinggi, dll.. (kata benda, atau kata sifat) Fungsi (method) : makan, minum, berjalan, dll. (kata kerja) Contoh abstraksi pada manusia 18 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 19. Enkapsulasi Pembungkusan data bersama method yang dimiliki oleh objek sehingga rincian-rincian implementasi internal suatu objek tidak dapat dilihat dari pemakai/objek lain yang tidak berhak. Enkapsulasi ini melindungi proses dari interferensi atau penyalahgunaan dari luar sistem. Pedal rem tidak bisa digunakan untuk mengakses system transmisi System transmisi mobil yang menyembunyikan bagaimana cara dia bekerja mengatur Fungsi: Modularitas Modularitas (modularity) berarti objek dapat dikelola secara independen. Karena kode sumber bagian internal objek dikelola secara terpisah dari antarmuka, maka kita bebas melakukan modifikasi yang tidak menyebabkan masalah pada bagian-bagian lain. Manfaat ini mempermudah mendistribusikan objek-objek di sistem. percepatan. Tongkat transmisi merupakan interface untuk mengatur system transmisi. Menaikkan percepatan, dsb. Data Hiding (Penyembunyian Data) Mengacu pada perlindungan data internal objek. Objek disusun dari antarmuka public dan bagian private yang merupakan kombinasi data dan method internal. Manfaat utamanya adalah bagian internal dapat berubah tanpa mempengaruhi bagian-bagian program yang lain. Pewarisan (Inheritance) Proses penciptaan kelas baru (subclass/kelas turunan) dengan mewarisi karakteristik dari kelas yang udah ada (superclass/kelas induk), ditambah karakteristik unik kelas baru itu.Karakteristik unik bisa berupa perluasan atau spesialisasi dari superclass. Televisi Kelas turunan bisa mewarisi anggota-anggota suatu kelas yang berupa, data dan method, dan bisa terdapat data dan method tambahan yang baru. OOP tidak selalu memiliki inheritance. Kita pakai inheritance kalau superclass sudah mendefinisikan perilaku yang kita butuhkan. Sehingga kita tinggal buat subclass dari superclass yang udah punya perilaku yang kita butuhin. Televisi tabung Televisi Televisi plasma layar datar Contoh inheritance Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 19
  • 20. 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 caranya? Lonely object is useless Object needs each other Object A berkomunikasi dengan Object B. Object A meminta Object B melakukan sesuatu untuknya. Object A kirim pesan disertai informasi ke Object B Message + info Object A 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 antarmuka (interface) yang sama untuk memerintah suatu objek agar dapat melakukan suatu aksi atau tindakan yang mungkin secara prinsip sama tapi secara proses berbeda. B A Kedua mobil di atas sama-sama punya setir, pedal Seringkali Polymorphism disebut dalam istilah “satu interface banyak aksi”. Mekanisme Polymorphism dapat dilakukan dengan dengan beberapa cara, seperti overloading method, overloading constructor, maupun overriding method. Semua akan dibahas pada bab selanjutnya. A akan bergerak sangat cepat. 20 transmisi, rem, gas, dsb. Kita kendarai mobil A, tekan pedal gas kemudian mobil Sedangkan, ketika kita kendarai mobil B, tekan pedal gas, yang terjadi adalah sebaliknya. Berarti, kedua mobil sama-sama punya pedal gas, tapi memiliki hasil akhir yang berbeda Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 21. Java Modifier Apa itu modifier dan kenapa kita butuh itu? Modifier merupakan bentuk pengimplementasian konsep enkapsulasi. Dengan adanya modifier maka class, interface, method, dan variabel akan terkena suatu dampak tertentu. Berlaku untuk Kelompok Modifier Meliputi Class Method Variabel Access modifier √ √ √ public, protected, private, dan friendly (default/ tak ada modifier). Final modifier √ √ √ final √ √ static Static modifier Abstract modifier √ abstract Syncronized modifier √ synchronized Native modifier √ native √ Storage modifier √ transient dan volatile Access Modifier : Modifier Default (tak ada modifier ) Class dan Interface Dikenali di paketnya Diwarisi subclass di paket yang sama dengan superclassnya. Dapat diakses oleh method-method di class-class yang sepaket. Dikenali di manapun Diwarisi oleh semua subclassnya. Friendly Public Method dan Variabel Dapat diakses dimanapun. Protected Private Tidak dapat diterapkan Diwarisi oleh semua subclassnya. Tidak dapat diterapkan Tidak diwarisi oleh subclassnya Dapat diakses oleh method-method di class-class yang sepaket. Tidak dapat diakses oleh class lain. Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 21
  • 22. Permitted Modifier: Modifier Abstract Class Class dapat berisi method abstract. Class tidak dapat diinstantiasi Tidak mempunyai constructor Interface Method Variabel Optional untuk dituliskan di interface karena interface secara inheren adalah abstract. Tidak ada method body yang didefinisikan. Method memerlukan class kongkret yang merupakan subclass yang akan mengimplementasikan method abstract. Tidak dapat diterapkan. Final Class tidak dapat diturunkan. Tidak dapat diterapkan. Method tidak dapat ditimpa oleh method di subclass-subclassnya Berperilaku sebagai konstanta Static Tidak dapat diterapkan. Tidak dapat diterapkan. Mendefinisikan method (milik) class. Dengan demikian tidak memerlukan instant object untuk menjalankanya. Method ini tidak dapat menjalankan method yang bukan static serta tidak dapat mengacu variable yang bukan static. Mendefinisikan variable milik class. Dengan demikian, tidak memerlukan instant object untuk mengacunya. Variabel ini dapat digunakan bersama oleh semua instant objek. synchronized Tidak dapat diterapkan. Tidak dapat diterapkan. Eksekusi dari method adalah secara mutual exclusive diantara semua thread. Hanya satu thread pada satu saat yang dapat menjalankan method Tidak dapat diterapkan pada deklarasi. Diterapkan pada instruksi untuk menjaga haya satu thread yang mengacu variable pada satu saat. Native Tidak dapat diterapkan. Tidak dapat diterapkan. Tidak ada method body yang diperlukan karena implementasi dilakukan dengan bahasa lain. Tidak dapat diterapkan. Transient Tidak dapat diterapkan. Tidak dapat diterapkan. Tidak dapat diterapkan. Variable tidak akan diserialisasi Volatile Tidak dapat diterapkan. Tidak dapat diterapkan. Tidak dapat diterapkan. Variabel diubah secara asinkron. Kompilator tidak pernah melakukan optimasi atasnya. 22 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 23. 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 adalah cetak biru (rancangan) atau prototype atau template dari objek. Kita bisa membuat banyak objek dari satu macam class. Class mendefiniskan sebuah tipe dari objek. Di dalam class kita dapat mendeklarasikan variabel dan menciptakan objek (instansiasi). Sebuah class mempunyai anggota yang terdiri dari atribut dan method. Atribut adalah semua field identitas yang kita berikan pada suatu class, misal class manusia memiliki field atribut berupa nama dan umur. Class diagram manusia Manusia - nama : String - umur : int + setNama : void + getNama : String + setUmur : void + getUmur : int Method dapat kita artikan sebagai semua fungsi ataupun prosedur yang merupakan perilaku (behaviour) dari suatu class. Bagaimana mengaplikasikan class diagram di atas dalam program? Keterangan tanda : - artinya memiliki access modifier private + artinya memiliki access modifier public # artinya memiliki access modifier protected Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 23
  • 24. 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 untuk mendukung konsep OO yaitu enkapsulasi mengenai data hiding. Jadi, kita tidak langsung menembak data/ atribut pada kelas tersebut, tetapi kita memberikan suatu antarmuka method yang akan mengakses data/ atribut yang disembunyikan tersebut. public void setNama(String a){ nama=a; } 3) Nama atribut - gunakan kata benda, dan diawali dengan huruf kecil : nama, umur public String getNama(){ return nama; 4) Nama Method – gunakan kata kerja; kecuali huruf yang pertama, huruf awal tiap kata ditulis kapital : getNama(), getUmur() } 5) Untuk method yang akan memberikan atau mengubah nilai dari suatu atribut, nama method ditambah dengan kata kunci ”set” : setUmur(int a), setNama(String a) public void setUmur(int a){ 6) Untuk method yang akan mengambil nilai dari atribut, nama method ditambah dengan kata kunci ”get” : getUmur(), getNama() umur=a; 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
  • 25. Object Object (objek) secara lugas dapat diarikan sebagai instansiasi atau hasil ciptaan dari suatu class. Asumsikan cetakan kue adalah class, maka kue yang dihasilkan dari cetakan tersebut merupakan objek dari class cetakan kue. Dalam pengembangan OOP lebih lanjut, sebuah objek dapat dimungkinkan terdiri atas objek-objek lain. mencetak Objek mobil terdiri atas mesin atau, bisa jadi sebuah objek merupakan turunan dari objek lain, sehingga mewarisi sifat-sifat induknya dan memiliki sifat tambahan pintu Keyword “new” “new” digunakan untuk melakukan instansiasi/ membuat sebuah object baru. ban Kerangka mobil Manusia objekManusia = new Manusia(); Membuat objek manusia Kendaraan Bermotor Contoh disamping merupakan contoh objek yang merupakan turunan dari objek lain serta memiliki sifat tambahan pada dirinya. Coba jelaskan dengan kata-katamu sendiri gambar di samping…! Answer: Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 25
  • 26. Method dan Constructor Apa itu method? Method biasa kita kenal sebagai function dan procedure. Dikatakan fungsi bila method tersebut melakukan suatu proses dan mengembalikan suatu nilai (return value), dan dikatakan prosedur bila method tersebut hanya melakukan suatu proses dan tidak mengembalikan nilai (void). public int jumlahAngka(int x, int y){ int z = x+y; return z; } 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: Melewatkan secara Nilai (Pass by Value) Digunakan untuk argumen yang mempunyai tipe data primitif (byte, short, int, long, float, double, char, dan boolean). Prosesnya adalah compiler hanya menyalin isi memori (pengalokasian suatu variable), dan kemudian menyampaikan salinan tersebut kepada method. Isi memory ini merupakan data “sesungguhnya” yang akan dioperasikan. Karena hanya berupa salinan isi memory, maka perubahan yang terjadi pada variable akibat proses di dalam method tidak akan berpengaruh pada nilai variable asalnya. 26 Isi memori n= 4 n=4 Salinan isi memori menyalin isi memori n=4 compiler method n= 8 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 27. Melewatkan secara Referensi (Pass by Reference) Digunakan pada array dan objek. Prosesnya isi memory pada variable array dan objek merupakan penunjuk ke alamat memory yang mengandung data sesungguhnya yang akan dioperasikan. Dengan kata lain, variable array atau objek menyimpan alamat memory bukan isi memory. Akibatnya, setiap perubahan variable di dalam method akan mempengaruhi nilai pada variable asalnya. Bagaimanakah keluaran dari program di bawah? public class TestPass { int i,j; public TestPass(int a,int b) { i =a; j = b; } //passing by value public void calculate(int m,int n) { m = m*10; n = n/2; } //passing by reference public void calculate(TestPass e) { e.i = e.i*10; e.j = e.j/2; } } 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 Common Laboratory 2009/2010 27
  • 28. Answer: Nilai sebelum x = 10 y = 20 Nilai sesudah x = 10 y = 20 Nilai sebelum z.i = 50 z.j = 100 Nilai sesudah z.i = 500 z.j = 50 Keterangan passed by value : passed by value : passed by reference : passed by reference : Pada saat pemanggilan method calculate() dengan metode pass by value, hanya nilai dari variable x dan y saja yang dilewatkan ke variable m dan n , sehingga perubahan pada variable m dan n tidak akan mengubah nilai dari variable x dan y. Sedangkan pada saat pemanggilan method calculate() dengan metode pass by reference yang menerima parameter bertipe class Test. Pada waktu kita memanggil method calculate(), nilai dari variable z yang berupa referensi ke obyek sesungguhnya dilewatkan ke variable a, sehingga variable a menunjukkan ke obyek yang sama dengan yang ditunjuk oleh variable z dan setiap perubahan pada objek tersebut dengan menggunakan variable a akan terlihat efeknya pada variable z yang terdapat pada kode yang memanggil method tersebut. Constructor Tipe khusus method yang digunakan untuk menginstansiai atau menciptakan sebuah objek. Nama constructor = nama kelas. Constructor TIDAK BISA mengembalikan nilai. Tanpa membuat constructor secara eksplisit-pun, Java akan menambahkan constructor default secara implisit. Tetapi jika kita sudah mendefinisikan minimal sebuah constructor, maka Java tidak akan menambah constructor default. Constructor default tidak punya parameter. Deklarasi Constructor: [modifier] namaclass(parameter1){ Body constructor; } [modifier] namaclass(parameter1,parameter2){ Body constructor; } [modifier] namaclass(parameter1,parameter2,…,parameterN){ Body constructor; } 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
  • 29. 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 Umur : 76 Nama : Mat Conan Umur : 0 Coba Anda analisis mengapa hasilnya seperti di samping ? Apakah program di atas constructornya eksplisit atau implisit? 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 Common Laboratory 2009/2010 29
  • 30. Keyword “this” Apa itu? Suatu besaran referensi khusus yang digunakan di dalam method yang dirujuk untuk objek yang sedang belaku. Nilai this, sedang berjalan dipanggil. Kapan dipake? Ketika nama atribut yang sama dengan nama variable lokal, maka gunakan lah this.namaAtribut untuk merefer ke namaAtribut. public class Lagu { private String band; private String judul; public void IsiParam(String judul,String band) { this.judul = judul; this.band = band; } public void cetakKeLayar() { if(judul==null && band==null) return; System.out.println("Judul : " + judul +"nBand : " + pencipta); } } public class DemoLagu { public static void main(String[] args) { Lagu song = new Lagu(); song.IsiParam("Dance Beside","All American Reject "); song.cetakKeLayar(); } } Hasil output adalah seperti ini: Judul : Dance Beside Pencipta: All American Reject FYI, Keyword this juga dapat digunakan untuk memanggil suatu konstruktor dari konstruktor lainnya. 30 Keterangan Perhatikan pada method IsiParam() di atas. Di sana kita mendeklarasikan nama variable yang menjadi parameternya sama dengan nama variabel yang merupakan atribut dari class lagu (judul dan band). Dalam hal ini, kita perlu menggunakan keyword this (keyword ini merefer ke objek itu sendiri) agar dapat mengakses property judul dan band di dalam method IsiParam() tersebut. Apa yang terjadi jika pada method IsiParam() keyword this dihilangkan? Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 31. public class Buku { private String pengarang; private String judul; Keyword this untuk memanggil 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 Common Laboratory 2009/2010 31
  • 32. 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 meng‟objekkan‟ sesuatu yang awalnya tidak bisa dianggap sebagai objek. Hal ini memungkinkan code menjadi lebih objectoriented daripada ketika tidak menggunakan inner class. Karena setiap instansiasi inner class merupakan instansiasi dari top-level classnya juga, maka objek inner class juga memiliki akses ke setiap member dan method kelas induknya. Hirarki tanpa inner class Dari sudut pandang pengorganisasian, inner class memungkinkan kita mengatur struktur paket. Daripada menjadikan segala sesuatu menjadi flat-package, kelas dapat disarangkan dalam kelas lain. Hirarki dengan inner class package package class1 class2 class3 classN class2 Class3 class1 Modul Praktikum Pemrograman Berorientasi Objek Common Labz 2008-2009. http://java.lyracc.com http://battleprogrammer.wordpress.com http://www.javaworld.com http://bernazlionk.wordpress.com http://www.wikipedia.org http://one.indoskripsi.com 32 innerclassB innerclassC innerclassA Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 33. Modul 3 Object Oriented Programming (OOP) II Tujuan: 1. Mengerti konsep OOP lebih dalam. 2. Ngerti konsep dan bisa implementasiin inheritance, polymorphisme, interface, dan abstract class pada program. 3. Ngerti perbedaan class dengan interface, interface dengan abstract class. Contoh pewarisan pada Class manusia Pada Modul 2, kita sudah mempelajari dasar-dasar OOP. Di modul ini kita akan mempelajari OOP lebih dalam. Mari kita mulai dari Inheritance. Inheritance Apa itu inheritance? Pewarisan merupakan proses peciptaan kelas baru dengan mewarisi karakteristik kelas yang sudah ada, ditambah dengan karakteristik unik kelas baru itu. Sebelumnya inheritance sudah dijelaskan pada modul 2. 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 Common Laboratory 2009/2010 33
  • 34. 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{ private int panjang; private int lebar; public void setPanjang(int p){ panjang=p; } public void setLebar(int l){ lebar=l; } public int getPanjang(){ return panjang; } public int getLebar(){ return lebar; } public int Luas(){ int luas=panjang*lebar; return luas; } sebagai kelas turunan dari kelas PersegiPanjang public class Balok extends PersegiPanjang{ private int tinggi; public void setTinggi(int t){ tinggi=t; } public int getTinggi(){ return tinggi; } public int Volume(){ int v=getPanjang()*getLebar()*tinggi; return v; } } } Output dari program: Bagaimanakah bentuk program utama agar output yang dihasilkan seperti di samping? 34 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 35. 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(" System.out.println(" System.out.println(" System.out.println(" System.out.println(" SubClass ==BALOK=="); Panjang : "+b.getPanjang()); Lebar : "+b.getLebar()); Tinggi : "+b.getTinggi()); 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){} public void setHarga(double harga){} public void setHarga(float harga){} Yang penting tipe data dalam parameter method yang dioverload itu HARUS BERBEDA!!! public void setHarga(float harga, String jumlah){} Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 35
  • 36. 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){ overloading method, disini this.merk=merk; this.harga=harga; terdapat dua method } dengan nama sama dengan public void isiPhone(String merk){ parameter inputan yang this.merk=merk; } 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
  • 37. 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 Common Laboratory 2009/2010 37
  • 38. Abstract Class Bentuk Umum: Apa itu Abstract class? kelas murni yang tidak boleh memiliki objek, dan satu/lebih method-methodnya yang abstract harus diimplementasikan (override) oleh kelas turunannya. Sebuah kelas Dosen bisa diinstansiasi menjadi heru, heri, badu, budi, dsb, tetapi tidak mungkin dapat menginstansiasi kelas MakhlukHidup, kelas Hewan. Karena kedua kelas tersebut terlalu umum (abstract), kelas seperti inilah yang disebut kelas abstract. Dibutuhkan kelas turunan yang lebih khusus. [modifier] abstract class NamaKelas { // deklarasi attribute // definisi/prototype method } Seperti apakah bentuk Hewan? Ini? Bila kelas MahlukHidup mempunyai method bernafas, maka tidak dapat ditentukan cara suatu mahluk hidup tersebut bernafas (dengan paru-paru, insang, atau stomata), method seperti inilah yang disebut method abstract. Dibutuhkan kelas turunan yang khusus dan method override dari method yang abstract. Ini? Ini? Ketika kamu sudah tidak bisa membayangkan bagaimana bentuk suatu kelas seperti MakhlukHidup atau pun Hewan karena terlalu abstraknya/terlalu umum, maka kelas tersebut bisa dijadikan kelas abstrak. abstract class Hewan { protected String nama; protected int jumKaki; protected boolean bisaTerbang = false; public Hewan(String nama, int kaki, boolean terbang) { this.nama = nama; jumKaki = kaki; bisaTerbang = terbang; } public abstract void bersuara(); public static void makan() { System.out.println("nyam, nyam, nyam"); } public void lihatHewan() { System.out.println(""); System.out.println("nama : "+nama); System.out.println("jumlah kaki : "+jumKaki); System.out.println("bisa terbang : "+bisaTerbang); } } 38 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 39. 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 Common Laboratory 2009/2010 39
  • 40. 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 interface TkPhone{ static final String MAKER= "YES-KIA"; public int getHarga(int id); } Output dari program: public class PhoneImpl implements TkPhone{ public int getHarga(int id){ int hr=0; if (id==1){ hr=500; } if (id==2){ hr=1000; } return hr; } } public class TokoHP{ public static void main(String args[]){ PhoneImpl pp = new PhoneImpl(); System.out.println(""); System.out.println("HP ini dibuat oleh PT "+pp.MAKER); System.out.println("Harga HP in sekitar $ "+pp.getHarga(1)); } } 40 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 41. 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 Common Laboratory 2009/2010 41
  • 42. Modul 4 Exception, I/O, dan Operasi File Sering kali, ketika menjalankan sebuah program kita menemukan kesalahan. Kesalahan itu bisa berasal dari hardware, software, atau bahkan dalam algoritma atau kesalahan logika itu sendiri. Tujuan: 1. Mengerti konsep exception, I/O, dan operasi file. Nah, jadi masing-masing kesalahan punya solusi yang beda-beda dan teknik penanganannya juga berbeda-beda untuk kesalahan yang satu dengan yang lain. 2. Bisa implementasiin konsep exception dan I/O dalam sebuah pemrograman sederhana untuk operasi file dengan Untuk itu, mari kita bahas satu-satu kesalahan yang ada. tepat. Kesalahan itu ada apa aja sih? Kesalahan Hardware dan Software Hardware saja Software saja Jika sebuah aplikasi berusaha membuka sebuah file yang gak ada, misalnya ngirimin karakter ke printer yang belom kita nyalain atau ketika berkomunikasi dengan port serial yang gak merespon. Ketika kode berusaha mengakses sebuah elemen yang di luar ikatan array atau berusaha nyimpen nilai yang ngelewatin kapasitas format data. Biasanya, kesalahan menyangkut hardware dideteksi dan dilaporkan oleh sistem. Kesalahan yang terkait sama software, dipihak lain, harus dideteksi sama kode Hardware dan Software sebuah aplikasi mungkin memeriksa operan pembagi untuk memastikan bahwa sebuah pembagi dengan nol tidak dicoba. Bagaimanapun juga, jika sebuah pembagian oleh nol terjadi, perangkat-keras dalam sebagaian besar sistem komputer menghasilkan sebuah respon kesalahan. 42 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 43. Kesalahan Algoritma berhubungan dengan kesalahan atau keterbatasan intrinsik dari pemodelan dunianyata yang dilakukan oleh komputer. binary Menggunakan perkiraan binary terbaik Untuk mengatasi kesalahan pembulatan dan pemotongan pada berbagai algoritma muncullah disiplin ilmu bernama analisa numerik. Jenis kesalahan ini adalah yang paling sering diabaikan oleh programmer. konversi decimal untuk pecahan decimal menurut panjang kata mesin tersebut. Perkiraan yang dilakukan oleh komputer bisa menyebabkan kesalahan pembulatan 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 Semua yang bertipe Runtime Exception dan turunannya tidak harus ditangani dalam program kita. Outputnya: class RuntimeException { public static void main (String [] args) { int[] arr = new int[1]; System.out.println(arr[1]); } } Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at RuntimeException.main(RuntimeException.java:6) 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 Common Laboratory 2009/2010 43
  • 44. Exception yang dicek Semua tipe eksepsi yang bukan turunan dari class RuntimeException merupakan eksepsi yang harus ditangani oleh program anda. Java bahkan tidak mengijinkan anda mengompilasi program yang anda buat, jika tidak menangani eksepsi tersebut. (BIASANYA YANG BERHUBUNGAN DENGAN PENGAKSESAN I/O). Penggunaan Try Catch Untuk menangani eksepsi yang terjadi dalam program, Anda cukup meletakkan kode yang ingin anda inspeksi terhadap kemungkinan eksepsi di dalam blok try, diikuti dengan blok catch yang menentukan jenis eksepsi apa yang ingin Anda tangani. Struktur penulisan: try{ ......//blok program } catch (tipeException e) { ......//blok program } 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
  • 45. 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 Mekanisme throw memungkinkan program untuk mengirim / melempar exception untuk kemudian program menyikapi (bereaksi) atas exception tersebut. Cara penulisan: Throw ObjekEksepsi; 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 Common Laboratory 2009/2010 45
  • 46. 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 manual melalui kode yang kita tulis. Kita dapat melakukan hal tersebut dengan kata kunci throw ini, seperti pada contoh diatas. Penggunaan Throws Sangat erat hubungannya dengan penggunaan exception yang dicek oleh Java. Keyword ini dipake kalo misalnya ada method yang mungkin menyebabkan exception tapi dia gak menangani exception tersebut. Exception akan dilempar ke luar, maka dari itu ketika keyword ”throws” digunakan saat pendeklarasian method. int[] arr = new int[1]; System.out.println(arr[1]); Eksepsi ini gak perlu ditulis lagi, karena kita udah pake throw Cara penulisan: class NamaClass throws Exception{ ......... } atau fungsi / prosedur int f1() throws Exception{ .......... } Masih bingung? Let‟s see the code.. 46 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 47. Karena ada ini, makanya gak ada Outputnya: Lebih kecil 5 Program selesai blok try-catch nya public class CobaThrows{ public void tampil() throws Exception { int x=0; if (x<5) 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) { System.out.println(e.getMessage()); method itu ada di antara } blok try-catch System.out.println ("Program selesai"); } } Penanganan Dengan Finally Apa itu Finally? Penggunaan blok try catch terkadang membingungkan karena kita tidak dapat menentukan dengan pasti alur mana yang akan dieksekusi. Apalagi penggunaan throw yang mengakibatkan kode setelah throw tidak akan dieksekusi atau justru terjadi kesalahan pada blok catch, menyebabkan program akan berhenti. Untuk mengatasi problem ini, Java memperkenalkan keyword finally. Dimana semua kode yang ada dalam blok finally “pasti” akan dieksekusi apapun yang terjadi di dalam blok try catch. Supaya output yang terjadi seperti ini, bagaimana kah kodenya? Cara penulisan: try{ ......//blok } catch (tipeException1 ......//blok TipeException1 } catch (tipeException2 ......//blok TipeException2 } finally { ......//blok } program e) { program untuk e) { program untuk program Terjadi exception Program Selesai Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at DemoFinally.main(DemoFinally.java:11) Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 47
  • 48. 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 output Data Hardware input info Data info info Input: mengambil informasi data dari hardware Output: mengirim informasi data ke hardware sebuah program membuka stream dari sebuah sumber informasi (source) seperti file, memory, 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 bedabeda (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
  • 49. 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 mempunyai 1 konstruktor dan 17 method yang ada dalam classnya, selebihnya turunan dari class parentnya. Berikut ini akan dijelaskan konstruktor dan method yang sering digunakan. 1. DataOutputStream dalam jdk 1.5 hanya mempunyai 1 kostruktor dan 15 method yang ada dalam classnya selebihnya turunan dari class parentnya. Berikut ini akan dijelaskan konstruktor dan method yang sering digunakan. DataInputStream(InputStream in) Untuk membuat sebuah objek DataInputStream dengan spesifikasi InputStream yang diinginkan. DataOutputStream(OutputStream out) Untuk membuat sebuah objek DataOutputStream dengan spesifikasi OutputStream yang diinginkan. 2. xxx readXxx() xxx disini dapat diganti dengan tipe data primitif seperti int, float, byte, boolean, byte, char, dll. Digunakan untuk membaca dari stream tipe data tertentu secara langsung. Output untuk contoh input data void writeXxx(xxx v) xxx disini dapat diganti dengan tipe data primitif seperti int, float, byte, boolean, byte, char, dll. 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 Common Laboratory 2009/2010 49
  • 50. 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
  • 51. 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 BufferedReader dalam jdk 1.5 hanya mempunyai 2 kostruktor dan 9 method yang ada dalam classnya selebihnya turunan dari class parentnya. Berikut ini akan dijelaskan konstruktor dan method yang sering digunakan. BufferedReader(Reader in) dan BufferedReader(Reader in,int size) Membuat objek BufferedReader dengan karakter buffer inputstream atau objek Reader yang lain. Int sz digunakan untuk ukuran buffer yang digunakan. String readLine() readLine digunakan untuk membaca satu baris penuh text, yaitu mengembalikan String dari objek BufferedReader yang digunakan. Hierarki Kelas Writer BufferedWriter dalam jdk 1.5 hanya mempunyai 2 kostruktor dan 6 method yang ada dalam classnya selebihnya turunan dari class parentnya. Berikut ini akan dijelaskan konstruktor dan method yang sering digunakan. BufferedWriter (Writer in) dan BufferedWriter(Writer in,int size) Membuat objek BufferedWriter dengan karakter buffer outputstream atau objek Writer yang lain. Int sz digunakan untuk ukuran buffer yang digunakan. void write(String s, int of, int len) Untuk menuliskan sebuah String s ke sebuah media yang telah dispesifikasikan oleh objek BufferedWriter. Dimulai dari karakter of(integer), ke berapa banyak karakter yang akan ditulis len(integer). Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 51
  • 52. 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"); } } Additional stuff Outputnya: Variabel Streams Standar Secara default, Java telah menyediakan 3 buah variabel streams yang dapat langsung digunakan, karena variabel ini member public static dari class System, yaitu : in,out,err. System.out : output stream standar. Secara default outputnya adalah console. System.in : input stream standar. Secara default inputya adalah keyboard. System.err : output stream untuk mencetak pesan kesalahan pada console (default). (System boleh langsung diakses karena println bertipe static sama dengan main, sehingga dapat langsung dijalankan tanpa melalui instansiasi) 52 Hello World FYI, kalo kamu mo instan objek dari paket java io, error harus selalu ditangkap oleh Exception, seperti IOException yang digunakan untuk menangkap kesalahan dari error IO. Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 53. Operasi File File digunakan sebagai media penyimpan. Untuk mengakses file kita harus menspesifikasikan dimana file yang akan kita akses, atau file baru yang akan disimpan. Dalam java kita dapat melakukan operasi file, yaitu membuat file baru atau menulis dan membaca file dengan character stream atau dengan byte stream. Untuk menciptakan sebuah file dengan mengakses class java.io.File dan menciptakan objek dari class tersebut, ini tanpa harus menangkap error io. Berbeda dengan menciptakan file yang langsung diakses oleh stream, file tersebut harus dapat menangkap error io ketika penciptaan objek class file. java.io.File terdapat 4 atribut, 4 konstruktor dan 39 method yang ada didalam class untuk menspesifikasikan file yang dibuat. File(),File(String path),File(String dir,String nm) Konstruktor diatas adalah yang sering digunakan yaitu membuat objek file kemudian digunakan dengan pengesetan methodnya, atau menginstan langsung dengan nama file beserta pathnya. boolean createNewFile(), boolean delete(),boolean exists() method-method diatas untuk mengeset dengan pengecekan, untuk createNewFile digunakan untuk menciptakan file kemudian mengembalikan nilai true jika file dibuat. java.io.FileWriter  dengan character stream terdapat 5 konstruktor dan tidak ada method yang dideskripsikan didalam class ini. FileWriter(File of), FileWriter(File of,boolean append) Digunakan untuk penciptaan objek file yang akan diakses dengan character stream, dan untuk variabel append digunakan untuk apakah isi file akan dilanjutkan ke akhir dari isi file. Kira-kira seperti apa yah java.io.FileInputStream  dengan byte stream terdapat 3 konstruktor dan 9 method yang ada. Digunakan untuk mengambil file yang telah dideskripsikan untuk dibaca dengan byte stream. FileInputStream(File of), FileInputStream(String nama) Digunakan untuk mengambil file untuk dibaca secara byte stream,bisa memasukan deskripsi file yang telah ada dengan String, atau dengan file yang telah diinstan dengan jelas. java.io.FileOutputStream  dengan byte stream terdapat 5 konstruktor dan 7 method untuk membuat file yang akan diakses menggunakan byte stream. FileOutputStream(File of), FileOutputStream(File of,boolean append) Digunakan untuk penciptaan objek file yang akan diakses dengan byte stream, dan untuk variabel append digunakan untuk apakah isi file akan dilanjutkan ke akhir dari isi file. java.io.FileReader  dengan character stream terdapat 3 konstruktor dan tidak ada method yang dideskripsikan didalam class ini. FileReader(File of), FileReader(String nama). Digunakan untuk mengambil file untuk dibaca secara character stream,bisa memasukan deskripsi file yang telah ada dengan String, atau dengan file yang telah diinstan dengan jelas. implementasinya di kode? Any idea? Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 53
  • 54. 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') { enter fout.write(data); data = (byte)System.in.read(); } } catch (FileNotFoundException e) { System.out.println("File "+namaFile+" tidak dapat dicreate"); } catch (IOException e) { System.out.println("Terjadi Exception"); } finally { if (fout!=null) { try { fout.close(); } catch (IOException e) { System.out.println("Terjadi Exception"); } } } } } Outputnya: Ketik : commonlabz 54 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 55. 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 Objek komputer Proses A Remote method Objek X bark() invocation Local method interface Objek manusia Agar satu objek bisa berkomunikasi dengan objek lain maka setiap objek pasti memiliki definisi interface. Objek Y eat() invocation Proses B Objek L sing() Objek P object sit() Remote object dipanggil oleh objek lain melalui remote object references yang merupakan sebuah ID yang dapat digunakan untuk menunjuk pada suatu remote object tertentu, di dalam ID ada info alamat host di mana remote object yang ditunjuk lagi jalan. Method mana aja yang bisa dipanggil secara remote didefinisiin di remote interface Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 Remote 55
  • 56. Object Serialization Apa itu object serialization? Suatu mekanisme yang dapat membuat sebuah objek dapat dikirimkan seperti mengirimkan data. Object serialization merupakan perluasan dari inti class java io yang digunakan untuk objek dan bisa digunakan untuk pengkodean (encoding) untuk objek dan membuat objek tersebut dapat diraih atau digunakan, dengan melalui bit-bit stream, kemudian dapat digunakan untuk penyusunan kembali objek tersebut dari bit-bit stream yang dikodekan, dan saling melengkapi. Serialisasi merupakan mekanisme yang ringan dan kuat untuk komunikasi dengan sockets atau RMI(Remote Method Invocation). Selain untuk komunikasi dengan sockets teknik ini dapat digunakan juga untuk menyimpan keadaan suatu status dari suatu objek ke dalam file, seperti yang sudah dijelaskan di pendahuluan. Jika kita ingin membuat sebuah objek yang dapat diserialisasikan, maka kita harus mengimplementasikan salah satu interface java.io.Serializable atau java.io.Externalizable pada class yang ingin dibuat objek yang dapat diserialisasikan. Untuk lebih jelas tentang serialisasi objek dibawah ini akan diberikan sedikit penjelasan yang terkait dengan objek serialisasi. Interface java.io.Serializable Interface serializable harus di implementasikan jika ingin membuat objek yang dapat diserialisasi, implementasi interface serializable tergolong sederhana karena tidak terdapat method yang harus didefinisikan untuk di override. Tujuan mengimplementasikan interface serializable adalah untuk memberitahukan kepada JVM (Java Virtual Machine), bahwa objek yang menerapkan serializabel merupakan objek yang dapat diserialisasikan. Class java.io.ObjectOutputStream Class objectoutputstream adalah kelas yang digunakan untuk mengirimkan objek menjadi stream yang kemudian dapat dikirimkan ke file atau ke socket (jaringan). Class ObjectOutputStream mempunyai 2 constructor dan 31 method untuk versi jdk 1.5. Adapun method dan constructor yang sering digunakan adalah ObjectOutputStream(OutputStream out) Membuat ObjectOutputStream yang akan menuliskan ke spesifik OutputStream yang dikehendaki. void writeObject(Object obj) menuliskan objek yang akan dikirimkan ke ObjectOutputStream. 56 Class java.io.ObjectInputStream Class ObjectInputStream adalah kelas yang digunakan untuk mengambil objek dari stream yang dikirimkan melalui file atau socket (jaringan). Class ObjectInputStream mempunyai 2 Constructors, 31 methods untuk versi jdk 1.5. Method dan constructor yang sering digunakan adalah ObjectInputStream(InputStream in) Membuat ObjectInputStream yang akan mengambil spesifik stream dari InputStream yang dikehendaki. Object readObject() Membaca objek yang telah diddefinisikan. Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 57. 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); } } Output program: nama barang : Baju jumlah barang : 5 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 57
  • 58. 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 kedalam suatu metode operasi, seperti file/socket. Terdapat void writeBoolean(Boolean b) parameter ObjecOutput yang bernama out, ObjectOutput adalah void writeByte(int i) jenis interface yang dijadikan tipe void writeChar(int c) variable parameter. Dan berikut beberapa method yang dapat digunakan parameter tersebut. void writeDouble(double d) Keterangan Menuliskan nilai bertipe Boolean Menuliskan nilai bertipe byte Menuliskan nilai character dengan (byte)(0xff & (c >> 8)) (byte)(0xff & c) Menuliskan nilai bertipe double void writeFloat(float f) void writeInt(int i) Method-method ini yang sering dapat digunakan untuk menuliskan tipe data, yang ada dalam method writeExternal ini, meskipun banyak method lain lagi yang dapat Menuliskan nilai bertipe float Menuliskan nilai bertipe integer void writeLong(long l) Menuliskan nilai bertipe long void writeShort(int s) Menuliskan nilai bertipe short void writeObject(Object o) Menuliskan objek atau tipe data referensi digunakan untuk keperluan yang lain. 58 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 59. 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 char readChar() Membaca nilai karakter dan meng-embalikannya parameter bertipe ObjecInput yang double readDouble() Membaca nilai double dan meng-embalikannya bernama in, sama seperti ObjectOutput, float readFloat() Membaca nilai float dan meng-embalikannya ObjectInput 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 halaman sebelah data barang : sepatu jumlah barang : 2 1. 2. 3. [Booch95] Grady Booch, “Object Oriented Analysis and Design with Application”, The Benjamin/ Cumming Publishing Company, 1995. [Coad91] Coad, Peter, Yourdon, “Object Oriented Design”, Second Edition, Prentice Hall, 1991 [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 Common Laboratory 2009/2010 59
  • 60. import java.io.*; public class BarangEx implements Externalizable{ private String nama; private int jumlah; public BarangEx(){ } //konstruktor 1 public BarangEx(String nm, int jml){ nama=nm; jumlah=jml; } //konstruktor2 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
  • 61. Modul 5 Multithreading Modul 5 Multithreading Tujuan: 1. Kenal konsepnya 2. Bisa implementasiinnya 3. Ngerti dan paham serta bisa implementasiin sinkronisasi di multithreading Apa itu thread? Inget waktu kita buat suatu program? Misalkan pas kita buat program mengurutkan bilangan, kita tahunya kalo program itu dibuat secara sekuensial. Ada awal, terus eksekusi programnya, dan akhir. Nah, aliran eksekusi dari suatu “task” pada sebuah program itu kita sebut thread. Masih bingung? Let‟s take a look gambar di bawah ini. mandi() Kenapa kita harus tahu thread?? Satu program x.sabunan() Karena ketika kita membuat sebuah program, supaya interaktif terkadang kita nggak cuma jalanin satu task aja. Kita pasti pernah main game kan? Ketika main game, terjadi beberapa task di sana. Ada yang tasknya ngurusin visual, ngurusin logikanya, perhitungan score, dan sebagainya. Jadi, ada banyak thread yang jalan di program game yang kita mainin. Nah, kemampuan menjalankan beberapa thread pada waktu yang bersamaan yang mana masing-masing mengerjakan task yang berbeda dalam satu program, kita sebut dia sebagai multithreading. x.sikatGigi() x.selesai() mandi() x.sabunan() Satu program mandi() x.sikatGigi() Dua x.bilasSabun() x.selesaiSabun() Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 Satu thread x.kumur2() threads x.selesaiSikat() 61
  • 62. 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: 62 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 63. Modul 5 Multithreading Setelah kita kenal thread… Bagaimana cara membuat dan menggunakan Threads? 1 Subclass yang extends Class java.lang.Thread Untuk jalanin threadnya: 1. 2. Buat objeknya 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 Common Laboratory 2009/2010 63
  • 64. 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
  • 65. Modul 5 Multithreading 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, manakah cara yang paling mudah? Kenapa? Answer: Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 65
  • 66. Gimana kalau misalnya kita maunya sikat gigi dulu baru sabunan? FYI, setiap thread itu punya prioritas lho. setPriority(int arg()) Prioritas berupa int: digunakan untuk modifikasi prioritas MIN_PRIORITY: 1 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 Kondisi awal dari sebuah thread, ketika objek thread dibuat Runnable Not Runnable thread lagi running tapi gak ngelakuin apa-apa. run method selesai Dead thread telah selesai eksekusi task 66 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 67. Modul 5 Multithreading Mengubah nama thread. Apakah thread masih hidup? Menjalankan thread. Menghentikan thread. Mengubah prioritas thread Menghentikan aktivitas thread selama waktu dalam parameter (in milisecond). Mengetahui prioritas thread. Menjalankan aktivitas thread yang tersuspend. Menghentikan aktivitas thread sementara sampai method resume( ) dipanggil. Mengetahui nama thread. Dan lain-lain…. 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 Common Laboratory 2009/2010 67
  • 68. Jika suatu method atau objek dilakukan sinkronisasi, maka otomatis objek atau method tersebut dilock dan jika ada thread lain yang mau akses, dia harus menunggu sampai method tersebut selesai dijalanin atau objek tersebut dilepas. Bagaimana sintaks sinkronisasi? public synchronized int namaMethod(){ //isi method } Sinkronisasi method, yang hanya dilakukan terhadap method yang punya identifier synchronized. Sinkronisasi objek, dilakukan terhadap seluruh method pada objek. Public class SinkronisasiThread{ private static Resources r; public static void main(String[] args){ r = new Resources(); new Ambil().start(); new Tambah().start(); } synchronized(object){ //isi method } Lengkapilah kode disamping berdasarkan urutan nomor yang telah disediakan! 1 } 2 static class Resources{ 2 private Boolean b = false; private byte nilai = 0; private synchronized void tambah(){ while(b==true){ try{ System.out.println(“Menunggu untuk ambil”); wait(); }catch(InterruptedException e){} } System.out.println(“Tambah nilai “+ ++nilai); b=true; notifyAll(); } private synchronized void ambil(){ while(b==false){ try{ System.out.println(“Menunggu untuk tambah”); wait(); }catch(InterruptedException e){} } System.out.println(“Ambil nilai “+ ++nilai); b=false; notifyAll(); } static class Ambil extends Thread{ 1 public void run(){ System.out.println(“Ambil berjalan”); for(int a=0;a<10;a++){ r.ambil(); } } } static class Tambah extends Thread{ public void run(){ System.out.println(“Ambil berjalan”); for(int a=0;a<10;a++){ r.tambah(); } } } } 68 Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010
  • 69. Modul 6 Graphical User Interface (GUI) Tujuan: 5. Kenal komponen-komponen dasar dalam pembuatan UI dalam Java. 6. Ngerti konsep GUI dan bisa implementasiin di program sederhana Setelah kita lalui modul-modul sebelumnya yang mana programnya cuma pake console, nah sekarang kita masuk ke modul 6 yang ngebahas tentang GUI. Berarti di modul ini kita bisa buat program yang ada tampilannya yaa. serta bisa integrasiin dengan salah satu DBMS. 7. Ngerti konsep dari event handling. Awt dan swing Platform package AWT Platform oriented Java.awt AWT components Swing multiplatform Javax.swing Beberapa fasilitas yang disediakan oleh kedua class tersebut adalah sebagai berikut: Pengaturan tata letak (layout management) komponen dalam suatu container. Mendukung event handling, yaitu mekanisme pendeteksian event dan penentuan respons yang akan diberikan ketika pengguna (user) mengakses komponen tersebut. Manipulasi grafis komponen seperti font, warna, icon, dll. Label Button Checkbox Choice List MenuItem TextField Scrollbar TextArea ScrollPanel Canvas Swing components Swing component pada dasarnya sama kayak AWT tapi ada penambahan fitur pada Swing. Modul Praktikum Pemrograman Berorientasi Objek Common Laboratory 2009/2010 69
  • 70. Komponen utama dalam GUI Containers. Adalah tempat dimana componen lain bisa di tempatkan didalamnya, contohnya adalah panel. Canvases. Digunakan untuk menampilkan image atau pembuatan program yang berbasis grafik. Kita bias menggambar titik, lingkaran dan sebagainya. UI components. contohnya buttons, lists, simple pop-up menus, check boxes, text fields, dan elemen khusus lain untuk user interface. Window contsruction components. Contohnya windows, frames, menu bars, dan dialog boxes. The Basic User Interface Components with Swing Top-Level Container Intermediate-Level Container Atomic Component Container dasar dimana komponen lain diletakkan. Ex : Frame (JFrame), Dialog (JDialog) & Applet (JApplet) Container perantara dimana komponen lain diletakkan Ex : JPanel, dimana umumnya hanya digunakan sebagai tempat untuk meletakkan/mengelompokkan komponenkomponen yang digunakan, baik container atau berupa atomic component. Dan digunakan juga sebagai scroll pane (JScrollPane & JTabbed Pane). Komponen yang memiliki fungsi spesifik, dimana umumnya user langsung berinteraksi dengan komponen ini Ex : JButton, JLabel, JTextField, JTextArea. 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