Anda di halaman 1dari 80

Pengenalan Bahasa Java

1.1 Tujuan

Bagian ini membahas secara singkat tentang bahasa pemrograman. Dalam bagian ini juga akan dibahas tentang bagaimana menulis, mengkompilasi, dan menjalankan program Java. Pada akhir pembahasan, diharapkan pembaca dapat : Mengetahui tentang bahasa pemrograman komputer dan kategorinya Membuat program Java menggunakan text editor dan command dalam Windows Membedakan antara syntax-errors dan runtime-errors Mengidentifikasi bagian dasar dari Program Java Mengetahui ketentuan penulisan program Java

1.2
1.3

Sekilas Bahasa Pemrograman


Apa Yang Disebut Bahasa Pemrograman

Bahasa Pemrograman adalah teknik instruksi standar untuk memberikan perintah/instruksi kepada komputer. Layaknya bahasa manusia, bahasa pemrograman juga memiliki tata tulis dan dan aturan tertentu. Bahasa Pemrograman dapat diklasifikasikan menjadi tingkat rendah, tingkat menengah, dan tingkat tinggi. Pergeseran tingkat dari rendah menuju tinggi menunjukkan kemiripan dengan bahasa manusia.

2.

Kategori Bahasa Pemrograman

1. Bahasa Pemrograman Tingkat Tinggi Merupakan bahasa tingkat tinggi yang mempunyai ciri-ciri mudah dimengerti karena kedekatannya terhadap bahasa sehari hari. Sebuah pernyataan program diterjemahkan kepada sebuah atau beberapa mesin dengan menggunakan compiler. Sebagai contoh adalah: JAVA, C++, .NET 2. Bahasa Pemrograman Tingkat Menengah Dimana penggunaan instruksi telah mendekati bahasa sehari hari, walaupun masih cukup sulit untuk dimengerti karena menggunakan singkatan singkatan seperti STO yang berarti simpan (STORE) dan

MOV yang artinya pindah (MOVE). adalah Fortran.

Yang tergolong dalam bahasa ini

3. Bahasa Pemrograman Tingkat Rendah Bahasa pemrograman generasi pertama. Bahasa jenis ini sangat sulit dimengerti karena instruksinya menggunakan bahasa mesin. Disebut juga dengan bahasa assembly merupakan bahasa dengan pemetaan satu persatu terhadap instruksi komputer. Setiap intruksi assembly diterjemahkan dengan menggunakan assembler. Java merupakan bahasa pemrograman tingkat tinggi yang berorientasi objek (OOP) dan dapat dijalankan pada berbagai platform sistem operasi. Perkembangan Java tidak hanya terfokus pada satu sistem operasi (platform independent), tetapi dikembangkan untuk berbagai sistem operasi dan bersifat open source. Bahasa pemrograman Java ini dikembangkan dengan model yang mirip dengan bahasa C++ dan Smalltalk. Sebagai sebuah bahasa pemrograman, Java dapat membuat seluruh bentuk aplikasi, seperti desktop, web, mobile, dan lainnya sebagaimana dibuat dengan menggunakan bahasa pemrograman lainnya.

2.1

Algoritma Pemrograman

Algortima adalah urutan langkah-langkah logis untuk menyelesaikan masalah yang disusun secara matematis dan logis. Langkah-langkah ini dapat diterjemahkan secara bertahap dari awal hingga akhir. Algoritma dapat diekspresikan dalam bahasa manusia, menggunakan presentasi grafis melalui Flowchart (diagram alir) ataupun melalui Pseudocode yang menjembatani antara bahasa manusia dan bahasa pemrograman. Contoh kasus: "Buatlah sebuah program yang akan menampilkan berapa kali sebuah nama tampil pada sebuah daftar" Mengekspresikan cara penyelesaian melalui bahasa manusia: 1. Tentukan daftar nama 2. Tentukan nama yang akan dicari, kata yang akan dicari ini dianggap sebagai sebuah kata kunci/keyword 3. Bandingkan kata kunci terhadap nama yang terdapat pada daftar 4. Jika kata kunci sama dengan yang terdapat pada daftar, tambahkan 1 pada hasil perhitungan

5. Jika seluruh nama telah dibandingkan, tampilkan hasil perhitungan

Mengekspresikan cara penyelesaian melalui Flowchart:

Mulai

Daftar Nama

Tampilkan hitung

Selesai Kata Kunci

Hitung = 0

Tidak A Tidak Ada nama lain ? Ya Nama == Kata kunci

Ya

Hitung = hitung + 1

Gambar 1: Contoh Flowchart

Mengeskpresikan cara penyelesaian melalui Pseudocode:

listNama = Daftar Nama keyNama = Nama yang dicari hitung = 0 Untuk setiap nama pada listNama lakukan: Jika nama == keyNama Hitung = hitung + 1 Tampilkan hitung

3.

Simbol Flowchart dan Penjelasannya

Flowchart adalah representasi grafis dari langkah-langkah yang harus diikuti dalam menyelesaikan suatu permasalahan yang terdiri atas sekumpulan simbol, dimana masing-masing simbol mempresentasikan kegiatan tertentu. Flowchart biasanya diawali dengan penerimaan input dan diakhiri dengan penampilan output. Berikut ini akan dibahas tentang simbol-simbol yang umum digunakan dalam menyusun flowchart, kegiatan yang diwakili serta aturan yang diterapkan dalam penggunaan simbol tersebut. Simbol Nama Simbol Proses Penjelasan
Melambangkan kegiatan pemrosesan input. Simbol ini, kita dapat menuliskan operasi-operasi yang dikenakan pada pada input, penulisan dapat dilakukan secara satu persatu maupun keseluruhan. Mempresentasikan fungsi I/O yang membuat data data diproses (sebagai input) atau ditampilkan (sebagai output)

Simbol Data (InputOutput)

Simbol Garis Alir

Simbol Percabangan

Digunakan untuk menghubungkan setiap langkah dalam flowchart dan menunjukkan kemana arah aliran diagram. Simbol garis ini dapat menunjukkan arah dari kiri ke kanan atau sebaliknya dan dari atas ke bawah atau sebaliknya. Digunakan untuk melambangkan percabangan suatu kondisi, yang akan menghasilkan Ya atau Tidak.

Digunakan untuk menandakan awal atau akhir dari suatu flowchart.

Simbol Terminator

Simbol Konektor

Simbol Prosedur

Digunakan untuk menghubungkan suatu langkah dengan langkah lain dalam sebuah flowchart dengan keadaan on page atau off page. Konektor on page digunakan untuk menghubungkan suatu langkah dengan langkah lain dari flowchart dalam satu halaman, sedangkan konektor off page digunakan untuk menghubungkan suatu langkah dengan langkah lain dari flowchart dalam halaman yang berbeda. Konektor ini biasanya dipakai saat media yang kita gunakan untuk menggambar flowchart tidak cukup luas untuk memuat gambar secara utuh, jadi perlu dipisah-pisahkan. Dalam sepasang konektor biasanya diberi label tertentu yang sama agar lebih mudah diketahui pasangannya. Digunakan sebagai blok pembangun dari suatu program. Prosedur memiliki suatu flowchart yang berdiri sendiri diluar flowchart utama. Jadi dalam simbol ini, kita cukup menuliskan nama prosedurnya saja, jadi sama seperti jika kita melakukan pemanggilan suatu prosedur pada program utama (main program). Sama dengan aturan pada simbol percabangan, penulisan nama prosedur dilakukan secara satu per satu.

3.1

Program Java Pertama

