Rabu, 09 Desember 2009

Abstract Class

Abstract Class, pendeklarasiannya public abstract class merupakan superclass umum, yang memiliki beberapa method di dalamnya, dimana ada method yang mempunyai implikasi dan ada yang tidak.

Fungsinya untuk membuat prototype bagi class di tingkatan paling atas dalam hierarki class dan subclass-nya yang menyediakan detail implementasi dari abstract class tersebut.

  • Method yang punya implikasi, yaitu method biasa yang sering kita buat, yang punya body, punya System.out.println ..
  • Method yang tidak memiliki implikasi, berarti method tersebut body-nya kosong (tidak ada), juga tidak ada System.out.println-nya, disebut abstract method.


Abstract method beserta body-nya harus terdapat pada subclass class abstract, deklarasinya : public abstract void

pendeklarasian method inilah yang disebut prototype method.

Contoh penerapannya : pertama kita buat superclass, yaitu sebuah class abstract.

Misalnya kita buat class LivingThing (makhluk hidup) yang punya method breath, eat dan walk.





Perhatikan body kosong method walk.

Setelah itu kita buat superclass-nya, misalnya class Human.


Pada class Human yang merupakan subclass, terdapat method walk, yang saat di class LivingThing merupakan abstract method, di subclass ini dia menjadi method biasa, yang mempunyai body.


Kamis, 26 November 2009

Polimorphism

Polymorphism berarti suatu object yang dapat memiliki berbagai bentuk, sebagai object dari classnya sendiri atau object dari superclassnya.

Dalam polymorphism dikenal overloading dan overriding.

  • OVERLOADING : penggunaan satu nama dalam beberapa method yang berbeda parameter.

Maksudnya dalam satu class, terdapat beberapa method yang namanya sama, tapi parameter/tipe parameternya berbeda.

Contohnya :

class Lingkaran{
public buatLingkaran(int diameter){
...
}
public buatLingkaran(int diameter, int x, int y){
...
}
public buatLingkaran(int diameter, int x, int y, int
warna, String namaLingkaran){
...
}
}

  • OVERRIDING : terjadi ketika deklarasi method subclass sama dengan method dari superclass.

Yaitu method pada class atau class turunan namanya sama, parameter dan tipe parameternya sama, tetapi proses dalam method berbeda.

Contohnya pada class Sepeda

Sepeda.java

class Sepeda{

//deklarasi atribut

int kecepatan = 0;
int gir = 0;

// membuat method ubahGir dengan parameter pertambahanGir bertipe integer
void ubahGir(int pertambahanGir) {

gir= gir+ pertambahanGir;
System.out.println(“Gir:” + gir);

}

//membuat method tambahKecepatan dengan parameter pertambahanKecepatan
void tambahKecepatan(int pertambahanKecepatan) {

kecepatan = kecepatan+pertambahanKecepatan;
System.out.println(“Kecepatan:” +kecepatan);

}

}

Dalam kasus ini, Sepeda.java memiliki class turunan, yaitu SepedaGunung.java yang memiliki overriding method dari class Sepeda. Coba perhatikan ..

SepedaGunung.java

class SepedaGunung extends Sepeda {

//deklarasi atribut atau variabel

int setSadel;

//overriding method ubahGir dari class Sepeda
void ubahGir(int pertambahanGir) {

gir= 2*(gir+ pertambahanGir );
System.out.println(“Gir:” + gir);

}

}

Disana terlihat bahwa ada persamaan method, parameter dan tipe parameter dari Sepeda.java dan SepedaGunung.java, yaitu method ubahGir .. Selanjutnya kita tinggal membuat tes programnya. Kita beri nama class SepedaGunungBeraksi ..

SepedaGunungBeraksi.java

class SepedaGunungBeraksi {

public static void main(String[]args) {

// Membuat object dari class SepedaGunung
SepedaGunung sepedaku = new sepedaGunung();

// Memanggil method dan mengisi nilai parameter
sepedaku.tambahKecepatan(10);
sepedaku.ubahGir(2);
sepedaku.setSadel(20);

}

}

Inheritance

Inheritance atau pewarisan dalam Java, maksudnya suatu class dapat mewariskan method dan atributnya kepada kelas lain. Class utama disebut superclass dan kelas warisannya disebut subclass. Pada subclass harus terdapat keyword EXTENDS sebagai penanda inheritance.

Untuk contoh dapat dilihat dalam soal berikut. Ini adalah soal mid semester saya yang kemarin, =))

Buat class bernama PersegiPanjang yang mempunyai atribut Panjang dan Lebar. Dalam class PersegiPanjang terdapat method hitungLuas untuk menghitung Luas dengan rumus Luas = Panjang x Lebar.

