Anda di halaman 1dari 46

PRAKTIKUM I MEMULAI JAVA

I. Pokok Bahasan :
1. 2. 3. 4. 5. 6. 7. Instalasi JDK 1.6 Pengesetan PATH , JAVA_HOME dan CLASSPATH Program HelloWorld Kompilasi dan menjalankan program Membuat dokumentasi program dengan javadoc Membuat paket program dengan jar Melakukan disassembly kelas java

II. Tujuan Praktikum


1. 2. 3. 4. 5. 6. 8. Mengetahui pengertian JDK dan cara instalasi JDK Mengenal konsep PATH dan CLASSPATH Mengetahui cara menulis program Java sederhana dengan teks editor Mengetahui cara mengkompilasi dan menjalankan program Mengetahui cara membuat dokumentasi otomatis di java Mengetahui cara mempaketkan kelas-kelas kedalam jar Mengetahui cara disassembly kelas java

III. Kegiatan praktikum : Kegiatan 1 Instalasi JDK


Sun Microsystem (sekarang Oracle) mengeluarkan JDK dalam bentuk versi dan update, versi terbaru adalah JDK 1.6 (atau bisa disebut Java 6), sedangkan update adalah perubahan minor terhadap versi java, update terakhir adalah update 23. JDK juga dikeluarkan untu beberapa k sistem operasi (Windows, Linux, Mac, Solaris, dll) dan arsitektur prosesor (x86 dan x64), yang akan kita gunakan dalam praktikum ini adalah versi windows dengan arsitektur i586 1. Klik dua kali file jdk-6u23windows-i586.exe dan ikuti proses instalasi sampai selesai 2. Pilih direktori default untuk instalasi C:\Program Files\Java\jdk1.6.0_23\

Kegiatan 2 Pengesetan PATH , JAVA_HOME dan CLASSPATH


PATH, JAVA_HOME dan CLASSPATH adalah environment variables yang memiliki fungsi masing-masing yang nantinya akan digunakan oleh aplikasi-aplikasi tertentu. PATH adalah environment variable yang digunakan oleh MS-DOS command prompt untuk mencari letak direktori dari perintah yang digunakan, karena kita akan mengeksekusi perintah -perintah Java di MS-DOS command prompt maka kita perlu menset PATH ini, JAVA_HOME adalah environment variable yang digunakan oleh beberapa aplikasi berbasis Java untuk menemukan direktori instlasi JDK, dan CLASSPATH adalah environment variable yang digunakan java compiler dan launcher untuk menemukan classpath. Environment variable diset dengan perintah

SET (efeknya sementara sampai window MS-DOS Command prompt ditutup) atau dengan mengesetnya di control panel Windows (efeknya permanen) 1. Set ketiga environment variable tersebut dengan perintah SET sbb : a. Untuk PATH, karena perintah-perintah Java terletak di direktori /bin dari JDK maka kita mengeset PATH sbb: SET path=%path%; C: \Program Files\Java\jdk1.6.0_23\bin b. Untuk JAVA_HOME diset dengan direktori tempat instalasi JDK SET JAVA_HOME=C: \Program Files\Java\jdk1.6.0_23\ c. Untuk CLASSPATH diset dengan direktori tempat kita menaruh source code kita, source kita taruh di direktori D:\src\java : SET CLASSPATH= D:\src\java 2. Set ketiga environment variable tersebut di Control Panel, buka Control Panel->System->Advanced System Setting-> Environment Variables a. Di System Variable pilih path, kemudian edit dan tambahkan di akhir variable value ; C:\Program Files \Java\jdk1.6.0_23\bin b. Di System Variable klik New dan tambahkan Variable Name : JAVA_HOME Variable Value : C:\Program Files\Java\jdk1.6.0_23\ c. Di System Variable klik New dan tambahkan Variable Name : CLASSPATH Variable Value : D:\src\java

Kegiatan 3 Program Hello World


1. Pindah ke direktori D:\src\java dan buat sebuah direktori sesuai dengan NIM anda diawali dengan tanda underscore ( _ ) mis : _60200108001 2. Pindah ke direktori tersebut kemudian buat sebuah file teks dengan nama HelloWorld.java dan ketikkan source code sbb :

package _60200108001; public class HelloWorld { public void sayHello() { System.out.println( "Hello World" ); } public static void main(String args[]) { HelloWorld helloWorld = new HelloWorld(); helloWorld.sayHello(); } }

3. Simpan file tersebut.

Kegiatan 4 Kompilasi dan Menjalankan Program


1. Buka MS-DOS Command Prompt dan pindah ke direktori tempat source code anda. 2. Compile source code HelloWorld.java dengan perintah : javac HelloWorld.java 3. Di direktori anda akan muncul sebuah file yg bernama HelloWorld.class, jalankan file ini dengan perintah java _60200108001.HelloWorld 4. Di MS-DOS Command Prompt akan tercetak HelloWorld

Kegiatan 5 Membuat dokumentasi program dengan javadoc


Java menyediakan tools untuk membuat dokumentasi source code secara otomatis dengan format HTML. Tools yang digunakan adalah javadoc. 1. Ubahlah source code HelloWorld.java anda dan tambahkan :
package _60200108001 ; /** * Ini adalah kelas HelloWorld yang fungsinya untuk * menuliskan kata Hello World ke layar * @author NamaAnda * @see java.lang.Object */

public class HelloWorld { /** * Method sayHello adalah method yang dipanggil * untuk menuliskan kata Hello World ke layar */ public void sayHello() { System.out.println( "Hello World" ); }

/** * Method main adalah method yang akan dipanggil pertama kali * oleh java launcher */ public static void main(String args[]) { HelloWorld helloWorld = new HelloWorld(); helloWorld.sayHello(); } }

2. Di derektori source code andak , jalankan javadoc dengan perintah : javadoc HelloWorld.java d docs javadoc akan membuat sebuah direktori bernama docs yang berisi dokumentasi source code anda, bukalah direktori docs tersebut dan buka file index.html nya.

Kegiatan 5 Membuat paket program dengan jar


