37

EXCEPTION HANDLING Pertemuan 11

  • Upload
    alessa

  • View
    144

  • Download
    13

Embed Size (px)

DESCRIPTION

EXCEPTION HANDLING Pertemuan 11. Matakuliah: Konsep Bahasa Pemrograman Tahun: 2010. Outline Materi. Exception Handling EH di PL/I EH di Ada EH di C++ EH di Java. Exception Handling. EH Awalnya di desain di PL/I (ANSI 76). Bahasa tanpa EH - PowerPoint PPT Presentation

Citation preview

Page 1: EXCEPTION HANDLING Pertemuan 11
Page 2: EXCEPTION HANDLING Pertemuan 11

EXCEPTION HANDLINGPertemuan 11

Matakuliah : Konsep Bahasa PemrogramanTahun : 2010

Page 3: EXCEPTION HANDLING Pertemuan 11

Bina Nusantara University

3

Outline Materi

• Exception Handling • EH di PL/I• EH di Ada• EH di C++• EH di Java

Page 4: EXCEPTION HANDLING Pertemuan 11

Exception Handling•EH Awalnya di desain di PL/I (ANSI 76). •Bahasa tanpa EH

– Jika eksepsi muncul, kendali kembali ke OS dimana pesan ditampilkan dan program berakhir

•Bahasa dengan EH – Program dapat menangani eksepsi dengan

kemungkinan untuk memperbaikinya dan kontinu

Bina Nusantara University 4

Page 5: EXCEPTION HANDLING Pertemuan 11

Konsep Dasar• Banyak bahasa mengijinkan program menangani

eror i/o termasuk EOF • Exception adalah kejadian tak biasa, eror atau

bukan, dideteksi oleh hardware atau software, yang butuh penanganan khusus

• Pemrosesan khusus yang mungkin dbutuhkan sesudah deteksi eksepsi disebut exception handling (EH)

• Unit kode EH disebut exception handler

Bina Nusantara University 5

Page 6: EXCEPTION HANDLING Pertemuan 11

Alternatif EH• Eksepsi dimunculkan ketika eror terjadi • Bahasa yang tidak mempunyai EH tetap dapat

mendefinisikan , deteksi , memunculkan dan menangani eksepsi (user defined, software detected)

• Alternatif – Kirim parameter tambahna atau gunakan nilai balik untuk

menyatakan status balik subprogram. Di C, nilai balik digunakan sebagai indikator eror

– Kirim parameter label ke semua subprograms. Biasa di FORTRAN

– Kirim EH subprogram ke semua subprograms. Masalah dibutuhkan untuk mengirim handler untuk setiap call.

Bina Nusantara University 6

Page 7: EXCEPTION HANDLING Pertemuan 11

Keuntungan bulit-in Handler• Tanpa handler, kode deteksi eror sulit ditulis dan

membuat program makin ruwet • Penyebaran eksepsi dapat ditangani oleh satu

handler, i.e, gunakan kembali handler untuk penyebaran eksepsi

• Mendorong user untuk mempertimbangkan event yang dapat muncul selama eksekusi

• Situasi tak biasa dapat disederhanakan oleh handler

Bina Nusantara University 7

Page 8: EXCEPTION HANDLING Pertemuan 11

Isu Desain• Bagaimana dan dimana handler dispesifikasi dan apa lingkupnya?• Bagaimana kemunculan eksepsi diikat ke handler?• Dimana eksekusi kontinu sesudah handler selesai dieksekusi?• Bagaimana user-defined exceptions dispesifikasi?• Perlukah ada default handler untuk program yang tidak bisa

menyediakannya? • Apakah ada bulit-in eksepsi? Dapatkah ia di-raise secara eksplisit?• Apakah hardware-detectable errors diperlakukan sebagai eksepsi

yang perlu ditangaini?• Bagaimana eksepsi di-disable?

Bina Nusantara University 8

Page 9: EXCEPTION HANDLING Pertemuan 11

Isu #1• void example() {

…average = sum / total;… return// exception handler

when zero_devide {average = 0;printf(“ERROR – divisor (total) is zero\n”);

}}

• Bentuk handler– Unit program utuh – Segmen Kode

• Dicangkokkan di unit yang memunculkan EH• Dicangkokkan di unit berbeda

Bina Nusantara University 9

Page 10: EXCEPTION HANDLING Pertemuan 11

Isu #1 (lanjutan)• Jika handler adalah unit terpisah dan bahasa

menggunakan static scoping, handler juga menggunakan static scoping dan komunikasi kedua unit sederhana

• Jika unit terpisah diluar lingkup maka komunikasi melalui parameter.

Bina Nusantara University 10