Sebelum membuat program Java pertama, akan dibahas terlebih dahulu bagaimana menulis, meng-compile dan menjalankan (run) program Java. Terdapat 2 cara dalam melakukannya, yang pertama menggunakan command (lingkungan windows) dan text editor. Sedangkan cara kedua dengan menggunakan NetBeans yang merupakan Integrated Development Environment atau yang disebut IDE. Penggunaan NetBeans akan dibahas pada pembahasan selanjutnya. Tulislah program di bawah ini dan simpan dalam file yang bernama "Hello.java", dan disimpan dalam sebuah folder yang bernama MYJAVA.
public class Hello { /* * Program Java Pertama */ public static void main(String[] args) { //Prints the string Hello World on screen System.out.println("Hello world"); }

Setelah program di atas selesai dibuat dan disimpan langkah berikutnya adalah Meng-compile program

Untuk meng-compile program Java, perintah yang digunakan: javac [nama file].java. Dalam hal ini, ketikkan perintah: javac Hello.java. Hasil dari pengcompile-an tersebut berupa sebuah file [nama file].class. Menjalankan Program

Untuk menjalankan program Java, perintah yang digunakan: java [nama file tanpa ekstensi]. Dalam hal ini ketikkan perintah: java Hello.

4.

Analisa Program Java Pertama

Baris pertama kode:


public class Hello { ... }

Mengindikasikan nama class yaitu Hello. Pada Java semua kode harus ditempatkan didalam sebuah class. Kata kunci yang digunakan adalah class. Baris berikutnya adalah tanda { kurung kurawal, yang mengindikasikan awal blok dan } yang mengindikasikan akhir dari blok.
/* * Program Java Pertama */

Tiga baris selanjutnya merupakan komentar penulisan komentar dalam bahasa Java. Komentar digunakan untuk mendokumentasikan bagian dari kode yang ditulis. Komentar diindikasikan oleh tanda /* dan */. Segala sesuatu yang berada diantara tanda tersebut akan diabaikan oleh compiler Java. Baris selanjutnya,
public static void main(String[] args) { ... }

Mengindikasikan nama suatu method dalam class Hello yang bertindak sebagai method utama. Method utama adalah titik awal dari suatu program Java. Semua

program kecuali applet method utama.

yang

ditulis

dalam

bahasa

Java

dimulai

dengan

Baris selanjutnya merupakan komentar,


//Prints the string Hello World on screen

Merupakan cara ke-2 untuk membuat komentar. Pembuatan komentar dengan cara ke-2 ini biasanya untuk komentar yang hanya satu baris. Baris selanjutnya,
System.out.println("Hello world");

Menampilkan teks "Hello World" pada layar. Perintah System.out.println(), menampilan teks yang diapit oleh tanda double quote (" ") pada layar. Dua baris terakhir digunakan untuk menutup method utama dan class.

5.

Errors

Ada 2 macam error, pertama adalah compile-time error atau disebut juga syntax error dan yang kedua adalah run-time error.

Syntax Error Syntax error biasanya terjadi karena kesalahan penulisan. Kemungkinan terdapat kekurangan dalam penulisan perintah di Java atau lupa untuk menulis titik koma pada akhir sebuah statement/pernyataan. Kesalahan umum lainnya adalah kapitalisasi, ejaan, penggunaan dari karakter khusus yang tidak benar, dan penghilangan dari pemberian tanda baca yang sebenarnya.

Contoh:
public static void main(String[] args { System.out.println("Hello world") } //Tanda kurung tidak ada penutup //Titik koma tidak ada

Run-time error

Run-time error merupakan error yang tidak ditampilkan sampai program dijalankan. Error ini biasanya terjadi akibat kesalahan proses logis dari program.

5.1

Ketentuan Penulisan Program Java

Ada Beberapa ketentuan dalam penulisan program dalam bahasa Java : 1. Program Java yang Anda buat harus selalu diakhiri dengan ekstensi file ".java". 2. Nama file harus sama dengan nama class public nya. Sebagai contoh, jika nama class public Anda adalah Hello, Anda harus menyimpan file tersebut dengan nama Hello.java. Jika dalam program tidak terdapat class public maka nama file boleh tidak sama dengan class pada program. 3. Anda harus menulis komentar sebagai penjelasan pada kode yang Anda tulis, yaitu komentar yang berisi keterangan mengenai baris perintah pada class atau apa yang dijalankan oleh method yang Anda tulis tersebut. 4. Pernyataan/statement adalah satu atau lebih baris kode yang diakhiri dengan semicolon ";". Sebagai contoh untuk pernyataan tunggal adalah System.out.println("Hello world"); 5. Untuk pemberian nama dari class Java, diberikan huruf kapital untuk huruf pertama pada nama class. Untuk nama method dan variabel, huruf pertama dari kata harus dimulai dengan huruf kecil. Sebagi contoh: ThisIsAnExampleOfClassName thisIsAnExampleOfMethodName 6. Method main harus dideklarasikan sebagai public

7. Jangan lupa mendeklarasikan array string didalam kurung method main, ... main (String[] args) { ... } 8. Java bersifat case sensitive, dimana huruf besar dan huruf kecil berbeda

5.2

Latihan
dan flowchart untuk

Susunlah dengan menggunakan pseudocode menghitung rata-rata dari 3 buah bilangan.

Buatlah sebuah program dengan nama file : [Nama Anda], hasil dari program yang ditampilkan di layar :

Selamat datang ke Pemrograman Java [Nama Anda] Buatlah sebuah program dengan nama TheTree, hasil dari program yang harus ditampilkan di layar: I think that I shall never see, A poem as lovely as a tree, A tree whose hungry mouth is press, Againts the Earths sweet flowing breast.

Dasar Pemrograman
5.3 Tujuan

Pada bagian ini, akan dikenalkan tipe data, tipe variabel dan operator pada bahasa pemrograman Java. Selanjutnya akan dibahas mengenai penggunaan streams untuk mendapatkan nilai input dari user pada saat runtime. Pada akhir pembahasan, diharapkan pembaca dapat : Mengetahui tipe data dasar, tipe variabel, dan operator Membuat program Java yang interaktif yang bisa mendapatkan input dari keyboard Menggunakan struktur kontrol (if, else, switch) yang digunakan untuk memilih blok kode yang akan dieksekusi Menggunakan struktur kontrol perulangan (while, do-while, for) untuk mengeksekusi blok tertentu pada program beberapa kali Menggunakan percabangan yang digunakan untuk mengatur arah dari aliran program

5.4

Tipe Data Primitif

Berdasarkan tipe datanya data primitif dapat dikelompokkan menjadi empat : Tipe data Integer atau bilangan bulat, meliputi : byte, short, int, long Tipe data Floating point atau bilangan nyata, meliputi : float dan double Tipe data Char untuk bentuk tekstual, meliputi : char Tipe data Boolean untuk bentuk logika true dan false, meliputi : boolean

6.

Integer Bilangan bulat

Dibedakan dalam beberapa format berbeda : desimal (basis 10), hexadesimal (basis 16), dan oktal (basis 8). Untuk angka desimal tidak ada notasi khusus dalam penggunaanya. Untuk angka hexadesimal harus ditandai oleh "0x" atau "0X", untuk angka oktal ditandai dengan "0". Sebagai contoh : 1. Desimal int d = 12; //nilai d = 12

2. Hexadesimal int h = 0xC; 3. Oktal int c = 014; //nilai c = 12, karakter 0 menunjukkan oktal //nilai h = 12, karakter 0x menunjukkan hexa

Tipe data integer memiliki default tipe data yaitu int. Berikut range tipe data integer : Integer Length 8 bits 16 bits 32 bits 64 bits byte short int long Name or Type
7 7

Range -2 to 2 - 1 -215 to 215 - 1 -231 to 231 - 1 -263 to 263 1

7.

Floating Point

double merupakan tipe data default untuk floating point. Sebagai contoh : double x = 3.14; float y = 8.9F; //nilai y = 8.9, karakter F menunjukkan float double z = 2.5E-3; //nilai z = 0.0025 (2.5 x 10-3) Tipe data floating point memiliki range sebagai berikut : Float Length 32 bits 64 bits float double Name or Type
31 31

Range -2 to 2 - 1 -263 to 263 - 1

8.

Char Tekstual

Tipe data tekstual / character (char), diwakili oleh karakter single unicode. Tipe data ini harus memiliki tanda single quotes (' ') pada nilainya. Sebagai contoh, char x = 'M'; Meskipun String bukan merupakan tipe data primitif pada Java (tetapi merupakan class), akan diperkenalkan juga pada bahasan kali ini. String mewakili tipe data yang terdiri atas banyak karakter. Tipe data ini harus memiliki tanda double qoutes (" ") pada nilainya. Sebagai contoh : String message = "Hello World";

9.

Boolean Logika

Tipe data boolean diwakili oleh dua pernyataan true dan false. Sebagai contoh, boolean isProcess = true; Contoh diatas, mendeklarasikan variabel yang dinamai isProcess sebagai tipe data boolean dan diberi nilai true.

9.1
9.2

Variabel
Deklarasi dan Insialisasi Variabel

Variabel adalah item yang digunakan untuk menyimpan suatu nilai dari tipe data tertentu. Sebelum digunakan variabel terlebih dahulu harus dideklarasikan. Variabel memiliki tipe data dan nama. Untuk mendeklarasikan variabel, sebagai berikut : <tipe data> <nama variabel>; Sebagai contoh : int x; //deklarasi variabel x dengan tipe data int Berikut contoh program untuk mendeklarasikan variabel dan memberikan nilai insialisasi beberapa variabel. public class Demo { public static void main(String[] args) { //deklarasi variabel b dengan tipe data boolean boolean b; //deklarasi variabel c dengan tipe data char char c; //deklarasi variabel s dengan tipe data String //dan telah diinsialisasi String s = "Nilai"; //deklarasi variabel f dengan tipe data float //dan telah diinsialisasi float f = 8.9F; //deklrasi variabel i dengan tipe data int //dan telah diinsialisasi int i = 789; } }

10.

Petunjuk Penamaan Variabel

Penamaan variabel pada bahasa pemrograman Java memiliki aturan dasar. Berikut adalah aturan dasar penamaan variabel : Tidak boleh diawali dengan angka Harus dimulai dengan huruf atau garis bawah (_) atau tanda dollar ($) Huruf kedua dan seterusnya boleh menggunakan angka, tetapi tidak boleh menggunakan operator Panjang nama variabel tidak dibatasi tetapi tidak boleh terpisah Tidak boleh menggunakan keyword / kata kunci Nama variabel bersifat case sensitive Gunakan nama yang bersifat menggambarkan deskriptif untuk variabel yang dibuat, jika ingin mempunyai variabel yang terdiri atas nilai siswa, beri nama dengan nama grade atau nilai. Jika nama variabel atau identifier terdiri dari 1 kata, maka semua dituliskan dengan huruf kecil, misal : "harga", "nama", "alamat". Jika terdiri dari 2 kata atau lebih, maka diawali dengan huruf kecil dan menandai bagian kata selanjutnya dengan huruf besar, misalnya "nextItem", "currentValue", "getTimeOfDay".

Berikut contoh penamaan variabel yang valid dan tidak valid : int int int int int int int int bilangan1; bilangan 1; 1bilangan; _bilangan1; $bilangan1; b1langan; bi-langan; bi+langan; // // // // // // // // valid tidak tidak valid valid valid tidak tidak valid valid

valid valid

11.

Konstanta

Pada prinsipnya konstanta hampir mirip dengan variabel. Dua-duanya digunakan untuk menyimpan suatu nilai dari tipe data tertentu. Bedanya variabel menyimpan suatu nilai yang bisa berubah-ubah (dinamis) sedangkan konstanta sekali dideklarasikan nilainya tidak akan pernah berubah. Variabel bisa tidak diinisialisasi, sedangkan konstanta selalu diinisialisasi dan nilai inisialisasi tersebut tidak akan pernah berubah. Deklarasi konstanta mirip dengan deklarasi variabel. Tetapi memiliki kata kunci final sebelum tipe datanya. Dan seperti variabel, konstanta juga memiliki aturan dalam penamaannya. Nama konstanta hanya boleh terdiri dari huruf

besar dan garis bawah (underscore). Berikut contoh penamaan konstanta yang valid : final double PI = 3.14; //Deklarasi konstanta dan pemberian // nilai variabel PI

11.1

Operator

Dalam Java, ada beberapa tipe operator. Tipe operator tersebut adalah operator aritmatika, operator relasi, operator logika, dan operator kondisi. Operator merupakan simbol yang biasa digunakan dalam menulis suatu pernyataan (statement) dalam bahasa pemrograman Java. Operator akan melakukan operasi terhadap operand sesuai dengan fungsinya.

12.

Operator Aritmatika

Berikut ini adalah dasar operator aritmatika : Operator + * / % Keterangan Penjumlahan Pengurangan Perkalian Pembagian Modulus (Sisa bagi) Contoh 5+1 5-1 5*2 9/3 5%3 6 4 10 3 2 Hasil

Contoh : int x = 10; int y = 2; double z = 7.22; System.out.println(x System.out.println(x System.out.println(x System.out.println(x * + / * y); y); y); z);

/* Catatan: Ketika integer dan floating-point number digunakan sebagai operand untuk operasi aritmatika tunggal, hasilnya berupa floating-point. */

13.

Operator Increment dan Decrement

Operator ini untuk menaikkan atau menurunkan suatu nilai dari suatu variabel angka. Sebagai contoh :

1. Operator Increment count = count + 1; Pernyataan tersebut sama dengan operator increment, count ++;

2. Operator Decrement count = count 1; Pernyataan tersebut sama dengan operator decrement, count --; Operator ++ -Keterangan Penambahan nilai dengan satu Pengurangan nilai dengan satu

Operator increment dan decrement dapat ditempatkan sebelum dan sesudah operand. Ketika digunakan sebelum operand, akan menyebabkan variabel diincrement atau di-decrement dengan nilai 1, dan kemudian nilai baru digunakan dalam pernyataan dia ditambahkan atau dikurangkan. Sebagai contoh : 1. Operator Increment int i = 10, int j = 3; int k = 0; k = ++j + i; //akan menghasilkan k = 4+10 = 14 2. Operator Decrement int i = 10, int j = 3; int k = 0; k = --i - j; //akan menghasilkan k = 9-3 = 6 Ketika operator increment dan decrement digunakan setelah operand, nilai variabel lama akan digunakan terlebih dahulu terhadap pernyataan dimana dia ditambahkan atau dikurangkan. Sebagai contoh : 1. Operator Increment int i = 10, int j = 3; int k = 0;

k = j++ + i; //akan menghasilkan k = 3+10 = 13 2. Operator Decrement int i = 10, int j = 3; int k = 0; k = i-- - j; //akan menghasilkan k = 10-3 = 7

14.

Operator Relasi

Operator ini digunakan untuk membandingkan kedua nilai operand-nya dan hasilnya berupa boolean bernilai true atau false. Operator == != > < >= <= Keterangan Sama dengan (membandingkan 2 nilai, bukan memberikan nilai) Tidak sama dengan Lebih besar dari Lebih kecil dari Lebih besar atau sama dengan Lebih kecil atau sama dengan

Berikut contoh program : public class Demo { public static void main(String[] args) { int i = 37; int j = 42; int k = 42;

//lebih besar dari System.out.println(i > j); //false //lebih besar atau sama dengan System.out.println(j >= k); //true //lebih kecil dari System.out.println(i < k); //true //lebih kecil atau sama dengan System.out.println(j <= i); //false

//sama dengan System.out.println(i == j); //false //tidak sama dengan System.out.println(i != j); //true } }

15.

Operator Logika

Operator logika memiliki satu atau lebih operand boolean yang menghasilkan nilai boolean. Terdapat enam operator logika yaitu : && (logika AND), & (boolean logika AND), || (logika OR), | (boolean logika inclusive OR), ^ (boolean exclusive OR), dan ! (logika NOT). && (logika AND) dan & (boolean logikan AND) Tabel kebenaran untuk operator logika && dan & exp1 TRUE TRUE FALSE FALSE exp2 TRUE FALSE TRUE FALSE Hasil TRUE FALSE FALSE FALSE

Perbedaan antara operator && dan & adalah untuk && mendukung short-circuit evaluations, sementara untuk & tidak. Penulisan pernyataannya sebagai berikut: exp1 && exp2; exp1 & exp2; && akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai. Jika exp1 bernilai false maka operator tidak akan pernah mengevaluasi exp2 karena hasil operasi pasti akan bernilai false. Sebaliknya, operator & selalu mengevaluasi kedua exp1 dan exp2 sebelum mengembalikan suatu nilai. Berikut contoh program :

public class Demo { public static void main( String[] args) { int i = 0; int j = 10; boolean test = false; //demo &&

test = (i > 10) && (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); /* Hasil 0 10 false */ //demo & test = (i > 10) & (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); /* Hasil 0 11 false */ } }

|| (logika OR) dan | logika (boolean logika inclusive OR) Tabel kebenaran untuk operator logika || dan | exp1 TRUE TRUE FALSE FALSE exp2 TRUE FALSE TRUE FALSE Hasil TRUE TRUE TRUE FALSE

Perbedaan antara operator || dan | adalah untuk || mendukung short-circuit evaluations, sementara untuk | tidak. Penulisan pernyataannya sebagai berikut: exp1 || exp2; exp1 | exp2; || akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai. Jika exp1 bernilai true maka operator tidak akan pernah mengevaluasi exp2 karena hasil operasi pasti akan bernilai true. Sebaliknya, operator | selalu mengevaluasi kedua exp1 dan exp2 sebelum mengembalikan suatu nilai. Berikut contoh program : public class Demo {

public static void main( String[] args) { int i = 0; int j = 10; boolean test = false; //demo || test = (i > 10) || (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); /* Hasil 0 10 true */ //demo | test = (i > 10) | (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); /* Hasil 0 11 true */ } }

^ (boolean logika ExclusiveOR) Berikut adalah tabel kebenaran untuk ^ exp1 TRUE TRUE FALSE FALSE exp2 TRUE FALSE TRUE FALSE FALSE TRUE TRUE FALSE Hasil

Hasil operasi dari operator exclusiveOR adalah TRUE, jika dan hanya jika salah satu exp bernilai TRUE dan yang lain bernilai FALSE. Sebagai contoh : Boolean x = true; Boolean y = false; Boolean z = true; System.out.println(x^y); //true System.out.println(x^z); //false

! (logika NOT) Logika ! (NOT) digunakan dalam satu argumen, dimana argumen tersebut bisa berupa pernyataan, varibel atau konstanta. Berikut tabel kebenaran logika ! : Exp1 TRUE FALSE Sebagai contoh : Boolean x = true; Boolean y = false; System.out.println(!x); //false System.out.println(!y); //true Hasil FALSE TRUE

Operator ?: (operator kondisi) Operator kondisi ?: adalah operator ternary. Yang berarti bahwa operator ini membawa tiga argumen yang membentuk suatu ekspresi bersyarat. Struktur pernyataan operator ini adalah : exp1?exp2:exp3 Dimana nilai exp1 adalah suatu pernyataan boolean yang memiliki nilai true atau false. Jika exp1 bernilai true maka hasilnya adalah exp2, tetapi jika exp1 bernilai false maka hasilnya adalah exp3. Sebagai contoh: String status = ""; int grade = 80; status = (grade >= 60) ? "Passed": "Failed"; System.out.println(status); // akan menghasilkan passed

15.1

Mendapatkan Input dari Keyboard

Pada bagian ini, kita akan menggunakan class BufferedReader yang berada di package java.io untuk mendapatkan input dari keyboard. Package merupakan kumpulan class-class, akan dibahas pada pembasan selanjutnya. Tetapi sebelum masuk ke pembahasan tersebut, akan dijelaskan bagaimana menampilkan nilai dari variabel ke layar.

16.

Menampilkan Data Variabel

Untuk menampilkan nilai dari variabel yang diinginkan, kita dapat menggunakan perintah :

System.out.println(); atau System.out.print(); Berikut contoh programnya : public class Demo { public static void main(String[] args){ int value = 10; char x = 'A'; System.out.println(value); System.out.println("The value of x= " + x); } }

Program tersebut akan menampilkan output pada layar, sebagai berikut : 10 The value of x=A

17. Menggunakan BufferedReader untuk mendapatkan nilai input


Berikut adalah contoh program untuk mendapatkan input dari keyboard : import java.io.*; public class GetInputFromKeyboard { public static void main(String[] args) { BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in)); String name = ""; System.out.print("Masukkan nama anda:"); name = dataIn.readLine(); } catch(IOException e){ System.out.println("Terjadi Error!"); } System.out.println("Hai " + name + "!"); } } try {

Sedikit penjelasan tentang program:

import java.io.*; menjelaskan bahwa kita akan menggunakan package java.io yang mengandung class-class yang memungkinkan program untuk melakukan input dan output data. Statement : BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in)); Mendeklarasikan variabel dataIn dengan tipe class BufferedReader . Blok di bawah ini merupakan try-catch block : try { name = dataIn.readLine(); } catch(IOException e){ System.out.println("Error!"); } Pada baris ini menjelaskan bahwa kemungkinan terjadi error pada pernyataan, untuk menangkap error tersebut digunakan try-catch blok. name = dataIn.readLine(); Kita akan membahas tentang penanganan exception pada pembahasan selanjutnya, tetapi untuk sekarang, Anda cukup mencatat bahwa Anda perlu menambahkan kode ini untuk menggunakan method readLine() dari BufferedReader untuk mendapatkan input dari user. method diatas memanggil dataIn.readLine(), mendapatkan input dari user dan memberikan sebuah nilai String. Nilai ini akan disimpan ke dalam variabel name, yang akan kita gunakan pada statement akhir untuk menyambut user, System.out.println("Hello " + name);

17.1

Struktur Kontrol Percabangan

Struktur kontrol percabangan merupakan pernyataan yang mengijinkan user untuk memilih dan mengeksekusi suatu blok kode dan mengabaikan blok kode yang lain.

18.

Pernyataan if

Pernyataan if merupakan salah satu pernyataan percabangan pada Java. Pernyataan If akan menentukan sebuah pernyataan yang akan dieksekusi jika dan hanya jika persyaratan bernilai benar (true). Bentuk pernyataan if, if (boolean_expression) { ...

} Sebagai contoh :

int grade = 68; if( grade > 60 ) System.out.println("Selamat!"); atau int grade = 68; if( grade > 60 ){ System.out.println("Selamat!"); System.out.println("Anda lulus!"); } boolean_expression pada pernyataan if harus merupakan nilai boolean (true atau false).

19.

Pernyataan if-else

Pernyataan if-else digunakan apabila kita ingin mengeksekusi suatu blok pernyataan jika kondisi bernilai true dan mengeksekusi blok pernyataan lainnya jika kondisi bernilai false. Bentuk pernyataan if, if (boolean_expression) { ... } else { ... } Sebagai contoh : int grade = 68; if( grade > 60 ) System.out.println("Selamat!"); else System.out.println("Gagal!"); atau int grade = 68; if( grade > 60 ){ System.out.println("Selamat!"); System.out.println("Anda lulus!"); } else { System.out.println("Maaf anda gagal");

20.

Pernyataan if-else-if

Bentuk pernyataan if-else-if sebagai berikut : if (boolean_expression) { ... } else if (boolean_expression2) { ... } else { ... } Sebagai contoh : int grade = 68; if( grade > 90 ){ System.out.println("Amat baik"); } else if (grade > 60){ System.out.println("Baik"); } else { System.out.println("Maaf anda gagal"); }

21.

Pernyataan if-else bersarang

Pernyataan if-else berarti pernyataan if-else ini berada di dalam if-else. Bentuk pernyataan if-else bersarang sebagai berikut : if (boolean_expression) { if (boolean_expression) { ... } else { ... } } else if (boolean_expression2) { ... } else { ... }

22.

Pernyataan switch

Pernyataan percabangan kedua yang dimiliki Java adalah switch. Pernyataan switch mengkonstruksikan cabang untuk beberapa kondisi dari nilai. Bentuk pernyataan switch, switch (switch_expression) {
case case_selector1: ... break; case case_selector2: ... break; case case_selector3: ... break; default: ... } break;

switch_expression adalah ekspresi integer atau character dan case_selector1, case_selector2 dan seterusnya adalah konstanta unik dari nilai integer atau karakter. Ketika pernyataan switch ditemukan pada potongan kode program, java pertama kali akan memeriksa switch_expression, dan menuju ke case yang akan menyamakan nilai yang dimiliki oleh switch_expression. Selanjutnya program akan mengeksekusi pernyataan pada dari kode setelah case yang ditemukan sampai menemui pernyataan break, selanjutnya akan mengabaikan pernyataan yang lainnya hingga akhir dari struktur dari pernyataan switch. Jika tidak ditemui case yang cocok, maka program akan mengeksekusi blok default. Sebagai catatan, bahwa bagian blok default adalah opsional. Sebuah pernyataan switch bisa jadi tidak memiliki blok kode default. Pernyataan break di atas sebetulnya tidak harus selalu ada. Tetapi, perintah break di sini memerintahkan komputer agar segera keluar dari blok switch apabila perintah tersebut telah selesai dilaksanakan. Apabila perintah break tidak diberikan, maka program akan terus mengeksekusi pernyataan pada case berikutnya, meskipun sudah berada di luar nilai yang tertera dalam pernyataan casenya. Contoh program: switch (N) case 1: System.out.println("Angka tersebut bernilai 1"); break;

2: 3: 4: 5: System.out.println("Angka tersebut bernilai 2, 3, 4, atau 5"); break; case 6: case 7: case 8: System.out.println("Angka tersebut bernilai 6, 7, atau 8"); break; default: System.out.println("Angka tersebut tidak bernilai 1 8"); }

case case case case

22.1

Struktur Kontrol Perulangan

Struktur kontrol perulangan adalah berupa pernyataan dari Java yang mengijinkan kita untuk mengeksekusi blok code berulang-ulang sesuai dengan jumlah tertentu yang diinginkan. Ada tiga macam jenis dari struktur kontrol perulangan yaitu while, do-while, dan for-loops.

23.

while loop

Bentuk pernyataan while, while( boolean_expression ){ ... } Pernyataan di dalam while loop akan dieksekusi berulang-ulang selama kondisi boolean_expression bernilai benar (true). Contoh : int i = 4; while ( i > 0 ){ System.out.print(i); i--; } Contoh diatas akan mencetak angka 4321 pada layar. Perlu dicatat jika bagian i--; dihilangkan, akan menghasilkan perulangan yang terus menerus

(infinite loop). Sehingga, ketika menggunakan while loop atau bentuk perulangan yang lain, pastikan Anda memberikan pernyataan yang membuat perulangan berhenti pada suatu kondisi. Beberapa contoh lain : Berikut ini adalah beberapa contoh while loop, Contoh 1: int x = 0; while (x<10) { System.out.println(x); x++; } Contoh 2: //infinite loop, harus dihindari while(true) System.out.println("hello"); Contoh 3: // Tidak ada loop, pernyataan tidak akan dieksekusi while (false) System.out.println("hello");

24.

do-while loop

do-while loop mirip dengan while-loop. Perbedaannya dengan while-loop, perulangan pada do-while loop akan dieksekusi sedikitnya satu kali. Bentuk pernyataan do-while, do{ ... } while( boolean_expression ); Pernyataan di dalam do-while loop akan dieksekusi pertama kali, dan akan dievaluasi kondisi dari boolean_expression. Jika nilai pada boolean_expression tersebut bernilai true, pernyataan di dalam do-while loop akan dieksekusi lagi. Berikut ini contoh do-while loop: int x = 0; do {

System.out.println(x); x++; } while (x<10);

25.

for loop

Pernyataan for loop memiliki kondisi hampir mirip seperti struktur perulangan sebelumnya yaitu melakukan perulangan untuk mengeksekusi kode yang sama sebanyak jumlah yang telah ditentukan. Bentuk dari for loop, for (InitializationExpression; LoopCondition; StepExpression){ ... } dimana, InitializationExpression inisialisasi dari variabel loop. LoopCondition - membandingkan variabel loop pada nilai batas tertentu. StepExpression - melakukan update pada variabel loop. Berikut ini adalah contoh dari for loop, int i; for( i = 0; i < 10; i++ ){ System.out.print(i); } atau for(int i = 0; i < 10; i++ ){ System.out.print(i); } Pada contoh ini, pernyataan i=0 merupakan inisialisasi dari variabel. Selanjutnya, kondisi i<10 diperiksa. Jika kondisi bernilai true, pernyataan di dalam for loop dieksekusi. Kemudian, ekspresi i++ dieksekusi, lalu akan kembali pada bagian pemeriksaan terhadap kondisi i<10 lagi. Kondisi ini akan dilakukan berulang-ulang sampai mencapai nilai yang salah (false). Contoh di atas adalah contoh yang sama dari while loop berikut, int i = 0; while( i < 10 ){ System.out.print(i); i++; }

25.1

Latihan

Buatlah program yang menghasilkan output nilai rata-rata dari tiga angka. Nilai dari masing-masing tiga angka tersebut adalah 10, 20 dan 45. Tampilan Output yang diharapkan adalah number 1 = 10 number 2 = 20 number 3 = 45 Rata-rata = 25

Menggunakan BufferedReader, tanyakan dua kata dari user dan tampilkan output dari input user tersebut ke layar. Contoh, Input kata 1: Halo Input kata 2: Selamat pagi Kata yang anda inputkan Halo dan Selamat pagi Buat sebuah program yang mencetak nama Anda sebanyak seratus kali. Buat tiga versi program ini menggunakan while loop, do while dan for-loop.

Array
25.2 Tujuan

Pembahasan pada bagian ini mengenai array dalam Java. Pertama, kita akan mendefinisikan apa yang dimaksud dengan array, kemudian kita akan mendeklarasikan dan menggunakannya dalam Java. Pada akhir pembahasan, diharapkan pembaca dapat : Mendeklarasikan array dalam Java Mengakses elemen-elemen di dalam sebuah array Menentukan jumlah elemen di dalam sebuah array Mendeklarasikan array multidimensi

25.3

Mengenal Array

Pada bagian sebelumnya telah dibahas bagaimana mendeklarasikan variabel sebelum variabel tersebut digunakan. Dalam pendeklarasian variabel, kita menggunakan tipe data beserta nama variabel. Sebagai contoh : int x; int y; int z; ... ... x = 0; y = 1; z = 2; ... ... Terlihat sangat tidak efisien jika kita harus mendeklarasikan banyak variabel dengan tipe data dan tujuan yang sama (mis: untuk penjumlahan). Pada bahasa pemrograman Java, terdapat kemampuan untuk menggunakan satu variabel yang dapat menyimpan beberapa data dan data tersebut dapat dimanipulasi. Tipe variabel inilah yang disebut sebagai array. Sebuah array menyimpan beberapa item data selalu diberi indeks dari pada array tersebut diinisialisasi. bilangan bulat (integer), mempunyai item sejenis secara berurutan. Dalam Java, nol hingga nilai tertentu, yang ditentukan Misalnya, sebuah array yang berisi 100 indeks dari nol hingga 99.

25.4

Pendeklarasian Array

Sebelum digunakan, array harus dideklarasikan seperti layaknya sebuah variabel. Pendeklarasian tipe data array memiliki dua bentuk : tipe_data[] nama_array; tipe_data nama_array[]; Dua cara pendeklarasian ini hanyalah untuk memudahkan programmer, bentuk yang mana pun yang digunakan diperbolehkan karena pada dasarnya keduanya sama. tipe_data merupakan tipe data yang akan ditampung oleh variabel ini. Semua tipe data yang dikenal dalam Java, baik yang merupakan tipe data primitif maupun berupa class dapat digunakan. Setelah pendeklarasian array, harus ditentukan berapa panjangnya dengan sebuah konstruktor. Proses ini di Java disebut sebagai instantiation. Untuk membuat sebuah objek, dibutuhkan sebuah konstruktor. Pembahasan mengenai pembuatan objek dan pembuatan konstruktor akan dibahas pada pembahasan selanjutnya. Ukuran sebuah array tidak dapat diubah setelah diinisialisasi. Sebagai contoh : //deklarasi int umur[]; //membuat objek array umur = new int[9]; Atau dapat juga ditulis : //Deklarasi dan membuat objek array int umur[] = new int[9]; Contoh di atas, pendeklarasikan ini memberitahukan kepada compiler Java, bahwa umur akan digunakan sebagai nama array yang bertipe integer, dan dilanjutkan dengan membuat atau meng-instantiate sebuah array baru dengan panjang 9 (terdiri dari 9 elemen). Berikut ilustrasi array berukuran 9, ke 9 tempat yang dialokasikan ini menampung 9 item data dengan tipe data int :
umur[0] umur[1] umur[2] umur[3] umur[4] umur[5] umur[6] umur[7] umur[8]

Selain menggunakan sebuah pernyataan new untuk membuat objek array, dapat juga mendeklarasikan, membangun, kemudian memberikan nilai kedalam array tersebut dalam sebuah pernyataan / statement.

Sebagai contoh : //membuat sebuah array yang berisi variabel-variabel //boolean pada sebuah identifier. Array ini terdiri dari 4 //elemen yang diinisilisasikan sebagai value //{true,false,true,false} boolean results[] = {true, false, true, false}; //Membuat sebuah array yang terdiri dari penginisialisasian //4 variabel double bagi value {100,90,80,75} double []grades = {100, 90, 80, 75}; //Deklarasi dan membuat objek array int umur[] = new int[3]; //Insialisasi array umur[0] = 25; umur[1] = 27; umur[2] = 19;

25.5

Pengaksesan sebuah elemen array

Untuk mengakses elemen dari sebuah array, digunakan indeks yang menentukan urutan dari array yang akan diakses. Indeks untuk array dalam Java selalu dalam tipe integer, dimulai dari nol, dan dilanjutkan ke angka berikutnya sampai akhir array (panjang array 1). Sebagai contoh, pada array yang dideklarasikan tadi : //memberikan nilai 25 pada elemen pertama array umur[0] = 25; //menampilkan elemen array yang terakhir System.out.println(umur[8]); Berikut contoh program untuk mencetak seluruh elemen didalam array. public class DemoArray { public static void main(String[] args) { int umur[] = new int[100]; for (int i=0; i < 100; i++) { System.out.println(umur[i]); } }

25.6

Panjang Array

Untuk mengetahui panjang / banyak elemen dari sebuah array, dapat digunakan atribut length. Atribut ini akan mengembalikan ukuran dari array tersebut. Sebagai contoh : arrayName.length; Pada contoh sebelumnya, kita juga dapat menulisnya kembali seperti berikut ini : public class DemoArray { public static void main(String[] args) { int umur[] = new int[100]; for (int i=0; i < umur.length; i++) { System.out.println(umur[i]); }

} }

25.7

Array Multidimensi

Array multidimensi adalah array yang terdapat didalam array. Array multidimensi dideklarasikan dengan menambahkan jumlah tanda kurung setelah nama array. Sebagai contoh : // Elemen 512 x 128 dari integer array int[][] twoD = new int[512][128]; // karakter array 8 x 16 x 24 char[][][] threeD = new char[8][16][24]; // String array 4 baris String[][] cats = { { { { { }; x 2 kolom "terry", "brown" }, "Kristin", "white" }, "toby", "gray"}, "fido", "black"}

Untuk mengakses sebuah elemen didalam array multidimensi, hampir sama seperti mengakses array satu dimensi. Sebagai contoh, untuk mengakses elemen pertama dari baris pertama didalam array cats di atas dapat kita tulis, System.out.print(cats[0][0]); Kode di atas akan mencetak "terry" di layar. Sebagai contoh : int[][] A = { { 1, 0, 12, -1 }, { 7, -3, 2, 5 }, { -5, -2, 2, 9 }};

//Cetak isi Array for (int i = 0; i < A.length; i++) { //Cetak baris i kolom 0 System.out.print(A[i][0] + " "); for (int j = 1; j < A.length - 1; j++) { //Cetak baris i Kolom 1 System.out.print(A[i][1] + " "); //Cetak baris i Kolom 2 System.out.print(A[i][2] + " "); //Cetak baris i Kolom 3 System.out.println(A[i][3] + " ");

} }

25.8

Latihan

1. Buatlah sebuah String array yang akan menginisialisasi 7 hari dalam seminggu. Contoh : String hari[] = {"Senin", "Selasa", .... }; Gunakan while-loop, kemudian tampilkan ke layar semua isi dari array tersebut. Gunakan juga do-while-loop dan for-loop. 2. Berikut merupakan array multidimensi : String[][] entry = { {"Budi", "Medan", "03-12-1986"}, {"Cindy", "Tebing Tinggi", "15-01-1985"}, {"Rio", "Medan", "23-05-1980"} }; Cetak isi dari array di atas, dalam format berikut : Nama : Budi Tempat Lahir : Medan Tanggal Lahir : 03-12-1986 Nama : Cindy Tempat Lahir : Tebing Tinggi Tanggal Lahir : 15-01-1985 Nama : Rio Tempat Lahir : Medan Tanggal Lahir : 23-05-1980 3. Tampilkan isi dari array berikut ini serta cari dan tampilkan juga elemen yang memiliki angka terbesar. int[] number = { 13, 14, 1, 20, 25, 5, 6, 9, 19 };

Studi Kasus : Dasar Pemrograman


1. Dalam matematika, bilangan Fibonacci adalah deret bilangan yang dimulai dari angka 0 dan 1, kemudian angka berikutnya didapat dengan cara menambahkan dua bilangan sebelumnya. Dengan aturan ini, maka barisan bilangan fibonacci seperti berikut ini : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, ... Dari penjelasan diatas, buatlah program untuk menampilkan 10 deret fibonaccci pertama. 2. Seorang pebisnis akan sangat ingin mengetahui nilai mata uang asing yang real time kapan saja dan dimana saja. Anda ditunjuk oleh seorang pebisnis untuk membuat program konversi mata uang sederhana, dimana program tersebut dapat mengkonversikan dari mata uang Rupiah ke mata uang Dollar US atau ke mata uang Dollar Singapura. 3. Mesin hitung atau Kalkulator adalah alat untuk menghitung dari perhitungan sederhana seperti penjumlahan, pengurangan, perkalian dan pembagian sampai kepada kalkulator sains yang dapat menghitung rumus matematika tertentu. Pada perkembangannya sekarang ini, kalkulator sering dimasukkan sebagai fungsi tambahan daripada komputer, handphone, bahkan sampai jam tangan. Buatlah sebuah program kalkulator yang dapat melakukan perhitungan sederhana, penjumlahan, pengurangan, perkalian, dan pembagian. setelah perhitungan program akan menanyakan kepada user, apakah akan keluar dari program atau akan melanjutkan perhitungan.

Pemrograman Berorientasi Objek


Pembahasan pada bagian ini mengenai beberapa konsep dasar dari pemrograman berorientasi objek (Object Oriented Programming). Juga akan dibahas konsep dari class dan objek, serta penggunaan class, konversi, dan pengubahan objek. Pada akhir pembahasan, diharapkan pembaca dapat : Menjelaskan mengenai Pemrograman berorientasi objek Perbedaan antara class dan objek Menjelaskan mengenai method, serta cara pemanggilan dan pemberian parameter ke dalam method Mengidentifikasi jangkauan dari sebuah variabel Mendklarasikan atribut dan method pada class Menggunakan access modifiers untuk memberikan akses terhadap class member

25.9

Pengenalan Pemrograman Berorientasi Objek

Pemrograman berorientasi objek (PBO) bermaksud untuk memecahkan masalah programming mirip dengan cara berfikir manusia dan bagaimana manusia berinteraksi dengan dunia. Pada PBO, masalah pemrograman dibagi berdasarkan objek atau "sesuatu" benda. Objek ini diibaratkan seperti makhluk hidup, yaitu memiliki ciri-ciri fisik dan juga perilaku. Dalam PBO, ciri-ciri fisik ini disebut dengan atribut, sedangkan perilaku disebut juga dengan metode. Objek terkait dengan class. Kita telah mencoba beberapa contoh class pada bagian sebelumnya. Pada class yang kita buat sebelumnya, sebuah class juga memiliki variabel dan metode.

25.10

Class dan Objek

Class merupakan struktur dasar dari OOP. Class terdiri dari dua tipe anggota yang disebut dengan field (atribut/properti) dan method. Field merupakan tipe data yang didefinisikan oleh class, sementara method merupakan operasi. Sebuah objek adalah instance dari class. Mungkin untuk bahasa biologi, class adalah spesies, sedangkan objek merupakan individu. Sebagai contoh, Homo Sapiens (nama biologi dari manusia) adalah class, sedangkan Anda, Pak Guru, Adik, Kakak, Ayah, Ibu adalah objek. Masing-masing dari kita memiliki blueprint yang sama, tetapi kita memiliki ciri-

ciri yang berbeda seperti rambut, mata, hidung, telinga, dan juga perilaku saat kita makan, saat kita minum, dan lain-lain. Contoh lainnya, Kita memiliki sebuah class mobil dimana dapat digunakan untuk medefinisikan beberapa objek mobil. Pada tabel dibawah, mobil A dan mobil B adalah objek dari class mobil. Class memiliki field nomor, plat, warna, manufaktur dan kecepatan yang diisi dengan nilai pada objek mobil A dan mobil B. Mobil juga dapat berakselerasi, berbelok dan melakukan pengereman.

Class Mobil Nomor Plat Warna Variabel Instance Manufaktur Kecepatan Method Instance

Objek Mobil A BK 74 VA Hitam Toyota 150 km/h Method Akselerasi Method Belok Method Rem

Objek Mobil B BK 5 UN Putih Honda 150 km/h

Ketika diinisialisasi, setiap objek mendapat satu set variabel yang baru.

26.

Instansiasi Class

Untuk membuat sebuah objek atau sebuah instance pada sebuah class. Kita menggunakan keyword new. Sebagai contoh, jika anda ingin membuat instance dari class string, kita menggunakan kode berikut : String str2 = new String("Hello world!");

Ini juga sama dengan, String str2 = "Hello";

26.1

Method

Pada beberapa contoh sebelumya, kita hanya memiliki satu method, dan method itu adalah method main(). Kita dapat mendefinisikan banyak method yang akan dipanggil dari method yang berbeda. Sebuah method adalah bagian-bagian program yang dapat dipanggil oleh program utama atau dari method lainnya untuk menjalankan fungsi yang spesifik. Berikut adalah karakterisitik dari method : 3. Dapat mengembalikan nilai atau tidak

4. Dapat menerima beberapa parameter atau tidak. Parameter disebut sebagai argumen dari fungsi 5. Setelah method telah selesai dieksekusi, program akan kembali kepada method yang memanggilnya.

27.

Memanggil Instance Sebuah Method

Untuk mengilustrasikan bagaimana memanggil method, akan kita gunakan class String sebagai contoh. Dokumentasi dari Java API untuk melihat semua method yang tersedia dalam class String. Selanjutnya kita akan membuat method kita sendiri.

Untuk memanggil sebuah instance method, kita dapat menuliskan : namaObjek.namaMethod(parameter); Kita akan mengambil dua contoh method dari class String. Deklarasi Method public char charAt(int index) public boolean equalsIgnoreCase (String param) Sebagai contoh penggunaan : String strH1 = "Hello"; char chrH1 = strH1.charAt(0); //Akan mengembalikan character H //dan disimpan ke dalam variabel charH1 String strH2 = "hello"; //mengembalikan boolean (true or false) boolean result = strH1.equalsIgnoreCase(strH2); //Membandingkan antara nilai strH1 dan strH2, karena tidak //case sensitive maka hasilnya true Mengambil tertentu Membandingkan dua buah tetapi tidak case sensitive Definisi karakter pada indeks string,

28.

Pemberian Variabel Pada Sebuah Method

Sebagai contoh kita lihat program dibawah ini : public static double ambilDouble(String pertanyaan) { String strbilangan = null; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); double bilangan; System.out.print(pertanyaan); try {

strbilangan = br.readLine(); } catch (IOException ioe) { System.out.println("Kesalahan IO, program berhenti"); System.exit(1); } bilangan = Double.parseDouble(strbilangan); return bilangan; } Di sini method() ambilDouble memiliki parameter tunggal yang bertipe String dan bernama pertanyaan. Ketika method() ini dipanggil, suatu nilai harus ikut disertakan, dan nilai ini dimasukkan dalam parameter "pertanyaan". Misalnya, method() dapat dipanggil dengan a = ambilDouble("hallo");. Ketika komputer menjalankan perintah ini, komputer akan memasukkan "hallo" ke dalam parameter "pertanyaan", kemudian method() ambilDouble menjalankan semua perintah di dalamnya. Jika parameter yang diberikan berupa variabel, misalnya "kabar", kemudian method() ambilDouble panggil ambilDouble(str), maka isi dari str akan dikopi ke "pertanyaan" terlebih dahulu sebelum seluruh perintah ambilDouble dilaksanakan. variabel str berisi dengan perintah dalam parameter dalam method()

Perlu dicatat bahwa istilah "parameter" digunakan dalam dua konsep berbeda tetapi berkaitan. Yang pertama adalah "parameter" digunakan untuk mendefinisikan suatu method(). Parameter yang digunakan pada definisi suatu method() disebut parameter formal. "Parameter" yang digunakan untuk memanggil suatu method() disebut parameter aktual. Ketika suatu method() dipanggil, parameter aktual akan dievaluasi, dan hasilnya akan dimasukkan ke dalam parameter formal. Parameter formal berbentuk seperti pengenal atau nama, dan bersifat seperti halnya variabel dan memiliki tipe -- misalnya int, double, atau String. Parameter aktual bersifat seperti nilai atau angka, jadi bisa berbentuk ekspresi atau perintah apapun yang menghasilkan nilai atau angka. Sewaktu kita memanggil method(), kita harus memberi parameter aktual untuk setiap parameter formal yang didefinisikan. Misal, seperti contoh berikut : static void lakukanSesuatu(int N, double d, boolean b) { ... //perintah lain } Method() diatas dapat dipanggil seperti berikut : lakukanSesuatu(1, Math.random() * 3, x == 3); Ketika Java mengevaluasi method() ini, pada dasarnya sama dengan menlakukan perintah-perintah berikut :

int N; double d; boolean b; N = d = b = ... 1; Math.random() * 3; (x == 3); // perintah lainnya di sini

28.1

Access Modifiers

Pada Java terdapat 4 access modifers, yaitu public, protected, default (package), dan private. 1. public

Class, method, ataupun variabel yang menggunakan access modifier ini dapat digunakan oleh class manapun. Penggunaan : //Pada class public class Demo { ... } //Pada method public void demo() { ... } //Pada variabel public int demo; 2. protected

Dapat diakses pada class itu sendiri maupun class-class dari class turunannya. Dapat juga diakses oleh class yang berada dalam satu package. 3. default

Hanya class class yang berada satu package yang dapat mengakses.

4.

private

Hanya class itu sendiri yang dapat mengakses method ataupun variabel yand diberi akses ini.

28.2

Package

Packages dalam JAVA berarti pengelompokan beberapa class dan interface dalam satu unit. Fitur ini menyediakan mekanisme untuk mengatur class dan interface dalam jumlah banyak dan menghindari konflik pada penamaan.

29.

Mengimpor Packages

Agar dapat meggunakan class yang berada diluar package, Anda harus mengimpor package dimana class tersebut berada. Pada dasarnya, seluruh program JAVA mengimpor package java.lang.* secara default, sehingga Anda dapat menggunakan class seperti String dan Integer dalam program meskipun belum mengimpor package sama sekali. Penulisan import package dapat dilakukan seperti dibawah ini : import <namaPaket>; Sebagai contoh, bila Anda ingin menggunakan class Color dalam package awt, Anda harus menuliskan import package sebagai berikut : //Cara pertama import java.awt.Color; //Cara Kedua import java.awt.*; Baris pertama menyatakan untuk mengimpor class Color secara spesifik pada package, sedangkan baris kedua menyatakan mengimpor seluruh class yang terkandung dalam package java.awt.

30.

Membuat Package

Untuk membuat package, dapat dilakukan dengan menuliskan : package <packageName>;

Kita ingin membuat package dimana class StudentRecord akan ditempatkan bersama dengan class class yang lain dengan nama package schoolClasses. Langkah pertama yang harus dilakukan adalah membuat folder dengan nama schoolClasses. Salin seluruh class yang ingin diletakkan pada package dalam folder ini. Kemudian tambahkan kode deklarasi package pada awal file. Sebagai contoh : package schoolClasses; public class { private private private } StudentRecord String name; String address; int age;

30.1

Memanggil Method Static

Method Static adalah method yang dapat dipakai tanpa harus menginisialisasi suatu class (maksudnya tanpa menggunakan variabel terlebih dahulu). Method static hanya dimiliki oleh class dan tidak dapat digunakan oleh instance (atau objek) dari suatu class. Method static dibedakan dari method yang dapat instance di dalam suatu class oleh kata kunci static. Untuk memanggil method static, kita dapat menuliskan : Classname.staticMethodName(params); Berikut contoh program penggunaan method static : //mencetak ke layar System.out.println("Hello world"); //konversi string menjadi integer int i = Integer.parseInt("10"); String hexEquivalent = Integer.toHexString(10);

30.2

Lingkup Variabel

Selain nama dan tipe data, sebuah variabel juga mempunyai jangkauan. Jangkauan ini menentukan kemampuan dalam mengakses variabel. Jangkauan ini juga menentukan siklus hidup dari sebuah variable atau berapa lama variable

itu berada dalam memori. Jangkauan ini ditentukan oleh letak pendeklarasian variabel didalam program. Untuk memudahkan anda mengenai jangkauan variabel, kita bedakan variabel yang terletak di dalam kurawal {.....}. Blok kode yang terdapat di luar kurung kurawal bisa disebut juga dengan blok luar, dan blok kode yang terletak di dalam kurung kurawal disebut dengan blok dalam. Jika kita mendeklarasikan variabel di blok luar, variabel akan dapat digunakan oleh blok bagian dalam. Jika kita mendeklarasikan variabel di blok dalam, kita tidak bisa menggunakan varibel blok terluar untuk menggunakan variabel tersebut. Jadi dapat disimpulkan, suatu jangkauan variabel dapat terletak di dalam blok dimana variabel tersebut sudah dideklarasikan, dimulai dari tempat dimana variabel itu dideklarasikan dan di blok-blok bagian dalam.

30.3

Konversi Tipe Data dan Casting

Dalam pemrograman untuk menampung suatu nilai dengan tipe data tertentu ke dalam variabel yang mempunyai tipe data yang berbeda adalah hal yang biasa. Java akan melakukan konversi tipe data secara otomatis jika kedua tipe data tersebut kompatibel (biasa disebut implicit casting). Typecasting atau casting adalah proses konversi dari tipe data tertentu ke tipe data yang lain. Casting antara tipe data primitif dapat mengijinkan anda untuk mengkonversikan sebuah nilai dari sebuah tipe data ke tipe data primitif lain. Hal ini biasanya terjadi diantara tipe data Integer dan Floating point. Ada sebuah tipe data primitif yang tidak dapat di-casting, yaitu tipe data boolean. Contoh kode : int numInt = 10; long numLong = numInt; //konversi tipe data Variabel numInt yang bertipe int ditampung ke dalam variabel numLong yang bertipe long. Dengan demikian, terjadi konversi tipe data, dan dalam hal ini konversi dilakukan secara otomatis oleh Java tanpa menambahkan kode apapun. Namun, tidak semua tipe data kompatibel satu dengan lainnya. Misalnya tipe data float dengan tipe data int. float merupakan tipe data floating-point, sedangkan int merupakan tipe data Integer. Hal yang sama juga terjadi jika kita hendak mengonversi tipe data yang ukurannya berbeda, seperti dari int ke short. Konversi yang tidak kompatibel ini masih memungkinkan, namun harus dilakukan secara eksplisit (explisit casting). Untuk mengunakan eksplisit casting, kita dapat menuliskan :

(target-tipe-data)variabel; Contoh kode : float valFloat = 10.2f; int valInt = (int)valFloat; //casting dari float ke int int data1 = 257; byte data2 = (byte)data1; Yang perlu diperhatikan di sini adalah jika anda mengubah tipe data yang berbeda jenis, seperti dari tipe data floating point ke tipe data integer maka akan terjadi pemotongan (truncation). Dalam contoh di atas nilai dari valInt adalah 10. Sedangkan untuk tipe data yang ukurannya lebih kecil jika digunakan untuk menampung data yang lebih besar daya tampunya, maka yang akan tertampung adalah nilai modulusnya (sisa bagi). Dalam contoh di atas, variabel data1 adalah byte (jumlah maksimum yang dapat ditampung oleh byte adalah 256), sedangkan nilai yang akan ditampung adalah 257. Maka data2 bernilai 1.

30.4

Menentukan Class dari Sebuah Objek

Jika kita ingin mengetahui class dari sebuah objek dapat dilakukan dengan cara : 1. Method getClass() mengembalikan sebuah objek class (dimana class itu sendiri merupakan sebuah class) yang memilki sebuah method getName(). Selanjutnya getName() akan mengembalikan sebuah string yang mewakili nama class. Sebagai contoh, String key = ""; String className = key.getClass().getName(); 2. Operator instanceof, memiliki dua operand: objek pada sebelah kiri dan nama class pada sebelah kanan. Pernyataan ini mengembalikan nilai true atau false tergantung pada benar/salah objek adalah sebuah instance dari penamaan class atau beberapa subclass milik class tersebut. Sebagai contoh, boolean ex1 = "Texas" instanceof String; // true Object ex2 = 10;

boolean ex3 = ex2 instanceof String; // false

30.5
1.

Latihan
Dengan kata-kata Anda sendiri, definisikan istilah-istilah berikut ini :

a) Class b) Object c) Instantiate d) Instance Variable e) Instance Method f) Class Variables atau static member variables g) Constructor

