OOP Java Advanced Romi Satria Wahono romiromisatriawahono net

  • Slides: 105
Download presentation
OOP: Java Advanced Romi Satria Wahono romi@romisatriawahono. net http: //romisatriawahono. net 0815 -8622 -0090

OOP: Java Advanced Romi Satria Wahono romi@romisatriawahono. net http: //romisatriawahono. net 0815 -8622 -0090

Romi Satria Wahono § SD Sompok Semarang (1987) § SMPN 8 Semarang (1990) §

Romi Satria Wahono § SD Sompok Semarang (1987) § SMPN 8 Semarang (1990) § SMA Taruna Nusantara, Magelang (1993) § S 1, S 2 dan S 3 (on-leave) Department of Computer Sciences Saitama University, Japan (1994 -2004) § Research Interests: Software Engineering, Intelligent Systems § Founder dan Koordinator Ilmu. Komputer. Com § Peneliti LIPI (2004 -2009) § Founder dan CEO PT Brainmatics Cipta Informatika

Materi 1. OOP Concepts: Konsep dan Paradigma Object-Oriented 2. Java Fundamentals: Memahami Sintaks dan

Materi 1. OOP Concepts: Konsep dan Paradigma Object-Oriented 2. Java Fundamentals: Memahami Sintaks dan Grammar Bahasa Java 3. Java GUI: Swing, GUI Component, Event Handling, Studi Kasus Aplikasi GUI 4. Java Advanced: Eksepsi, Thread, Java API, Collection, Algorithms 5. Java Database: Koneksi ke Database, Studi Kasus Aplikasi Database

Java Advanced 1. Penanganan Eksepsi 2. Thread dan Multithreading 3. I/O Stream 4. Operasi

Java Advanced 1. Penanganan Eksepsi 2. Thread dan Multithreading 3. I/O Stream 4. Operasi Berkas (File) 5. Struktur Data dengan Collection 6. Sorting and Searching Algorithms

Penanganan Eksepsi

Penanganan Eksepsi

Eksepsi § Eksepsi adalah kondisi abnormal yang terjadi pada saat suatu perintah dieksekusi §

Eksepsi § Eksepsi adalah kondisi abnormal yang terjadi pada saat suatu perintah dieksekusi § Ketika eksepsi terjadi pada suatu method, ada dua pilihan yang dapat dilakukan: 1. Menangani sendiri eksepsi 2. Meneruskannya ke luar (throw) § Keyword eksepsi: try, catch, finally, throws