Selanjutnya buat class turunannya bernama Balok yang mewarisi atribut Panjang dan Lebar dari class PersegiPanjang. Selain mewarisi atribut class PersegiPanjang, class Balok mempunyai atribut yang berbeda yaitu Tinggi. Dalam class Balok terdapat method hitungLuas untuk menghitung Luas dengan rumus Luas = Panjang x Lebar x Tinggi.

Test program tersebut dengan class TestHitung.

Nah, untuk mengerjakan soal diatas, langkah pertama yang dilakukan adalah membuat superclass, yaitu class PersegiPanjang.

PersegiPanjang.java //ini adalah nama file, nama file harus sama dengan nama class.

class PersegiPanjang { //tulis dulu nama class-nya

//berikutnya deklarasi atribut

int Panjang, Lebar;

//deklarasi method

void hitungLuas() {

Luas = Panjang*Lebar;

System.out.println(“Luas = “+Luas);

}

}

Dalam soal disebutkan pada class Balok terdapat method hitungLuas sama seperti class PersegiPanjang. Tapi dosen saya bilang kita harus membuat method baru pada class Balok, yaitu method volumeBalok.

Balok.java

class Balok extends PersegiPanjang { //artinya class balok memiliki atribut dan method class PersegiPanjang

//deklarasi atribut baru

int Tinggi;

//buat method baru

void volumeBalok() {

Volume = Panjang*Lebar*Tinggi;

System.out.println(“Volume = “+Volume);

}

}

Jika telah membuat superclass dan subclass, kita tinggal membuat tes programnya.

TestHitung.java

//langkah awal, buat method mainnya, method main harus ada supaya suatu class dapat berjalan

class TestHitung {

public static void main (String[]args) {

//membuat objek

Balok hitung = new balok();

//memberi nilai pada atribut

hitung.Panjang = 10;

hitung.Lebar = 15;

hitung.Tinggi = 20;

//panggil method

hitung.Luas();

hitung.VolumeBalok();

}

}

Silakan mencoba!! ;))

Minggu, 08 November 2009

Pernyataan Pemindah Proses

Penggunan Break

Pada pengulangan, bisa menggunakan break untuk menghentikan
pengulangan pada suatu kondisi tertentu. Fungsi break tersebut adalah untuk
menghentikan eksekusi sebuah blok program, misalnya untuk memaksa
keluar dari sebuah looping.

Penggunaan Continue

Pada pengulangan bisa juga menggunakan continue, dimana continue
akan melanjutkan proses pengulangan berikutnya tanpa menjalankan statemen
sesudahnya.

Penggunaan Return

Return biasnya digunakan di dalam method. Dengan menggunakan
perintah return, alur eksekusi dikembalikan ke bagian dari program yang
memanggil method tersebut.

Pernyataan Pengulangan Proses

PERNYATAAN WHILE

Pernyataan ini berguna untuk melakukan proses yang berulang.

Bentuk pernyataan :

while(kondisi)

{

blok pernyataan;

}

Contoh program java :

// nama file ulang.java

public class ulang

