1 of 52

Exception & Assertion

Tim Pengampu Pemrograman Berorientasi Objek

Departemen Informatika

Universitas Diponegoro

2 of 52

Outline

  1. Pendahuluan
  2. Exception
  3. Assertion
  4. Kesimpulan

​

3 of 52

Pendahuluan

01

4 of 52

Type of Mistakes (Errors)

  • Compile-time error
    • Dideteksi oleh java compiler
    • Java compiler tidak akan men-generate class file jika masih terdapat error jenis ini.
  • Runtime error
    • Terjadi setelah program di-run.
    • Meyebabkan program berjalan tidak semestinya.
    • Dapat memberikan output yang salah.
    • Dapat menyebabkan program berhenti tidak semestinya (terminate prematurely).

5 of 52

Type of Mistakes (Errors)

  • Contoh Runtime error:
    • Membagi integer dengan 0
    • Mengakses elemen array di luar batasan indeks
    • Meng-invoke sebuah method dari null object
    • Melakukan konversi atau assignment yang tidak sesuai tipe datanya.

6 of 52

Contoh

7 of 52

Contoh

  • Solusi sederhana adalah menggunakan if-else untuk mengecek nilai b.
  • Bagaimana jika operasi pembagian dipanggil dari sebuah method?

8 of 52

Contoh

  • Method manakah yang seharusnya akan menangani kesalahan, method yang dipanggil atau method yang memanggil?

9 of 52

Contoh

  • Method yang dipanggil tidak seharusnya menghentikan program begitu saja.

10 of 52

Contoh

  • Solusi: menggunakan mekanisme exception.
  • Jika terjadi kesalahan pada sebuah method yang dipanggil, method tersebut dapat melemparkan (throw) exception.
  • Exception tersebut selanjutnya dapat ditangkap (catch) dan ditangani oleh method yang memanggil.

11 of 52

Contoh

12 of 52

Exception

02

13 of 52

Exception

  • Eksepsi adalah kondisi eksekusi program di luar jalur normal.
  • Eksepsi dapat terjadi karena kesalahan-kesalahan tertentu.
  • Contoh:
    • Mengakses array di luar Batasan indeks yang tersedia 🡪 ArrayIndexOutOfBoundsException
    • Mengeset nilai double pada parameter bertipe integer 🡪 InputMismatchException

14 of 52

Exception

  • Jika tidak ditangani, dapat menjadikan program berkahir secara tidak normal.
  • Perlu mekanisme khusus untuk menangani kesalahan dan mendelegasikannya ke dalam objek-objek tertentu dalam hirarki tertentu pula.
  • Eksepsi merupakan mekanisme program, bagian dari implementasi yang sengaja dideklarasikan untuk menangani kondisi abnormal program.

15 of 52

Exception

  • Jika terjadi kondisi yang tidak normal, maka objek exception diciptakan.
  • Objek exception tersebut dilemparkan ke method yang menciptakan exception tersebut.
  • Method tersebut kemudian menanganinya.
  • Jika method tersebut tidak mampu menanganinya, maka tanggung jawabnya akan dialihkan ke method lainnya.

16 of 52

Exception Hierarchy

17 of 52

Kategori Exception

  • Error
    • Merupakan internal system error, meskipun ini jarang terjadi.
    • Di luar jangkauan programmer.
    • Contoh:

18 of 52

Kategori Exception

  • Exception
    • Merupakan kesalahan yang disebabkan oleh program atau lingkungan eksternal.
    • Kesalahan jenis ini dapat ditangkap (catch) dan ditangani oleh program.

19 of 52

Kategori Exception

  • RuntimeException
    • Merupakan programming error yang disebabkan oleh logic error.

​

20 of 52

Kategori Exception

  • Unchecked Exception
    • Terdiri dari class RuntimeException dan semua subkelas di bawahnya serta class Error beserta semua subkelas di bawahnya.
  • Checked Exception
    • Semua jenis exception selain unchecked exception.
    • Eksepsi jenis ini sebaiknya dapat dideteksi dan ditangani oleh programmer.