Page 11: EXCEPTION HANDLING Pertemuan 11

EH di PL/I• Built in eksepsi dan user defined eksepsi • Bentuk eksepsi user defined

ON condition [SNAP]

begin … end

• Pengikatan eksepsi ke handler: dinamik dispesifikasi oleh ON• Kontinuasi

– Kembali ke pernyataan yang menyebabkan eksepsi – Program berakhir – Kendali kembali ke sembarang lokasi di program

• Bentuk lain eksepsi user definedCONDITION exception_name

• Harus di-raise secara eksplisit oleh SIGNAL CONDITION (exception_name)

Bina Nusantara University 11

Page 12: EXCEPTION HANDLING Pertemuan 11

EH di PL/I (lanjutan)• Ada 22 built in eksepsi mulai dari eror aritmatika (dibagi nol) sampai eror

pemrograman (rentang subscript)• Kategori

– Selalu enabled– Enabled by default tetapi disabled by user code– Disabled by default tetapi enabled by user code

• Evaluasi– Desain powerful dan luwes – Costly: pengikatan dinamik eksepsi ke handler dapat membuat masalah dalam

writeability / readability. Solusi : gunakan pengikatan statik (Goodenough, 1975)– Masalah dengan fleksibilitas kontinuasi

• Sulit diimplementasikan• Mengganggu readability• Sulit dipelajari untuk penggunaan yang efektif

Bina Nusantara University 12

Page 13: EXCEPTION HANDLING Pertemuan 11

EH di Ada• Handler di Ada dapat muncul di subprogram, package, task, atau

block• Karena biasanya handler lokal ke kode, mereka tidak punya

parameter • Bentuk handler:

when exception_choice{|exception_choice} => statement_sequence

dimana { } berarti left out atau ulangi • Bentuk exception_choice

exception_name | others• Handler diletakkan diakhir block, subprogram atau unit, package atau

task di mana mereka muncul

Bina Nusantara University 13

Page 14: EXCEPTION HANDLING Pertemuan 11

Pengikatan Eksepsi ke Handler• Pengikatan statik • Jika blok atau unit dimana eksepsi muncul tidak mempunyai

handler untuk eksepsi, eksepsi menyebar kemana saja untuk ditangani – Procedures – menyebar ke caller– Blocks – menyebar ke lingkup di mana ia muncul – Package body – menyebar ke bagian deklarasi unit yang

mendeklarasikan paket; jika ia unit library , program berakhir – Task – tak ada penyebaran; jika ia punya handler, eksekusi; dalam hal

apapun, tandai dengan "completed"

• Kontinuasi : blok atau unit yang memunculkan eksepsi tetapi tidak dapat menanganinya selalu berakhir.

Bina Nusantara University 14

Page 15: EXCEPTION HANDLING Pertemuan 11

Isu Desain lain• Bentuk user-defined exceptions:exception_name_list : exception;

diperlalukan sebagai built in exception• Bentuk raising exceptions :raise [exception_name]– (nama eksepsi tidak dibutuhkan jika ia dalam handler—dalam hal

ini ia menyebarkan eksepsi yang sama )

• Kondisi eksepsi dapat di-disable dengan:pragma SUPPRESS(exception_list)

dimana pragma adalah directive ke kompilator

Bina Nusantara University 15

Page 16: EXCEPTION HANDLING Pertemuan 11

Eksepsi predefine/built-in• CONSTRAINT_ERROR – konstrain indeks, konstrain

range dsb. • NUMERIC_ERROR – operasi numerik tak dapat

mengembalikan nilai yang benar (overflow, pembagian dengan nol, dsb.)

• PROGRAM_ERROR – penggil subprogram yang body tidak dielaborasi

• STORAGE_ERROR – sistem runs out of heap• TASKING_ERROR - eror berasosiasi dengan task

Bina Nusantara University 16

Page 17: EXCEPTION HANDLING Pertemuan 11

Evaluasi• Desain Ada untuk EH merupakan state-of-the-art

di-1980-an• Lebih maju daripada PL/I• Ada adalah bahasa yang digunakann secara luas

sampai ditambahkannya EH di C++

Bina Nusantara University 17

Page 18: EXCEPTION HANDLING Pertemuan 11

EH di C++• Ditambahkan ke C++ tahun 1990• Desain berdasarkan pada CLU, Ada, dan ML• Lingkup handler di Ada dispesifikasi oleh blok atau unit program sedangkan

di oleh try-construct.• Bentuk handler:

try {-- kode yang diduga memunculkan eksepsi }catch (formal parameter) {-- kode handler}...catch (formal parameter) {-- kode handler}

Bina Nusantara University 18

Page 19: EXCEPTION HANDLING Pertemuan 11

