error handle-oop(รูปแบบและลักษณะการ error...

26
1 กกกกกกกกก กกกกกกกกกกก Error Handling @wong::The hard core idea system

Upload: anekwong-yoddumnern

Post on 10-Jun-2015

522 views

Category:

Education


0 download

DESCRIPTION

ความเข้าใจปัญหาการ error ในโปรแกรมและการป้องกันการเกิด error ในลักษณะการดักจับ Error

TRANSCRIPT

Page 1: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

1

การจั�ดการความผิ�ดพลาด

Error Handling

@wong::The hard core idea system

Page 2: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

2

ว�ตถุ�ประสงค�

เพ��อศึ�กษาประเภทของข อผิ�ดพลาดเพ��อศึ�กษาการเก�ดและการควบค�มข อผิ�ดพลาดเพ��อศึ�กษาการจั�ดการข อผิ�ดพลาด

Page 3: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

3

ประเภทของข อผิ�ดพลาด

Syntax ErrorRun-Time ErrorLogical Error

Page 4: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

4

Syntax Error

เป#นการผิ�ดพลายชน�ดร ายแรง เน��องจัากผิ�ดหล�กหร�อโครงสร างของภาษา (Syntax or

Symmetric) ความผิ�ดพลาดประเภทน*+ไม-สามารถุคอมไพล�ได เลย เช-น การไม-ได ป.ดค/าส��งด วย ; เช-น System.out.Print(“Hello”)

Page 5: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

5

Run – Time Error

เป#นความผิ�ดพลาดท*�ไม-ร ายแรง ความผิ�ดพลาดประเภทน*+โปรแกรมสามารถุคอมไพล�ได แต- run ไม-ได เช-น การหารด วย 0 หร�อการอ างขอบเขตของ Array เก�นกว-าท*�ก/าหนดไว

1. class TestError {2. public static void main(String s[]){3. System.out.Print(“Hello” +s[0]);4. }5. }

Page 6: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

6

Logical Error

เป#นความผิ�ดพลาดท*�ตรวจัพบยากมากเน��องจัากโปรแกรมสามารถุท/างานได ตามปกต�แต-ผิลล�พธ์�ท*�ออกน�+นไม-ตรงก�บความเป#นจัร�ง หร�อให ผิลล�พธ์�ท*�ไม-สอดคล องก�น เด�อนก�มภาพ�นธ์� ม* 30 ว�น เป#นต น

Page 7: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

7

การเก�ด Error

โดยส-วนมากแล วการเก�ด Error ในโปรแกรมน�+นสาเหต�ใหญ่- ค�อ การเก�ดจัากมน�ษย� ไม-ว-าจัะเป#น Error อย-างใดก3ตาม ด�งน*+ จั�ดท*�สามารถุป4องก�น Error เหล-า

น*+จั�งสามารถุท/าได ต�+งแต-การว�เคราะห�หร�อการท/าความเข าใจัก�บระบบงานเด�ม จันกระท��งถุ�งการ

ตรวจัสอบระบบงาน แต-อย-างไรก3ตามกลไกของภาษาเองก3สามารถุช-วยในการตรวจัสอบความผิ�ดพลาดได ต�+งแต-ในระด�บของ Syntax Error และ Run-Time Error โดยอาจัแจั งในร5ปของ Error หร�อ warning

ตามล/าด�บ

Page 8: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

8

กลไกการตรวจัสอบ

ในภาษา assembly จัะม*ค/าส��ง Interrupt ซึ่��งม*การท/างานด�งน*+

interrupt

Process to handle interrupt

Page 9: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

9

ป7ญ่หาการน/า Interrupt ไปใช ในภาษาระด�บส5งในภาษาระด�บส5งบางคร�+งการเก�ด Interrupt น�+นไม-

สามารถุบอกได ว-าเก�ดข�+น ณ ท*�ใดและเม��อม*การหย�ดการท/างานแล ว ม*การHandle เร*ยบร อยแล ว การกล�บมาท/างานบางคร�+งไม-สามารถุกล�บมาท/างานในต/าแหน-งท*�หย�ดได

ภาษระด�บส5งท*�ใช interpreter ก3อาจัสามารถุใช Interrupt ได เช-นใน Basic ท�+งน*+เน��องจัาก Operation ของภาษาระด�บส5งค�อประโยค ท�+งน*+จัากการแปลภาษาท*�แปลท*ละบรรท�ดจั�งร�บร5 ว-าบรรท�ดไหนท*�ม*ความผิ�ดพลาดเก�ดข�+น