{

public static void main (String[]args)

{

int jumlah=1;

while(jumlah<=5>

{

System.out.println(“Putaran ke-“ +jumlah);

jumlah++;

}

}

}

HASIL :

Putaran ke-1

Putaran ke-2

Putaran ke-3

Putaran ke-4

Putaran ke-5

PERNYATAAN DO…WHILE

pernyataan ini menyerupai pernyataan while tetapi blok pernyataan yang terdapat dalam do….. while paling tidak dieksekusi sekali.

Bentuk pernyataan :

do

{

blok pernyataan;

}while(kondisi);

contoh program java:

// nama file ulang1.java

public class ulang1

{

public static void main (String[]args)

{

int jumlah = 11;

do

{

System.out.println(“Putaran ke-”+jumlah);

jumlah++;

}while (jumlah<=5>;

System.out.println(“Selesai… !”);

}

}

HASIL :

Putaran ke-11

Selesai…. !

PERNYATAAN FOR

Bentuk penulisan :

for(inisialisasi; kondisi; penaikan/penurunan)

{

blok pernyataan;

}

Bagian insialisasi digunakan untuk memberikan nilai awal kepada variabel yang digunakan untuk mengontrol pengulangan.

Bagian kondisi digunakan untuk mengontrol pengulangan atau diakhiri.

Bagian penaikan/penurunan digunakan untuk menaikkan attau menurunkan nilai variabel pengontrol pengulangan

Contoh program java

// nama file : ulang2.java

public class ulang2

{

public static void main(String[]args)

{

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

{

System.out.println( i +” “);

}

}

}

PENGULANGAN DALAM PENGULANGAN

Ada kalanya persoalan memerlukan penanganan pengulangan di dalam suatu proses pengulangan yang lain, misalnya menggunakan for yang diletakkan didalam for.

Contoh program java :

// nama file nestedfor.java

public class nestedfor

{

public static void main(String[]args)

{

for(int a=1;a<=3; a++)

{

for(int b=1;b<=5; b++)

{

System.out.print(“ x ”);

}

System.out.println();

}

}

}

Java menyediakan sebuah pernyataan yang berguna untuk keluar dari suatu perulangan (loop) dengan menggunakan perintah break.

Contoh:

// nama file break1.java

public calss break1

{

public static void main(String[]args)

{

for(int i=1; i<=3; i++)

{

if (i==5) break;

System.out.printl(i+” “);

}

System.out.print(“Selesai”):

}

}

HASIL :

1 2 3 4 Selesai

Selain itu Java juga mengenal pernyataan continue. pernyataan yang digunakan untuk mengarahkan eksekusi ke kondisi pernyataan berulang, sehingga kondisi akan dievaluasi lagi.

Contoh program java :

// nama file kontinu.java

public class kontinu

{

public static void main(String[]args)

{

for (int i=1; i<=8; i++)

{

if ( i >= 3; i<=7)

continue;

System.out.println(i);

}

}

}

HASIL :

1

2

8


Referensi : Praktikum Kapita Selekta Bahasa Pemrograman (Java) STI&K Jakarta ("Yudi Irawan")

Pernyataan Penentu Keputusan

1. if, if-else, if-else if – else
2. switch

if

  • Pernyataan kondisi yang digunakan
  • untuk pengambilan keputusan terhadap
  • dua buah kemungkinan
  • if bisa berdiri sendiri atau dengan
  • menggunakan else
  • Bentuk:
if(kondisi){
// blok pernyataan yang dijalankan, bila kondisi benar

}

PernyataanIF.java

public class PernyataanIF{
public static void main(String[] args){
int diskon =0, totalBelanja = 500000;
if(totalBelanja >= 100000){
diskon = totalBelanja/10;
}
System.out.println("Diskon = " + diskon);
}


if-else
  • if-else mengatur pernyataan yang
  • dijalankan sewaktu kondisi bernilai
  • benar atau salah
  • Bentuk:
if(kondisi){
// blok pernyataan yang dijalankan, bila kondisi benar
} else{
// blok pernyataan yang dijalankan, bila kondisi salah
}
}

PernyataanIFELSE.java

public class PernyataanIFELSE{
public static void main(String[] args){
System.out.println("Silahkan Masukan Jumlah Belanja Anda:);
int diskon =0, totalBelanja = 500000;
if(totalBelanja >= 100000){
diskon = totalBelanja/10;

} else{
diskon = 0;
}

System.out.println("Diskon = " + diskon);

}

}


if Bersarang