Jar adalah tools yang digunakan untuk memaketkan file-file kelas dalam sebuah program kedalam sebuah file agar lebih kompak, dan mudah didistribusikan. 1. Pindah ke direktori d:/src/java ,buatlah sebuah file manifest (file deskripsi file jar) yang berisi: Manifest-Version: 1.0 Main-Class: _60200108001.HelloWorld Kemudian simpan file tersebut ke nama file manifest.txt 2. Jalankan tools jar dengan perintah : jar cmf _60200108001/manifest.txt HelloWorld.jar _60200108001/*.class 3. File jar ini dapat lansung dijalankan dengan perintah java jar HelloWorld.jar

Kegiatan 6 Melakukan disassembly kelas Java


Kita dapat melihat atrribut-atrribut dan method-method yang terdapat dalam sebuah file kelas yang sudah dikompilasi dengan tools javap. Yang terlihat adalah nama dan tipe attribut serta nama, return value dan parameter method (source code detail tidak terlihat) 1. Pindah ke direktori source code anda dan ketikka perintah javap HelloWorld Lihat hasilnya 2. Lanjutkan dengan perintah javap c HelloWorld Lihat hasilnya

Tugas

1. Tambahkan sebuah kelas di HelloWorld.java dengan nama HelloWorldTwo dan tambahkan method sayHelloWorldTwo() di kelas baru tersebut. 2. Tambahkan dokumentasi untuk kelas dan method tersebut. 3. Compile file tersebut. 4. Buat dokumentasi untuk file tersebut dengan javadoc. 5. Paketkan kedua file tersebut kedalam file HelloWorld.jar dan jalankan 6. Disassembly kelas HelloWorldTwo dan simpan hasilnya kedalam sebuah file teks

PRAKTIKUM II ECLIPSE DAN JAVA DASAR

I. Pokok Bahasan :
1. 2. 3. 4. 5. Perkenalan Eclipse Project dan Perspective dan View Source code, compile, dan run Penamaan identifier dan kata kunci Java Tipe primitif dan Wrapper

II. Tujuan Praktikum


1. 2. 3. 4. 5. Mengetahui cara menjalankan eclipse Mengetahui cara membuat project dan perspective Mengetahui cara mengkompilasi di eclipse Mengetahui cara penamaan identifier Mengetahui tipe primitif dan wrapper.

III. Kegiatan praktikum : Kegiatan 1 Menjalankan eclipse


Eclipse adalah IDE multifungsi yang dapat digunakan untuk mengembangkan perangkat lunak baik itu menggunakan bahasa Java, C++, maupun PHP. Di praktikum ini kita menggunakan eclipse untuk membantu penulisan program Java. Dengan menggunakan eclipse akan memudahkan kita untuk mengatur source code, kompilasi, debugging, dst. Untuk menjalankan eclipse dibutuhkan JDK terlebih dahulu, eclipse yang digunakan adalah versi 3.21 (Helios) dan JDK yang digunakan adalah JDK 1.6 Eclipse dapat digunakan tanpa instalasi, eclipse akan secara otomatis mendeteksi JDK yang terinstall di sistem. Untuk menjalankan eclipse, klik dua kali file eclipse.exe, kemudian tunggu sampai muncul window untuk workspace seperti berikut :

Window untuk memilih workspace

Workspace adalah direktori tempat file-file program diletakkan baik itu source code maupun file hasil kompilasi. Masukkan direktori D:\src\java\[nrp] untuk workspace.

Kegiatan 2 Project dan Perspective dan View


Source code dalam eclipse dikemas dalam sebuah project, untuk membuat project pilih : File->New->Project

Window untuk memilih project

Eclipse mendukung banyak jenis project, yang kita lakukan adalah membuat project Java yang standar. Pilih Java Project kemudian klik Next. Isi nama project nya dengan PraktikumDua

Window untuk membuat project

Centang Use default location, dan pilih JavaSE-1.6 untuk JRE yang digunakan, klik Next

Window untuk setting project

Di window berikutnya kita dapat menambahkan direktori source baru, mengaitkan dengan project lain atau menambahkan library lain kedalam project. Untuk praktikum ini tidak dibutuhkan pengaturan yang lain, klik Finish.

Perspective eclipse

Eclipse memiliki konsep view dan perspective. View adalah window dalam bentuk tab yang disusun sesuai kebutuhan, masing-masing view menampilkan informasi tertentu, misalnya view console, view package explorer, view task list dsb., kita bisa memunculkan view dengan memilih menu Window->Show View. Kumpulan view ini akan membentuk kesatuan yang disebut perspective. Kita dapat mengganti perspective dari eclipse sesuai dengan kebutuhan kita, eclipse menyediakan beberapa perspective default yang bisa digunakan, u ntuk mengganti perspective pilih Window->Open Perspective.

Kegiatan 3 Source code, compile, dan run


Buka view project explorer, kemudian buka project PraktikumDua, pada folder src, klik kanan dan pilih New->Class.

Window untuk membuat kelas baru

Isi nama kelas dengan HelloWorld, kemudian klik Finish. Eclipse akan membuka file HelloWorld tersebut, ketikkan program HelloWorld pada praktikum pertama. Setelah selesai, program ini dapat di run dengan memilih menu Run->Run atau dengan menekan tombol Ctrl-F11, dengan melakukan Run, secara otomatis eclipse akan mengkompilasi source code kemudian menjalankannya. Hasil dari kompilasi maupun hasil run dari source code dapat dilihat di view Console yang terletak dibagian bawah eclipse (default).

Kegiatan 4 Penamaan identifier dan kata kunci Java


Setiap bahasa pemrograman memiliki aturan masing-masing dalam penamaan identifier, adapaun aturan di Java adalah sebagai berikut : 1. Nama variabel adalah case sensitive, nama variabel dapat terdiri dari identifier yang diijinkan yaitu deretan huruf dan angka Unicode, diawali dengan tanda dollar atau underscore, tapi menurut konvensi semua nama variabel diawali dengan huruf . Contoh :

int $i; int _n; int a; 2. Karakter kedua dan berikutnya dapat berupa angka, huruf, tanda dollar maupun underscore. Menurut konvensi nama variabel sebaiknya berupa kata yang memiliki makna bukan d eretan huruf dan angka yang acak. Contoh : String nama; int angka; 3. Nama variabel tidak boleh sama dengan keyword Java, antara lain :
abstract assert boolean break byte case catch char class const
* ** *** **** * ***

continue default do double else enum extends final finally float


****

for goto if implements import instanceof int interface long native


*

new package private protected public return short static strictfp super
**

switch synchronized this throw throws transient try void volatile while

tidak digunakan ditambahkan sejak 1.2 ditambahkan sejak 1.4 ditambahkan sejak 5.0

4. Jika nama variabel terdiri dari dua kata atau lebih, maka menurut konvensi kata kedua dan kata seterusnya diawali dengan huruf kapital. Contoh : String namaDepan; int angkaPertumbuhanPenduduk ; 5. Jika variabel adalah berupa konstanta, maka menurut konvensi semua karakter adalah huruf kapital dan jika terdiri dari dua kata atau lebih dipisahkan dengan underscore.

String FILE_KONFIGURASI=c: \conf.txt; double PHI=3.14;

Tugas :
Buatlah sebuah kelas bernama Variable di eclipse dan buatlah beberapa jenis variabel seperti yang dijelaskan diatas.

Kegiatan 5 Tipe primitive dan wrapper


Java memiliki 8 tipe primitif yang memiliki range nilai masing-masing, kita dapat menggunakan tipe data ini dan memilihnya sesuai dengan kebutuhan. Yaitu : 1. byte : tipe 8-bit, signed twos complement dengan range -128 sampai 127 2. short : tipe 16-bit , signed twos complement dengan range 32.768 sampai 32.767 3. int : tipe 32-bit , signed twos complement dengan range 2.147.483.648 sampai 2.147.483.647 4. int : tipe 64-bit , signed twos complement dengan range -9.223.372.036.854.775.808 sampai 9.223.372.036.854.775.808 5. float : tipe 32-bit mengikuti standar floating point IEEE 754 dengan range 1,40129846432481707x10-45 sampai 3,40282346638528860x1038 6. double : tipe 64-bit mengikuti standar floating point IEEE 754 dengan range 4.94065645841246544x10-324 sampai 1.79769313486231570x10308 7. char : tipe 16-bit Unicode, karakter tunggal dengan range '\u0000' (atau 0) dan nilai maksimum '\uffff' (atau 65,535 ) 8. boolean : tipe yang hanya memiliki dua nilai yaitu true dan false

Nilai default untuk masing-masing tipe data adalah :

Tabel nilai default tipe data Java Tipe data Default Value (untuk attribut) byte 0
short int long float double char boolean 0 0 0L 0.0f 0.0d '\u0000' false

Cobalah program berikut :


public class NilaiDefault { static boolean bool; static byte by; static char ch; static double d; static float f; static int i; static long l; static short sh; static String str; public static void main(String[] args) { System.out.println( "bool = " + bool); System.out.println( "by = " + by); System.out.println( "ch = " + ch); System.out.println( "d = " + d); System.out.println( "f = " + f); System.out.println( "i = " + i); System.out.println( "l = " + l); System.out.println( "sh = " + sh); System.out.println( "str = " + str); } }

Literal adalah nilai tetap yang lansung diletakkan di source code tanpa memerlukan komputasi, misalnya literal true dapat dipasangkan di variable bertipe boolean. Contoh :
boolean hasil = true; char kapitalC = 'C'; byte b = 100; short s = 10000; int i = 100000;

Tipe integeral (byte, short, int, dan long) dapat diekspresikan kedalam bentuk desimal, oktal, hexadesimal ataupun biner, dengan menambahkan karakter tertentu dalam bilangan misalnya:
// Angka 26, dalam desimal // Angka 26, dalam oktal tambahkan 0 di depan angka // Angka 26, dalam hexadesimal tambahkan 0 x di // depan angka int binVal = 0b11010; // Angka 26, dalam binary tambahkan 0b di depan angka int decVal = 26; int octVal = 032; int hexVal = 0x1a;

Tipe floating point (float dan double) dapat diekspresikan dengan menambahkan E atau e (untuk notasi sainstifik), f atau F (literal 32-bit floating point), d atau D (literal 64-bit floating point). Contoh :
double d1 = 123.4; double d2 = 1.234e2; // sama dengan d1, tapi dengan notasi sainstifik float f1 = 123.4f;

Tugas : Cobalah program ini


public class CobaLiteral { char c = 0xffff; byte b = 0x7f; short s = 0x7fff; int i1 = 0x2f; int i2 = 0X2F; int i3 = 0177; long n1 = 200L; long n2 = 200l; long n3 = 200; float f1 = 1; float f2 = 1F; float f3 = 1f; float f4 = 1e-45f; float f5 = 1e+9f; double d1 = 1d; double d2 = 1D; double d3 = 47e47d; }

Tambahkan method main dan buatlah perintah untuk menampilkan nilai-nilai tersebut!

Literal untuk string terdiri dari deretan karakter-karakter Unicode (UTF-16), kita dapat menuliskan lansung karakter-karakter tersebut atau menggunakan Unicode escape. Misalnya '\u0108' untuk huruf C kapital dengan circumflex (tanda payung diatas huruf) . Unicode escape dapat digunakan disemua bagian program java baik literal maupun identifier.

Tugas : Cobalah program ini


public class HelloWorld { static String \u0073\u0074\u0072="\u004Aa\u0076a"; public static void main(String args[]) { System.out.println( "S\u00ED se\u00F1or"); System.out.println( str); } }

Tipe wrapper adalah tipe pengganti untuk tipe primitif di Java, fungsinya adalah untuk menggantikan tipe primitif dengan tipe yang berupa objek. Masing-masing tipe primitif memiliki tipe wrapper nya misalnya tipe primitif int memiliki wrapper Integer, boolean memiliki wrapper Boolean, dst.
Tugas : Cobalah program ini
public class Main { public static void main(String[] args) throws Exception { Boolean refBoolean = new Boolean(true);

boolean bool = refBoolean.booleanValue(); Byte refByte = new Byte((byte) 123); byte b = refByte.byteValue(); Character refChar = new Character( 'x'); char c = refChar.charValue(); Short refShort = new Short((short) 123); short s = refShort.shortValue(); Integer refInt = new Integer(123); int i = refInt.intValue(); Long refLong = new Long(123L); long l = refLong.longValue(); Float refFloat = new Float(12.3F); float f = refFloat.floatValue(); Double refDouble = new Double(12.3D); double d = refDouble.doubleValue(); } }

Cetaklah ke layar masing-masing nilai diatas !

PRAKTIKUM III OPERATOR

I. Pokok Bahasan :
1. Operator assignment, aritmetika, dan unary. 2. Operator perbandingan dan kondisional 3. Operator bitwise dan bitshift

II. Tujuan Praktikum


Mengetahui penggunaan operator pada Java.

III. Kegiatan praktikum : Kegiatan 1 Operator assignment, aritmetika, dan unary


Operator adalah simbol spesial yang melakukan operasi tertentu terhadap satu, dua, atau tiga operan dan kemudian mengembalikan sebuah hasil. Masing-msing operator memiliki preseden tersendiri, berikut ini adalah tabel preseden operator pada Java, baris kolom diatas lebih tinggi preseden nya dibandingkan yang dibawahnya, sedangkan operator yang terletak di baris yang sama memiliki preseden yang sama.

Tabel Preseden operator Operator


postfix unary multiplicative additive shift relational equality bitwise AND
expr++ expr-++expr --expr +expr -expr ~ ! * / % + << >> >>> < > <= >= instanceof == != &

Preseden

bitwise exclusive OR ^ bitwise inclusive OR | logical AND logical OR ternary assignment


&& || ? : = += -= *= /= %= &= ^= |= <<= >> = >>>=

Operator assignment atau penugasan adalah operator dengan simbol = yang berfungsi untuk memasukkan nilai operan kanan ke operan kiri. int i =10; double x = 3.4; Operator aritmetika terdiri atas :
+ * / % operator operator operator operator operator penjumlahan operator ( juga untuk concat string ) pengurangan perkalian pembagian modulus

Operator aritmetika dapat dikombinasikan untuk membuat compound assignments, misalnya


x+=1 x-=2 x*=4 //x=x+1; //x=x+1; //x=x+1;

Cobalah program berikut :


public class Aritmetika { public static void main (String[] args){ int hasil = 1 + 2; System.out.println(hasil); hasil = hasil - 1; System.out.println(hasil); hasil = hasil * 2; System.out.println(hasil); hasil = hasil / 2; System.out.println(hasil); hasil = hasil + 8; hasil = hasil % 7; System.out.println(hasil); hasil+=1; System.out.println(hasil);

hasil-=2; System.out.println(hasil); hasil*=4; System.out.println(hasil); } }

Operator + juga berfungsi untuk concat string

Cobalah program berikut :


public class Concat { public static void main(String[] args) { String stringPertama = "Ini adalah"; String stringKedua = " string yang di concat." ; String stringKetiga = stringPertama + stringKedua; System.out.println(stringKetiga); } }

Operator unary adalah operator yang hanya memerlukan satu operan, terdiri dari :

+ ++ -!

Operator unary tambah; menandakan nilai positif (jarang digunakan karena tanpa + secara default angka adalah positif) Operator unary minus; menegasikan ekspresi/angka Operator increment; menambah 1 ke sebuah nilai Operator decrement; mengura ngi 1 ke sebuah nilai Operator komplement lojik; membalik nilai sebuah boolean

Cobalah program berikut :


public class Unary { public static void main(String[] args){ int hasil = +1; System.out.println(hasil); hasil--; System.out.println(hasil); hasil++; System.out.println(hasil); hasil = -hasil; System.out.println(hasil); boolean sukses = false; System.out.println(sukses); System.out.println(!sukses); } }

Operator increment/decrement dapat diletakkan di awal (prefix) maupun akhir (postfix) dari operan. Operator yang terletak di prefix akan mengevaluasi nilai increment/decrement sedangkan postfix mengevaluasi nilai aslinya.

Cobalah program berikut :


public class PrePostDemo { public static void main(String[] args){ int i = 3; i++; System.out.println(i); // "4"

++i; System.out.println(i); System.out.println(++i); System.out.println(i++); System.out.println(i); } }

// // // //

"5" "6" "6" "7"

Kegiatan 2 Operator perbandingan dan kondisional


Operator perbandingan berfungsi membandingkan sebuah operan apakah operan tersebut lebih kecil, lebih besar, sama dengan maupun tidak sama dengan operan lainnya. Operator perbandingan antara lain :
== != > >= < <= sama dengan tidak sama dengan lebih besar dari lebih besar sama dengan dari lebih kecil dari lebih kecil sama dengan dari

Cobalah program berikut :


public class Perbandingan { public static void main(String[] args) { int nilai1 = 1; int nilai2 = 2; if (nilai1 == nilai2) { System.out.println( "nilai1 == nilai2" ); } if (nilai1 != nilai2) { System.out.println( "nilai1 != nilai2" ); } if (nilai1 > nilai2) { System.out.println( "nilai1 > nilai2" ); } if (nilai1 < nilai2) { System.out.println( "nilai1 < nilai2" ); } if (nilai1 <= nilai2) { System.out.println( "nilai1 <= nilai2" ); } } }

Operator kondisional && dan || berfungsi melakukan operasi AND dan OR terhadap dua ekspresi boolean.
&& || Kondisional AND Kondisional OR

Cobalah program berikut :


public class Kondisional { public static void main(String[] args){ int nilai1 = 1; int nilai2 = 2; if((nilai1 == 1) && (nilai2 == 2)) System.out.println( "nilai1 adalah 1 AND nilai2 adalah 2" ); if((nilai1 == 1) || (nilai2 == 1)) System.out.println( "nilai1 adalah 1 OR nilai2 adalah 1" ); } }

Ada dua lagi operator kondisional pada java yaitu :


?: instanceof Operator ternary if then else Operator perbandingan objek

kedua operator ini akan dibahas di praktikum-praktikum selanjutnya.

Kegiatan 3 Operator bitwise dan bitshift


Java juga menyediakan operator untuk melakukan operasi bitwise dan bit shift pada tipe interal, meskipun operasi-operasi ini jarang digunakan. Operator bitwise unary ~ berfungsi membalik pola bit dari sebuah nilai bertipe integral (byte, char, short, int, dan long) membuat semua nilai bit 0 menjadi bit 1 dan semua nilai bit 1 menjadi bit 0. Misalnya sebuah nilai bertipe byte bernilai 105 dengan pola bit 1101001jika diberikan operator ~ maka pola bit nya berubah menjadi 0010110 yaitu -106 (twos complement) Operator bitwise &, |, dan ^ masing-masing berfungsi untuk melakukan operasi AND, OR, dan XOR pada level bit. Operator bitshift >> menggeser pola bit ke kanan. Misalnya bilangan byte 89, memiliki pola bit 01011001 kemudian dilakukan 89>>2, maka pola bitnya menjadi 00010110 (geser kekanan sebanyak 2 bit dan tambahkan 0 di sebelah kiri) hasilnya adalah bilangan 22. Jika bilangan adalah bilangan signed twos komplemen (negatif) maka disebelah kiri ditambahkan 1. Misalnya -1 (11001001) diberikan operator -55>>2 maka hasilnya adalah -14 (11110010) Operator bit shift << menggeser pola bit ke kiri. Sedangkan operator >>> menggeser ke kanan pola bit dan memasukkan 0 di sebelah kiri baik itu angka positif maupun komplemen (negatif).
public class BitWise{ public static void main(String args[]){ byte angka1 = 105; byte angka2 = -80; System.out.println(~angka1); System.out.println(~angka2); System.out.println(angka1 & 5); System.out.println(angk a2 | 5); System.out.println(angka2 ^ 5);

System.out.println(angka1>>2); System.out.println(angka2>>5); System.out.println(angka1<<3); System.out.println(angka1>>>3); System.out.println(angka2>>> 5); } }

Tugas :
1. Diketahui program :
byte angka = 5; byte angka2 = -5; int hasil = angka++ >> 4 + 5 * 4 | 5 << angka2;

Berdasarkan presedense operator, jelaskanlah program diatas ! 2. Tuliskan pola bit pada masing-masing hasil operasi bitwise pada kelas Bitwise diatas !

PRAKTIKUM IV ALUR PROGRAM

I.

Pokok Bahasan :
1. 2. 3. if then else, dan switch while, do while dan for break, continue dan return

II. Tujuan Praktikum


1. 2. Mengetahui pencabangan alur pada program java Mengetahui perulangan pada program java

III. Kegiatan praktikum : Kegiatan 1 if then else, dan switch


if then else adalah statemen paling dasar untuk mengendalikan alur program, sintaks if then else di Java sama dengan sintaks di C, sebagai berikut : if kondisi then ekspresitrue else ekspresifalse

Cobalah program berikut :


public class Kondisional2 { public static void main(String[] args) { int skor = 76; char grade; if (skor >= 90) { grade = 'A'; } else if (skor >= 80) { grade = 'B'; } else if (skor >= 70) { grade = 'C'; } else if (skor >= 60) { grade = 'D'; } else { grade = 'F'; } System.out.println( "Grade = " + grade); } }

Java menyediakan sebuah operator sebagai alternatif dari inf then else yaitu ? : operator ini dikenal juga dengan operator ternary karena memiliki 3 buah operan.
kondisi ? ekspresitrue : ekspresifalse

Cobalah program berikut :


public class Kondisional2 { public static void main(String[] args){ int nilai1 = 1; int nilai2 = 2; int hasil; boolean kondisi = true; hasil = kondisi ? nilai1 : nilai2; /* Jika kondisi bernilai true maka hasil diisi dengan nilai1 dan * jika kondisi bernilai false maka hasil diisi dengan nilai2 System.out.println(hasil); } }

Switch adalah cara lain untuk mengendalikan alur program, dengan switch kita dapat menentukan lebih dari satu jalur eksekusi. Switch berlaku untuk tipe integral primitif (byte, char, short, int, dan long) dan juga kelas wrapper-nya. Switch juga berlaku untuk tipe enum di Java, enum kita akan bahas di praktikum berikutnya.

Cobalah program berikut :


public class SwitchTest { public static void main(String[] args) { int bulan = 8; switch (bulan) { case 1: System. out.println("Januari" ); break; case 2: System. out.println("Februari" ); break; case 3: System. out.println("Maret"); break; case 4: System. out.println("April"); break; case 5: System. out.println("Mei"); break; case 6: System. out.println("Juni"); break; case 7: System. out.println("Juli"); break; case 8: System. out.println("Agustus" ); break; case 9: System. out.println("September" ); break; case 10: System. out.println("Oktober" ); break; case 11: System. out.println("November" ); break; case 12: System. out.println("Desember" ); break; default: System.out.println("Bulan salah" );break; } } }

Switch mengevaluasi nilai yang diberikan kemudian menentukan case yang akan dieksekusi, case yang sesuai akan dieksekusi dan harus diakhiri dengan break, karena tanpa break case yang berikutnya akan turut dieksekusi sampai semua case dibawahnya habis. Default adalah case yang akan dieksekusi jika tidak ada case yang cocok dengan nilai yang dievaluasi.

Cobalah program berikut :


public class SwitchTest2 { public static void main(String[] args) { int bulan = 2; int tahun = 2000; int jumlahHari = 0; switch (bulan) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: jumlahHari = 31; break; case 4: case 6: case 9: case 11: jumlahHari = 30; break; case 2: if (((tahun % 4 == 0) && !(tahun % 100 == 0)) || (tahun % 400 == 0)) jumlahHari = 29; else jumlahHari = 28; break; default: System.out.println( "Bulan salah" ); break; } System.out.println( "Jumlah hari = " + jumlahHari); } }

Kegiatan 2 while, do while dan for


While seperti halnya di C, digunakan untuk melakukan perulangan/iterasi. Sintaksnya sebagai berikut:
while (ekspresi) { statemen }

While akan mengevaluasi ekspresi (harus mengembalikan nilai boolean), jika ekspresi bernilai true maka statemen di dalam blok while akan dieksekusi dan berulang sampai ekspresi bernilai false.

Cobalah program berikut :


public class WhileDemo { public static void main(String[] args) { int angka = 1; while (angka < 11) { System.out.println( "Angka: " + angka); angka++; } } }

Java juga memiliki perulangan dengan do while, perbedaannya dengan while adalah, ekspresi diletakkan setelah statemen, dan pengecekan akan dilakukan di akhir iterasi, sehingga statemen pasti dieksekusi minimal satu kali.
do { statemen } while (ekspresi);

Cobalah program berikut :


public class DoWhileDemo { public static void main(String[] args) { int count = 1; do { System.out.println( "Count is: " + count); count++; } while (count <= 11); } }

Selain do while, Java juga menyediakan perulangan dalam bentuk for, sbb :
for (inisialisasi ; terminasi; penambahan ) { statemen }

Sebelum perulangan for dimulai, ekspresi inisialisasi akan dipanggil satu kali, kemudian perulangan akan dimulai sampai ekspresi terminasi bernilai false. Ekpresi penambahan (increment) akan dipanggil setiap kali perulangan terjadi, kita dapat mengganti penambahan dengan pengurangan (decrement)

Cobalah program berikut :


public class ForDemo { public static void main(String[] args) { for (int i = 1; i < 11; i++) { System.out.println( "For 1 : " + i); }

for (int i = 10; i > = -3; i--) { System.out.println( "For 2 : " + i); } for (int i = 10,j = 2; i >= -3 & j < 10 ; i --,j++) { System.out.println( "For 3 : " + i + " " + j); } } }

Perulangan for juga berlaku untuk melakukan perulangan dalam koleksi (dibahas di praktikum selanjutnya) dan juga array. Array di Java, sama dengan di bahasa C, dapat di deklarasikan dengan cara sbb:
int[] angka = {1,2,3,4,5,6,7,8,9} ;

Diatas adalah pendeklarasian variabel angka dengan tipe array dari integer dan diinisialisasi lansung dengan angka 1 sampai 9.

Cobalah program berikut :


public class ArrayForDemo { public static void main(String[] args) { int[] angka = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int item : angka) { System.out.println( "Angka: " + item); } } }

Kegiatan 3 break, continue dan return


Statemen break adalah statemen untuk melakukan terminasi jalannya alur program. Terdapat dua jenis statemen break yaitu dengan label dan tanpa label, break tanpa label seperti yang kita lihat dalam statemen switch. Statemen break juga dapat digunakan untuk terminasi perulangan while, do while dan for.

Cobalah program berikut :


public class BreakDemo { public static void main(String[] args) { int[] angka = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 }; int cari = 12; int i; boolean ketemu = false; for (i = 0; i < angka. length; i++) { if (angka[i] == cari) { ketemu = true; break; //terminasi perulangan for } }

if (ketemu) { System.out.println("Ditemukan " + cari + " pada indeks " + i); } else { System.out.println(cari + " tidak terdapat dalam array" ); } } }

Statemen break tanpa label akan menterminasi statemen switch, while, do while, dan for yang terdalam, program akan berlanjut ke statemen yang lebih luar. Misalnya :

Cobalah program berikut :


public class BreakDemoDua { public static void main(String[] args) { for (int i=0; i<10; i++) { int k=0; for (;;) { do { if (k==5) break; //terminasi do while, alur program //berlanjut ke for yang kedua k++; } while (k<10); break; //terminasi for kedua program berlanjut ke for //yang pertama } System.out.println( "k = " + k); } } }

Statemen break dengan label dapat digunakan untuk melakukan terminasi kemudian melanjutkan alur program ke statemen lebih luar dengan label tertentu:

Cobalah program berikut :


public class BreakLabel Demo { public static void main(String[] args) { int[][] arrayAngka = { { 32, 87, 3, 589 }, { 12, 1076 , 2000, 8 }, { 622, 127, 77, 955 } }; int cari = 12; int i; int j = 0; boolean ketemu = false; keluar: //label for (i = 0; i < arrayAngka. length; i++) { for (j = 0; j < arrayAngka[i]. length; j++) { if (arrayAngka[i][j] == cari) { ketemu = true; break keluar; //terminasi for kedua dan alur program //dilanjutkan if (ketemu) } } }

if (ketemu) { System.out.println("Ketemu " + cari + " pada indeks " + i + "," + j); } else { System.out.println(cari + " tidak terdapat dalam array" ); } } }

Selain break, Java juga menyediakan statemen continue, yang berfungsi untuk melewati perulangan sekarang pada statemen for, while, dan do while. Statemen continue juga dapat digunakan dengan atau tanpa label, continue tanpa label akan melewati perulangan sekarang dan melanjutkan ke perulangan berikutnya.

Cobalah program berikut :


public class ContinueDemo { public static void main(String[] args) { String kalimat = "ular melingkar di pinggir pagar umar" ; //metode length() pada String berfungsi mengembalikan jumlah //karakter pada String tersebut. int maks = kalimat.length(); int jumlahR = 0; for (int i = 0; i < maks; i++) { //metode charAt() pada String berfungsi mengembalikan karakter //tertentu dalam String tersebut if (kalimat.charAt(i) != 'r') continue; //jika bukan huruf 'r' lewatkan perulangan //lanjut ke perulangan berikutnya jumlahR++; //jika huruf r tambahkan variabel jumlahR } System.out.println( "Ditemukan " + jumlahR + " huruf r dalam kalimat." ); } }

Continue juga dapat digunakan dengan label, perulangan akan dilewatkan dan kemudian perulangan dengan label akan dilanjutkan.

Cobalah program berikut :


public class ContinueLabelDemo { public static void main(String[] args) { String kalimat = "Cari kata ini di dalam kalimat" ; String cari = "ini"; boolean ketemu = false; int max = kalimat.length() - cari.length(); test: for (int int n int j int k i = = = = 0; i <= max; i++) { cari.length(); i; 0;

while (n-- != 0) { if (kalimat.charAt(j++) != cari.charAt(k++)) { continue test; //lewatkan perulangan while //lanjutkan ke for } } ketemu = true; break test; } System.out.println(ketemu ? "Ketemu" : "Tidak ketemu" ); } }

Statemen return adalah statemen yang berfungsi untuk mengembalikan alur program dari sebuah metode ke bagian program dimana metode tersebut di panggil. Statemen return memiliki dua bentuk yaitu return yang mengembalikan nilai
return 20;

dan return yang tidak mengembalikan nilai.


return;

Tugas
Buatlah program untuk menganalisa sebuah string, apakah string tersebut memenihi syarat sebagai sebuah alamat e-mail. Misalnya : afif@uin-alauddin.ac.id dengan ketentuan alamat e-mail sebagai berikut : 1. Harus diawali dengan angka atau huruf. 2. Harus memiliki karakter spesial @ yang memisahkan antara bagian nama dan bagian domain. 3. Bagian nama minimal terdiri dari 5 karakter, dapat berupa huruf, angka, underscore ( _ ) dan titik. 4. Titik dan underscore tidak boleh terletak disamping karakter @ 5. Bagian domain minimal terdiri dari 5 karakter, dapat berupa huruf dan angka, dan memiliki minimal satu buah titik. 6. Harus diakhiri dengan angka atau huruf.

PRAKTIKUM V PEMROGRAMAN BERORIENTASI OBJEK DENGAN JAVA

I.

Pokok Bahasan : 1. Kelas dan objek 2. Attribut dan Metode 3. Konstruktor 4. UML

II. Tujuan Praktikum 1. Mengetahui mengenai pendeklarasian kelas dan objek 2. Mengetahui pendeklarasian atrtribut dan metode pada kelas 3. Mengetahui cara kerja konstruktor 4. Mengetahui konsep diagram kelas pada UML.

III. Kegiatan praktikum :

Kegiatan 1 Kelas dan objek


Secara sederhana kelas dapat di deklarasikan sebagai berikut : <modifier> class <nama_kelas> { [attribut] [konstruktor] [metode] } <modifier> dapat memiliki nilai public, absract dan final, sedangkan <nama_kelas> adalah identifier Java dengan penamaan mengikuti konvensi. Isi dari kelas berada antara kurung kurawal buka dan tutup. Misalnya
public class Orang { }

Objek adalah instan dari sebuah kelas, untuk membuat sebuah objek maka kita perlu mendeklarasikan sebuah variabel dengan tipe kelas tertentu dan menginstansiasinya dengan kelas tersebut.
Orang objekOrang = new Orang();

Diatas kita mendefinisikan varaiabel objekOrang yang bertipe Orang dan menginstansiasinya dengan kelas Orang.

Cobalah program berikut :


public class Orang { public static void main(String[] args) { Orang objekOrang = new Orang(); Hewan objekHewan = null; if (objekOrang instanceof Orang) { System.out.println("objekOrang adalah instan dari Kelas " "Orang"); } if (objekHewan == null) { System.out.println( "objekHewan belum diinstansiasi" ); } } } class Hewan { }

Objek yang diisi dengan null, berarti objek tersebut belum terinstansiasi dan belum memiliki tempat di heap memori. Sehingga objek tersebut belum bisa digunakan. Statemen instanceOf adalah statemen yang berfungsi untuk mengetahui apakah sebuah objek adalah sebuah instan dari kelas tertentu.

Kegiatan 2 Attribut dan metode


Secara sederhana attribut dapat di deklarasikan sebagai berikut : <modifier> < tipe> <nama_attribut>; <modifier> dapat memiliki nilai public, private, protected, static, final, transient dan volatile. <tipe> adalah salah satu dari tipe yang tersedia baik berupa primitif maupun kelas. Sedangkan <nama_attribut> adalah identifier Java dengan penamaan mengikuti konvensi. Misalnya :
private static transient final int ANGKA = 3; public volatile String nama; protected Double angka = 4.55d;

Secara sederhana metode dapat di deklarasikan sebagai berikut : <modifier> < return_type> <nama_metode>([argumen]) { [<statemen>] } <modifier> dapat memiliki nilai public, private, protected, static, final, synchronized dan native. <return_type> adalah salah satu dari tipe yang tersedia baik berupa primitif maupun kelas atau bernilai void. <nama_metode> adalah identifier Java dengan penamaan mengikuti konvensi. Sedangkan [argumen] adalah daftar argumen yang dimiliki metode (optional) Isi dari metode berada antara kurung kurawal buka dan tutup. Misalnya :

public static void main(String[] args) { } private int hitung() { } protected String getNama() { } public synchronized void koneksi() { }

Baik attribut maupun metode dari sebuah kelas dapat diakses dengan membuat sebuah variabel dengan tipe kelas tersebut.

Cobalah program berikut :


public class Orang { public public public public String nama; String alamat; int tinggiBadan ; float beratBadan ; tinggiBadan +

public void cetakOrang() { System.out.println( nama + "," + alamat + "," + "," + beratBadan ); } public static void main(String[] args) { Orang objekOrang = new Orang(); objekOrang. nama = "Awaludin" ; objekOrang. alamat = "Makassar" ; objekOrang. tinggiBadan = 170; objekOrang. beratBadan = 60.4f; objekOrang.cetakOrang(); Orang objekOrangDua = new Orang(); objekOrangDua. nama = "Akhirudin " ; objekOrangDua. alamat = "London"; objekOrangDua. tinggiBadan = 150; objekOrangDua. beratBadan = 80.9f; objekOrangDua.cetakOrang(); } }

Attribut dan metode diakses dengan menggunakan titik . setelah masing -masing nama variabel instan. Baik attribut maupun metode dapat diakses menurut aturan modifier nya apakah private, public, maupun protected. Statemen static adalah statemen yang mendeklarasikan sebuah attribut/metode milik kelas bukan milik dari instan dari kelas tersebut. attribut/metode menjadi

Cobalah program berikut :


public class Hewan { public static int JUMLAH_HEWAN = 0; public String spesies; public static void tambahHewan() { JUMLAH_HEWAN ++; } public static void main(String args[]) { Hewan objekHewan = new Hewan(); objekHewan. spesies = "Kucing"; Hewan.tambahHewan (); System.out.println(Hewan. JUMLAH_HEWAN ); Hewan objekHewanDua = new Hewan(); objekHewanDua. spesies = "Anjing"; Hewan.tambahHewan (); System.out.println(Hewan. JUMLAH_HEWAN ); System.out.println(objekHewan. JUMLAH_HEWAN ); System.out.println(objekHewanDua. JUMLAH_HEWAN ); } }

Attribut JUMLAH_HEWAN di deklarasikan sebagai static, sehingga attribut ini adalah milik kelas Hewan (bukan milik objek dari Hewan) sehingga untuk mengaksesnya dengan cara nama kelas diikuti . dan nama attribut static. Demikian pula dengan metode tambahHewan yang dideklarasikan static sehingga pemanggilannya dilakukan dengan nama kelas diikuti . dan nama metode static. Nilai attribut static akan sama untuk setiap objek dari sebuah kelas, karena static adalah milik kelas bukan objek. Argumen pada metode dapat berupa primitif maupun objek, baik primitif maupun objek akan di passing by value. Akan tetapi pada argumen bertipe objek, nilai attribut dapat diu bah (jika dapat diakses) dan nilainya akan tetap setelah pemanggilan metode.

Cobalah program berikut :

public class Argumen { public static void passingPrimitif( int i) { i = 5; } public static void passingObject(Titik t) { t.x = 4; t.y = 5; }

public static void main(String args[]) { int i = 5; passingPrimitif (i); System.out.println(i); Titik t = new Titik(); passingObject (t); System.out.println(t. x + " " + t.y); } } class Titik { public int x; public int y; public Titik() { x = 0; y = 0; } }

Argumen juga dapat berupa array, selain itu Java juga mendukung argumen dengan jumlah sembarang.

Cobalah program berikut :


public class ArgumenDua { public static void argumenArray( int[] args) { System.out.println(args[0] + "," + args[1] + "," + args[2]); } public static void argumenSembarang (int... args) { System.out.println(args[0] + "," + args[1] + "," + args[2]); } public static void main(String args[]) { int i[] = {1,2,3}; argumenArray (i); argumenSembarang (i); } }

Sebuah metode dapat memiliki nama yang sama dengan metode lain, dengan syarat daftar argumen nya tidak boleh sama.

Cobalah program berikut :


public class Tumbuhan { public void tanam() { System.out.println( "Tanam 1"); } public void tanam(String nama) { System.out.println( "Tanam 2"); }

public void tanam(int jumlah) { System.out.println( "Tanam 3"); } public void tanam(long jumlah) { System.out.println( "Tanam 4"); }

public String tanam(String nama, int jumlah) { return "Tanam 5"; } public static void main(String args[]) { Tumbuhan tumbuhan = new Tumbuhan(); tumbuhan.tanam(); tumbuhan.tanam( "Sayur"); tumbuhan.tanam(4); tumbuhan.tanam(5l); System.out.println(tumbuhan.tanam( "Sayur", 5)); } }

Metode akan dipanggil sesuai dengan argumen yang diberikan, sehingga meskipun memiliki nama yang sama, metode yang dipanggil akan berbeda. Ini disebut dengan method overloading.

Kegiatan 3 Konstruktor
Konstruktor adalah metode khusus yang dimiliki oleh setiap objek baik secara eksplisit maupun implisit. Konstruktor sebuah kelas akan dipanggil setiap objek diinstansiasi. Konstruktor biasanya berisi instruksi-instruksi untuk menginisialisasi attribut-attribut dengan nilai tertentu, dan menginisalisasi hal-hal yang lain sebelum objek siap digunakan. Deklarasi konstruktor sama dengan deklarasi metode, tapi tanpa return value dan nama nya harus sama dengan nama kelas. Seperti halnya meotde konstruktor jg dapat dioverloading. Modifier konstruktor hanya boleh public, private dan protected.

Cobalah program berikut :


public class Tumbuhan { private String namaSpesies ; private int lebarDaun ; private Tumbuhan() { namaSpesies = "Sayur"; lebarDaun = 30; } private Tumbuhan(String nama, int lebar) { namaSpesies = nama; lebarDaun = lebar; } public void cetakTumbuhan() { System.out.println( namaSpesies + " " + lebarDaun); }

public static void main(String args[]) { Tumbuhan tumbuhan = new Tumbuhan(); tumbuhan.cetakTumbuhan(); tumbuhan = new Tumbuhan("Buah",20); tumbuhan.cetakTumbuhan(); } }

Konstruktor akan dipanggil sesuai dengan argumen yang diberikan saat objek diinstansiasi. Konstruktor tanpa argumen disebut juga konstruktor default. Jika tidak ada konstruktor secara implisit di deklarasikan dalam sebuah kelas, maka kompiler akan men -generate konstruktor default untuk kelas tersebut.

Kegiatan 4 UML
UML adalah kakas yang digunakan untuk memodelkan sistem terutama sistem berorientasi-objek. UML memiliki banyak jenis diagram yang digunakan untuk menggambarkan sistem. Salah satu diagram yang paling umum digunakan adalah diagram kelas. Contoh diagram kelas adalah sebagai berikut :

Diagram kelas Orang

Tanda minus - di depan attribut maupunmetode menandakan bahwa attribut/metode tersebut bersivat private, sedangkan plus + berti public. Garis bawah pada attribut/metode menandakan kalau attribut/metode tersebut adalah static. Dari diagram kelas diatas dapat diimplementasikan menjadi program sebagai berikut :
public class Orang { private String nama; private String alamat; public Orang() { } public String getNama() { return nama; }

public void setNama(String str) { nama = str; } public String getAlamat() { return alamat; } public void setAlamat(String str) { alamat = str; } }

Tugas

Diagram kelas Lingkaran

Implementasikan diagram kelas diatas beserta attribut dan metode-nya kedalam program Java !

PRAKTIKUM VI PEMROGRAMAN BERORIENTASI OBJEK LANJUTAN

I.

Pokok Bahasan :
1. Package dan import 2. Inheritance 3. Polymorphism

II. Tujuan Praktikum


1. Mengetahui mengenai package dan import 2. Mengetahui mengenai inheritance (pewarisan) 3. Mengetahui mengenai polymorphism

III. Kegiatan Praktikum

Kegiatan 1 Package dan import


Package (paket) adalah namespace yang mengorganisasikan kelas -kelas dalam Java, secara konsep dan implementasi paket sama dengan direktori (folder) dalam file system, kita dapat meletakkan filefile kedalam folder dan menyusunnya secara hirarki sesuai kebutuhan. Demikian pula paket, kelas kelas dalam Java dimasukkan kedalam paket dan disusun secara hirarkis dan diawali oleh classpath. Dengan menggunakan eclipse kita dipermudah dalam mengatur paket dan classpath, eclipse akan selalu memulai classpath dari direktori source code dari sebuah project. Sehingga semua paket akan relatif terhadap direktori source tersebut.

Window untuk membuat paket

Untuk membuat paket, klik kanan pada direktori source dalam project, kemudian pilih paket.

Window untuk menset paket

Masukkan nama paket yang diinginkan, jika paket yang dibuat terdiri dari dua level atau lebih, pisahkan masing-masing level dengan tanda titik . Buatlah kelas pada paket tersebut, secara otomatis eclipse akan menambahkan sintaks package sebagai berikut :

Windows editor source code

Setiap paket yang dideklarasikan di project aka dibuatkan sebuah folder, periksalah folder workspace anda, kemudian buka project lanjutkan dengan membuka folder source project tersebut, di folder itu akan terdapat folder-folder sesuai dengan paket yang di deklarasikan di eclipse. Dengan menggunakan konsep paket maka, kelas-kelas dapat di organisasikan lebih rapih dan terhirarki. Kita dapat menggunakan kelas-kelas yang telah ada dengan menyebutkan nama paket kelas tersebut diikuti dengan nama kelasnya ini disebut dengan FQN (Fully Qualified Name) atau dengan melakukan import kelas tersebut kedalam kelas yang di buat. Jika kelas yang kita gunakan terletak di paket yang sama dengan kelas yang dibuat maka kelas tersebut tidak perlu di import dan tidak perlu disebutkan FQN nya, cukup nama kelasnya saja. Kelas yang memiliki modifier public dapat diakses oleh kelas lain di luar paketnya, sedangkan kelas yang tidak memiliki modifier hanya bisa diakses di paket yang sama.

Cobalah program berikut :


package praktikum.enam; public class Mesin { public Mesin() { System.out.println( "Konstruktor Mesin" ); } }

package praktikum.enam; public class Rangka { private Ban ban; public Rangka() { ban = new Ban(); //karena Ban dan Rangka terletak dalam satu // paket maka cukup menyebutkan nama kelasnya. System.out.println( "Konstruktor Rangka" ); } } class Ban { //Karena Ban tidak memiliki modifier maka Ban hanya dapat //diakses dari dalam paket praktikum.enam public Ban() { System.out.println( "Konstruktor Ban" ); } } package praktikum.enam.utama; import praktikum.enam.Rangka; //karena Rangka tidak satu paket dengan //Mobil maka harus dilakukan import public class Mobil { private Rangka rangka;

private praktikum.enam.Mesin mesin; //karena Mesin tidak satu paket //dengan Mobil dan tidak dilakukan //import maka FQN -nya harus disebutkan public Mobil() { rangka = new Rangka(); mesin = new praktikum.enam.Mesin(); } public static void main(String args[]) { new Mobil(); } }

Java menyediakan ribuan kelas API yang siap digunakan yang memiliki fungsi masing-masing, misalnya untuk GUI, networking, database dll. Kita tinggal menggunakan kelas-kelas tersebut dengan melakukan import. Misalnya :
import java.util.Date; import java.sql.DriverManager; import java.io.BufferedInputStream;

Kita juga dapat melakukan import semua kelas dalam satu paket menggunakan *
import java.util. *; import java.sql.*; import java.io.*;

Kegiatan 2 Inheritence

Kelas Sedan dan Truk mewarisi kelas Mobil


Salah satu keunggulan pemrograman beroirentasi objek adalah kemampuannya dalam penggunaulangan yang sangat bagus, slah satunya dengan melakukan pewarisan. Java sebagai bahasa berorientasi objek tentu saja mendukung pewarisan, bahkan arsitektur bahasa Java dir ncang agar a semua kelas di Java mewarisi sebuah kelas yaitu java.lang.Object arsitektur ini disebut singly rooted hierarchy. Java menggunakan statemen extends untuk melakukan pewarisan dari sebuah kelas dengan cara pendeklarasian sbb: <modifier> class <nama_kelas_anak> extends <nama_kelas_induk> { }

Cobalah program berikut :


Edit kelas Mobil menjadi seperti berikut :

package praktikum.enam.utama; import praktikum.enam.Rangka; public class Mobil { public Rangka rangka; public praktikum.enam.Mesin mesin; private int nomer; protected String nama;

public Mobil() { rangka = new Rangka(); mesin = new praktikum.enam.Mesin(); System.out.println( "Konstruktor Mobil" ); } public void stater() { System.out.println( "Stater mobil" ); } }

Kemudian buatlah kelas Truk yang mewarisi kelas Mobil

package praktikum.enam.mobil; import praktikum.enam.Mesin; import praktikum.enam.Rangka; import praktikum.enam.utama.Mobil; public class Truk extends Mobil { public Truk() { } public void tongkang() { //attribut mesin dan metode starter dikenali karena metode //dan attribut ini ada di kelas Mobil yang merupakan kelas //induk dari Truk dan keduanya adalah public mesin = new Mesin(); stater(); //nama dikenali di Truk karena nama ada di kelas Mobil dan //modifier -nya protected nama = "Truk"; //nomer tidak dikenali di Truk karena modifier -nya private System.out.println( "Tongkang" ); }

public static void main(String args[]) { Truk truk = new Truk(); truk.tongkang(); } }

Saat kelas turunan di instansiasi secara otomatis konstruktor dari kelas induk akan ikut dipanggil, perhatikan output dari program diatas, konstruktor Mobil akan dipanggil sebelum konstruktor Truk. Kita dapat secara eksplisit memnaggil konstruktor dari kelas induk dengan menggunakan statemen super, statemen super menandakan kita merujuk ke metode atau attribut milik kelas induk, kita juga bisa menggunakan statemen this untuk merujuk ke metode atau attribut milik kelas itu sendiri.

Cobalah program berikut :


Edit kelas Mobil dan tambahkan konstruktor :

public Mobil(String nama) { //statemen this menunjuk ke attribut kelas Mobil itu sendiri //yaitu 'nama' this.nama=nama; }

Buatlah kelas baru turunan dari Mobil :


package praktikum.enam.mobil; import praktikum.enam.utama.Mobil; public class Sedan extends Mobil { public String nama; public Sedan() { super(); //memanggil konstruktor default milik kelas induk } public Sedan(String nama) { super(nama); //memanggil konstruktor milik kelas induk //yaitu 'Mobil(String nama)' } public void cetak(String nama) { super.nama = nama; //super merujuk ke attribut 'nama' milik induk this.nama = "Sedan lokal" ; //this merujuk ke attribut 'nama' //milik kelas Sedan System.out.println(nama); //tanpa this atau super, 'nama' disini //akan merujuk ke induk System.out.println( this.nama); //merujuk ke 'nama' milik Sedan }

public static void main(String args[]) { Sedan sedan = new Sedan(); sedan.cetak( "Sedan"); } }

Di Java, kelas yang memiliki modifier final tidak dapat lagi di turunkan oleh kelas lain. Coba tambahkan statemen final di kelas Mobil dan lihat hasilnya. Java hanya mengijinkan single inheritance, artinya satu kelas hanya boleh mewarisi satu kelas yang lain, sehingga setelah statemen extends hanya boleh diikuti oleh satu nama kelas.

Kegiatan 3 Polymorphism
Salah satu keunggulan utama dari pemrograman berorientasi objek adalah polymorphism. Dengan polymorphism kita bisa memperlakukan sebuah objek turunan sama dengan objek induknya, sehingga kita bisa membuat sebuah metode yang generik untuk semua kelas turunan dengan menggunakan kelas induknya, ini dimungkinkan oleh teknik yang dimiliki Java yaitu upcasting. Misalnya :
Mobil mobil = new Sedan(); Sedan sedan = mobil; //error Sedan sedan = (Sedan) mobil;

Karena Sedan adalah turunan dari Mobil maka kita dapat menginstansiasi sebuah objek Mobil dengan kelas Sedan, meskipun tipe nya adalah Mobil, kita tidak dapat memanggil metode yang ada di kelas sedan di objek bertipe Mobil. Baris kedua kode diatas akan dianggap error oleh kompiletor karena kompilator memiliki informasi bahwa objek mobil adalah bertipe Sedan (late binding). Karena itu diperlukan casting secara manual seperti pada baris ketiga, casting manual akan menjamin bahwa mobil memiliki tipe Sedan, sehingga kompilator akan menganggapnya benar. Efek polymorphisme lebih bisa dilihat dengan melakukan overloading metode. Overloading metode adalah membuat metode di kelas anak dengan signature (nama, argumen dan return value) yang sama dengan metode di kelas induk, dan mengganti isi dari metode tersebut sesuai dengan kebutuhan spesifik kelas anak.

Cobalah program berikut :


Edit kelas Mobil dan tambahkan metode :
//Metode asli di kelas induk public void stater() { System.out.println( "Stater Mobil" ); }

Edit kelas Sedan dan tambahkan metode :


//Melakukan overloading metode stater di kelas Sedan public void stater() { System.out.println( "Stater Sedan" ); }

Edit kelas Truk dan tambahkan metode :


//Melakukan overloading metode stater di kelas Truk public void stater() { System.out.println( "Stater Truk" ); }

Buat kelas MobilTest berikut :


package praktikum.enam.utama; import praktikum.enam.mobil.Sedan;

import praktikum.enam.mobil.Truk; public class MobilTest { //metode dengan argumen bertipe Mobil, semua kelas turunan //dari kelas mobil dapat dilewatkan di argumen metode ini public static void staterMobil(Mobil mobil) { //memanggil metode stater, metode stater yang dipanggil //tergantung tipe objek yang diberikan di argumen mobil.stater(); } public static void main(String[] args) { Mobil sedan = new Sedan(); Truk truk = new Truk(); //memanggil metode staterMobil dengan //metode stater yang dipanggil adalah staterMobil (new Mobil()); //memanggil metode staterMobil dengan //metode stater yang dipanggil adalah staterMobil (sedan); //memanggil metode staterMobil dengan //metode stater yang dipanggil adalah staterMobil (truk); } }

argumen objek Mobil, stater di kelas Mobil argumen objek Sedan stater di kelas Sedan argumen objek Truk stater di kelas Truk

Java menggunakan teknik late binding untuk membanding sebuah metode dengan kelas tertentu, sehingga kompilator belum mengetahui metode stater() dari kelas yang mana yang harus dipanggil apakah kelas induk atau kelas anaknya. Metode akan di binding pada saat run -time oleh JVM. Kita dapat mencegah late binding dengan membuat sebuah metode menjadi final atau private (tambahkan statemen final atau private diawal metode). Metode yang final dan private tidak mungkin di overriding di kelas anak, sehingga metode ini akan di binding pada saat compile time.

Tugas
Buatlah struktur kelas seperti struktur Mobil. Dengan petunjuk sbb: a. Tambahkan metode di kelas induk, dan lakukan overriding metode di kelas anaknya. b. Buatlah minimal 3 kelas anak. c. Buat sebuah metode seperti staterMobil() untuk mencoba efek polymorphisme kela yang s kalian buat.

Anda mungkin juga menyukai