190 likes | 356 Views
Bab 3. Prinsip-prinsip Spesifikasi Rekabentuk. 3.3. Pengecualian dan Pengendalian Pengecualian. Pengecualian - sebarang peristiwa yang tidak dijangka atau hanya sesekali berlaku yang boleh dikesan oleh samada perkakasan atau perisian yang memerlukan perhatian.
E N D
Bab 3 Prinsip-prinsip Spesifikasi Rekabentuk
3.3. Pengecualian dan Pengendalian Pengecualian • Pengecualian - sebarang peristiwa yang tidak dijangka atau hanya sesekali berlaku yang boleh dikesan oleh samada perkakasan atau perisian yang memerlukan perhatian. • Contohnya, ralat masa-larian, disk read error, out-of-range array subscripts, pembahagian dengan 0, dan arithmetic overflow (bila suatu integer bernilai lebih besar dari yang disokong oleh perkakasan). • Pengecualian akan ditimbulkan atau diberi isyarat apabila perkara-perkara sebegini berlaku. • Untuk membezakan peristiwa yang dijangka dengan yang tak dijangka, aturcara perlu dibahagikan kepada beberapa unit
3.3. Pengecualian dan Pengendalian Pengecualian • Apabila berlakunya suatu pengecualian, kawalan akan dipindahkan kepada unit aturcara yang bersesuaian pengendali pengecualian(exception handler), yang akan menguruskanpengecualian tersebut • Pengendali pengecualian – suatu subaturcara atau jujukan kod yang direkabentuk untuk dilarikan apabila pengecualian tertentu berlaku supaya perlaksanaan aturcara boleh diteruskan. • Kebanyakan bahasa-bahasa pengaturcaraan tradisional tidak menyediakan bantuan dalam pengendalian ini.
3.3. Pengecualian dan Pengendalian Pengecualian • Isu-isu penting yang perlu dipertimbangkan dalam pengendalian pengecualian: • Bagaimana pengecualian yang ditakrifkan oleh pengguna ditentukan, dan apakah skopnya? • Bagaimana suatu pengecualian itu ditimbulkan? • Bagaimana kita menentukan unit-unit yang perlu dilarikan apabila pengecualian timbul? • Bagaimana pengecualian yang timbul diikat kepada pengendali pengecualian? • Adakah ralat yang boleh dikesan oleh perkakasan dianggap sebagai pengecualian yang boleh kendalikan? • Should it be possible to disable exceptions? • Di mana kawalan aliran aturcara selepas suatu pengecualian dipindahkan?
3.3. Pengecualian dan Pengendalian Pengecualian • Kebanyakan bahasa menyediakan kemudahan (ditakrifkan oleh bahasa) untuk menggunakan pengendali pengecualian secara eksplisit. • Terdapat juga pengecualian yang ditakrifkan oleh pengguna • Pengecualian seperti ini perlu diisytiharkan sepertimana objek data yang lain dan hanya wujud di dalam skop pengisytiharannya • Suatu subaturcara yang boleh memberikan isyarat pengecualian seperti ini akan dikodkan dengan menggunakan suatu parameter return tambahan (spt suatu integer). • Parameter ini akan memberikan kod pengecualian (cth: 0 jika tiada pengecualian, 1 untuk pengecualian pertama, dan seterusnya).
3.3. Pengecualian dan Pengendalian Pengecualian • Dalam kes ini subaturcara yang memanggil akan menguji secara eksplisit kod pengecualian ini selepas setiap panggilan, dan akan memindahkan kawalan kepada pengendali pengecualian yang bersesuaian. • Pengendali pengecualian takrifan pengguna in bersifat seperti subaturcara(fungsi) takrifan pengguna, yang mana ia boleh menerima parameter. • Beza di antara subaturcara dengan pengendali pengecualian adalah dari segi pemindahan kawalan selepas perlaksanaannya tamat. • Bagi subaturcara, kawalan akan dipindahkan kepada pernyataan arahan selepas pernyataan panggilannya, manakala bagi pengendali pengecualian, kawalan mungkin akan berpindah ke temapat lain atau ditamatkan.
3.3. Pengecualian dan Pengendalian Pengecualian • Misalnya dalam mekanisma pengendalian pengecualian menggunakan bahasa BASIC, pernyataan ON ERROR GOTO 100 Akan memindahkan kawalan ke pernyataan pada baris ke 100, sekiranya berlaku ralat. Pada baris ke 100, segmen pengendali pengecualian ditulis, yang akan diakhiri dengan salah satu dari 3 pernyataan di bawah: • RESUME - Ini akan memindahkan kawalan balik kepada baris permulaan dim ana ralat berlaku • RESUME NEXT - Ini akan memindahkan kawalan ke baris berikutnya selepas baris dim ana ralat berlaku • RESUME nombor_baris - Ini akan memindahkan kawalan ke baris yang dinyatakan nombornya
3.3. Pengecualian dan Pengendalian Pengecualian • Pengendalian pengecualian yang disokong oleh BASIC adalah sangat asas, dan mempunyai beberapa kelemahan seperti berikut • Hanya satu pengendali pengecualian yang boleh widujudkan pada satu masa • Hanya ralat tertentu yang telah ditetapkan boleh dikendalikan • Tiada pengecualian takrifan pengguna yang boleh ditakrifkan • Antara bahasa pengaturcaraan yang menyediakan pengedali pengecualian termasuk Ada, C++, CLU-OOL, Eiffel, Java, Mesa, ML, dan PL/1
3.3. Pengecualian dan Pengendalian Pengecualian • Kelebihan mempunyai mekanisma pengendalian pengecualian dalam sesuatu bahasa adalah: • Tidak perlu menulis kod untuk mengesan peristiwa yang tidak dijangka dengan banyak atau berulangkali mengelak dari menjadikan aturcara rumit • Mekanisma pengendalian pengecualian membolehkan suatu pengendali pengecualian digunakan oleh banyak unit-unit program lain • Dengan pengecualain, ini menggalakkan pengguna / pengaturcara mempertimbangkan semua peristiwa yang mungkin berlaku semasa perlaksanaan aturcara dan bagaimana untuk mengatasinya. • Pengendalian pengecualian membezakan di antara kod pengendalian ralat dengan kod untuk tugas-tugas yang lain di dalam aturcara aturcara mudah dibaca dan dimodifikasi
3.3.1. Rekabentuk dan Implimentasi • Suatu bahasa mungkin membenarkan penggantungan pengecualian(disabling of exceptions) dan sebaliknya. • Ini diperlukan dalam kes-kes di mana pengujian pengecualian yang dilakukan memakan masa dan kos yang tinggi, berbanding dengan kesannya (tidak wajar) • Contohnya, penyemakan samada indeks yang digunakan untuk suatu tatasusunan berada di dalam julatnya. • Penggantungan ini berlaku semasa kompilasi, di mana kod-kod yang diperlukan untuk mengimplimenkan pengecualian ini tidak akan dijana • Secara amnya, setiap pengendali pengecualian adalah suatu blok pernyataan yang diikat kepada suatu pengecualian. • Untuk pengecualain yang ditakrifkan oleh bahasa, pengikatan ini berasaskan nama dan kekal
3.3.1. Rekabentuk dan Implimentasi • Pengecualian yang ditakrifkan oleh pengguna pula diikat kepada nama mereka pada pengisytiharan, dan pengikatan hanya wujud di dalam skop pengisytiharan tersebut. • Pengikatan pengecualian kepada pengendali pengecualiannya boleh mengikut salah satu dari model berikut: • Blok pengendali pengecualian diikat kepada pengecualian di dalam skop subaturcara melalui suatu pengisytiharan yang dinyatakan pada subaturcara pengecualian diisyhtiharkan dan diumpukkan pengendali pegecualian dalam bahagian pengisytiaran subaturcara. Dalam model ini, pengikatan pengendali pengecualian akan wujud di sepanjang skop subaurcara.
3.3.1. Rekabentuk dan Implimentasi • Contoh pseudokod: Subaturcara A E1, E2 : Pengecualian Pengendali pengcualian E1 adalah { H1 blok pernyataan } Pengedali pengecualian E2 adalah { H2 blok pernyataan } Subaturcara B E1, E3 : pengecualian Pengedali Pengecualian E1 adalah { H3 blok pernyataan } Pengedali pengecualian E3 adalah { H4 blok pernyataan }
3.3.1. Rekabentuk dan Implimentasi Mula B { blok pernyataan } Pengendali pengecualian bagi E1 adalah H3 Pengendali pengecualian bagi E2 adalah H2 Pengendali pengecualian bagi E3 adalah H4 Tamat B Mula { blok pernyataan } Pengendali pengecualian bagi E1 adalah H1 Pengendali pengecualian bagi E2 adalah H2 Subaturcara B Tamat A • Model seperti ini diimplemenkan dalam Ada
3.3.1. Rekabentuk dan Implimentasi • Pengendali pengecualian ialah suatu subprogram di luar skop subaturcara yng boleh memberikan isyarat pengeculiannya komunikasi dilakukan melalui parameter. Pengikatan pengecualain kepada pengendalinya dilakukan melalui pernyataan perlaksanaan yang bersifat seperti pernyataan umpukan. • Contoh pseudo kod: Subaturcara A E1, E2 : Pengecualian Subaturcara B E3 : Pengecualian
3.3.1. Rekabentuk dan Implimentasi Mula B Pengendali pengecualian bagi E1 adalah H1 (pertama) atau H4 (kedua) Pengendali pengecualian bagi E2 adalah H2 (pertama) atau H5 (kedua) Ikat Pengecualian E3 kepada { H3 blok pernyataan } Pengendali pegeculaian bagi E3 adalah H3 Tamat; B
3.3.1. Rekabentuk dan Implimentasi Mula A Ikat pegecualian E1 kepada { H1 blok pernyataan } Pengendali pengecualian E1 adalah H1 Ikat pengecualian E2 kepada { H2 blok pernyataan } Pengendali pengecualian E2 adalah H2 Subaturcara B Ikat pengecualian E1 kepada { H4 blok pernyataan } Pengendali pengecualian bagi E1 adalah H4 Ikat pengecualian E2 kepada { H5 blok pernyataan } Pengendali pengecualian bagi E2 adalah H5 Subaturcara B Tamat; A
3.3.1. Rekabentuk dan Implimentasi • Dalam contoh sebelum ini, pengecualian E1 dan E2 mempunyai ikatan yang berbeza dalam panggilan pertama dan kedua • Selepas isyarat pengecualian diberikan dan dikendalikan oleh pengendali penecualian , kawalan perlaksanaan akan dipindahkan kepada bahagian lain di dalam aturcara ataupun mungkin ditamatkan. Kes di mana perlaksanaan aturcara diteruskan selepas pengecualian penyambungan pengecualian(continuation of the exception). • Ada dua pendekatan bagaimana penyambungan ini dilakukan: • Model pengembalian (Resumption model • Model Penamatan (Termination Model)
3.3.1. Rekabentuk dan Implimentasi • Model pengembalian(Resumption model) – • Kawalan dikemballikan kepada subaturcara yang memberikan isyarat pengecualian • Dalam kes ini, pengendali pengecualian boleh membuat pembaikan sewajarnya supaya perlaksanaan boleh diteruskan • Ada dua pilihan bagaimana perlaksanaan aturcara diteruskan; samada dengan melaksanakan semula pernyataan yang menimbulkan pengecualian, atau melaksanakan pernyataan selepas pernyataan yang menimbulkan pengecualian • Walaupun kaedah ini fleksibel dan menjadikan aturcara lebih berkuasa, ia boleh menggalakkan amalan pengaturcaraan yang tidka selamat. • Pendekatan ini diimplemenkan dalam bahasa PL/1 dan Mesa
3.3.1. Rekabentuk dan Implimentasi • Model Penamatan (Termination Model) – • Menamatkan perlaksanaan subaturcara yang menimbulkan isyarat pengecualian dan mengembalikan kawalan kepada subaturcara yang memanggil • Pendekatan ini merupakan yang paling mudah, dan paling baik bagi kebanyakan keadaan pengecualian • Pendekatan ini diimplemenkan oleh bahasa Bliss, CLU, ML, dan Ada.