IKG2I4 / Software Project I Mahmud Imrona, M.T. Izzatul Ummah, M.T. Kelompok Keahlian Algoritma dan Komputasi
LECTURE NOTE WEEK 6
1
3/11/2015
WEEK 6 Abstract Class Interface Exception
2
3/11/2015
IKG2I4 – Software Project I
ABSTRACT CLASS Misalkan kita ingin membuat program permainan di mana di dalamnya ada class Human yang diturunkan menjadi class Raja, class Prajurit, dan class Petani. Pada sistem ini, kita juga menginginkan setiap objek harus diinstansiasi dari class raja/prajurit/petani, yang berarti tidak boleh ada objek human yang diinstansiasi. Bagaimana konsep OOP memfasilitasi aturan pada sistem tersebut? Jawabannya adalah menggunakan konsep abstract class. 3
3/11/2015
IKG2I4 – Software Project I
ABSTRACT CLASS
4
3/11/2015
IKG2I4 – Software Project I
ABSTRACT CLASS Abstract class adalah class yang tidak dapat diinstansiasi objectnya. Abstract class biasanya diterapkan pada sebuah superclass. Superclass dibuat abstract supaya tidak dapat diinstansiasi objectnya. Programmer hanya bisa menginstansiasi turunan dari superclass tersebut. Abstract class boleh memiliki atribut dan method seperti class biasa. 5
3/11/2015
IKG2I4 – Software Project I
ABSTRACT CLASS Cara penulisan abstract class: abstract class Human{ String name; }
6
3/11/2015
IKG2I4 – Software Project I
ABSTRACT METHOD Abstract method adalah header method, yaitu method yang tidak dituliskan implementasi algoritmanya, atau dengan kata lain yang dituliskan hanya headernya saja. Bila sebuah class memiliki minimal 1 abstract method, maka class tersebut harus dijadikan abstract juga. Akan tetapi, sebuah abstract class tidak harus memiliki abstract method.
7
3/11/2015
IKG2I4 – Software Project I
ABSTRACT METHOD Cara penulisan abstract method: abstract class Human{ String name; abstract void berjalan(int jarak); } Method berjalan() tidak perlu diimplementasikan algoritmanya di class Person. Method itu hanya bisa diimplementasikan di class-class turunannya misalnya class Raja, Prajurit, Petani. 8
3/11/2015
IKG2I4 – Software Project I
ABSTRACT METHOD Ilustrasi yang lebih jelas misalnya pada permainan catur. Kita definisikan abstract class Bidak, yang diturunkan menjadi class Raja, Ratu, Gajah, Kuda, Benteng, Pion. abstract class Bidak{ abstract void berjalan(int jarak, int arah); } Class Bidak dibuat abstract karena setiap bidak pasti adalah instansiasi dari salah satu class turunannya. Method berjalan dibuat abstract karena tidak perlu diimplementasikan di sini (hanya perlu diimplementasikan di class-class turunannya). 9
3/11/2015
IKG2I4 – Software Project I
ABSTRACT METHOD Method berjalan harus diimplementasikan di class turunan. class Raja{ abstract void berjalan(int jarak, int arah){ ……..Raja bisa berjalan satu langkah ke semua arah } } class Kuda{ abstract void berjalan(int jarak, int arah){ ….. Kuda berjalan dengan langkah berbentuk huruf L } } 10
3/11/2015
IKG2I4 – Software Project I
ABSTRACT METHOD Tiap class turunan mengimplementasikan method berjalan secara berbeda-beda, tergantung bagaimana aturan atau cara bergerak/berjalan masing-masing bidak.
11
3/11/2015
IKG2I4 – Software Project I
ABSTRACT METHOD Class turunan dari class abstract harus mengimplementasikan semua method abstract yang diwarisi dari class induknya. Bila ada 1 method abstract warisan yang tidak diimplementasikan, maka class turunan itu harus menjadi abstract juga. Sebuah class tidak boleh mengextend ke dua superclass, tidak peduli superclass itu abstract atau bukan. Hal ini karena Java hanya mensupport single inheritance.
12
3/11/2015
IKG2I4 – Software Project I
ABSTRACT METHOD Di bawah ini adalah method abstract: public abstract method berjalan();
Tapi yang di bawah ini bukan method abstract, melainkan method kosong: public abstract method berjalan(){ }
13
3/11/2015
IKG2I4 – Software Project I
INTERFACE Interface adalah class yang lebih “abstrak” dibandingkan class abstract. Interface adalah class abstract yang seluruh methodnya adalah method abstract (tidak memiliki method biasa). Semua atribut di dalam interface secara otomatis bersifat public static final. Di dalam interface tidak boleh ada atribut private, dan tidak ada method get dan set.
14
3/11/2015
IKG2I4 – Software Project I
INTERFACE Jadi interface mirip seperti file header pada ADT (ingat kembali Praktikum Pemrograman Terstruktur II). Contoh pada ADT LIST ada file list.h. Akan tetapi konsep/kegunaan interface berbeda dengan file header pada ADT. Perbedaannya adalah: – Konsep ADT tidak terkait dengan inheritance – Konsep interface terkait erat dengan inheritance. Java tidak menyediakan fitur multiple-inheritance, akan tetapi Java menyediakan fitur interface sebagai penggantinya.
15
3/11/2015
IKG2I4 – Software Project I
INTERFACE Konsep/kegunaan interface adalah memberi peran-peran (roles) pada sebuah class. Misalkan kita sedang membuat sistem akademik, di mana di dalamnya kita mendefinisikan class Dosen dan class Mahasiswa. Class Dosen memiliki method mengajar(), belajar(), membuatSoal(), menilaiUjian(), menerimaGaji(), dsb. Class Mahasiswa memiliki method belajar(), hadirKuliah(), ikutUjian(), mengerjakanTugas(), dsb. 16
3/11/2015
IKG2I4 – Software Project I
INTERFACE Selain itu, kita juga mendefinisikan class Asisten di mana asisten memiliki peran campuran yaitu sebagai mahasiswa dan juga sebagai “dosen junior”. Asisten harus mengimplementasikan semua method Mahasiswa serta semua (atau sebagian) method Dosen. Bagaimana Java memfasilitasi kebutuhan sistem tsb? Jawabnya adalah: menggunakan interface.
17
3/11/2015
IKG2I4 – Software Project I
INTERFACE Kita buat 2 buah interface yaitu InterDosen dan InterMahasiswa. – Class Dosen menginduk kepada InterDosen. – Class Mahasiswa menginduk kepada InterMahasiswa. – Class Asisten menginduk kepada InterDosen dan InterMahasiswa.
Menginduk di sini tidak menggunakan syntax “extends” melainkan “implements”. Perhatikan bahwa sebuah class dapat meng-implements beberapa interface. 18
3/11/2015
IKG2I4 – Software Project I
INTERFACE Agar lebih lengkap, kita buat juga abstract class Person, di mana semua class Dosen, Mahasiswa, dan Asisten harus meng-extends ke class tersebut dan harus meng-implements ke interface yang sesuai. Cara penulisannya adalah sbb: abstract class Person{ String nama; void makan(); } interface InterDosen{ int gajiPerJam = 50;
// atribut di interface harus konstanta
void mengajar();
// method di interface harus abstract
} 19
3/11/2015
IKG2I4 – Software Project I
INTERFACE interface InterMahasiswa{ void hadirKuliah(); }
// method di interface harus abstract
class Dosen extends Person implements InterDosen{ void makan(){ ……. } void mengajar(){ ……. } }
20
3/11/2015
IKG2I4 – Software Project I
INTERFACE class Mahasiswa extends Person implements InterMahasiswa{ void makan(){ ……. } void hadirKuliah(){ ……. } }
21
3/11/2015
IKG2I4 – Software Project I
INTERFACE class Asisten extends Person implements InterMahasiswa, InterDosen{ void makan(){ ……. } void hadirKuliah(){ ……. } void mengajar(){ ……. } }
22
3/11/2015
IKG2I4 – Software Project I
EXCEPTION HANDLING Ada 2 jenis error yang bisa terjadi ketika kita membuat program: – Compile-time error: yaitu error yang terjadi saat program dicompile, ciri-cirinya yaitu program tidak lulus compile, umumnya terjadi karena kesalahn penulisan syntax (kurang titik koma atau kurung tutup dsb) – Run-time error: yaitu error yang terjadi saat program dijalankan, ciri-cirinya yaitu program tetap lulus compile tapi ketika dijalankan bisa terjadi error (tergantung pada nilai variabel yang diolah), misalnya pembagian dengan nilai nol secara teoritis akan menghasilkan nilai tak hingga (tak terdefinisi). 23
3/11/2015
IKG2I4 – Software Project I
EXCEPTION HANDLING Beberapa contoh runtime error: – Pembagian dengan angka nol – Pengaksesan array melebihi batas kapasitas array – Kesalahan parsing dan formatting number – Program gagal membuka file – Program gagal menerima input dari keyboard – Pengaksesan terhadap object yang belum diinstansiasi (belum di-new, jadi masih NULL)
24
3/11/2015
IKG2I4 – Software Project I
EXCEPTION HANDLING Exception handling berguna untuk mencegah runtime error. Beberapa exception yang penting misalnya: – ArithmeticException – NullPointerException – ArrayIndexOutOfBoundsException – NumberFormatException – IOException – FileNotFoundException
25
3/11/2015
IKG2I4 – Software Project I
EXCEPTION HANDLING Berikut ini adalah contoh pembagian dengan nol. public static void main(String[] args) throws Exception{ int a=5; int b=0; int c=a/b; System.out.println(“Nilai c = “,c); } Program di atas dapat dicompile, tapi ketika dirun akan error, karena terjadi exception pada baris c=a/b, atau kita katakan bahwa program “melempar” exception pada baris c=a/b. Exception yang dilempar ini menyebabkan program halt (berhenti). 26
3/11/2015
IKG2I4 – Software Project I
EXCEPTION HANDLING Untuk menangani exception tersebut, gunakan mekanisme try-catch. Baris yang bermasalah dapat dimasukkan ke dalam blok try, dan gunakan exception handling yang sesuai untuk “menangkap” (catch) exception yang mungkin terjadi. public static void main(String[] args) throws Exception{ int a=5; int b=0; int c; try{ c=a/b; } catch (ArithmeticException ae){ System.out.println("Masuk ke Arithmetic Exception"); } } 27
3/11/2015
IKG2I4 – Software Project I
NULL POINTER EXCEPTION Exception yang terjadi karena pengaksesan object yang masih NULL (belum diinstansiasi/new) Segiempat se1 = new Segiempat(5,3); Segiempat se2; // objectnya masih null se1.printAttribute(); try{ se2.setPanjang(7); } catch (NullPointerException npe){ System.out.println("Masuk ke Null Pointer Exception"); }
28
3/11/2015
IKG2I4 – Software Project I
ARRAY INDEX OUT OF BOUND Exception yang terjadi karena mengakses array dengan indeks melebihi batas kapasitasnya. int[] arrNIM = {3010666,3010777,3010999}; try { System.out.println(arrNIM[3]); } catch (ArrayIndexOutOfBoundsException aobe) { System.out.println("Masuk ke Array Index Out Of Bounds Exception"); } 29
3/11/2015
IKG2I4 – Software Project I
NUMBER FORMAT EXCEPTION Exception yang terjadi karena parsing number. Coba modifikasi program berikut ini dengan exception handling yang sesuai. public static void main(String[] args) { String str = "50a\ju79hj3@sdjf"; int i = 0; i = Integer.parseInt(str); // class Wrapper System.out.println("i="+i); }
30
3/11/2015
IKG2I4 – Software Project I
CLASS EXCEPTION Bagaimana exception dapat terjadi/dilempar? Exception adalah class khusus pada Java Library (src) yang diturunkan dari class Throwable. – Lihat java.lang.Exception
Semua jenis exception lainnya (ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, NumberFormatException, dsb) adalah turunan dari class Exception tersebut. 31
3/11/2015
EXCEPTION HANDLING Exception yang tidak ditangani (tidak di-catch) dapat menyebabkan program berhenti (halt) ketika dijalankan. Exception bisa terjadi bisa juga tidak, tergantung pada nilai variabel yang diolah. Exception terjadi secara beruntun (chainreaction), misalnya kita membuat methodX(), yang di dalamnya memanggil methodY(), yang di dalamnya memanggil methodZ(). Ternyata ketika methodZ() dieksekusi terjadi exception, maka exception ini akan terbawa sampai methodX(), kecuali bila ditangani oleh salah satu method tsb. 32
3/11/2015
EXCEPTION HANDLING Exception handling bisa dilakukan di methodmethod mana saja yang kita inginkan, mencakup: – Method yang mengandung baris exception – Method yang memanggil method lain yang mengandung baris exception
33
3/11/2015
IKG2I4 – Software Project I
THROW Sebelumnya telah dibahas bagaimana cara: – Menangani atau menangkap (catch) exception yang dilempar oleh program. Untuk menangkap suatu exception harus menggunakan jenis exception handling yang sesuai dengan jenis exception tersebut.
Sekarang akan dibahas bagaimana cara: – Membuat program yang melempar (throw) exception yang jenisnya sudah ada di Java Library – Membuat jenis exception sendiri sesuai kebutuhan (yang dapat dilempar seperti exception biasa)
34
3/11/2015
IKG2I4 – Software Project I
THROW Berikut adalah contoh sederhana melempar exception: – Exception harus diinstansiasi dulu (new) sebelum dilempar
public static void main(String args[]) throws Exception{ int d=6; int e=1; int f=0; if (e==1) { throw new Exception("Ngapain ngebagi dengan satu!"); } else { f=d/e; }
35
3/11/2015
IKG2I4 – Software Project I
MEMBUAT EXCEPTION SENDIRI Sekarang kita akan membuat jenis exception sendiri, yaitu exception yang menangani nilai input negatif. Pada class Segiempat, panjang dan lebar tidak boleh negatif. class NegatifException extends Exception { public void printPesanError(){ System.out.println("Nilai panjang dan lebar tidak boleh negatif"); } } 36
3/11/2015
IKG2I4 – Software Project I
MEMBUAT EXCEPTION SENDIRI NegatifException tersebut kemudian di-new lalu dilempar di dalam method setPanjang & setLebar. public void setPanjang(int p) throws NegatifException{ if (p<0) { throw new NegatifException(); } else { panjang = p; } } 37
3/11/2015
IKG2I4 – Software Project I
MEMBUAT EXCEPTION SENDIRI Method setLebar dengan exception: public void setLebar(int l) throws NegatifException{ if (l<0) { throw new NegatifException(); } else { lebar = l; } }
38
3/11/2015
IKG2I4 – Software Project I
MEMBUAT EXCEPTION SENDIRI Ketika method setPanjang dan setLebar tersebut dipanggil di Driver, method-method tersebut harus ditempatkan di dalam blok try-catch. class Driver { public static void main(String args[]) { Segiempat se = new Segiempat(); try { se.setPanjang(5); se.setLebar(-3); } catch (NegatifException ne) { ne.printPesanError(); } } } 39
3/11/2015
IKG2I4 – Software Project I
TUGAS PEKAN INI (TUGAS INDIVIDU)
40
3/11/2015
IKG2I4 – Software Project I
THANK YOU