Praktikum I Type Data Sederhana Write, Writeln, Read, Readln Tujuan : > Mempelajari Komponen Java > Mengistall SE SDK dan Setting Patch > Mempelajari Struktur Penulisan Kode Java > Mempelajari dan mengerti statemen print & println > Mempelajari cara mengcompile dan menjalankan file java Teori : 1. Mempelajari Komponen Java ● JVM (Java Virtual Machine) Java dapat berjalan pada sebuah sistem operasi membutuhkan Java Virtual Machine (JVM). JVM sendiri terdiri dari Java Runtime Environment (JRE) dan Java Development Kit (JDK). Sun Microsystems mengeluarkan tiga kelas paket Java, yaitu J2-SE JRE (hanya berisi JRE), J2- SE SDK (berisi JDK + JRE), dan J2-EE SDK (berisi JDK+JRE dan tools untuk aplikasi enterprise). Untuk versi SE (Standard Edition) tersedia gratis pada situs www.java.com. ● IDE (Integrated Development Environment) IDE (Integrated Development Environment) adalah sebuah editor pemrograman sebuah bahasa. Untuk Java sendiri ada banyak IDE yang tersedia dipasaran baik yang bersifat gratis (freeware) ataupun yang berbayar. Beberapa IDE yang populer antara lain, Jcreator (www.jcreator.com), Netbeans (www.netbeans.org), Jbuilder (www.borland.com/jbuilder), dan lain-lain. ● Class Unit yang paling mendasar dalam pemrograman java adalah class. Class adalah komponen aplikasi yang menangani kode dan data dalam pemrograman java. 2. Menginstall SE SDK dan Setting Patch Doble clik setup J2SDK ikuti perintah selanjutnya sampai opsi destination folder. Pilih lokasi J2SDK kemudian ikuti pilihan next sampai selesai sesuai settingan standar. Untuk melakukan setting path yang harus kita ketahui adalah posisi kita menginstall J2SDK yang telah kita lakukan di destination folder. Langkah-langkah yang perlu dilakukan untuk setting path antara lain: Start Menu – Control Panel – System – System setting – Environtment Variables – sorot path – edit - paste posisi folder bin tempat menginstal J2SDK ke variable value – restart system. 3. Struktur Penulisan Kode Java public class latihan1{ → Deklarasi Kelas public static void main (String [ ] args){ → Method java → Tempat menulis kode } 1 4. Statement print dan println Defaultnya print adalah perintah output data ke layar monitor tanpa ganti baris. Sedangkan println adalah perintah output data ke sebuah aliran seperti DataInputStream. Contoh program Membuat file latihan1.java public class latihan1{ public static void main (String [] args){ System.out.println(“Hallo”); System.out.print(“Ini program latihan”); } } 2 Praktikum II Input/Output Data Sederhana dan tipe data Tujuan : > Mempelajari cara input ke variabel > Mempelajari konversi tipe data di Java Teori : 1. Mempelajari cara input ke variabel a. Input dengan DataInputStream kita menggunakan class DataInputStream yang berada di package java.io untuk mendapatkan input dari keyboard. Langkah-langkah yang diperlukan yaitu: 1. Tambahkan bagian atas code dengan import java.io.*; 2. Tambahkan statemen berikut: DataInputStream input = new DataInputStream(System.in); 3. Deklarasikan variabel String temporary untuk mendapatkan input, dan gunakan fungsi readLine() untuk mendapatkan input dari keyboard. Anda harus mengetikkannya di dalam blok try-catch: try{ String temp = dataIn.readLine(); } catch( IOException e ){ System.out.println(“Error in getting input”); } b. Input dengan BufferedReader Pada bagian ini, kita akan menggunakan class BufferedReader yang berada di package java.io untuk mendapatkan input dari keyboard. Berikut ini adalah langkah-langkah yang diperlukan untuk mendapatkan input dari keyboard: 1. Tambahkan di bagian paling atas code Anda: import java.io.*; 2. Tambahkan statement berikut: BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in)); 3. Deklarasikan variabel String temporary untuk mendapatkan input, dan gunakan fungsi readLine() untuk mendapatkan input dari keyboard. Anda harus mengetikkannya di dalam blok try-catch: try{ String temp = dataIn.readLine(); } catch( IOException e ){ System.out.println(“Error in getting input”); } 2. Konversi tipe data di Java 3 Contoh program Membuat file latihan2.java import java.io.*; public class latihan2{ public static void main (String [ ] args){ System.out.println(“Hallo”); System.out.print(“Ini program latihan”); /* Bagian Data Input Stream */ DataInputStream input1 = new DataInputStream(System.in); String nama; System.out.print(“Masukkan nama anda : “); input1.read(); System.out.println(“Nama anda :”+nama); /* Bagian BufferReader */ BufferedReader input2 = new BufferedReader(new InputStreamReader(System.in)); String alamat; System.out.print(“Masukkan nama anda : “); input2.read(); System.out.println(“Nama anda :”+nama); } } 4 Praktikum III Struktur Kontrol Percabangan Tujuan : > Mempelajari dan mengerti statement if .. else untuk melakukan percabangan berdasarkan kondisi tertentu. > Mempelajari dan mengerti statemen case / switch Teori : > operator kondisi dan operator logika digunakan pada proses menentukan pilihan dalam kondisi tertentu. Contoh Kondisi if..else: if (nilai > 99){ → pengecekan kondisi System.out.println(“Nilai anda Bagus”); → pernyataan dari cek kondisi }else{ System.out.println(“Nilai anda Sedang”); → pernyataan selain pernyataan 1 } Contoh kondisi case/switch: switch(pilih){ case 1: System.out.println(“A”);break; case 2: System.out.println(“B”);break; case 3: System.out.println(“C”);break; } → menguji variabel pilih → pernyataan bila pilih = 1 → pernyataan bila pilih = 2 → pernyataan bila pilih = 3 Contoh Program : package mainsuit; import java.io.*; public class MainSuit { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // cetak aturan main dan input dari user System.out.println("Permainan suit"); System.out.println("=============="); System.out.println("Masukkan salah satu dari 3 kemungkinan :"); System.out.println("J untuk Jempol"); System.out.println("T untuk Telunjuk"); System.out.println("K untuk Kelingking"); 5 System.out.println(""); // baris kosong // variabel untuk mengambil input dari user BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = null; // Kita gunakan pernyataan while hingga user betul // memasukkan salah satu dari J, T, atau K boolean inputvalid = false; int suitKomputer = 0; int suitUser = 0; // selama input tidak valid, jalankan perulangan ini while (!inputvalid) { System.out.print("Masukkan suit Anda "); try { input = br.readLine(); } catch (IOException ioe) { System.out.println("Kesalahan IO, program berhenti"); System.exit(1); } // pastikan bahwa user memasukkan sesuatu dengan mengecek // apakah panjang input > 0 // jika tidak, maka perulangan akan dilanjutkan if (input.length() > 0) { switch (input.charAt(0)) { case 'j' : case 'J' : suitUser = 0; inputvalid = true; // kita ganti inputvalid agar perulangan selesai break; case 't' : case 'T' : suitUser = 1; inputvalid = true; // kita ganti inputvalid agar perulangan selesai break; case 'k' : case 'K' : suitUser = 2; inputvalid = true; // kita ganti inputvalid agar perulangan selesai break; } } } // sekarang menghitung suit komputer // Math.random() menghasilkan nilai acak antara 0 dan 1 // jika kita kali 3, berarti menghasilkan nilai acak antara 0 dan 3 // perintah (int) untuk mengubah bilangan real menjadi bilangan bulat // dengan cara menghilangkan semua digit di belakang koma // misalnya 1.0232323 menjadi 1 suitKomputer = (int)(Math.random()*3); 6 // suatu saat "mungkin" nilai random bernilai 3 // karena 3 tidak ada dalam suit kita, maka kita harus ubah menjadi // salah satu suit yang valid, yaitu 0, 1, atau 2 // dalam hal ini kita ganti jadi 2 if (suitKomputer == 3) { suitKomputer = 2; } // menghitung siapa yang menang switch (suitKomputer) { // jika komputer Jempol case 0: // cetak suit Komputer System.out.println("Suit komputer = Jempol"); switch (suitUser) { // jika user Jempol case 0: System.out.println("Seri"); break; // jika user Telunjuk case 1: System.out.println("Anda kalah"); break; // jika user Kelingking case 2: System.out.println("Anda menang"); break; } break; // dari switch(suitKomputer) // jika komputer Telunjuk case 1: // cetak suit Komputer System.out.println("Suit komputer = Telunjuk"); switch (suitUser) { // jika user Jempol case 0: System.out.println("Anda menang"); break; // jika user Telunjuk case 1: System.out.println("Seri"); break; // jika user Kelingking case 2: System.out.println("Anda kalah"); break; } break; // dari switch(suitKomputer) // jika komputer Kelingking case 2: // cetak suit Komputer System.out.println("Suit komputer = Kelingking"); switch (suitUser) { 7 // jika user Jempol case 0: System.out.println("Anda kalah"); break; // jika user Telunjuk case 1: System.out.println("Anda menang"); break; // jika user Kelingking case 2: System.out.println("Seri"); break; } break; // dari switch(suitKomputer) } } } 8 Praktikum IV Struktur Kontrol Perulangan Tujuan : > Mempelajari dan mengerti statement for untuk melakukan perulangan > Mempelajari dan mengerti statement while > Mempelajari dan mengerti statement do.. while Teori : For dan While merupakan operator perulangan yang digunakan untuk memproses nilai atau variabel dalam satu blok perintah secara berulang-ulang ataupun kontinyu tergantung pada kondisi yang ditentukan. Contoh for: for (int i = 0; i<10; i++){ System.out.print(“Nilai i = ”+i); } Contoh while: while (i < 10){ System.out.print(“Nilai i = “+i); i++; } Contoh do.. while: do{ i++; System.out.print(“Nilai i = “+i); } while(i<10); 9 Praktikum V Statemen Break dan Continue Tujuan : > Mempelajari dan mengerti keyword break dan continue. Teori : > Break Berfungsi untuk menghentikan statement yang terletak pada bagian loop yang terdalam. Biasanya digunakan bersama dengan statement yang mengandung if. > Continue Keyword ini hanya menghentikan perulangan yang sedang berlangsung. Kendali program akan menuju akhir dari body loop. Sama seperti break, keyword ini biasanya digunakan bersama dengan statemen yang mengandung if Contoh Program : /* * Latihan Break */ public class latihan5break{ public static void main (String [ ] args){ int counter = 0; System.out.println(“\n Program Demo Break”); System.out.println(“--------------------------------”); while (counter < 100) { counter ++; if (counter == 7) break; } System.out.println(“Counter terakhir adalah : “+ counter); } } /* * Latihan Continue */ public class latihan5break{ public static void main (String [ ] args){ int counter = 0; int counterdiabaikan = 0; System.out.println(“\n Program Demo Break”); System.out.println(“--------------------------------”); while (counter < 100) { counter ++; if (counter == 7) { counterdiabaikan = counter; 10 continue; }else{ System.out.println(“Mencetak counter ke = ”+ counter); } } System.out.println(“Counter terakhir adalah : “+ counter); } } 11 Praktikum VI Array Tujuan : > Mempelajari dan mengerti cara mendeklarasi array > Mempelajari cara menginisialisasi array > Melewatkan array ke method Teori : Array adalah suatu entitas (kesatuan) yang beranggotakan elemen-elemen / varibel bertipe data sama dan dapat diakses dengan memanggil nama array beserta indeks elemennya. Cara mendeklarasikan array 1. Tipe data [ ] nama_Array Contoh : String [ ] data 2. Tipe data nama_Array[ ]; // lebih sering dipakai Contoh : String data[ ] Selanjutnya kita dapat membentuk objek array serta menugaskan ke variabel array yang telah dideklarasikan, contohnya sebagai berikut : namaArray = new tipedata[ukuran array]; Menginisialisasi Array Pada saat array terbentuk pertama kali, elemen-elemennya akan memiliki nilai default 0 untuk tipe numerik, blank (kosong) untuk char, dan salah (false) untuk boolean. Cara berikut untuk mengakses suatu elemen dari array. namaArray[indeks]; indeks adalah bilangan integer yang menunjukkan letak ukuran elemen itu dalam array. Indeks dari array berukuran N dimulai dari 0 hingga N-1. Untuk mengetahui panjang/jumlah elemen dapat digunakan metode length(). Contoh: 1. int [ ] deretBilangan = {1,2,3,4,5,6}; 2. Inisialisasi elemen satu persatu seperti berikut: deretbilangan[0] = 10; deretbilangan[1] = 11; ... deretbilangan[9] = 20; 3. inisialisasi dengan for sebagai berikut: for (int i=0; I < 10; i++){ deretbilangan[i] = 10*i; } Melewatkan Array ke Method 12 Java menggunakan dua jenis mekanisme untuk melewatkan argumen ke suatu method, antara lain: 1. Untuk variabel bertipe data primitif, yang akan dilewatkan ke method adalah nilai aktualnya. Perubahan nilai variabel pada saat mengoperasikannya didalam method tidak akan mengubah nilai variabel tersebut. Mekanisme ini dinamakan Pass by Value. 2. Pada variabl array, nilai yang dilewatkan pada hakikatnya adalah alamat referensi memory yang menunjuk array tersebut. Bukan nilai aktual masingmasing elemennya. Bila alamat referensi ini berubah pada saat mengoperasikannya di dalam method, maka akan mengubah nilai variabel array asalnya. Mekanisme ini dinamakan Pass by Reference. Namun, bila kita mengambil nilai suatu elemen dari array, dan kemudian melewatkannya ke method, maka elemen itu akan diperlakukan seperti pada tipe data primitif. 13 Praktikum VII String Tujuan : > Mempelajari dan mengerti String. > Mempelajari dan mengerti cara menginisialisasi String > Membaca Karakter secara individu dalam String > Membandingkan String (Metode Equals dan CompareTo) Teori : String adalah deretan karakter. Pada bahasa pemrograman lain, string dianggap sebagai array dari karakter. Namun, dalam java string diperlakukan sebagai suatu objek. Ada tiga kelas string yang ada di java yaitu kelas String, kelas String Buffer, dan kelas String Tokenizer. Kelas String Kelas String memodelkan deretan karakter sebagai suatu string. Kelas ini terdapat dalam package java.lang. Operasi-operasi pada kelas String Kelas String memiliki beberapa method yang sering digunakan dalam operasi string. Beberapa diantaranya adalah: 1. Membuat dan menginisialisasi string. 2. Membaca karakter secara individu dalam string. 3. Membandingkan dua string. 4. Mengubah karakter kecil menjadi kapital dan sebaliknya. 5. Menggabungkan dua string. 6. Mencari karakter dan substring. 7. Mengekstrak substring. 8. Mengkonversi objek menjadi string. Membuat dan Menginisialisasi String Ada dua cara membuat dan menginisialisasi objek string yaitu: 1. Mendeklarasikan string sebagaimana literal tipe data primitif. String kata = “Hallo”; 2. Membuat objek string dengan operator new dan menugaskan // digunakan untuk membentuk objek string dari kelas String kata = new String (“Hallo”); Catatan : cara pertama merupakan perlakuan istimewa Java kepada String. Karena menganggap String sebagai suatu tipe data, seperti layaknya tipe data primitif lainnya seperti byte, short, char, boolean dan sebagainya. Padahal String dalam Java merupakan kelas sehingga bila mengikuti kaidah pembentukan objek dari suatu kelas maka hanya bentuk kedualah sebagai cara pembentukan objek dari suatu kelas. Membaca Karakter Secara Individu dalam String 14 Ada dua Method yang sering digunakan untuk membaca karakter yang menyusun suatu string secara individu yaitu: 1. int length() Method ini akan mengembalikan jumlah karakter dalam suatu string. Digunakan untuk menentukan batas akhir dari indeks yang dipakai sebagai petunjuk posisi pada method charAt(int index). 2. char charAt(int index) Membaca satu karakter pada suatu posisi yang ditunjukkan oleh indeks dalam string. Karakter pertama dalam string memiliki indeks=0 dan karakter terakhir memiliki indeks = jumlah karakter pembentuk string -1 atau objekString.length()-1. Membandingkan String Sebelum membahas perbandingan dua string, kita bahas prinsip perbandingan karakter dan string. 1. Membandingkan Karakter Dalam Java, karakter dibandingkan berdasarkan representasi nilai mereka sesuai dengan kode Unicode. Unicode adalah sistem pengkodean karakter yang mengadopsi sistem ASCII serta menambahkan beberapa karakter yang terdapat dalam bahasa Cina, Arab, dan sebagainya. Java menggunakan Unicode sebagai acuan pengkodean karakternya. Boolean test = 'x' < 'y'; // true karena nilai x (120) < y (121) Anda dapat melihat kode ASCII untuk melihat representasi suatu karakter dengan nilai data binernya. 2. Membandingkan dua String Dua string dibandingkan secara “leksikografi”, yakni membandingkan tiap-tiap karakter penyusun kedua string tersebut sesuai dengan posisinya masingmasing. Literal string “saya” berbeda dengan “Saya” pada karakter awalnya karena s=115 sendangkan S = 83. Karakter-karakter lainnya ('a','y','a') adalah sama. Untuk membandingkan String Java telah menyediakan method equals() dan compareTo(). a. Method Equals Bentuk : boolean equals(Objek obj) boolean equalsIgnoreCase(String str2) Kedua methode diatas akan membandingkan dua buah String sebagai dua objek yang berisi deretan karakter. Bentuk pertama akan memeriksa sesuai dengan ekivalensi karakter dengan representasi data biner. Sedangkan bentuk kedua akan membandingkan dengan mengembalikan huruf kecil dengan kapital. b. Method Compare To Bentuk : int compareTo(String str2) int compareTo(Object obj) 15 1. Bernilai 0, jika string sama dengan string argumen 2. Bernilai lebih kecil dari pada 0, jika string tersebut secara leksikal lebih kecil daripada String argumen. 3. Bernilai lebih besar dari pada 0, jika string tersebut secara leksikal lebih besar daripada string argumen. Bentuk kedua akan memiliki proses yang sama dengan pertama, bila argumen object memang merupakan suatu objek String. Bila tidak ia akan melemparkan suatu ClassCastException. 16 Praktikum VIII Kelas dan Method Tujuan : > Mempelajari dan mengerti Kelas. > Mempelajari dan mengerti Kelas dan Method Standard / Fundamen > Mempelajari dan mengerti Kelas dan Method yang Didefinisikan sendiri > Mempelajari dan mengerti Deklarasi Kelas beserta Aturan Kelas > Mempelajari dan mengerti Method Teori : Mempelajari dan mengerti Kelas Pada pemrograman terstruktur seperti Pascal atau C, programmer akan membagi program menjadi beberapa modul sesuai dengan tugasnya masing-masing untuk mengurangi kompleksitas aplikasi. Modul atau sub program itu dikenal dengan istilah procedur atau fungsi. Dalam konsep OOP, seperti Java atau C++, modul berupa kelas dan method. Kelas dan method ini dibagi menjadi dua, yaitu: 1. Kelas dan method standard / fundamen Merupakan predefined class/method, yakni kelas/method yang telah disediakan oleh Java menjadi reference library. Java telah menyediakan begitu banyak kelas standard maupun method yang dapat digunakan untuk aplikasi yang spesifik. Kumpulan dari method ini dikenal juga sebagai API (Application Programming Interface). 2. Kelas dan method yang didefinisikan sendiri Selain menggunakan kelas dan method standad, terkadang kita perlu membuat program besar menjadi beberapa kelas. Pada fase ini anda menggunakan pendekatan top down. Selanjutnya, bila mulai dari merancang kelas kemudian memperhatikan masing-masing hubungannya dengan kelas yang lain dinamakan pendekatan bottom up. Deklarasi Kelas Bentuk deklarasi kelas yang paling sederhana adalah: Class namakelas{ Class body } Bentuk deklarasi ini akan membentuk kelas dengan sifat atau biasa desebut modifier default. Namun adakalanya kelas didefinisikan dengan sifat suatu kelas/data/ method terhadap kelas/data/method yang lain. Secara umum, kelas memiliki struktur anatomi sebagai berikut: Modifier1 Class namakelas modifier2{ Class body } 17 Modifier 1 (optional) Keterangan Public Menyatakan bahwa kelas tersebut dapat juga diakses oleh kelas yang lain, baik yang masih berada dalam package yang sama maupun berbeda. Private Menyatakan bahwa kelas tersebut tidak dapat diakses sama sekali oleh kelas lain. Tanpa memandang apakah ia berasal dari paket yang sama atau bukan. Protected Membatasi akses kelas yang dilakukan oleh subkelas turunannya (dalam proses pewarisan/inheritance) dan kelas lain yang terletak dalam paket yang sama. Abstract Menyatakan bahwa kelas tersebut tidak dapat diinstansiasi langsung menjadi objek. Modifier ini hanya dipakai bila kelas tersebut terletak pada hierarki kelas tertinggi, sehingga hanya mungkin diturunkan sebagai subkelas, bukan diinstansiasi menjadi objek. Final Menyatakan bahwa kelas tersebut tidak dapat diturunkan menjadi subkelas (pewarisan/inheritance) Modifier 2 (optional) Keterangan Extends SuperClass Digunakan dalam prinsip inheritance, yaitu bila kelas tersebut merupakan subkelas dari suatu kelas super (Superclass). Inheritance adalah salah satu pilar penting dalam OOP, dimana suatu kelas dapat mewariskan seluruh data dan method yang dimilikinya kepada kelas lainnya. Kelas yang mewariskan disebut kelas super (SuperClass), sedangkan kelas yang menjadi ahli waris dinamakan subkelas (SubClass). Implements Interfaces Digunakan bila kelas tersebut mengimplementasi satu atau lebih interface. Bila terdapat lebih dari satu interface, digunakan koma diantara interface-interface tersebut. Aturan Penamaan Kelas Aturan Dasar 1. Dimulai dengan abjad atau karakter undercross ( _ ) atau tanda dollar ( $ ). Nama kelas tidak dapat dimulai dengan bilangan. Setelah karakterpertama, dapat diikuti abjad, underscore, dollar atau bilangan. 2. Tidak boleh menggunakan keyword dalam Java (public, class, boolean, dsb..) 3. Tidak boleh menggunakan operator(+,-,=) 4. Java bersifat case sensitive Aturan Konvensi 18 1. Nama Kelas hendaklah merepresentasikan apa yang akan dideklarasikan. Namun tetaplah mudah diingat dan dituliskan, bukan hanya satu abjad saja. Contoh kelas “latihan”, bukan “l”. 2. Huruf pertama dalam nama kelas hendaklah huruf kapital. 3. Bila nama kelas terdiri dari dua kata atau lebih, kedua kata itu digabungkan. Huruf pertama dari setiap kata sebaiknya huruf kapital. Contoh “SepakBola” 4. Semua huruf selain aturan butir b dan c dituliskan dalam bentuk huruf kecil. Perlu diingat aturan sebagai berikut: 1. Dalam satu file .java diperbolehkan memiliki lebih dari satu kelas. 2. Dalam satu file .java jumlah kelas yang boleh dideklarasikan sebagai public hanya satu dan nama file .java ini harus sama dengan nama kelas yang dideklarasikan sebagai public. 3. Bila dalam satu file source *.java terdapat sejumlah n kelas, maka pada saat kompilasi akan dihasilkan sebanyak n file *.class. Proses ini sama seperti bila kelas-kelas tersebut dituliskan dalam file *.java yang berbeda. Scope/Blok Scope adalah grup yang menghimpun bagian tertentu dari program dan dapat dianggap sebagai satu kesatuan modul. Scope bisa berupa kelas, blok atau method dan selalu ditandai oleh kurung kurawal buka dan tutup { }. Deklarasi Method modifier TipeNilaiKembalian namaMethod (parameter input) throws exception{ // isi method } Keterangan: Modifier yang digunakan sama dengan modifier untuk mendeklarasikan kelas. Namun implikasi penggunaanya belum tentu sama persis. Selain seperti modifier yang digunakan untuk mendeklarasikan kelas, ada dua lagi modifier untuk method yaitu native dan synchronized. native Modifier ini digunakan bila anda ingin menggunakan method (fungsi) yang masih ditulis dalam bahasa pemrograman lain, misalnya C. Dibutuhkan pengetahuan tambahan tentang Java Native Interface (JNI) untuk dapat mengimplementasikan method antar bahasa pemrograman ini. Synchronized Digunakan untuk multithreading. Tipe nilai kembalian (Return Value Type) Dilihat dari nilai kembaliannya (return Value), method memiliki dua kemungkinan, yaitu mengembalikan suatu nilai atau tidak. Bila method mengembalikan nilai, maka tipe nilai kembaliannya (return type) harus dituliskan sesuai tipe datanya, sedangkan bila tidak mengembalikan nilai, maka return value nya void. 19 Aturan Penamaan Method Aturan dasar dan anjuran konvensi sama dengan aturan dan penamaan variabel Aturan Dasar (harus diikuti) 1. Dimulai dengan abjad (a,b,c,...) atau karakter underscore ( _ ) atau tanda dollar ( $ ). Nama Method tidak dapat dimulai dengan bilangan (0,1,2,...) setelah karakter pertama, dapat diikuti kombinasi abjad. Underscore, dollar atau bilangan. 2. Tidak boleh menggunakan reserved keyword dalam java 3. Tidak boleh menggunakan operator (+,-,=) 4. Java bersifat case sensitive (membedakan huruf kecil dan kapital). Sehingga abjad “a” dan “A” diperlakukan sebagai dua karakter yang berbeda. Aturan Konvensi 1. Bila nama method hanya terdiri dari satu abajad atau satu kata, semua abjad dituliskan dalam huruf kecil. Contoh: “a”,”x”, “perkalian”,”isian” 2. Bila nama method terdiri dari dua kata atau lebih, kedua kata itu digabungkan. Huruf pertama dari kata pertama sebaiknya huruf kecil. Sedangkan huruf pertama kata kedua dan kata berikutnya sebaiknya huruf kapital. Contoh : “perkalianMatriks”, “perhitunganGaji”. Memanggil Method Sama seperti ketika mengakses variabel. Bentuk umum memanggil method adalah: NamaKelas.namaMethod(); Melewatkan Argumen ke Method ada dua cara melewatkan argumen ke method, sama seperti pada kelas 1. Melewatkan secara nilai (Pass by Value) 2. Melewatkan secara referensi (Pass by Reference) 20 Praktikum IX Package (Paket) dan Modifier Tujuan : > Mempelajari dan mengerti pengertian dan penggunaan package. > Mempelajari dan mengerti cara mengkompile dan menjalankan kelas dari suatu package > Mempelajari dan mengerti penggunaan modifier Teori : Pengertian Package Package adalah cara pengelompokan dan pengorganisasian kelas-kelas dalam suatu library. Seperti halnya paket dalam pengertian sehari-hari. Package akan sangat bermanfaat pada saat membuat program yang besar dan kompleks, yang membutuhkan banyak kelas dari library yang berbeda. Disamping itu, package berfungsi juga mengatur aksesibilitas data atau method dari suatu kelas terhadap kelas lainnya.Maksudnya adalah mengatur dapat tidaknya suatu method dari suatu kelas mengakses/memanggil data atau method dari kelas lain. Membuat Package Ada tiga langkah untuk membuat package 1. Mendeklarasikan dan memberi nama package Dibutuhkan deklarasi package yang harus dituliskan pada bagian awal dari source code kelas tersebut sebelum deklarasi import untuk menyatakan bahwa suatu kelas merupakan anggota dari suatu package. 2. Membuat struktur direktori yang sesuai dengan nama package Langkah selanjutnya yaitu menempatkan kelas-kelas yang hakikatnya adalah file kedalam folder atau direktori package yang sama. 3. Mengkompile kelas-kelas sesuai dengan packagenya masing-masing. Selesai membuat dan menyimpan dalam folder package selanjutnya masingmasing kelas dicompile menjadi file byte code .class. Pada saat menjalankan interpreter, diharuskan mengetikkan nama package dan kelas secara lengkap. Memanggil Kelas dari Suatu Package Secara umum, bila ingin menggunakan kelas yang dideklarasikan dan dikompile ke suatu package, maka perlu untuk membubuhkan statement import pada kelas pemanggil. Fenomena yang berkaitan dengan letak file *.java dalam folder bila ditinjau dari letaknya dalam folder, pemanggilan kelas suatu package dapat dibagi menjadi dua yaitu: 1. Kedua kelas tersebut berada pada direktori yang sama Misalkan ada dua kelas yaitu A dan B dalam sebuah direktory package yang sama. Bila kelas B telah dideklarasikan dan dikopile kedalam package maka A harus mencantumkan deklarasi import dari package tersebut. Namun bila kelas A juga dideklarasikan dan dikompile pada package karena terletak pada direktori yang sama maka kelas A boleh tidak mencantumkan statemen import kelas B. 2. Kedua kelas berada dalam direktori yang berbeda 21 Pada kasus ini sudah jelas bahwa A sebagai kelas pemanggil harus mencantumkan deklarasi import dari package kelas B. Bentuk umum import: import namaPackage.namaKelas; Notasi asterik ( * ) Ada kalanya programmer ingin mengimport semua kelas yang terdapat dalam suatu package. Java telah menyediakan notasi asterik ( * ) yang ditambahkan pada akhir deklarasi import untuk melakukan import semua kelas dalam package. Betuk umum import namaPackage.*; contoh: import java.awt.*; import javax.swing.*; Modifier Modifier adalah keyword yang digunakan sebagai pelengkap suatu unsur (kelas/method/variabel) dan berfungsi menjelaskan bagaimana hubungan diantara unsur-unsur tersebut. Misalnya bagaimana hubungan antar method dan variabel dari suatu kelas terhadap method dan variabel dari kelas yang lain, dan sebagainya. Karena bersifat melengkapi, maka modifier ini bersifat opsional. Berikut ini jenis modifier yang sering digunakan dalam Java. 1. Public, private, protected Modifier yang digunakan untuk mengatur aksesibilitas suatu kelas/method/variabel. 2. Static Dipakai untuk menyatakan bahwa suatu method dan variabel hanya dimiliki oleh kelas yang bersangkutan dan tidak dapat diserahkan kepada objek pada saat instansiasi. Maksudnya, meskipun dapat menciptakan objek dari kelas tersebut, namun method dan variabel tidak dapat diakses melalui objek tersebut. 3. Final Digunakan bila suatu unsur (kelas/method/variabel) memiliki nilai yang tetap (tidak dapat diubah) 4. Abstract Digunakan pada kelas atau method untuk menyatakan bahwa unsur tersebut tidak dapat secara langsung diinstansiasi menjadi objek. 5. Synchronize, transient dan volatile Digunakan pada permograman yang mempertimbangkan faktor thread. 22 Praktikum X Tiga Pilar OOP Inheritance, Encapsutaltion dan Polymorphism Tujuan : > Mempelajari dan mengerti Inheritance (Pewarisan) > Mempelajari dan mengerti Encapsulation (Enkapsulasi) > Mempelajari dan mengerti Polymorphism Teori : Inheritance Inheritance adalah proses pewarisan seluruh data dan method yang dimiliki oleh suatu kelas kepada kelas lainnya. Kelas yang mewariskan disebut kelas Super, Kelas yang diwarisi disebut Subkelas. Sedangkan Overriding adalah kemampuan suatu subkelas untuk memodifikasi data dan method dari kelas induknya. Overriding disebut juga redefinisi data dan method. Ada dua alasan mengapa melakukan overriding, yaitu: 1. Mendefinisikan kembali method kelas induk secara total Perubahan dilakukan secara menyeluruh, baik jumlah maupun tipe parameter dari argumen inputnya, tipe nilai kembaliannya, maupun behaviour pemrosesan datanya. 2. Menambahkan behaviour tertentu pada method kelas induknya. Perubahan hanya dilakukan untuk menambahkan behaviour yang khusus dimiliki hanya oleh kelas anak tersebut. Catatan : programmer harus memperhatikan bagaimana tingkat aksesibilitas data dan method tersebut (public, private, protected, atau default). Keyword Extends digunakan keyword extends untuk mengaplikasikan pewariasan (inheritance). Keyword ini menyatakan bahwa suatu kelas merupakan perluasan dari kelas lain yang dijadikan basis (kelas induk). Keyword Super digunakan oleh suatu kelas anak untuk memanggil konstruktor atau method yang dimiliki oleh kelas induk yang menjadi basisnya. Cara memanggil konstruktor kelas super yaitu dengan : super(); super(parameter); Enkapsulasi Enkapsulasi adalahcara membungkus data dan method yang menyusun kelas dan menyembunyikanya dari dunia luar. Termasuk disini adalah menentukan tingkat aksesibilitas dari masing-masing data dan method serta menyembunyikan detail implementasinya dari “dunia luar”. Dalam pemrograman, menyembunyikan detail ini dikenal dengan istilah Information Hiding. Beberapa keuntungan penerapan prinsip enkapsulasi : 1. Bersifat independen 23 Suatu modul yang terenkapsulasi dengan baik akan bersifat independen dari modul lainnya sehingga dapat digunakan pada bagian manapun dari program. Ia tidak akan terikat pada bagian tertentu dari program. 2. Bersifat transparan Bila modul dimodifikasi, maka perubahan tersebut juga dirasakan oleh program pengguna modul tersebut. 3. Menghindari efek yang diluar perencanaan Modul yang terenkapsulasi dengan baik hanya akan berinteraksi dengan bagian program lainnya melalui variabel-variabel input/output yang telah didefinisikan sebelumnya. Dengan demikian akan mereduksi kemungkinan adanya hasil imbas pemrosesan yang diluar perencanaan semula. Polymorphism Makna polymorphism adalah sesuatu yang memiliki banyak bentuk. Sehingga dapat diartikan sebagai modul yang memiliki nama sama, namun memiliki behaviour (tingkah laku) yang berbeda sehingga listing code implementasinya berbeda. 24 Praktikum XI Kelas Inner, Kelas Abstrak dan Interface Tujuan : > Mempelajari dan mengerti Kelas Inner > Mempelajari dan mengerti Kelas Abstrak > Mempelajari dan mengerti Kelas Interface Teori : Kelas Inner (Inner Class) Kelas inner adalah kelas yang disisipkan di dalam kelas yang lain. Fungsi kelas sisipan ini adalah mendukung suatu proses yang akan dijalankan oleh kelas utamanya. Beberapa ketentuan Inner Class adalah sebagai berikut: 1. Bila sebuah kelas mengandung suatu inner kelas, maka pada saat kompilasi akan dihasilkan file *.class untuk keduanya (kelas utama dan kelas innernya). Untuk kelas inner akan memiliki nama namakelasterluar$namakelasinner.class. Bila kelas inner tersebut tidak diberi nama maka format filenya menjadi namakelasterluar$#.class. Simbol # menyatakan nomor urutan kelas inner. 2. Inner class yang dideklarasikan dengan nama dapat dibubuhi dengan modifier public, private dan protected 3. Gunakan bentuk Namakelasterluar.this untuk mengakses refernsi this dari kelas terluar. 4. Dalam proses pembentukan objek, kelas terluar bertanggung jawab untuk menciptakan objek dari kelas innernya. Prosesnya sebagai berikut Kelas Terluar a = new KelasTerluar(); Kelas Terluar.KelasInner b = a.new Kelas Inner(); 5. Inner kelas dapat dibubuhi modifier static. Dengan modifier static maka anda akan dapat membuat objek dari kelas inner tersebut tanpa harus melalui kelas terluarnya. Sebagai konsekuensi, maka kelas inner tidak dapat mengakses variabel maupun method nonstatic dari kelas terluarnya. Kelas Abstrak Adalah kelas yang terletak pada posisi tertinggi dari hierarki kelas. Kelas ini digunakan sebagai basis bagi penurunan kelas-kelas lainnya, sehingga tidak dapat diinstansiasi secara langsung menjadi objek. Bentuk umum Modifier tambahan abstract class Namakelasabstract{ Variabel umum dan deskripsi method tanpa implementasi. } Kelas Interface Adalah kumpulan method yang hanya memuat deklarasi struktur method, tanpa detail implementasinya. Keterbatasan Inheritance Inheritance adalah proses pewarisan data dan method dari suatu kelas induk (kelas super) kepada kelas anaknya (subkelas). Sebuah subkelas atau kelas turunan hanya boleh diturunkan dari satu kelas induk, tidak boleh lebih. 25 Interface merupakan solusi atas prinsip pewarisan lebih dari satu (multiple inheritance). Dengan interface, suatu objek dapat memiliki behaviour yang berasal dari beberapa referansi. Interface = kelas abstract? Ada kemiripan, namun secara umum ada perbedaan dengan kelas abstract Perbedaan Komponen penyusun Kelas Abstrak dan Interface antara lain: 1. Tipe data/variabel Kelas Abstrak semua tipe data Interface hanya boleh berupa konstanta 2. Method Kelas Abstrak bisa berupa signaturnya saja atau berupa detail implementasi method Interface hanya berupa signature, programmer harus mendefinisikan dan membuat detail implementasi dari method. Jadi, method yang terdapat dalam interface adalah method abstrak 3. Sintak Method Kelas Abstrak Semua method yang dideklarasikan dalam kelas abstrak harus dibubuhi modifier abstract Interface Tidak perlu membubuhkan modifier abstract pada semua method di dalam kelas Perbedaan secara umum Kelas Abstrak dan Interface antara lain: 1. Definisi Kelas Pemodelan dari Objek Interface Kumpulan method yang hanya diterapkan pada aplikasi tertentu 2. Kandungan Informasi Kelas Mendefinisikan variabel dan method secara detail dan konkret Interface hanya mendefinisikan signature dari method, selanjutnya programmerlah yang menentukan detail method 3. Instansiasi Kelas Bisa diinstan menjadi objek Interface tidak dapat diinstan menjadi objek 26 Praktikum XII Pemrograman GUI Tujuan : > Mempelajari dan Mengerti AWT (Abstract Windowing Toolkit). > Mempelajari dan Mengerti Layout Management (Pengaturan letak komponen GUI) > Mempelajari dan Mengerti Java Swing dan Event Handling Teori : AWT (Abstract Windowing Toolkit) AWT terdapat dalam package java.awt. Package ini berisi komponen-komponen GUI yang bersifat platform oriented atau tergantung pada platform sistem operasi. Berbeda dengan packge javax.swing yang bersifat lightweight, yaitu dapat diaplikasikan untuk semua platform multiplatform. Kedua platform ini mempunyai mekanisme event handling yang sama. Beberapa fasilitas yang disediakan oleh package java.awt antara lain: 1. Pengaturan tata letak (layout management) komponen dalam satu kontainer 2. Mendukung event handling, yaitu mekanisme pendeteksian event dan penentuan respons yang akan diberikan ketika pengguna (user) mengakses komponen tersebut. 3. Manipulasi grafis dari komponen, seperti font, warna, icon dan sebagainya. Layout Management (Pengaturan letak komponen GUI) Ketika merancang GUI, selain menentukan komponen apa yang akan digunakan. Kita perlu merancang tata letak komponen dalam kontainer dikenal sebagai Layout Management. Layout Manager Java menyediakan lima kelas Manager untuk mendukung perancangan tata letak GUI. Komponen Manager Deskripsi FlowLayout Penentuan tata letak komponen didasarkan pada baris mulai dari kiri ke kanan dan bari atas ke bawah. Flowlayout digunakan untuk default layout manager untuk kelas Panel dan Applet GridLayout Penentuan tata letak komponen didasarkan pada persegi panjang grid BorderLayout Didasarkan pada lima posisi, yaitu east, west, nort, south dan center. Merupakan default layout manager untuk window, frame, dan dialog. CardLayout Komponen diperlakukan mirip tumpukan kartu, yang visible hanyalah komponen yang terletak dibagian atas GridBagLayout Menggunakan komponen yang sama dengan GridLayout, namun suatu komponen dapat menempati multiple cell 27 Langkah merancang layout GUI, yaitu: 1. Membuat Objek Kontainer 2. Meregistrasi Layout Manager ke objek kontainer pada langkah 1. registrasi dilakukan dengan memanfaatkan method setLayout (objek) pada kontainer 3. Menambahkan komponen kepada objek kontainer 4. Menambahkan objek kontainer itu ke induk kontainer (penyusunan hierarki) Java Swing dan Event Handling Selain package java.awt, Java juga memiliki package javax.swing untuk membuat komponen GUI. Swing lebih portable daripada AWT karena beberapa komponennya bersifat multiplatform sehingga disebut dengan lightweight. Komponen Swing dibagi menjadi 1. Root container 2. Label dan Button 3. Komponen Lightweight 4. Komponen Text 5. Komponen space-saving 6. Komponen dengan Model Kompleks 7. Komponen yang tersusun dari komponen lain. Event Linstener dan Event Handler Event adalah peristiwa yang distimulasi (di trigger) oleh user terhadap komponenkomponen GUI. Analoginya seperti bila anda mengetik pada JtextField maka ada event tercipta event ini akan ditangkap oleh event listener. Karena masing -masing komponen sudah diberi ID dan diberikan event listener maka java akan dapat mengenali komponen mana yang menstimulai event. Selanjutnya event handler akan memproses bila terjadi suatu event. 28