Pemrograman GUI
30.6 Tujuan

Tanpa mempelajari tentang Graphical User Interface (GUI) API, kita masih bisa membuat sebuah program. Tetapi, program yang kita buat akan kelihatan kurang menarik oleh pengguna. Dalam pembuatan GUI yang interaktif pada Java, digunakan Abstract Windowing Toolkit dan Swing. Pada akhir pembahasan, diharapkan pembaca dapat : Membuat program menggunakan NetBeans Mendesain aplikasi GUI dengan AWT Mendesain aplikasi GUI dengan Swing

30.7

Abstract Windowing Toolkit dan Swing

The Java Foundation Class (JFC), merupakan bagian penting dari Java SDK, yang termasuk dalam koleksi dari Java API yang dapat mempermudah pengembangan aplikasi Java GUI. AWT dan Swing menyediakan komponen pembuatan GUI yang dapat digunakan dalam membuat aplikasi Java dan Applet. Tidak seperti beberapa komponen AWT yang menggunakan native code, keselurahan Swing ditulis menggunakan bahasa pemrograman Java. Swing menyediakan platformindependent sehingga aplikasi yang dibangun pada platform yang berbeda dapat memiliki tampilan yang sama. Komponen pada AWT dapat digunakan bersama komponen Swing.

30.8