Page 10: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

10

กลไกการตรวจัสอบในภาษาข�+นส5งในภาษาข�+นส5งเองก3ม*กลไกการจั�ดการและการตรวจั

สอบเช-นเด*ยวก�นก�บ assembly ซึ่��งจัะอ/านวยความสะดวกอย-างมากในการเข*ยนโปรแกรม เช-น ในภาษา

Ada เองก3ม* Exception

ซึ่��งจัะเป#นล�กษณะของ Static Exception

กล-าวค�อ เม��อโปรแกรม(อย5-ภายใต begin –

end block) ท/างานถุ�งจั�ดท*�ผิ�ดพลาด ก3จัะเร*ยกใช หร�อใช งานการ when Exception ท*�

ตรง ก�บ Exception ท*�เก�ดข�+น เม��อท/างานเสร3จั แล วก3จัะไปย�งค/าส��ง end เพ��อท/างานต-อ

begin <Statements>exception when exception1 = > <Statements> ; when exception1 = > <Statements> ; other => <Statements> ; end;

Page 11: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

11

กลไกการตรวจัสอบของภาษาจัาวา

จัาวาได ร�บเอา Exception Handling เข ามาเป#นส-วนหน��งของภาษาโดยคอมไพเลอร�จัะท/าการตรวจัสอบการใช งาน exception handling อย-างเคร-งคร�ด ซึ่��งภาษาจัาวาม*ร5ปแบบการใช งาน exception ด�งน*+

try {<statements>;}

catch (Throwable1 t) {<statements>;}

catch (Throwable2 t) {<statements>;}

catch (Throwable3 t) {<statements>;}

Page 12: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

12

การท/างาน exception handling

จัะคล ายก�บ Ada น�+นค�อ ประโยคท*�อย5-ใน try block น�+นจัะเป#นประโยคท*�ท/างานตามปกต� หากท/างานจันจับประโยค โดยไม-ม*ความผิ�ดพลาดเก�ดข�+น ก3จัะท/างานท*�ค/าส��งหล�งประโยค catch block อ�นส�ดท าย แต-ถุ าหากม* error เก�ดข�+นใน try block โปรแกรมจัะหย�ดท/างานท*�บรรท�ดน�+น แล วสร าง instance ของ error หร�อ exception และ throws ไปย�งต/าแหน-งท*�ม*ความผิ�ดพลาดถุ าประโยคท*�ม*ความผิ�ดพลาดน�+นม* catch block ท*�ม*ค-าพาราม�เตอร�ตรงก�บ exception ท*�เก�ดข�+นประโยคใน catch block น�+นก3ถุ5กท/างาน จัากน�+นโปรแกรมจัะท/างานในค/าส��งหล�งประโยค catch block อ�นส�ดท าย

Page 13: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

13

การท/างาน exception handling

หาก exception ท*�ถุ5ก throws ออกมาจัากประโยคใน try block ท*�ไม-ม* catch block ด�กจั�บ exception จัะถุ5กส-งออกมาจัากเมธ์อดท*�เก�ดความผิ�ดพลาดไปย�งเมธ์อดท*�เร*ยกใช งาน ซึ่��งเร*ยกว-า exception propagation ถุ าเมธ์อดท*�เร*ยกใช น�+นม*การจั�บ exception น�+นไปจั�ดการขบวนการก3ส�+นส�ด แต-ถุ าไม-ม*ก3จัะเก�ด propagation ไปเร��อย ๆ จันถุ า exception ออกจัาก main แล วก3จัะถุ5ก java interpreter จั�ดการ ด�งน*+

1 .พ�มพ� exception

2. พ�มพ� activation stack เพ��อให ร5 ถุ�งจั�ดก/าเน�ดและเส นทาง propagation

3. หย�ดการท/างานของ JVM

Page 14: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

14

main()

Method 1

Method 2

call

call

Exception

Exception

พ�มพ� exceptionพ�มพ� activation

stack หย�ดการท/างาน

ของ JVM

Page 15: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

15

main()

Method 1

Method 2

call

call

Exception

ด/าเน�นการตามท*�ได ด�กจั�บ Exception

Page 16: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

