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
EXCEPTION HANDLINGPertemuan 11
Matakuliah : Konsep Bahasa PemrogramanTahun : 2010
Bina Nusantara University
3
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
– 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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