Menggunakan NetBeans

Kita akan memulai penggunaan NetBeans, yang merupakan Integrated Development Environment (IDE). IDE merupakan lingkup pemrograman yang diintegrasikan ke dalam suatu aplikasi perangkat lunak yang menyediakan pembangunan GUI, code editor, compiler, dan debugger. Langkah 1 : Jalankan aplikasi NetBeans, Anda akan melihat GUI seperti di bawah ini :

Langkah 2 : Membuat Sebuah Project Klik pada File > New Project. Akan muncul kotak dialog, kemudian pada categories klik Java lalu pada projects klik Java Desktop Application. Kemudian klik tombol Next

Akan muncul kotak dialog baru, isi Project Name dan Project Location. Lalu klik tombol Finish.

Hasilnya akan terlihat seperti di bawah ini :

Seperti terlihat pada gambar di atas, NetBeans telah menyertakan contoh desktop application. Pada pembahasan ini, kita tidak menggunakan contoh desktop application tersebut melainkan kita akan membuat form kita sendiri.

Langkah 3 : Membuat Form

Boleh juga mengklik icon ini

Pilih JFrame From Pada class name : isi dengan frmDataNilai Pada location : isi dengan Source Packages (default) Pada package : pilih javaapplicationproject1 (sesuai dengan nama project) Klik Finish