Bentuk Penanganan Eksepsi try{ // code yg mengakibatkan eksepsi }catch(Tipe. Eksepsi 1 objek. Eksepsi){

Bentuk Penanganan Eksepsi try{ // code yg mengakibatkan eksepsi }catch(Tipe. Eksepsi 1 objek. Eksepsi){ // code utk menangani eksepsi yg cocok dg Tipe. Eksepsi 1 }. . . catch(Tipeeksepsi. N objek. Eksepsi){ // code utk menangani eksepsi yg cocok dg Tipe. Eksepsi. N }finally{ //code yg pasti dieksekusi setelah blok try-catch dieksekusi }

Hirarki Class Eksepsi

Hirarki Class Eksepsi

3 Tipe Eksepsi 1. Eksepsi yang Tidak Dicek 2. Error 3. Eksepsi yang Dicek

3 Tipe Eksepsi 1. Eksepsi yang Tidak Dicek 2. Error 3. Eksepsi yang Dicek

Tipe Eksepsi Yang Tidak Dicek § Semua eksepsi bertipe Runtime. Exception dan turunannya tidak

Tipe Eksepsi Yang Tidak Dicek § Semua eksepsi bertipe Runtime. Exception dan turunannya tidak harus secara eksplisit ditangani dalam program. Contohnya: Array. Index. Outof. Bound. Exception, Aritmetic. Exception, dsb § Program dengan eksepsi ini tetap dapat dikompilasi, meskipun ketika dijalankan akan mengeluarkan pesan eksepsi dan eksekusi berakhir § Supaya eksekusi tidak berakhir, bisa menggunakan blok try-catch

Demo. Eksepsi. java class Demo. Eksepsi{ public static void main(String[] args){ int[] arr =

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

Tipe Eksepsi Error § Tipe eksepsi yang seharusnya tidak ditangani dengan blok try-catch karena

Tipe Eksepsi Error § Tipe eksepsi yang seharusnya tidak ditangani dengan blok try-catch karena berhubungan dengan Java runtime system § Error merupakan eksepsi yang sangat kritis dan tidak perlu ditangani oleh program kita

Tipe Eksepsi Yang Dicek § Semua eksepsi yang bukan turunan class Runtime. Exception adalah

Tipe Eksepsi Yang Dicek § Semua eksepsi yang bukan turunan class Runtime. Exception adalah eksepsi yang harus ditangani dengan blok try-catch § Program tidak bisa dikompilasi apabila eksepsi tidak ditangani

Demo. Eksepsi 2. java class Demo. Eksepsi 2{ Public static void main(String[] args){ File

Demo. Eksepsi 2. java class Demo. Eksepsi 2{ Public static void main(String[] args){ File my. File = new File(“test. txt”); my. File. create. New. File(); } }

Demo. Eksepsi 3. java class Demo. Eksepsi 3{ public static void main(String[] args){ try{

Demo. Eksepsi 3. java class Demo. Eksepsi 3{ public static void main(String[] args){ try{ File my. File = new File("test. txt"); my. File. create. New. File(); System. out. println("File berhasil dibuat"); }catch(IOException e){ System. out. println(“File gagal dibuat"); } } }

Mengapa Eksepsi Perlu Ditangani § Kita ingin program kita bisa memperbaiki kesalahan akibat eksepsi

Mengapa Eksepsi Perlu Ditangani § Kita ingin program kita bisa memperbaiki kesalahan akibat eksepsi dan terus melanjutkan eksekusi seolah-olah tidak pernah terjadi eksepsi § Pengguna program(software) umumnya tidak peduli (mengerti) bagaimana sebuah program dieksekusi sehingga akhirnya muncul pesan kesalahan. Kita ingin pesan kesalahan tadi dipahami oleh pengguna § Kita ingin program tetap berjalan dan bukannya dihentikan pada saat eksepsi terjadi

Catch Bertingkat § Code yang ada dalam blok try bisa saja mengakibatkan lebih dari

Catch Bertingkat § Code yang ada dalam blok try bisa saja mengakibatkan lebih dari satu jenis eksepsi § Kita dapat menuliskan lebih dari satu blok catch untuk setiap blok try § Blok catch dengan tipe data subclass harus ditulis terlebih dahulu daripada tipe data superclass-nya § Exception adalah superclass dari Arithmetic. Exception dan Array. Index. Out. Of. Bounds. Exception sehingga harus ditulis paling akhir

Demo. Eksepsi 4. java class Demo. Eksepsi 4{ public static void main(String[] args){ try{

Demo. Eksepsi 4. java class Demo. Eksepsi 4{ public static void main(String[] args){ try{ int x = args. length; int y = 100/x; int[] arr = {0, 1, 2, 3}; y = arr[x]; System. out. println("Jumlah argument: " + y); System. out. println("Tidak terjadi eksepsi"); }catch(Arithmetic. Exception e){ System. out. println("Terjadi eksepsi karena pembagian dengan nol“ + e. get. Message()); }catch(Array. Index. Out. Of. Bounds. Exception e){ System. out. println("Terjadi eksepsi karena indeks di luar kapasitas"); }catch(Throwable e){ System. out. println("Terjadi eksepsi yg tidak diketahui"); } System. out. println("Setelah blok try catch"); } }

Demo. Eksepsi 5. java class Demo. Eksepsi 5{ public static void main(String[] args){ double

Demo. Eksepsi 5. java class Demo. Eksepsi 5{ public static void main(String[] args){ double BILANGAN = 100. 0; System. out. println("Sebelum pembagian"); for(int i=5; i>=0; i--){ try{ System. out. println(BILANGAN + "/" + i + " = "); System. out. println(BILANGAN/i); }finally{ System. out. println("Bagian finally dijalankan"); } } System. out. println("Program selesai"); } }

Melontarkan Eksepsi (throw) § Keyword throw digunakan untuk melontarkan eksepsi § Bentuk: throw variabel.

Melontarkan Eksepsi (throw) § Keyword throw digunakan untuk melontarkan eksepsi § Bentuk: throw variabel. Objek;

Demo. Throw. java class Demo. Throw{ public static void main(String[] args){ Runtime. Exception r

Demo. Throw. java class Demo. Throw{ public static void main(String[] args){ Runtime. Exception r = new Runtime. Exception("Eksepsi Runtime. Exception"); System. out. println("Sebelum Throw"); throw(r); } }

throws untuk Eksepsi Method § Keyword throws digunakan untuk memberitahu bahwa suatu method ada

throws untuk Eksepsi Method § Keyword throws digunakan untuk memberitahu bahwa suatu method ada kemungkinan menghasilkan suatu eksepsi § Bentuk: public tipe nama. Method() throws Jenis. Eksepsi{. . . } atau public tipe nama. Method() throws Jenis. Eksepsi 1, Jenis. Eksepsi 2, Jenis. Eksepsi 3. . . {. . . }

Demo. Throws. java class Suatu. Kelas{ class Demo. Throws{ public static void main(String[] args){

Demo. Throws. java class Suatu. Kelas{ class Demo. Throws{ public static void main(String[] args){ Suatu. Kelas obj = new Suatu. Kelas(); // Method tanpa throws obj. metode. A(); obj. metode. B(); public void metode. A(){ System. out. println(“Metode. A”); } } // Method dengan throws public void metode. B() throws IOException{ System. out. println(“Metode. B”); } } }

Demo. Throws 2. java class Suatu. Kelas{ public void metode. A(){ System. out. println("Metode.

Demo. Throws 2. java class Suatu. Kelas{ public void metode. A(){ System. out. println("Metode. A"); } public void metode. B() throws IOException{ System. out. println("Metode. B"); } } public class Demo. Throws{ public static void main(String[] args){ Suatu. Kelas obj = new Suatu. Kelas(); obj. metode. A(); obj. metode. B(); } }

Thread dan Multithreading

Thread dan Multithreading

Konsep Thread § Thread: sekumpulan instruksi (proses) yang dieksekusi secara independen § Multithreading: suatu

Konsep Thread § Thread: sekumpulan instruksi (proses) yang dieksekusi secara independen § Multithreading: suatu kemampuan yang memungkinkan beberapa kumpulan instruksi (proses) dijalankan secara bersamaan (time slicing) dalam sebuah program § Multithreading bermanfaat untuk membuat proses yang interaktif, misalnya pada program permainan (game). Program tetap dapat menggerakkan beberapa objek sambil memberi kesempatan pengguna melakukan respon melalui mouse atau keyboard

Penggunaan Thread 1. Membuat class yang mengimplementasi interface Runnable dan method run() class Nama.

Penggunaan Thread 1. Membuat class yang mengimplementasi interface Runnable dan method run() class Nama. Class implements Runnable{ public void run(){. . . } } 2. Membuat class yang merupakan turunan class Thread dan meng-override method run() class Nama. Class extends Thread { public void run(){. . . } }

Kiat Memilih Penggunaan Thread § Jika perlu meng-override beberapa method milik class Thread gunakan

Kiat Memilih Penggunaan Thread § Jika perlu meng-override beberapa method milik class Thread gunakan turunan class Thread § Teknik mengimplementasi interface Runnable harus digunakan, jika kita membuat class yang merupakan turunan dari class lain. Karena java tidak mengenal multiple inheritance, teknik membuat turunan class Thread tidak bisa digunakan

Thread. Beraksi 1. java class Mobil implements Runnable{ String nama; public Mobil(String id){ nama

Thread. Beraksi 1. java class Mobil implements Runnable{ String nama; public Mobil(String id){ nama = id; } public void run(){ for(int i=0; i<5; i++){ try{ Thread. current. Thread(). sleep(1000); }catch(Interrupted. Exception ie){ System. out. println("Terinterupsi"); } System. out. println("Thread" + nama + ": Posisi " +i); }} } public class Thread. Beraksi 1{ public static void main(String[] args){ Thread m 1 = new Thread(new Mobil("M-1")); Thread m 2 = new Thread(new Mobil("M-2")); m 1. start(); m 2. start(); }

Thread. Beraksi 2. java class Mobil extends Thread{ public Mobil(String id){ super(id); } public

Thread. Beraksi 2. java class Mobil extends Thread{ public Mobil(String id){ super(id); } public void run(){ String nama = get. Name(); for(int i=0; i<5; i++){ try{ sleep(1000); }catch(Interrupted. Exception ie){ System. out. println("Terinterupsi"); } System. out. println("Thread" + nama + ": Posisi " +i); }} } public class Thread. Beraksi 2{ public static void main(String[] args){ Mobil m 1 = new Mobil("M-1"); Mobil m 2 = new Mobil("M-2"); m 1. start(); m 2. start(); }

Method Class Thread Method Deskripsi static Thread current. Thread() Cek di Java API String

Method Class Thread Method Deskripsi static Thread current. Thread() Cek di Java API String get. Name() int get. Priority() Boolean is. Alive() void join(long millis) void run() String set. Name() static void sleep(longmillis, int nanos) void start()

Method is. Alive() § Method is. Alive() digunakan untuk mengetahui apakah suatu thread masih

Method is. Alive() § Method is. Alive() digunakan untuk mengetahui apakah suatu thread masih hidup atau sudah mati § Method is. Alive() memberikan nilai balik true apabila thread masih hidup dan false apabila sudah mati (return value = boolean)

Thread. Beraksi 3. java Tambahkan code di bawah pada method main pada class Thread.

Thread. Beraksi 3. java Tambahkan code di bawah pada method main pada class Thread. Beraksi 2, ubah class menjadi Thread. Beraksi 3 boolean m 1 Berakhir = false; boolean m 2 Berakhir = false; do{ if(!m 1 Berakhir && !m 1. is. Alive()){ m 1 Berakhir = true; System. out. println(“Thread m 1 berakhir”); } if(!m 2 Berakhir && !m 2. is. Alive()){ m 2 Berakhir = true; System. out. println(“Thread m 2 berakhir”); } } while (!m 1 Berakhir || !m 2 Berakhir);

Sinkronisasi § Pada berapa kondisi, proses secara bersamaan terkadang tidak memungkinkan § Contoh: proses

Sinkronisasi § Pada berapa kondisi, proses secara bersamaan terkadang tidak memungkinkan § Contoh: proses I/O stream khususnya pada proses membaca dan menulis suatu data atau file § Proses thread pembacaan atau penulisan data menjadi tidak benar karena seharusnya data dan file tersebut berubah-ubah (sedang dibuka dan ditulis oleh thread lain) § Untuk kondisi diatas perlu dilakukan proses sinkronisasi dengan menggunakan keyword synchronized

Cara Penggunaan Synchronized 1. Sinkronisasi pada method: mendeklarasikan suatu method dengan menggunakan keyword synchronized

Cara Penggunaan Synchronized 1. Sinkronisasi pada method: mendeklarasikan suatu method dengan menggunakan keyword synchronized 2. Sinkronisasi pada objek: menambahkan blok di bawah pada pemanggilan objek synchronized (objek){. . . }

Sinkronisasi pada Method (Thread. Beraksi 4. java) 1. Pada Thread. Beraksi 2. java, ubah

Sinkronisasi pada Method (Thread. Beraksi 4. java) 1. Pada Thread. Beraksi 2. java, ubah run() pada class Mobil: public void run(){ String nama = get. Name(); Sinkronisasi. Keluaran. info(nama); } 2. Buat class Sinkronisasi. Keluaran dengan code: class Sinkronisasi. Keluaran{ public static synchronized void info(String nama){ for(int i=0; i<5; i++){ try{ Thread. sleep(1000); }catch(Interrupted. Exception ie){ System. out. println("Terinterupsi"); } System. out. println("Thread" + nama + ": Posisi " +i); }}}

Sinkronisasi pada method (Thread. Beraksi 5. java) Pada Thread. Beraksi 4. java, ubah method

Sinkronisasi pada method (Thread. Beraksi 5. java) Pada Thread. Beraksi 4. java, ubah method run() pada class Mobil: public void run(){ synchronized(this){ String nama = get. Name(); Sinkronisasi. Keluaran. info(nama); } }

Prioritas Thread § Method set. Priority(int level) dapat dipanggil untuk menentukan prioritas dari thread

Prioritas Thread § Method set. Priority(int level) dapat dipanggil untuk menentukan prioritas dari thread § Nilai level bisa berupa bilangan bulat dari 1 -10 § Prioritas normal memiliki nilai level 5 § Perlu dicatat bahwa tidak semua sistem operasi mendukung operasi ini, sehingga kadang pemanggilan method ini tidak memberikan efek apa-apa

Thread. Beraksi 6. java class Mobil extends Thread{ public Mobil(String id){ super(id); } public

Thread. Beraksi 6. java class Mobil extends Thread{ public Mobil(String id){ super(id); } public void run(){ String nama = get. Name(); for(int i=0; i<5; i++){ System. out. println(“Thread” + nama + “: Posisi “ +i); }}} public class Thread. Beraksi 6{ public static void main(String[] args){ Mobil m 1 = new Mobil(“M-1”)); Mobil m 2 = new Mobil(“M-2”)); m 2. set. Priority(8); m 1. start(); m 2. start(); }}

I/O Stream

I/O Stream

Apa Itu I/O Stream § Stream adalah proses membaca data dari suatu sumber (input)

Apa Itu I/O Stream § Stream adalah proses membaca data dari suatu sumber (input) atau mengirimkan data ke suatu tujuan (output) § System. out. println() adalah contoh stream, yang berfungsi menampilkan data (informasi) ke layar § Variabel standard stream: 1. System. in (default: keyboard) 2. System. out (default: layar) 3. System. err (default: console)

Konsep I/O Stream (Input)

Konsep I/O Stream (Input)

Konsep I/O Stream (Output)

Konsep I/O Stream (Output)

Jenis I/O Stream 1. Byte Stream • Untuk menulis atau membaca data biner •

Jenis I/O Stream 1. Byte Stream • Untuk menulis atau membaca data biner • Input. Stream dan Output. Stream adalah dua class abstrak tertinggi dari Byte Stream 2. Character Stream • Untuk menulis dan membaca data karakter (unicode) • Reader dan Writer adalah dua class abstrak tertinggi dari Character Stream

1. Byte Stream

1. Byte Stream

Class Turunan Byte Stream Class Buffered. Input. Stream Buffered. Ouput. Stream Byte. Array. Input.

Class Turunan Byte Stream Class Buffered. Input. Stream Buffered. Ouput. Stream Byte. Array. Input. Stream Byte. Array. Ouput. Stream Data. Input. Stream Data. Output. Stream File. Input. Stream File. Output. Stream Print. Stream Deskripsi

Method Class Input. Stream Method int available() void close() void mark(int read. Limit) booleanmark.

Method Class Input. Stream Method int available() void close() void mark(int read. Limit) booleanmark. Supported() int read(byte[] b) int read(byte[] b, int off, int len) void reset() long skip(long n) Deskripsi

Membaca Input dari Console class Input. Stream. Beraksi{ public static void main(String[] args) throws

Membaca Input dari Console class Input. Stream. Beraksi{ public static void main(String[] args) throws IOException{ byte[ ] data = new byte[10]; System. out. println("Ketik 10 buah karakter: "); System. in. read(data); System. out. println("Karakter yang anda ketik adalah: "); for(int i=0; i<data. length; i++){ System. out. print((char) data[i]); } } }

Membaca Input dari File import java. io. *; class File. Input. Stream. Beraksi{ public

Membaca Input dari File import java. io. *; class File. Input. Stream. Beraksi{ public static void main(String[] args) { if (args. length==0) { System. out. println("Masukkan nama file sebagai parameter!"); } byte data; File. Input. Stream fin=null; try{ fin = new File. Input. Stream(args[0]); do{ data = byte)fin. read(); System. out. print((char)data); }while(data!=-1); }catch(File. Not. Found. Exception e){ System. out. println("File: " + args[0] + "tidak ditemukan. "); }catch(IOException e){ System. out. println("Ekspresi tidak diketahui : " + e) ; }finally{ if(fin!=null){ try{ fin. close(); }catch(IOException err){ System. out. println("Ekspresi tidak diketahui : " + err); } }}}}

Method Class Output. Stream Method void close() void flush() void write(byte[] b, int off,

Method Class Output. Stream Method void close() void flush() void write(byte[] b, int off, int len) abstract void write(int b) Deskripsi

Menulis Output ke Console class Output. Stream. Beraksi{ public static void main(String[] args) throws

Menulis Output ke Console class Output. Stream. Beraksi{ public static void main(String[] args) throws IOException{ byte[] data = {'a', 'b', 'c', 'd', 'e', 'f', 'g'}; System. out. write(data, 3, 4); System. out. write('n'); System. out. write(data); } }

Menulis Output ke File class File. Output. Stream. Beraksi{ public static void main (String[]

Menulis Output ke File class File. Output. Stream. Beraksi{ public static void main (String[] args) { if (args. length==0) {System. out. println("Error: tulis nama file!"); } byte data; Output. Stream fout=null; try{ fout = new File. Output. Stream(args[0]); System. out. println ("Ketik data yang ingin Anda tulis ke file. Q untuk berhent"); data = (byte)System. in. read(); while(data!=(byte)'Q') { fout. write(data); data = (byte)System. in. read(); } }catch(File. Not. Found. Exception e) { System. out. println("file : " + args[0] + " tidak dapat dibuka atau dibuat. "); }catch(IOException e) { System. out. println("Ekspresi tidak diketahui : " + e); }finally { if(fout!=null) { try{ fout. close(); }catch(IOException err) { System. out. println("Ekspresi tidak diketahui : " + err);

Program Copy Isi File (Byte) public class Copy. Bytes { public static void main(String[]

Program Copy Isi File (Byte) public class Copy. Bytes { public static void main(String[] args) throws IOException { File. Input. Stream in = null; File. Output. Stream out = null; try { in = new File. Input. Stream("filesumber. txt"); out = new File. Output. Stream("filetujuan. txt"); int c; while ((c = in. read()) != -1) { out. write(c); } } finally { if (in != null) { in. close(); } if (out != null) { out. close(); } }}}

Proses dalam Copy. Bytes. java

Proses dalam Copy. Bytes. java

2. Character Stream

2. Character Stream

Class Turunan Character Stream Class Buffered. Reader Buffered. Write Char. Array. Reader Char. Array.

Class Turunan Character Stream Class Buffered. Reader Buffered. Write Char. Array. Reader Char. Array. Writer Input. Stream. Reader Output. Stream. Writer File. Reader File. Writer Print. Writer String. Reader String. Writer

Method Class Reader Method abstract void close() void mark(int read. Aheadlimit boolean mark. Supported()

Method Class Reader Method abstract void close() void mark(int read. Aheadlimit boolean mark. Supported() int read(char[] cbuf) abstract int read(char[] cbuf, int off, int len) void reset() long skip(long n) Deskripsi

Membaca Input dari Console (Karakter) class Char. Reader. Beraksi{ public static void main(String[] args)

Membaca Input dari Console (Karakter) class Char. Reader. Beraksi{ public static void main(String[] args) throws IOException{ char data; String str = ""; Buffered. Reader br = new Buffered. Reader(new Input. Stream. Reader(System. in)); System. out. println("Ketik sejumlah karakter, akhiri dg Q"); data =(char) br. read(); while(data!='Q'){ str += data; data = (char) br. read(); } System. out. println("Karakter yang anda ketik: " + str); } }

Membaca Input dari Console (Baris) -1 class Line. Reader. Beraksi{ public static void main(String[]

Membaca Input dari Console (Baris) -1 class Line. Reader. Beraksi{ public static void main(String[] args) throws IOException{ String hasil = ""; String str; Buffered. Reader br = new Buffered. Reader(new Input. Stream. Reader(System. in)); System. out. println("Ketik sejumlah string dan akhiri dengan KELUAR"); str = br. read. Line(); while(!str. equals("KELUAR")){ hasil += str + 'n'; str = br. read. Line(); } System. out. println(); System. out. println("String yang anda ketik: " + hasil); } }

Method Class Writer Method abstract void close() abstract void flush() void write(char[] cbuf, int

Method Class Writer Method abstract void close() abstract void flush() void write(char[] cbuf, int off, int len) void write(int c) void write(String str, int off, int len) Deskripsi

Menulis Output ke Console import java. io. *; class Writer. Beraksi{ public static void

Menulis Output ke Console import java. io. *; class Writer. Beraksi{ public static void main(String[] args) throws IOException{ Print. Writer pw = new Print. Writer(System. out, true); pw. println("Menulis ke console dengan karakter stream"); } }

Menulis Output ke File class File. Writer. Beraksi{ public static void main (String[] args)

Menulis Output ke File class File. Writer. Beraksi{ public static void main (String[] args) { if (args. length==0){ System. out. println("Error: tulis nama file!"); } String data; File. Writer fout=null; Buffered. Reader br=new Buffered. Reader(new Input. Stream. Reader(System. in)); try{ fout = new File. Writer(args[0]); System. out. println("Ketik data ke file. Ketik BERHENTI untuk berhenti"); data = br. read. Line(); while(!data. equals("BERHENTI")) { fout. write (data + "rn"); data = br. read. Line(); } }catch(File. Not. Found. Exception e) { System. out. println("File : " + args[0] + " tidak dapat dibuka atau dibuat. "); }catch(IOException e) { System. out. println("Ekspresi tidak diketahui : " + e); }finally { if(fout!=null) { try{ fout. close(); }catch(IOException err) { System. out. println("Ekspresi tidak diketahui : " + err); }}}}}

Program Copy Isi File (Character) public class Copy. Characters { public static void main(String[]

Program Copy Isi File (Character) public class Copy. Characters { public static void main(String[] args) throws IOException { File. Reader input. Stream = null; File. Writer output. Stream = null; try { input. Stream = new File. Reader("filesumber. txt"); output. Stream = new File. Writer("filetujuan. txt"); int c; while ((c = input. Stream. read()) != -1) { output. Stream. write(c); } } finally { if (input. Stream != null) { input. Stream. close(); } if (output. Stream != null) { output. Stream. close(); } }}}

Program Copy Isi File (Line) public class Copy. Lines { public static void main(String[]

Program Copy Isi File (Line) public class Copy. Lines { public static void main(String[] args) throws IOException { Buffered. Reader input. Stream = null; Print. Writer output. Stream = null; try { input. Stream = new Buffered. Reader(new File. Reader("filesumber. txt")); output. Stream = new Print. Writer(new File. Writer("filetujuan. txt")); String l; while ((l = input. Stream. read. Line()) != null) { output. Stream. println(l); } } finally { if (input. Stream != null) { input. Stream. close(); } if (output. Stream != null) { output. Stream. close(); } }}}

Operasi Berkas (File) dengan Class File

Operasi Berkas (File) dengan Class File

Class File § Class File adalah class yang mendukung berbagai operasi yang berhubungan dengan

Class File § Class File adalah class yang mendukung berbagai operasi yang berhubungan dengan berkas (file) dan direktori(folder) § Penggunaannya misalnya untuk mengganti nama atau membuat file atau direktori § Konstruktor class File: • File(String nama) • File(String induk, String anak) • File(File induk, String anak)

Method Class File Method abstract void close() abstract void flush() void write(char[] cbuf, int

Method Class File Method abstract void close() abstract void flush() void write(char[] cbuf, int off, int len) void write(String str, int off, int len) Deskripsi

Menampilkan Atribut File public class Info. File{ public static void main(String[] args){ Buffered. Reader

Menampilkan Atribut File public class Info. File{ public static void main(String[] args){ Buffered. Reader Stream. Teks=new Buffered. Reader(new Input. Stream. Reader (System. in)); System. out. println("Masukan nama file: "); String nama. Berkas = ""; try {nama. Berkas = Stream. Teks. read. Line(); }catch (IOException i){} File berkas = new File(nama. Berkas); if (!berkas. exists()){ System. out. println("Berkas ini tak ada"); } if (berkas. is. Directory()) System. out. println("Direktori" if (berkas. is. File()) System. out. println("Berkas biasa"); if (berkas. is. Hidden()) System. out. println("Tersembunyi"); if (berkas. can. Read()) System. out. println("Bisa dibaca"); if (berkas. can. Write()) System. out. println("Bisa ditulisi"); if (berkas. can. Read()) System. out. println("Bisa dibaca"); if (berkas. is. Absolute()) System. out. println("path absolut"); else System. out. println("path relatif"); System. out. println("Induk : " + berkas. get. Parent()); System. out. println("Path : " + berkas. get. Path()); System. out. println("Path Absolut : " + berkas. get. Absolute. Path()); System. out. println("Nama : " + berkas. get. Name()); System. out. println("Ukuran : " + berkas. length() +" byte"); }}

Menghapus File public class Hapus. File{ public static void main (String[] args) { String

Menghapus File public class Hapus. File{ public static void main (String[] args) { String nama. File = "filetujuan. txt"; try { File. Output. Stream berkas. Tem = new File. Output. Stream(nama. File); berkas. Tem. close(); } catch (IOException i) {} File berkas = new File (nama. File); if (berkas. exists()) System. out. println("Berkas " + nama. File + " ada"); else System. out. println("Berkas " + nama. File + " sudah dihapus"); berkas. delete(); System. out. println("Setelah penghapusan. . "); if (berkas. exists()) System. out. println("Berkas " + nama. File + " ada"); else System. out. println("Berkas " + nama. File + " sudah dihapus"); }}

Mengganti Nama File public class Ganti. Nama. File { public static void main(String[] args)

Mengganti Nama File public class Ganti. Nama. File { public static void main(String[] args) { String nama. File = "File. Baru. txt"; try { File. Output. Stream berkas. Tem=new File. Output. Stream (nama. File); berkas. Tem close() }catch (IOException i) {} File berkas. Semula= new File(nama. File); File berkas. Baru = new File("Nama. Baru. txt"); berkas. Semula. rename. To(berkas. Baru); System. out. println("Nama sudah diganti"); }}

Membuat Direktori public class Buat. Dir { public static void main(String [] args) {

Membuat Direktori public class Buat. Dir { public static void main(String [] args) { String nama. Dir = "latihan"; File dir = new File (nama. Dir); dir. mkdir(); } }

Mengakses Data Non. Sekuensial public class Random. Access. File. Beraksi{ public static void main(String

Mengakses Data Non. Sekuensial public class Random. Access. File. Beraksi{ public static void main(String [] args) throws IOException{ Random. Access. File berkas = new Random. Access. File("latihan. txt", "rw"); berkas. write. Bytes("ABCDEFGHIJKLMNOPQRSTUVW"); char kar = ' ‘; berkas. seek(0); System. out. println("isi berkas: "); while(berkas. get. File. Pointer() < berkas. length()) { kar = (char) berkas. read. Byte(); System. out. print(kar); } System. out. println(); berkas. seek(3); berkas. write. Byte((int)'z'); System. out. println("Sesudah penggantian"); berkas. seek(0); System. out. println("isi berkas: "); while (berkas. get. File. Pointer() < berkas. length()) { kar = (char) berkas. read. Byte(); System. out. print(kar); }}}

Struktur Data dengan Java Collection Framework

Struktur Data dengan Java Collection Framework

Java Collection Framework § A collection (sometimes called a container) is an object that

Java Collection Framework § A collection (sometimes called a container) is an object that groups multiple elements into a single unit § Collections are used to store, retrieve, manipulate, and communicate aggregate data § Typically, they represent data items that form a natural group, such as a poker hand (a collection of cards), a mail folder (a collection of letters), or a telephone directory (a mapping of names to phone numbers)

Java Collection Framework § A collections framework is a unified architecture for representing and

Java Collection Framework § A collections framework is a unified architecture for representing and manipulating collections § All collections frameworks contain the following: 1. Interfaces: These are abstract data types that represent collections. Interfaces allow collections to be manipulated independently of the details of their representation 2. Implementations: These are the concrete implementations of the collection interfaces. In essence, they are reusable data structures 3. Algorithms: These are the methods that perform useful computations, such as searching and sorting, on objects that implement collection interfaces

Core Collection Interfaces Map Collection Set Sorted. Set List Queque Sorted. Set

Core Collection Interfaces Map Collection Set Sorted. Set List Queque Sorted. Set

Core Collection Implementation INTERFACES IMPLEMENTATION Hash Table Set Resizable Array Hash. Set List Tree

Core Collection Implementation INTERFACES IMPLEMENTATION Hash Table Set Resizable Array Hash. Set List Tree Linked List Tree. Set Array. List Hash Table + Linked List Linked. Hash. Set Linked. List Queue Map Hash. Map Tree. Map Linked. Hash. Map

Object Array § Array standard yang dimiliki oleh Java API (java. util) § Array

Object Array § Array standard yang dimiliki oleh Java API (java. util) § Array memiliki method-method: Method Keterangan static int binary. Search(array, key) Pencarian nilai dalam array boolean equals(array 1, array 2) Membandingkan apakah dua array memiliki nilai sama. Bekerja pada array satu dimensi static void sort(array) Mengurutkan isi array static String to. String(array) Mengubah nilai array menjadi String

Contoh Object Array public class Array. Cari { public static void main(String[] args) {

Contoh Object Array public class Array. Cari { public static void main(String[] args) { String[] jenis. Kelamin = new String[3]; jenis. Kelamin[0] = "laki"; jenis. Kelamin[1] = "perempuan"; jenis. Kelamin[2] = "waria"; int ketemu = Arrays. binary. Search(jenis. Kelamin , "perempuan"); if (ketemu > -1) System. out. println("Data ditemukan pada: “ + ketemu); else System. out. println("Data tidak ditemukan. "); } }

Array. List § Array. List mirip dengan array, tapi memiliki kemampuan lebih baik §

Array. List § Array. List mirip dengan array, tapi memiliki kemampuan lebih baik § Jumlah elemen dalam Array. List dapat berubah secara fleksibel tergantung jumlah data yang ada di dalamnya § Setelah array terbentuk, data baru dapat dimasukkan di tengah-tengah, tidak harus di akhir elemen array § Isi dalam array bisa dihapus, dan index dalam array sesudahnya akan maju satu langkah untuk mengisi slot kosong tersebut

Array. List Method Keterangan add(object element) Menambahkan object ke dalam Array. List boolean equals(array

Array. List Method Keterangan add(object element) Menambahkan object ke dalam Array. List boolean equals(array 1, array 2) Menambahkan object ke dalam index yang ditentukan static void sort(array) Menghapus semua elemen dalam Array. List static String to. String(array) Mengambil object pada index tertentu iterator() Mengembalikan iterator pada Array. List remove(int index) Menghapus object dengan index tertentu remove(object element) Menghapus elemen tertentu size() Mengembalikan nilai berupa jumlah elemen dalam Array. List to. Array() Mengembalikan elemen Array. List sebagai array object to. Array(type[] array) Mengembalikan elemen Array. List Sebagi array dengan tipe tertentu

Contoh Array. List public class Array. Angka{ public static void main(String[] args) { Array.

Contoh Array. List public class Array. Angka{ public static void main(String[] args) { Array. List angka= new Array. List(); angka. add("One"); angka. add("Two"); angka. add(3); angka. add("Four"); for (Object i: angka) System. out. println(i); angka. set(1, "Siji"); angka. remove(angka. size() - 1); System. out. println(angka); } }

Vector § Sama seperti Array. List, Vector memiliki dua atribut utama: kapasitas dan penambahan

Vector § Sama seperti Array. List, Vector memiliki dua atribut utama: kapasitas dan penambahan kapasitas § Penambahan kapasitas menentukan berapa jumlah index yang akan ditambahkan, jika index saat ini sudah tidak mencukupi

Vector Method Keterangan void add(int index, Object element) Memasukkan object ke dalam Vector dengan

Vector Method Keterangan void add(int index, Object element) Memasukkan object ke dalam Vector dengan index yang ditentukan boolean add(Object element) void add. Element(Object element) Menambahkan Object ke dalam Vector. Jika berhasil nilai boolean = true

Contoh Vector public class Vector. Demo { public static void main(String[] args) { Vector

Contoh Vector public class Vector. Demo { public static void main(String[] args) { Vector new. Vector = new Vector(); //menambahkan data vector new. Vector. add("Jakarta"); new. Vector. add("Surabaya"); new. Vector. add("Semarang"); // menampilkan data vector pertama System. out. println("Menampilkan Data Vector: "); System. out. println("Data Vector Pertama: "+ new. Vector. get(0)); System. out. println("Data Vector Pertama: "+ new. Vector. first. Element()); System. out. println("Data Vector Kedua: " + new. Vector. get(1)); // menampilkan data vector terakhir (ketiga) System. out. println("Data Vector Ketiga: " + new. Vector. element. At(2)); System. out. println("Data Vector Ketiga: " + new. Vector. last. Element()); //mencari index vector dan ditampilkan System. out. println('n' + "Mencari Data Vector: "); int idx. Cari = new. Vector. index. Of("Surabaya"); System. out. println("Nilai Index Yang Dicari Adalah: " + idx. Cari); if (idx. Cari>=0) System. out. println("Data yang Dicari Adalah: " + new. Vector. get(idx. Cari)); //menampilkan vector dengan perulangan dan size for (int i=0; i < new. Vector. size(); i++) System. out. println(i + ": " + new. Vector. get(i)); //menampilkan vector dengan iterator "for-loop" for (Iterator d = new. Vector. iterator(); d. has. Next(); ) { System. out. println("->" + d. next()); } } }

Hash. Map § Koleksi yang memetakan kunci (key) ke dalam nilai (value) § Kunci

Hash. Map § Koleksi yang memetakan kunci (key) ke dalam nilai (value) § Kunci dan nilai dalam Hash. Map boleh diset dengan null § Hash. Map tepat untuk data yang kompleks, sehingga programmer tidak harus menghafal letak index seperti pada array dan collection class sequence lainnya

Hash. Map Method Keterangan void clear() Menghapus semua elemen dalam Hash. Map sehingga ukurannya

Hash. Map Method Keterangan void clear() Menghapus semua elemen dalam Hash. Map sehingga ukurannya menjadi 0 boolean is. Empty() Nilai true dikembalikan jika tidak ada elemen di dalam int size() Mengembalikan jumlah elemen dalam Hash. Map boolean contains. Key(Object key) Nilai true dikembalikan jika key ditemukan dalam Hash. Map boolean contains. Value(Object value) Nilai true dikembalikan jika value ditemukan dalam Hash. Map

Contoh Hash. Map public class Hash. Map. Demo { //mengecek data di hashmap System.

Contoh Hash. Map public class Hash. Map. Demo { //mengecek data di hashmap System. out. println("Has Key NIM? “ + map. contains. Key("NIM")); public static void main(String[] args) { Hash. Map map = new Hash. Map(); //menambahkan data ke hashmap //mendetele data di hashmap System. out. println("Removed: " + map. remove("NIM")); map. put("Nama", "Joko Bodo"); map. put("NIM", new Integer(234567)); map. put("Alamat", "Semarang"); //menampilkan dan melihat ukuran hashmap System. out. println("Hashmap: " + map. entry. Set()); System. out. println("Ukuran Hashmap: " + map. size()); //menampilkan hashmap System. out. println("Hashmap: " + map. entry. Set()); System. out. println("Ukuran Hashmap: " + map. size()); //menambahkan data ke hashmap map. put("Situs favorit", "ilmukomputer. com"); //menampilkan dan melihat ukuran hashmap System. out. println("Hashmap: " + map. entry. Set()); System. out. println("Ukuran Hashmap: " + map. size()); } }

Interface. Iterator § Fasilitas pada Java API yang dapat digunakan untuk melakukan iterasi komponen-komponen

Interface. Iterator § Fasilitas pada Java API yang dapat digunakan untuk melakukan iterasi komponen-komponen dalam Koleksi § Ada tiga method yang sering digunakan dalam Iterator: has. Next(), next(), remove() Method Keterangan has. Next() Menentukan apakah masih ada sisa koleksi next() Mengembalikan elemen object pada koleksi. Jika sudah tidak ada elemen lagi namun berusaha diambil maka akan muncul pesan: No. Such. Element. Exception remove() Menghapus elemen yang terakhir kali diakses oleh Iterator

Contoh Iterator while (v. has. Next()){ Object ob = v. next(); System. out. println(v);

Contoh Iterator while (v. has. Next()){ Object ob = v. next(); System. out. println(v); } for(Iterator i = v. iterator(); i. has. Next(); ){ String name = (String) i. next(); System. out. println(name); }

Generic § Implementasi tipe data pada koleksi § Tanpa adanya generic, tipe data berbeda-beda

Generic § Implementasi tipe data pada koleksi § Tanpa adanya generic, tipe data berbeda-beda dapat dimasukkan dalam sebuah koleksi. Ketika data tersebut diambil, maka perlu dilakukan casting § Misal method seperti di bawah: public boolean add (Object o){ //statements } § Untuk pengambilan data, harus dilakukan casting tipe data: Mahasiswa mhs = (Mahasiswa) organisasi. get(); § Masalah muncul jika ada beberapa elemen yang bukan bertipe Mahasiswa, elemen lain mungkin saja ada karena semua object dapat ditambahkan dengan metode add() diatas

Generic § Tipe generic pada koleksi dapat diterapkan dengan menambahkan tanda <> § Bila

Generic § Tipe generic pada koleksi dapat diterapkan dengan menambahkan tanda <> § Bila kita berusaha menambahkan elemen dengan tipe data berbeda, maka akan keluar error § Dengan adanya generic, program dapat lebih handal, karena kesalahan programmer dapat dicegah

Sorting and Searching Algorithms

Sorting and Searching Algorithms

Algorithms § Sudah menjadi rule-of-thumb dalam dunia programming bahwa berlaku rumus: program = algorithm

Algorithms § Sudah menjadi rule-of-thumb dalam dunia programming bahwa berlaku rumus: program = algorithm + data structure

Sorting Algorithms § Algoritma sorting adalah algoritma dasar yang paling sering digunakan § Data

Sorting Algorithms § Algoritma sorting adalah algoritma dasar yang paling sering digunakan § Data dalam keadaan yang sudah urut (sesuai dengan kunci pengurutan tertentu) akan memudahkan kita dalam manipulasi berikutnya § Beberapa algoritma sorting: • Bubble Sort • Merge Sort • Selection Sort

Bubble Sort § Pengurutan dengan membandingkan suatu elemen dengan elemen berikutnya § Jika elemen

Bubble Sort § Pengurutan dengan membandingkan suatu elemen dengan elemen berikutnya § Jika elemen sekarang lebih besar daripada elemen berikutnya maka elemen tersebut akan ditukar § Data yang ingin diurutkan: 34, 86, 15

Bubble Sort untuk Data 34 86 15 Langkah 1 Langkah 2 Langkah 3 34

Bubble Sort untuk Data 34 86 15 Langkah 1 Langkah 2 Langkah 3 34 86 15 tidak tukar 34 86 15 tukar 34 15 86 tukar 15 34 86 tidak tukar 15 34 86

Bubble. Sort. java public class Bubble. Sort { Bubble. Sort. Beraksi. java public class

Bubble. Sort. java public class Bubble. Sort { Bubble. Sort. Beraksi. java public class Bubble. Sort. Beraksi{ public static void urutkan(int data[]){ public static void main(String[] args){ for(int langkah=0; langkah<data. length; langkah++){ for(int indeks=0; indeks<data. length-1; indeks++){ int data[] = {34, 86, 15}; if(data[indeks]>data[indeks+1]){ int temp = data[indeks]; System. out. print("Data awal: "); data[indeks] = data[indeks+1]; for(int i=0; i<data. length; i++){ data[indeks+1] = temp; System. out. print(data[i] + " "); } } Bubble. Sort. urutkan(data); } } System. out. print('n' + "Data hasil: "); for(int i=0; i<data. length; i++){ System. out. print(data[i] + " "); } System. out. println(); } }

Selection Sort § Pengurutan dengan mencari elemen berikutnya sampai elemen terakhir § Jika ditemukan

Selection Sort § Pengurutan dengan mencari elemen berikutnya sampai elemen terakhir § Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang, maka elemen tersebut akan ditukar § Data yang ingin diurutkan: 34, 86, 15

Selection Sort untuk Data 34 86 15 Langkah 1 34 86 15 1 2

Selection Sort untuk Data 34 86 15 Langkah 1 34 86 15 1 2 15 86 34 tukar Langkah 2 15 86 34 1 2 15 34 86 tukar

Selection. Sort. java public class Selection. Sort { Selection. Sort. Beraksi. java public class

Selection. Sort. java public class Selection. Sort { Selection. Sort. Beraksi. java public class Selection. Sort. Beraksi{ public static void urutkan(int data[]){ public static void main(String[] args){ for(int langkah=0; langkah<data. length-1; langkah++){ int indeks. Terkecil=langkah; int data[] = {34, 86, 15}; for(int indeks=langkah+1; indeks<data. length; indeks++){ if(data[indeks]<data[indeks. Terkecil]) System. out. print("Data awal: "); indeks. Terkecil=indeks; for(int i=0; i<data. length; i++){ } System. out. print(data[i] + " "); } int temp=data[langkah]; data[langkah]=data[indeks. Terkecil]; Selection. Sort. urutkan(data); data[indeks. Terkecil]=temp; } System. out. print('n' + "Data hasil: "); } for(int i=0; i<data. length; i++){ } System. out. print(data[i] + " "); } System. out. println(); } }

Merge Sort § Algoritma pengurutan dengan cara menggabungkan dua kelompok data yang sudah urut,

Merge Sort § Algoritma pengurutan dengan cara menggabungkan dua kelompok data yang sudah urut, kemudian digabung dan hasilnya adalah data yang terurut § Langkah algoritma Merge Sort 1. Bila jumlah item yang diurutkan adalah 0 atau 1, return 2. Urutkan secara rekursif bagian pertama dan kedua secara terpisah 3. Gabungkan dua bagian yang sudah terurut tersebut ke dalam sebuah kelompok terurut

Tugas: (Presentasi + Laporan Akhir) § Pahami dan buat program dari algoritma di bawah

Tugas: (Presentasi + Laporan Akhir) § Pahami dan buat program dari algoritma di bawah dengan menggunakan Java (text or gui) § Rangkumkan dalam bentuk slide dan presentasikan di pertemuan berikutnya DENGAN BAHASA MANUSIAs yang baik dan benar. PAHAMI DENGAN BAIK apa yang dirangkumkan di slide. § Pilih algoritma sesuai digit terakhir NIM: 0 Particle Swarm Optimization 5 A* 1 Neural Network 6 K-Means 2 Support Vector Machine 7 Genetic Algorithm 3 Naive Bayes 8 Ant Collony Optimization 4 C 4. 5 9 FP-Growth

Tugas § Kerjakan semua latihan dan tugas yang ada di slide Java Advanced §

Tugas § Kerjakan semua latihan dan tugas yang ada di slide Java Advanced § Kirimkan netbeans project yang sudah di zip ke romi@brainmatics. com dengan subyek: [OOP 4 -Universitas] Nama–NIM § Deadline: 1 minggu § Meng-copy file orang lain akan menyebabkan nilai tugas 0

Referensi 1. Sharon Zakhour et al, The Java Tutorial Fourth Edition, http: //java. sun.

Referensi 1. Sharon Zakhour et al, The Java Tutorial Fourth Edition, http: //java. sun. com/docs/books/tutorial 2. Cay Horstmann, Big Java, John Wiley & Sons, 2010 3. Rogers Cadenhead & Laura Lemay, Teach Yourself Java 6 in 21 Days, Sams Publishing, 2007 4. Deitel & Deitel, Java for Programmers, Prentice Hall, 2009 5. Robert Lafore, Data Structures and Algorithms in Java Second Edition, Sams Publishing, 2003 6. Tim Pengembang JENI, JENI 1 -6, Depdiknas, 2007 7. Rachmad Hakim & Sutarto, Mastering Java, Elex Media Komputindo, 2009