Fungsi catch• catch adalah nama semua handler—ia adalah

nama overloaded , sehingga parameter formal harus unik

• Parameter formal tidak butuh variable seperti dalam parameter fungsi

• Parameter formal dapat digunakan untuk mengirim informasi ke handler

• Parameter formal dapat ellipsis (…), yang berarti menangani semua eksepsi yang tidak tertangani

Bina Nusantara University 19

Page 20: EXCEPTION HANDLING Pertemuan 11

Eksepsi throw• Semua eksepsidi-raise oleh pernyataan throw [expression];

• Brackets [ ] adalah metasymbol, i.e. ekspresi bersifat opsional

• throw tanpa operan hanya dapat muncul di handler; jika muncul, ia re-raise eksepsi yang kemudian ditangani disembarang lokasi

Bina Nusantara University 20

Page 21: EXCEPTION HANDLING Pertemuan 11

Eksepsi tak tertangani dan Kontinuasi• Eksepsi tak tertangani disebar ke pemanggil fungsi di mana dia di-raise• Penyebaran berlanjut ke fungsi main • Jika tak ada handler ditemukan, program berakhir • Kontinuasi

– Sesudah handler menyelesaikan eksekusinya, alir kendali kembali ke pernyataan pertama sesudah handler terakhir dalam sekuen handler

– Pilihan desain lain • Semua eksepsi adalah user-defined• Eksepsi tidak dispesisikasi maupun dideklarasi • Fungsi dapat mendaftar eksepsi yang mereka raise• Tanpa spesifkasi, fungsi dapat me-raise sembarang eksepsi (klausa throw)

Bina Nusantara University 21

Page 22: EXCEPTION HANDLING Pertemuan 11

Isu Desain Lain dan Evaluasi• Hanya ada eksepsi user defined • Tak ada default handler• Fungsi dapat me-list tipe eksepsi

int fun() throw(int, char *) {

…}

menentukan bahwa fun() memunculkan eksepsi tipe int dan char *• Evaluasi

– Pengikatan statik – Ganjil karena tak bernama – Tak ada built in hardware handler– Eksepsi tak tertangani disebar ke pemanggil – Pengikatan eksepsi ke handler melalui tipe parameter tidak mempromosikan

readability

Bina Nusantara University 22

Page 23: EXCEPTION HANDLING Pertemuan 11

EH di Java• Berdasarkan C++, tetapi lebih sejalan dengan

konsep POO • Semua eksepsi adalah obyek class yang

merupakan turunan dari klas Throwable

Bina Nusantara University 23

Page 24: EXCEPTION HANDLING Pertemuan 11

Class Eksepsi• Kepustakaan Java memuat dua subclasse dari Throwable :– Error

• Dilempar oleh Java interpreter untuk events seperti heap overflow

• Tidak pernah ditangani oleh user programs– Exception