Langkah 4 : Mengganti kode program pada [nama_project].java Pada saat membuat project Java Desktop Application, NetBeans menyertakan default application maka default application tersebut yang akan dijalankan pertama kali. Untuk saat ini, kita tidak menggunakan default application tersebut dan akan membuat form baru (frmDataNilai) maka kita harus mengubah kode pada JavaApplicationProject1.java (sesuai nama project). Buka kode JavaApplicationProject1.java

Ganti kode yang ada pada method startup() menjadi @Override protected void startup() { //show(new JavaApplicationProject1View(this)); show(new frmDataNilai()); }

Kemudian coba run project anda dengan menekan F6, lalu akan tampil form kosong.

Langkah 5 : Menambah Component Pallete Pada Form Ada banyak component pallete yang bisa kita tambahkan pada form. Seperti pembahasan di atas, kita menggunakan AWT dan Swing. Biasanya component pallete berada di sebelah kanan atas layar.

Daftar tab source yang sedang dibuka

Project Explorer

Daftar Compone nt Pallete

Lem bar Kerj a

Propertie s

Untuk menambahkan component pallete pada form, kita tinggal melakukan drag and drop, drag dari daftar component pallete dan drop ke form. Atau bisa juga dengan mengklik salah satu component pallete dan arahkan mouse ke form. Sebagai contoh, kita akan menambah sebuah label ke form.

Kemudian ganti text pada label tersebut menjadi Nilai 1 dan nama variabel menjadi lblNilai1, caranya : Klik kanan pada label, kemudian pilih edit text isi dengan Nilai 1 Untuk mengubah nama variabel, klik kanan pada label pilih Change Variable Name isi dengan lblNilai1

Untuk melakukan perubahan lainnya kita bisa menggunakan jendela properties yang berada di kanan bawah (posisi default)

Studi Kasus 1 : Lengkapi form Anda seperti di bawah ini :

Jika project dijalankan, maka form akan terlihat seperti gambar di atas dan semua textfield dan tombol hitung tidak dapat diisi / diklik, hanya tombol baru yang dapat diklik.

Fungsi tombol : Baru Jika diklik semua textfield dapat diisi dan bernilai kosong, tombol hitung aktif dan dapat diklik

Hitung Hanya dapat diklik setelah tombol baru diklik, jika diklik akan menghitung rata-rata nilai dari nilai 1, nilai 2, dan nilai 3 serta menampilkan hasilnya pada textfield nilai rata-rata. Apabila salah satu textfield masih kosong, maka penghitungan nilai rata-rata tidak dilakukan dan akan menampilkan pesan error. Setelah selesai penghitungan maka semua textfield dan tombol hitung tidak dapat diisi / diklik.

Menyelesaikan Kasus 1 : Setelah Anda melengkapi form maka : 1. Ganti nama variabel dari masing-masing component pallete Kelompok textfield txtNilai1 : untuk Nilai 1 txtNilai2 : untuk Nilai 2 txtNilai3 : untuk Nilai 3 txtRata : untuk Nilai Rata-rata

Kelompok button btnHitung : untuk tombol Hitung btnBaru : untuk tombol Baru

Form frmNilaiRata : nama Form utama

2. Tambahkan Events Window Opened pada frmNilaiRata, caranya : Dalam mode design, klik pada form di area kosong. Kemudian lihat di bagian properties, pilih tab events.

Cari events window opened, kemudian pilih formWindowOpened

kemudian pada method formWindowOpened, ketik baris kode program berikut : txtNilai1.setText(""); txtNilai2.setText(""); txtNilai3.setText(""); txtRata.setText(""); txtNilai1.setEnabled(false); txtNilai2.setEnabled(false); txtNilai3.setEnabled(false); btnHitung.setEnabled(false);

Tombol btnBaru

Untuk menambahkan events klik pada btnBaru gunakan cara yang sama ketika menambahkan events pada form, boleh juga dengan double click di btnBaru kemudian pada Action pilih Create New Action, setelah itu pada Action's Class biarkan sebagai nilai default. Pada Action's Method isi dengan btnBaruMouseClicked kemudian klik tombol Ok

Kemudian ketik kode program berikut pada method btnBaruMouseClicked() txtNilai1.setText(""); txtNilai2.setText(""); txtNilai3.setText(""); txtRata.setText(""); txtNilai1.setEnabled(true); txtNilai2.setEnabled(true); txtNilai3.setEnabled(true); btnHitung.setEnabled(true);

Tombol btnHitung seperti btnBaru, buat juga events untuk btnHitung. Pada method yang Anda buat ketik kode berikut :

// TODO add your handling code here: String strNilai1 = txtNilai1.getText(); String strNilai2 = txtNilai2.getText(); String strNilai3 = txtNilai3.getText(); // validasi kalau masih ada textfield yang belum di isi if ((strNilai1.isEmpty()) | (strNilai2.isEmpty()) | (strNilai3.isEmpty())) { JOptionPane.showMessageDialog(null, "Masih ada nilai yang kosong, silahkan dilengkapi"); txtNilai1.requestFocus(); return; } double dblRata = (Double.parseDouble(strNilai1) + Double.parseDouble(strNilai2) + Double.parseDouble(strNilai3)) / 3; txtRata.setText(Double.toString(dblRata)); txtNilai1.setEnabled(false); txtNilai2.setEnabled(false); txtNilai3.setEnabled(false); btnHitung.setEnabled(false);

30.9

Latihan

1. Buat program login sederhana, yang memiliki text field username dan password serta satu tombol login. Ketika pengguna mengklik tombol login, maka program akan memvalidasi apakah username dan password diisi. Jika salah satu tidak diisi maka akan memunculkan pesan "username dan password harus diisi". Jika kedua text field terisi maka program akan mencheck apakah username dan password benar. Jika username dan password yang di-input benar maka akan memunculkan pesan "Selamat Datang".

2. Buat program untuk menghitung nilai rata-rata dari suatu mata kuliah. Tambahkan label yang akan menampilkan nilai dalam huruf, berdasarkan nilai rata-rata yang didapat : Nilai rata-rata >= 85, maka akan tampil pada label nilai huruf A 70 s/d < 85, nilai huruf B 60 s/d < 70, nilai huruf C 45 s/d < 60, nilai huruf D < 45 nilai huruf E

Ada tiga nilai yang akan dihitung yaitu nilai tugas, nilai UTS, dan nilai UAS. Bobot masing-masing nilai sebagai berikut : Nilai Tugas : 15% Nilai UTS : 35% Nilai UAS : 50%

30.10

Pemrograman GUI Lanjutan

Studi Kasus 2 Buat Project Baru, dan Lengkapi form Anda seperti di bawah ini :

Pada saat project dijalankan form akan terlihat seperti di atas. Fungsi Tombol Simpan : Pada saat tombol simpan diklik, akan menampilkan dialog yang isinya terdiri atas isian form Pendaftaran Siswa Baru.

Sebelum menampilkan dialog diatas, form terlebih dahulu dicek. Jika salah satu TextField, CheckBox, ComboBox, atau RadioButton tidak diisi/dipilih maka akan menampilkan pesan.

Fungsi Tombol Batal : Jika tombol Batal diklik, akan mengosongkan nilai-nilai yang terdapat pada form.

Menyelesaikan Studi Kasus 2 : 1. Ganti nama variabel dari masing-masing component Form MainFrame : nama Form utama Kelompok TextField txtNama : untuk Nama txtTempatLahir : untuk Tempat Lahir txtTanggalLahir : untuk Tanggal Lahir

Kelompok TextArea taAlamat : untuk Alamat

Kelompok RadioButton radioLaki : untuk Laki-laki radioPerempuan : untuk Perempuan

Kelompok ButtonGroup bgJenisKelamin : Jenis Kelamin

Kelompok ComboBox cbAgama : untuk Agama

Kelompok CheckBox chkSepakBola : untuk Sepak Bola chkFutsal : untuk Futsal chkBasket : untuk Basket chkBerenang : untuk Berenang chkBuluTangkis : untuk Bulu Tangkis chkLainnya : untuk Lainnya

Kelompok Button btnSimpan : untuk tombol Simpan btnBatal : untuk tombol Batal

2. Pada konstruktor class tambahkan code berikut :

Beberapa RadioButton pada ButtonGroup yang sama berarti hanya salah satu RadioButton yang dapat dipilih. 3. Menambahkan item pada CheckBox Agama, caranya : Klik pada CheckBox Agama Pada properties cari properties model, dan klik tombol yang berada disebelah kanan.

Maka akan muncul window baru, ganti isi dari model menjadi seperti gambar di bawah ini, lalu klik tombol Ok

4. Tambahkan events actionPerfomed pada tombol Simpan,


private void btnSimpanActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if (txtNama.getText().isEmpty() | txtTempatLahir.getText().isEmpty() | txtTanggalLahir.getText().isEmpty() | taAlamat.getText().isEmpty() | cbAgama.getSelectedIndex() == 0 | (!radioLaki.isSelected() && !radioPerempuan.isSelected()) | (!chkSepakBola.isSelected() && !chkFutsal.isSelected() && !chkBerenang.isSelected() && !chkBasket.isSelected() && !chkBuluTangkis.isSelected() && !chkLainnya.isSelected())) { javax.swing.JOptionPane.showMessageDialog(null, "Masih ada nilai yang kosong, silahkan dilengkapi"); return; } StringBuilder sb = new StringBuilder(); sb.append("Nama: " + txtNama.getText()); sb.append("\nTempat Lahir: " + txtTempatLahir.getText()); sb.append("\nTanggal Lahir: " + txtTanggalLahir.getText()); sb.append("\nAlamat: " + taAlamat.getText()); sb.append("\nAgama: " + cbAgama.getSelectedItem().toString()); sb.append("\nJenis Kelamin: " + (radioLaki.isSelected() ? "Laki-laki" : "Perempuan")); sb.append("\nHobi: "); sb.append(chkSepakBola.isSelected() ? "\n- Sepak Bola" : ""); sb.append(chkFutsal.isSelected() ? "\n- Futsal" : ""); sb.append(chkBerenang.isSelected() ? "\n- Berenang" : ""); sb.append(chkBasket.isSelected() ? "\n- Basket" : ""); sb.append(chkBuluTangkis.isSelected() ? "\n- Bulu Tangkis" : ""); sb.append(chkLainnya.isSelected() ? "\n- Lainnya" : ""); javax.swing.JOptionPane.showMessageDialog(null, sb.toString()); }