16

ข อแตกต-างระหว-าง Interrupt และ ExceptionInterrupt น�+นสามารถุเก�ดข�+นท*�เวลาใดก3ได บรรท�ดใดก3ได Exception น�+นเก�ดข�+นก�บประโยคบางประเภทบางล�กษณะ

เท-าน�+น

ประโยชน�ท/าให การเข*ยนน�+นโปรแกรมน�+นง-ายข�+นเน��องจัากม*การ

จั/าแนกและคาดการณ�ล-วงหน าถุ�งค/าส��งท*�จัะเก�ด error ได ง-าย

ข อเส*ยOverhead ส5ง

Page 17: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

17

ต�วอย-าง

1. class ArrayOut {

2. public static void main(String s []) {

3. System.out.println("Hello " + s[0]);

4. }

5. }

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at ArrayOut.main(ArrayOut.java:3)

Page 18: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

18

การเพ��ม exception handling

1. class ArrayOut {2. public static void main(String s []) {3. try 4. { System.out.println("Hello " + s[0]); } 5. catch (ArrayIndexOutOfBoundsException e)6. { System.out.println("Please try again" +7. "with command line"); }8. }9. }

Page 19: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

19

ต�วอย-าง

1. class TestExcep {2. static void f(){int x = 0; float y = 1/x; }3. public static void main(String s[]){4. try{5. f(); 6. }catch (Exception e){7. System.out.println("Error

divice by 0" + e.getMessage());}8. }9. }

Page 20: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

20

Throw Statements

ใช ส/าหร�บการโยน exception ในต/าแหน-งท*�ต องการออกมาออกมา throw จัะตามด วย instance ของ exception ท*�จัะถุ5กโยน หาก instance น�+นม*อย5-ก-อนก3สามารถุโยนออกมาได เลย แต-ถุ าไม-ม*ต องท/าการสร างข�+นมาด วยค/าส��ง new ก-อน ค/าส��ง throw น�+นอาจัอย5-ใน try block ท*ม*การด�กจั�บ exception หร�อไม-ก3อย5-ใน method ท*�ม*การระบ�ว-าจัะส-ง exception น�+นออกมา

Page 21: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

21

ต�วอย-าง1. class ThrowTest {2. static int div(int x, int y){3. try {4. if (y == 0)5. throw new Exception();6. return x/y;7. } catch (Exception e){return x/y;}8. }9. public static void main(String s[ ]){10. System.out.println(div(1,0));}11.}

Page 22: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

22

Method that throws exception

ค�อการระบ�หร�อคาดหมายว-า method น�+นจัะม*การ throws exception ออกมา โดยเราจัะใช ค/าส��ง throws หล�งวงเล3บของพาราม�เตอร�ตามด วย class ของ exception ท*�อาจัถุ5กโยนออกมา

Page 23: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

23

ต�วอย-าง

1. class MethodThrows {2. static int div(int x, int y) throws

ArithmeticException {3. return x/y; }4. public static void main(String s[]){5. System.out.println(div(1,0));6. }7. }

Page 24: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

24

ต�วอย-าง1. import java.lang.* ; 2. import java.io.* ; 3. public class Square { 4. public static void main ( String[] a ) throws IOException { 5. BufferedReader stdin = new BufferedReader (new

InputStreamReader( System.in) ); 6. String inData; 7. int num ; 8. System.out.println("Enter an integer:"); 9. inData = stdin.readLine(); 10. num = Integer.parseInt( inData ); // convert inData to int11. System.out.println("The square of " + inData + " is " + num*num ); } }

Page 25: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

25

Finally block

ค�อบล3อกท*�เป#น option ว-าม*หร�อไม-ก3ได ถุ าม*ม*ได เพ*ยง 1 block เป#นบล3อกท*�ท/างานเสมอ ไม-ว-าโปรแกรมจัะผิ-าน try หร�อ catch block หร�อไม-

try { <statements>; }

catch (<parameter>){ <statements>; }

finally{ <statements>; }

Page 26: Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)

26

1. class ArrayOut {

2. public static void main(String s []) {

3. try

4. { System.out.println("Hello " + s[0]); }

5. catch (ArrayIndexOutOfBoundsException e)

6. { System.out.println("Please try again" +

7. "with command line"); }

8. finally

9. {System.out.println("How are you. ");}

10. }

11. }