21 of 52

Checked vs. Unchecked Exception

Checked Exception

  • The compiler forces the programmer to check and deal with them in a try-catch block or declare it in the method header.

Unchecked Exception

  • These are logic errors that should be corrected in the program.
  • Unchecked exceptions can occur anywhere in a program.
  • To avoid cumbersome overuse of try-catch blocks, Java does not mandate that you write code to catch or declare unchecked exceptions.

22 of 52

Exception Handling Model (in Java)

Declaring an Exception

Throwing an Exception

Catching an Exception

23 of 52

Exception Handling Model (in Java)

24 of 52

1. Declaring an Exception

  • Mendeklarasikan jenis exception yang dapat dihasilkan oleh sebuah method pada header method.
  • Menggunakan keyword throws.
  • Contoh:

public void method1() throws Exception1

  • Atau banyak exception sekaligus

public void method1() throws Exception1,…, ExceptionN

​

25 of 52

2. Throwing an Exception

  • Jika program mendeteksi terjadi kesalahan, maka program dapat menciptakan objek exception yang sesuai.
  • Menggunakan keyword throw.
  • Contoh:

throw new Exception1("…")

26 of 52

3. Catching an Exception

  • Ketika terjadi exception, exception tersebut dapat ditangkap dan ditangani menggunakan:
  • try-catch
  • try-catch*
  • try-catch*-finally

​

27 of 52

3. Catching an Exception

  • Blok try berisi kode yang di dalamnya ada kemungkinan terjadi kesalahan sehingga keluar dari jalur eksekusi normal program.
  • Blok catch digunakan untuk menangani kesalahan seperti melakukan recovery, menampilkan pesan kesalahan, dan sebagainya.
  • Block finally digunakan untuk mengeksekusi kode, apapun kondisi eksekusi program.

28 of 52

3. Catching an Exception

try{

//kode yang kemungkinan akan terjadi kesalahan

}catch(ExceptionClass reference){

//kode jika kesalahan

//yang ditangani ExceptionClass terjadi

}

29 of 52

3. Catching an Exception

try{

//kode yang kemungkinan akan terjadi kesalahan

}catch(ExceptionClass1 | ExceptionClass2 reference){

//kode jika kesalahan

//yang ditangani ExceptionClass1 atau ExceptionClass1

}

Class exception yang digabung dengan | tidak boleh memiliki hubungan inheritance langsung.

30 of 52

3. Catching an Exception

try{

//kode yang kemungkinan akan terjadi kesalahan

}catch(ExceptionClass3 reference){

//kode jika kesalahan yang ditangani ExceptionClass3 terjadi

}catch(ExceptionClass2 reference){

//kode jika kesalahan yang ditangani ExceptionClass2 terjadi

}catch(ExceptionClass1 reference){

//kode jika kesalahan yang ditangani ExceptionClass1 terjadi

}

​

​

31 of 52

3. Catching an Exception

try{

//kode yang kemungkinan akan terjadi kesalahan

}catch(ExceptionClass3 reference){

//kode jika kesalahan yang ditangani ExceptionClass3 terjadi

}catch(ExceptionClass2 reference){

//kode jika kesalahan yang ditangani ExceptionClass3 terjadi

}catch(ExceptionClass1 reference){

//kode jika kesalahan yang ditangani ExceptionClass3 terjadi

}finally {

//kode yang harus dijalankan, apapun kondisinya

}

​

​

​

32 of 52

33 of 52

Getting Information from Exception

34 of 52

Contoh: Kubus

35 of 52

Contoh: Kubus

36 of 52

Exception

  • Saat menggunakan try-cacth* apabila terjadi kesalahan pada blok try, maka hanya satu blok catch saja yang akan dieksekusi.
  • Apabila ada blok finally, maka eksekusi try atau salah satu catch, maka blok finally akan dieksekusi.