5. Tambahkan events actionPerformed pada tombol Batal private void tnBatalActionPerformed(java.awt.event.ActionEven t evt) {

// TODO add your handling code here: txtNama.setText(""); txtTempatLahir.setText(""); txtTanggalLahir.setText(""); taAlamat.setText(""); bgJenisKelamin.clearSelection(); cbAgama.selectWithKeyChar('-'); chkSepakBola.setSelected(false); chkFutsal.setSelected(false); chkBerenang.setSelected(false); chkBasket.setSelected(false); chkBuluTangkis.setSelected(false); chkLainnya.setSelected(false);

30.11

Latihan

1. Buat sebuah aplikasi Point Of Sale Sederhana, yang akan menampilkan total harga pembelian sejumlah barang. Pada saat dijalankan form akan terlihat seperti gambar di bawah ini :

Rincian ComboBox Kartu Kredit : Kartu Kredit Mandiri Kartu Kredit BCA

Rincian Harga : Televisi Komputer AC : Rp. 1.500.000 : Rp. 3.000.000 : Rp. 2.500.000 : Rp. 1.000.000

Mobile Phone

Rincian Diskon : Jika pembeli memiliki Kartu Member, pembeli akan mendapatkan diskon 10% Jika pembeli memiliki Kartu Kredit Mandiri, pembeli akan mendapatkan diskon 10%

Jika pembeli memiliki Kartu Kredit BCA, pembeli akan mendapatkan diskon 5%

Pada saat tombol hitung diklik maka akan menampilkan total harga pembelian barang. Hasilnya akan terlihat seperti gambar di bawah ini.

Inheritance, Polymorphism, dan Interface


30.12 Tujuan

Pada bagian ini, akan dijelaskan bagaimana suatu class dapat mewariskan sifat dari class yang sudah ada. Class ini dinamakan subclass dan induk class dari subclass dinamakan superclass. Juga akan dijelaskan sifat khusus dari Java yang otomatis memakai method yang tepat untuk setiap object tanpa memperhatikan asal dari subclass object. Sifat ini dinamakan polimorfisme. Juga akan dijelaskan tentang interface yang membantu mengurangi penulisan program. Pada akhir pembahasan, diharapkan pembaca dapat : Mendefinisikan superclass dan subclass Override method dari superclass Membuat method final dan class final

30.13

Pewarisan

Dalam Java, semua class, termasuk class yang membangun Java API, adalah subclass dari superclass Object. Contoh hirarki class diperlihatkan di bawah ini. Beberapa class di atas class utama dalam hirarki class dikenal sebagai superclass. Sementara beberapa class di bawah class pokok dalam hirarki class dikenal sebagai subclass dari class tersebut. Istilah pewarisan berarti suatu class bisa mewariskan sebagian atau keseluruhan struktur dan method class lain. Jika class B adalah subclass dari class A, maka kita bisa juga menyebut class A adalah superclass dari class B. Subclass bisa memiliki struktur atau perilaku tambahan dari superclass-nya. Atau bahkan subclass bisa mengubah atau mengganti method superclass-nya. Hubungan antara subclass dan superclass-nya sering digambarkan dalam bentuk diagram di mana subclass digambarkan di bawah superclass-nya, dan dihubungkan dengan garis penghubung dengan tanda segitiga yang diletakkan di dekat superclass-nya.

30.14

Mendefinisikan Superclass dan Subclass

Untuk menurunkan suatu class, kita menggunakan kata kunci extends. Untuk mengilustrasikan ini, kita akan membuat contoh class induk. Dimisalkan kita mempunyai class induk yang dinamakan Person. public class Person { protected String name; protected String address; /** * Default constructor */ public Person(){ System.out.println("Inside Person:Constructor"); name = ""; address = ""; } } Perhatikan bahwa atribut name dan address dideklarasikan sebagai protected. Alasannya kita melakukan ini yaitu, kita inginkan atribut-atribut ini untuk bisa diakses oleh subclass dari superclass. Jika kita mendeklarasikannya sebagai private, subclass tidak dapat menggunakannya. Catatan bahwa semua properti dari superclass yang dideklarasikan sebagai public, protected dan default dapat diakses oleh subclasses-nya. Sekarang, kita ingin membuat class lain bernama Student. public class Student extends Person { public Student(){ System.out.println("Inside Student:Constructor"); } }

Ketika object Student dibuat, default constructor dari superclass secara mutlak meminta untuk melakukan inisialisasi yang seharusnya. Setelah itu, pernyataan di dalam subclass dieksekusi. Untuk mengilustrasikannya, perhatikan kode berikut, public static void main( String[] args ){ Student anna = new Student(); } Dalam kode ini, kita membuat sebuah object dari class Student. Keluaran dari program adalah, Inside Person:Constructor Inside Student:Constructor

30.15

Kata Kunci Super

Subclass juga dapat memanggil constructor secara eksplisit dari superclass di atasnya. Hal ini dilakukan dengan pemanggil constructor super. Pemanggil constructor super dalam constructor dari subclass akan menghasilkan eksekusi dari superclass constructor yang bersangkutan, berdasar dari argumen sebelumnya. Sebagai contoh, pada contoh class sebelumnya. Person dan Student, kita tunjukkan contoh dari pemanggil constructor super. Diberikan kode berikut untuk Student, public Student() { super(); System.out.println("Inside Student:Constructor"); } Kode ini memanggil default constructor dari superclass di atasnya (yaitu Person) dan mengeksekusinya. Ada beberapa hal yang harus diingat ketika menggunakan pemanggil constuctor super: 1. Pemanggil super() harus dijadikan pernyataan pertama dalam constructor. 2. Pemanggil super() hanya dapat digunakan dalam definisi constructor. 3. Termasuk constructor this() dan pemanggil super() tidak boleh terjadi dalam constructor yang sama. Pemakaian lain dari super adalah untuk menunjuk anggota dari superclass(seperti reference this). Sebagai contoh, public Student() {

super.name = "Tomy"; super.address = "St. Cross road"; }

30.16

Overriding Method

Untuk beberapa kasus, terkadang subclass mempunyai implementasi berbeda dari method yang diturunkan dari superclass. Oleh karena itulah, method overriding digunakan. Subclass dapat mengesampingkan method yang didefinisikan dalam superclass dengan menyediakan implementasi baru dari method tersebut. Misalnya kita mempunyai implementasi berikut untuk method getName dalam superclass Person, sebagai contoh : public class Person { . . . public String getName(){ System.out.println("Parent: getName"); return name; }

Untuk meng-override method getName dalam subclass Student, public class Student extends Person { . . . public String getName() { System.out.println("Student: getName"); return name; } } Ketika kita meminta method getName dari object class Student, method overridde akan dipanggil, keluarannya akan menjadi, Student: getName

30.17

Method final dan class final

Dalam Java, juga dimungkinkan untuk mendeklarasikan class-class yang methodnya tidak dapat di-override. Class ini dinamakan class final. Untuk mendeklarasikan class untuk menjadi final kita hanya menambahkan kata kunci

final dalam deklarasi class. Sebagai contoh, jika kita ingin class Person untuk dideklarasikan final, kita tulis, public final class Person { . . . } Beberapa class dalam Java API dideklarasikan secara final untuk memastikan sifatnya tidak dapat di-override. Contoh-contoh dari class ini adalah Integer, Double, dan String. Ini memungkinkan dalam Java membuat method yang tidak dapat di-override. Method ini dapat kita panggil method final. Untuk mendeklarasikan method untuk menjadi final, kita tambahkan kata kunci final ke dalam deklarasi method. Contohnya, jika kita ingin method getName dalam class Person untuk dideklarasikan final, kita tulis, public final String getName(){ return name; } Method static secara otomatis final. Ini artinya Anda tidak dapat membuatnya override.

30.18

Polimorfisme

Class induk Person dan subclass Student dari contoh sebelumnya, kita tambahkan subclass lain dari Person yaitu Employee. Di bawah ini adalah hierarkinya,

Person

Student

Employee

Dalam Java, kita dapat membuat referensi yang merupakan tipe dari superclass ke sebuah object dari subclass tersebut. Sebagai contohnya, public static main( String[] args ) { Person ref; Student studentObject = new Student(); Employee employeeObject = new Employee(); ref = studentObject; //Person menunjuk kepada object Student .

. . } Sekarang dimisalkan kita punya method getName dalam superclass Person kita, dan kita override method ini dalam kedua subclasses Student dan Employee, //Person.java public class Person { public String getName(){ System.out.println("Person Name: " + name); return name; } } //Student.java public class Student extends Person { public String getName(){ System.out.println("Student Name: " + name); return name; } }

//Employee.java public class Employee extends Person { public String getName(){ System.out.println("Employee Name: " + name); return name; } } Kembali ke method utama, ketika kita mencoba memanggil method getName dari reference Person ref, method getName dari object Student akan dipanggil. Sekarang, jika kita berikan ref ke object Employee, method getName dari Employee akan dipanggil. public static main( String[] args ) { Person ref; Student studentObject = new Student(); Employee employeeObject = new Employee(); ref = studentObject; //Person menunjuk kepada object Student String temp = ref.getName(); //getName dari Student class dipanggil System.out.println( temp );

ref = employeeObject; //Person menunjuk kepada object Employee String temp = ref.getName(); //getName dari Employee class dipanggil } System.out.println( temp );

Kemampuan dari reference untuk mengubah sifat menurut object apa yang dijadikan acuan dinamakan polimorfisme. Polimorfisme menyediakan multiobject dari subclasses yang berbeda untuk diperlakukan sebagai object dari superclass tunggal, secara otomatis menunjuk method yang tepat untuk menggunakannya ke particular object berdasar subclass yang termasuk di dalamnya. Contoh lain yang menunjukkan properti polimorfisme adalah ketika kita mencoba melalui reference ke method. Misalkan kita punya method static printInformation yang mengakibatkan object Person sebagai reference, kita dapat me-reference dari tipe Employee dan tipe Student ke method ini selama itu masih subclass dari class Person. public static main( String[] args ) { Student studentObject = new Student(); Employee employeeObject = new Employee(); printInformation( studentObject ); printInformation( employeeObject );

public static printInformation( Person p ){ }

30.19

Interface

Dalam Java, kata interface adalah kata kunci (keyword) yang memiliki arti tambahan yaitu interface terdiri dari subrutin tanpa implementasi apa-apa. Suatu class dapat mengimplementasi suatu interface dengan memberikan kode detail pada setiap subrutin yang ditulis pada interface tersebut. Berikut adalah contoh interface : public interface Gambar { public void gambar (graphics g) } Deklarasi di atas mirip dengan definisi suatu class, akan tetapi isi method gambar() dikosongkan. Suatu class yang mengimplementasi interface ini, yaitu

interfaceGambar, harus mengisi implementasi method gambar() ini. Tentunya class tersebut juga bisa memiliki variabel dan metode lain. Misalnya, class Garis implements Gambar { public void gambar(Graphics g) { . . . // perintah untuk menggambar garis } . . . // variabel dan metode lain } Class apapun yang mengimplementasi interface Gambar[code] harus memberikan detail apa yang akan dilakukan oleh method [code]gambar(). Objek yang diciptakan dari class tersebut akan memiliki metode gambar(). Perlu diingat bahwa hanya menambah metode gambar() saja tidak cukup. Definisi class yang ingin mengimplementasikan suatu interface harus menulis "implements Gambar" dalam definisi class-nya. Suatu class bisa menurunkan hanya satu class lain, akan tetapi suatu class bisa mengimplementasikan lebih dari satu interface. Misalnya,

class LingkaranBerwarna extends Lingkaran implements Gambar, BerisiWarna { . . . } Meskipun interface bukan class, tetapi interface mirip dengan class. Interface hanya digunakan untuk membuat class lain, bukan untuk membuat objek. Method pada suatu interface merupakan method yang harus diimplementasikan pada class yang mengimplementasikan interface tersebut. Meskipun kita tidak bisa membuat objek dari interface, tetapi suatu variabel dapat bertipe suatu interface. Misalnya, jika Gambar adalah suatu interface, dan jika Garis dan LingkaranBerwarna adalah class yang mengimplementasikan Gambar, maka kita bisa menulis code seperti berikut :

Gambar gambarku;

// Deklarasi variabel dengan tipe Gambar. // Variabel ini bisa diisi objek yang // mengimplementasi interface Gambar

gambarku = new Garis(); // gambarku berisi objek dengan class Garis gambarku.gambar(g); // memanggil metode gambar() dari class Garis gambarku = new LingkaranBerwarna(); // Sekarang gambarku berisi // objek dengan class LingkaranBerwarna

gambarku.gambar(g); // memanggil metode gambar() dari class // LingkaranBerwarna Variabel dengan tipe Gambar boleh merujuk pada class apapun yang mengimplementasikan antar muka Gambar. Pernyataan di atas seperti "gambarku.gambar(g)" boleh ditulis karena gambarku adalah variabel dengan tipe Gambar, dan setiap objek bertipe Gambar pasti memiliki metode gambar(). Catatan bahwa tipe data merupakan sesuatu yang biasa digunakan untuk mendeklarasikan variabel. Tipe data juga digunakan untuk memberikan tipe suatu parameter pada method, atau sebagai tipe keluaran / return value suatu method. Pada Java, tipe data bisa berupa class, interface, atau salah satu dari tipe data primitif. Dari semuanya, hanya class yang bisa digunakan untuk membuat objek baru. Kita biasanya tidak perlu menulis interface kita sendiri hingga program kita menjadi sangat kompleks. Akan tetapi ada beberapa interface yang sudah disediakan oleh Java yang mungkin bisa digunakan atau diimplementasi dalam program kita.

31.

Membuat Interface

Untuk membuat interface, penulisannya : public interface [InterfaceName] { //beberapa method tanpa isi } Sebagai contoh, mari kita membuat sebuah interface yang mendefinisikan hubungan antara dua object menurut urutan asli dari object. public interface Relation { public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); } Sekarang, penggunaan interface, kita gunakan kata kunci implements. Contohnya, /** * Class ini mendefinisikan segmen garis */ public class Line implements Relation { private double x1;

private double x2; private double y1; private double y2; public Line(double x1, double x2, double y1, double y2){ this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2; } public double getLength(){ double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2y1)); return length; } public boolean isGreater( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen > bLen); } public boolean isLess( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen < bLen); } public boolean isEqual( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen == bLen); }

} Ketika class Anda mencoba mengimplementasikan sebuah interface, selalu pastikan bahwa Anda mengimplementasikan semua method dari interface, jika tidak, Anda akan menemukan kesalahan ini, Line.java:4: Line is not abstract and does not override abstract method isGreater(java.lang.Object,java.lang.Object) in Relation public class Line implements Relation ^ 1 error Petunjuk penulisan program: Gunakan interface untuk mendefinisikan method standar yang sama dalam class-class berbeda yang memungkinkan. Sekali Anda telah membuat kumpulan definisi method standar, Anda dapat menulis method tunggal untuk memanipulasi semua class-class yang mengimplementasikan interface.