• User-defined exceptions biasanya subclasses-nya • Mempunyai dua predefined subclasses, IOException dan RuntimeException (e.g., ArrayIndexOutOfBoundsException dan NullPointerException

Bina Nusantara University 24

Page 25: EXCEPTION HANDLING Pertemuan 11

Handler di Java• Seperti C++, kecuali setiap catch memerlukan

nama parameter dan setiap parameter harus turunan dari Throwable

• Sintaks klausa try sama dengan C++• Eksepsi dilempar dengan throw, tetapi throw

memuat operator new untuk membentuk obyek seperti dalam :throw new MyException();

Bina Nusantara University 25

Page 26: EXCEPTION HANDLING Pertemuan 11

Pengikatan Eksepsi ke Handler• Lebih sederhana daripada di C++

– Eksepsi diikat ke handler pertama dengan parameter adalah class yang sama atau ansestor darinya

• Eksepsi dapat ditangani atau dilempar kembali dengan memasukkan throw dalam handler

Bina Nusantara University 26

Page 27: EXCEPTION HANDLING Pertemuan 11

Kontinuasi• Jika tak ada handler ditemukan dalam konstruksi try

pencarian dilanjutkan konstruksi try terdekat dst• Jika tak ada handler ditemukan dalam metode

eksepsi menyebar ke pemanggil metode • Jika tak ada handler ditemukan program berakhir • Untuk meyakinkan bahwa semua eksepsi ditangkap,

handler dapat dimasukkan ke sembarang konstruksi try yang menangkap semua eksepsi

Bina Nusantara University 27

Page 28: EXCEPTION HANDLING Pertemuan 11

Eksepsi dicek dan tak dicek• Klausa Java throws jauh berbeda dari klausa throw C++

• Eksepsi class Error dan RunTimeException dan semua turunannya disebut unchecked exceptions

• Semua eksepsi lain disebut checked exceptions• Checked exceptions yang mungkin dilempar oleh

metode harus berbentuk – Didaftar di klausa throws atau – Ditangani di metode

Bina Nusantara University 28

Page 29: EXCEPTION HANDLING Pertemuan 11

Isu Desain Lain• Metode tak dapat men-declare lebih banyak

eksepsi di klausa throws nya daripada metode di-overrides

• Metode yang memanggil checked exception khusus dalam klausa throws mempunyai tiga alternatif untuk berhubungann dengan eksepsi :– Tangkap dan tangani eksepsi – Tangkap eksepsi dan lempar eksepsi yang terdaftar dalam

klausa throw – Deklarasikan di dalam klausa throw dan jangan tangani

Bina Nusantara University 29

Page 30: EXCEPTION HANDLING Pertemuan 11

Klausa finally• Dapat muncul diakhir konstruksi try • Bentuk:

finally {

...

}

• Tujuan: untuk menspesifikasi kode yang akan dieksekusi, abaikan apa yang terjadi dalam konstruksi try

Bina Nusantara University 30

Page 31: EXCEPTION HANDLING Pertemuan 11

Contoh• Konstruksi try dengan klausa finally try {

for (index = 0; index < 100; index++) {…if (…) {

return;} //** end of if

} //** end of try clausefinally {

…} //** end of try construct

Bina Nusantara University 31

Page 32: EXCEPTION HANDLING Pertemuan 11

Assertion• Pernyataan dalam program tipe boolean yang

mengindikasikan current state komputasi • Jika TRUE , tak terjadi apa-apa • Jika FALSE eksepsi AssertionError dilempar • Dapat di-disable selama eksekusi tanpa modifikasi

program atau kompilasi ulang • Dua bentuk

– assert condition;– assert condition: expression;

Bina Nusantara University 32

Page 33: EXCEPTION HANDLING Pertemuan 11

Evaluasi• Tipe eksepsi lebih berarti daripada kasus C++• Klausa throws lebih baik daripada di C++ (Klausa throw di C++ sedikit dketahui oleh pemrogram)

• Klausa finally kerap bermanfaat • Interpreter Java melempar berbagai eksepsi yang

dapat ditangani oleh program yang dibuat pengguna

Bina Nusantara University 33

Page 34: EXCEPTION HANDLING Pertemuan 11

LATIHANA. Soal Pilihan 1. Komunikasi data task dilakukan melalui

a. shared nonlocal dan parameter b. parameter dan message passingc. message passing dan shared nonlocal d. shared nonlocal, parameter dan message passing

2. Orang yang mengusulkan penggunanan static binding antara exception dan handler adalaha. J.B. Goodenough b. C.A.J. Hoarec. E.W. Dijkstra d. B. Stroustrop

3. Exception handling di C++ berbeda dengan di Ada dalam hala. no built in exception dan not named user defined exceptionb. there exist built in exception dan not named user defined exceptionc. no built in exception dan named user defined exceptiond. there exist built in exception dan named user defined exception

Bina Nusantara University 34

Page 35: EXCEPTION HANDLING Pertemuan 11

LATIHAN 4. Semua handler di C++ mempunyai nama yang sama yaitu

catch. Kasus ini dikenal sebagaia. overvalue name b. overloaded namec. polymorphic name d. trivial name

5. Exception handling di C++ mirip dengan di Ada dalam hala. binding static dan menyebar ke function callerb. binding dynamic dan menyebar ke function callerc. binding static dan menyebar ke main function d. binding dynamic dan menyebar ke main function

Bina Nusantara University 35

Page 36: EXCEPTION HANDLING Pertemuan 11

LATIHANB. Soal Uraian

1. Definisikan exception, exception handling, raising an exception, disabling an exception, continuation dan built in exception. Tulislah penggalan kode untuk mengkonstruksi exception handlers di C++. Jelaskan mengapa mekanisme exception handling di Java lebih baik daripada di C++.

  2. Bagaimana exception handler di tulis di C++ sehingga ia

dapat menangani semua exception?

Bina Nusantara University 36

Page 37: EXCEPTION HANDLING Pertemuan 11

Ringkasan • Ada menyediakan fasilitas EH yang ekstensif berupa

sekumpulan eksepsi built-in yang komprihensif• C++ tidak menyediakan predefined exceptions.

Eksepsi diika ke handler dengan menghubungkan tipe parameter dalam pernyataan throw ke parameter formal dalam fungsi catch

• Eksepsi Java mirip dengan C++ kecuali bahwa eksepsi Java harus turunan dari klas Throwable. Java juga memuat klausa finally

Bina Nusantara University 37