  • if bersarang mengatur pernyataan yang
  • dijalankan sewaktu kondisi berupa pilihan
  • Bentuk:
if(kondisiA){
// pernyataan yang dijalankan, bila kondisiA benar

}else if(kondisiB){
// pernyataan yang dijalankan, bila kondisiB benar

}else if(kondisiC){
// pernyataan yang dijalankan, bila kondisiC benar

}else{
// pernyataan yang dijalankan untuk kondisi selain itu
}


PernyataanIFBersarang.java

public class PernyataanIFBersarang {
public static void main(String[] args) {
int skorUjian= 86; char nilai;
if (skorUjian >= 90) {

nilai = 'A';
} else if (skorUjian >= 80) {

nilai = 'B';
} else if (skorUjian >= 70) {

nilai = 'C';
} else {

nilai = 'D';
}

System.out.println("Nilai = " + nilai);
}

Operasi I/O Stream Sederhana

Dalam sebuah pemrograman berorientasi object seperti halnya Program Java, kita mengenal sebuah pengontrol aliran program yang akan dieksekusi oleh komputer (Threads). Dengan adanya threads dalam pemrograman java kita dapat membuat program yang saling berurutan (sekuensial).

Thread merupakan kemampuan yang disediakan oleh Java untuk membuat aplikasi yang tangguh, karena thread dalam program memiliki fungsi dan tugas tersendiri. Dengan adanya thread, dapat membuat program yang lebih efisien dalam hal kecepatan maupun penggunaan sumber daya, karena kita dapat membagi proses dalam aplikasi kita pada waktu yang sama. Thread umumnya digunakan untuk pemrograman multitasking, networking, yang melibatkan pengaksesan ke sumber daya secara konkuren.

Secara konkrit, konsep threads dapat dilihat ketika kita mengetik sebuah dokumen di komputer dengan menggunakan text editor, dalam waktu yang bersamaan kita juga dapat mendengarkan musik, dan surfing lewat internet pada PC. Sistem operasi yang telah terinstal dalam komputer kita memperbolehkan untuk menjalankan multitaskting. Seperti itu juga sebuah program, ia juga dapat mengeksekusi beberapa proses secara bersama-sama (ibaratkan beberapa aplikasi berbeda yang bekerja pada sebuah PC). Contoh aplikasi adalah HotJava browser yang memperbolehkan untuk browsing terhadap suatu page, bersamaan dengan mendownload object yang lain, misalnya gambar, memainkan animasi, dan juga file audio pada saat yang bersamaan.


Sedangkan ketika kita melakukan penulisan dan pembacaan data sering kita sebut dengan proses input dan output, dimana penulisan data berarti mengalirkan data ke output dan menerima atau mendapatkan data dari input. Kita mengenal, dua macam stream yaitu Stream Input dan Stream output.

Stream adalah representasi abstrak dari input dan output device, dimana aliran bytes akan ditransfer seperti file dalam harddisk, file pada sistem remote atau printer. Kita dapat membaca data dari input stream, yang dapat berupa file, keyboard atau komputer remote. Sedangkan untuk operasi penulisan berarti menulis data pada output stream. Package Java I/O mendukung dua tipe stream, yaitu binari dan karakter stream. Binari merupakan data berupa bit atau data binari, sedangkan karakter adalah tipe khusus untuk pembacaan dan penulisan teks/karakter.

Thread merupakan kemampuan yang disediakan oleh Java untuk membuat aplikasi yang tangguh, karena thread dalam program memiliki fungsi dan tugas tersendiri. Dengan adanya thread, dapat membuat program yang lebih efisien dalam hal kecepatan maupun penggunaan sumber daya, karena kita dapat membagi proses dalam aplikasi kita pada waktu yang sama. Thread umumnya digunakan untuk pemrograman multitasking, networking, yang melibatkan pengaksesan ke sumber daya secara konkuren. Ada dua cara yang bisa digunakan dalam membuat sebuah thread, yaitu :

# Membuat subclass dari thread
Untuk menjalankan thread, dapat dilakukan dengan memanggil method start(). Saat start() dijalankan, maka sebenarnya method run() dari class akan dijalankan. Jadi untuk membuat thread, harus mendefinisikan method run() pada definisi class. Konstruktor dari cara ini adalah :
ClassThread namavar = new ClassThread();
Namavar.start();
Atau dapat juga langsung dengan cara:
New ClassThread().start();

#Mengimplementasikan interface Runnable
Cara ini merupakan cara yang paling sederhana dalam membuat thread. Runnable merupakan unit abstrak, yaitu kelas yang mengimplementasikan interface ini hanya cukup mengimplementasikan fungsi run(). Dalam mengimplementasi fungsi run(), kita akan mendefinisikan instruksi yang membangun sebuah thread. Konstruktor dari cara ini adalah :
ObjekRunnable objek = new ObjekRunnable();
Thread namavar = new Thread(Objek Runnable);
Atau dengan cara singkat seperti :
New Thread(new ObjekRunnable());

Dalam pemrograman java ada dua threads, yaitu daemon dan user thread. Daemon thread merupakan thread yang siklus hidupnya tergantung pada thread utama atau induk, sehingga apabila thread induk berakhir, maka otomatis thread-thread daemon juga ikut berakhir. Sedangkan user thread memiliki sifat berbeda, dimana apabila thread utama sudah selesai, maka user thread akan terus dijalankan.

Macam-macam state pada streads:
1. Running
Sebuah thread yang pada saat ini sedang dieksekusi dan didalam control dari CPU.
2. Ready to run
Thread yang sudah siap untuk dieksekusi, tetapi masih belum ada kesempatan untuk melakukannya.
3. Resumed
Setelah sebelumnya di block atau diberhentikan sementara, state ini kemudian siap untuk dijalankan.
4. Suspended
Sebuah thread yang berhenti sementara, dan kemudian memperbolehkan CPU untuk menjalankan thread lain bekerja
5. Blocked
Sebuah thread yang di-block merupakan sebuah thread yang tidak mampu berjalan, karena ia akan menunggu sebuah resource tersedia atau sebuah event terjadi

Untuk menentukan thread mana yang akan menerima control dari CPU dan akan dieksekusi pertama kali, setiap thread akan diberikan sebuah prioritas. Sebuah prioritas adalah sebuah nilai integer dari angka 1 sampai dengan 10, dimana semakin tinggi prioritas dari sebuah thread, berarti semakin besar kesempatan dari thread tersebut untuk dieksekusi terlebih dahulu. Sebagai contoh, asumsikan bahwa ada dua buah thread yang berjalan bersama-sama. Thread pertama akan diberikan prioritas nomor 5, sedangkan thread yang kedua memiliki prioritas 10. Anggaplah bahwa thread pertama telah berjalan pada saat thread kedua dijalankan. Thread kedua akan menerima control dari CPU dan akan dieksekusi pada saat thread kedua tersebut memiliki prioritas yang lebih tinggi dibandingkan thread yang pada saat itu tengah berjalan. Salah satu contoh dari skenario ini adalah context switch.

Sebuah context switch terjadi apabila sebagian dari thread telah dikontrol oleh CPU dari thread yang lain. Ada beberapa skenario mengenai bagaimana cara kerja dari context switch. Salah satu skenario adalah sebuah thread yang sedang berjalan memberikan kesempatan kepada CPU untuk mengontrol thread lain sehingga ia dapat berjalan.

Dalam kasus ini, prioritas tertinggi dari thread adalah thread yang siap untuk menerima kontrol dari CPU. Cara yang lain dari context switch adalah pada saat sebuah thread yang sedang berjalan diambil alih oleh thread yang memiliki prioritas tertinggi seperti yang telah dicontohkan sebelumnya. Hal ini juga mungkin dilakukan apabila lebih dari satu CPU tersedia, sehingga lebih dari satu prioritas thread yang siap untuk dijalankan.
Untuk menentukan diantara dua thread yang memiliki prioritas sama untuk menerima kontrol dari CPU, sangat bergantung kepada sistem operasi yang digunakan. Windows 95/98/NT menggunakan time-slicing dan round-robin untuk menangani kasus ini. Setiap thread dengan prioritas yang sama akan diberikan sebuah jangka waktu tertentu untuk dieksekusi sebelum CPU mengontrol thread lain yang memiliki prioritas yang sama. Sedangkan Solaris, ia akan membiarkan sebuah thread untuk dieksekusi sampai ia menyelesaikan tugasnya atau sampai ia secara suka rela membiarkan CPU untuk mengontrol thread yang lain.

Stream merupakan dasar operasi input-output ( I/O ) dalam Java yang menggunakan package java.io sebagai package utama. Stream adalah representasi abstrak dari input dan output device, dimana aliran bytes akan ditransfer seperti file dalam harddisk, file pada sistem remote atau printer. Kita dapat membaca data dari input stream, yang dapat berupa file, keyboard atau komputer remote. Sedangkan untuk operasi penulisan berarti menulis data pada output stream. Package java.IO mendukung dua tipe stream, yaitu binari dan karakter stream. Binari merupakan data berupa bit atau data binari, sedangkan karakter adalah tipe khusus untuk pembacaan dan penulisan teks/karakter.
A. Input Stream
Subclass-subclass dari input Stream adalah: Audio Input Stream, Byte Array Input Stream, File Input Stream, Filter Input Stream, Piped Input Stream, Sequence Input Stream, dan String Buffer Input Stream. Dua method utama dari InputStream adalah :
a. Read : Method ini digunakan untuk membaca stream
b. Close : Method ini digunakan untuk menutup koneksi input stream.
B. Output Stream
Subclass-subclass dari outputStream adalah :
• ByteArrayOutputStream : digunakan untuk menuliskan stream menjadi byte array;
• FileOutputStream : digunakan untuk menulis pada file;
• FilterOutputStream : merupakan superclass dari subclass-subclass seperti DataOutputStream, BufferOutputStream, PrintStream, CheckedOutputStream;
• ObjectOutputStream : digunakan untuk menuliskan objek pada OutputStream.
• PipedOutputStream : digunakan untuk menjadi output dari PipedInputStream.

Sebagian method-method OutputStream adalah :
#Voidclose()
Menutup output stream yang aktif dan melepaskan sumber daya terkait dengan stream tersebut;

#Void flush()
Melakukan flush output stream dan memaksa semua byte buffer untuk dituliskan keluar;
#Void write(byte[] b)
Menulis sebanyak b.length dari byte array ke output stream;
#Void write(byte[] b, int off, int len)
Menuliskan sebanyak len byte dari byte array b dimulai dari index off.