Studi Kasus 1 : Inheritance (pewarisan) //Sepeda.java class Sepeda{ //mendeklarasikan variabel int kecepatan = 0; int gir = 0; //membuat method ubahGir dan parameter pertambahanGir yang //bertipe integer void ubahGir(int pertambahanGir) { gir= gir + pertambahanGir; System.out.println("Gir:" + gir); } //membuat method tambahKecepatan dan parameter //pertambahanKecepatan yang bertipe integer void tambahKecepatan(int pertambahanKecepatan) { kecepatan = kecepatan + pertambahanKecepatan; System.out.println("Kecepatan: " + kecepatan); } }

//SepedaGunung.java class SepedaGunung extends Sepeda { //mendeklarasikan atribut int setSadel; //membuat method setSadel dan parameter nilaiSadel yang bertipe integer public void setSadel(int nilaiSadel) { setSadel = nilaiSadel; System.out.println("Tinggi Sadel: " + setSadel); } } //SepedaGunungBeraksi class SepedaGunungBeraksi {

public static void main(String[] args) { // Membuat object SepedaGunung sepedaku = new sepedaGunung(); // Memanggil method dan memberikan nilai parameter pada masing//masing method diobject sepedaku.tambahKecepatan(10); sepedaku.ubahGir(2); sepedaku.setSadel(20); } }

31.1

Latihan

1. kita akan membuat class MobilBMW yang merupakan inherit dari class MobilLengkap dengan menambahkan beberapa method nontonTV() yang isinya menampilkan "tulisan tv dihidupkan", "tv mencari chanel", "tv menampilkan gambar". Buat class MobilBMWBeraksi yang memanggil method nontonTV() serta hidupkanMobil(), matikanMobil() yang di-extends dari class MobilBMW, dan ubahGigi().