​

​

37 of 52

Exception

  • Pada eksepsi menggunakan try-cacth*, hirarki objek Exception dapat dimanfaatkan, dengan meletakkan kelas eksepsi khusus (subkelas) di awal.
  • Tidak disarankan meletakkan objek eksepsi yang umum kemudian khusus seperti contoh berikut:

try{

…

}catch(Exception e){

…

}catch(IOException ioe){

…

}

​

​

​

38 of 52

39 of 52

40 of 52

Exception

41 of 52

When to Use Exception?

  • Exception handling separates error-handling code from normal programming tasks, thus making programs easier to read and to modify. Be aware, however, that exception handling usually requires more time and resources.
  • An exception occurs in a method. If you want the exception to be processed by its caller, you should create an exception object and throw it. If you can handle the exception in the method where it occurs, there is no need to throw or use exceptions.

​

42 of 52

When to Use Exception? (cont.)

  • Use try-catch when you have to deal with unexpected error conditions. Do not use a try-catch block to deal with simple, expected situations.
  • For example, the following code

43 of 52

Review

  • Exception adalah …
  • Exception dapat didelegasikan kepada …
  • Bagaimana cara melakukan deklarasi, throwing, dan catching exception menggunakan?
  • Apakah blok finally selalu dieksekusi?

​

​

44 of 52

Asertion

03

45 of 52

Asersi

  • Asersi digunakan untuk meyakinkan bahwa eksekusi program dilakukan secara benar.
  • Namun tidak tertutup kemungkinan bahwa eksekusi tidak benar.
  • Asersi bernilai Boolean (true atau false).
  • Asersi bukan bagian dari implementasi, tetapi digunakan untuk keperluan debugging.
  • Asersi dapat di-enable maupun di-disable.

​

​

46 of 52

Asersi

  • Asersi (Java) dideklarasikan dengan:

assert ekspresiBoolean

atau

assert ekspresiBoolean: pesan

  • ekspresiBoolean diharapkan bernilai true atau false.
  • Jika ekspresiBoolean bernilai false, maka program akan menjalankan eksepsi AssertionError dan berhenti (terminate).

​

​

47 of 52

Asersi

  • Pada Java, asersi dapat di-enable ketika menjalankan program dengan cara sbb:

java –ea DemoAsersi

  • Secara default, asersi tidak diaktifkan (disable).
  • Asersi hanya di-enable pada saat pengembangan.
  • Asersi bukan bagian dari implementasi, semestinya tidak digunakan untuk mengubah state dari objek.

​

​

​

48 of 52

Contoh Asersi

49 of 52

Kesimpulan

  • Eksepsi adalah kondisi di luar kondisi normal eksekusi program, yang terjadi karena kesalahan tertentu.
  • Penanganan eksepsi (checked maupun unchecked) dapat dilakukan oleh objek-objek khusus dengan hirarki tertentu dan deklarasi tertentu.
  • Asersi digunakan untuk meyakinkan kondisi yang semestinya benar dan dimanfaatkan untuk debugging. Jadi, berbeda dengan eksepsi, asersi bukan bagian dari implementasi.

​

​

50 of 52

Referensi

  • Daniel Y. Liang, Introduction into Java Programming Comprehensive Version 10th Edition, 2015, Pearson.
  • Inggriani Liem, Diktat Kuliah Pemrograman Berorientasi Objek, ITB.
  • Panji Wisnu Wirawan, Indra Waspada, Satriyo Adhy. 2018. Buku Ajar Pemrograman Berorientasi Objek.
  • Vaskaran Sarcar. 2020. Interactive Object-Oriented Programming in Java.

​

​

51 of 52

Thanks!

Please keep this slide for attribution

CREDITS: This presentation template was created by Slidesgo, and includes icons by Flaticon, and infographics & images by Freepik

52 of 52