Bản thuyết trình đang được tải. Xin vui lòng chờ

Bản thuyết trình đang được tải. Xin vui lòng chờ

Chương 3 Exception.

Các bản thuyết trình tương tự


Bản thuyết trình với chủ đề: "Chương 3 Exception."— Bản ghi của bản thuyết trình:

1 Chương 3 Exception

2 Nội dung Khái niệm Codepath, Lỗi (Error), Exception
Giải pháp khắc phục lỗi Cơ chế hoạt động của Exception Các lớp Exception thông dụng Các cách sử dụng Exception

3 Exception Khái niệm Codepath, Lỗi (Error), Exception
Code path là một dãy tuần tự lời gọi các phương thức và được lưu trên stack CLR Viết chương trình Chạy chương trình ở chế độ Debug Debug  Windows  CallStack hay Ctrl+D, C Main() One() Two() Three() Divide()

4 Exception Khái niệm Codepath, Lỗi (Error), Exception
Program Môi Trường Bên Ngoài

5 Exception Khái niệm Codepath, Lỗi (Error), Exception
Lỗi (error) phát sinh nguyên do từ Người viết chương trình Cú pháp Kỹ thuật lập trình, thuật toán Môi trường xung quanh User: Nhập dữ liệu vượt quá miền giá trị, định dạng không hợp lệ, đọc file không tồn tại Phần cứng: Đĩa bị đầy, đĩa hư, mạng không kết nối, … Error: Loi luc bien dich: Cú pháp Loi khi chay chuong trinh: Nhung loi con lai Nguyên do lỗi Error = Compile error + Runtime Error

6 Exception Khái niệm Codepath, Lỗi (Error), Exception
Exception là một tình huống không mong đợi (lỗi) sinh ra khi chương trình đang thực thi (runtime), gây cho đoạn mã không thể tiếp tục để hoàn thành nhiệm vụ Ví dụ: Ghi dữ liệu vào file Phần lớn thời gian không có gì xảy ra, nhưng… Có thể đĩa bị đầy Có thể có lỗi phần cứng Có thể File bị thay đổi thành read-only “Code yếu” bỏ qua những khả năng của có thể xảy ra “Code mạnh” phải lường trước những vấn đề như thế Fragile code Robust code

7 Exception Khái niệm Codepath, Lỗi (Error), Exception
Error = Compile error + Runtime Error Exception = Runtime Error Exception có thể sinh ra từ các nguồn CLR – Common Language Runtime Các thư viện đang dùng Ứng dụng đang chạy

8 Exception Các giải pháp khắc phục lỗi
Giải pháp khắc phục lỗi trong C# Công cụ cho người viết chương trình Debug Kiểm tra tính hợp lệ của dữ liệu trước khi dùng Exception Công cụ cho máy Trình biên dịch CLR Garbage collection – GC Exception – Công cụ khắc phục Exception cuối cùng của CLR Hai giải pháp: Cho LTVien (option) Cho may: May luon luon tim cach khac phuc Công cụ TBD: Lỗi cú pháp, kiểu dữ liệu Công cụ Debug: Thuật toán, kỹ thuật lập trình Công cụ Kiểm tra tính hop le cua dữ liệu: User Công cụ GC: Quan ly bo nho Công cụ Exception nhung loi con lai

9 Exception Các giải pháp khắc phục lỗi
Giải pháp truyền thống là dùng "completion codes”: cho phép nơi gọi phương thức kiểm tra xem lời gọi phương thức: thành công hoàn toàn hay thành công 1 phần hay thất bại GET A FILENAME OPEN THE FILE IF THERE IS NO ERROR OPENING THE FILE READ SOME DATA IF THERE IS NO ERROR READING THE DATA PROCESS THE DATA WRITE THE DATA IF THERE IS NO ERROR WRITING THE DATA CLOSE THE FILE IF THERE IS NO ERROR CLOSING FILE RETURN Xac dinh doan ma lam cong viec gi

10 Exception Các giải pháp khắc phục lỗi
Nhận xét về giải pháp completion codes Chương trình dường như chỉ tập trung đối phó với lỗi Rất khó xác định các “đoạn mã chính”, khó xác định nhiệm vụ chính của phương thức là gì Khó dùng phương thức Phuong dien nguoi thiet ke phuong thuc Phuong dien Nguoi dung

11 Exception Các giải pháp khắc phục lỗi
Dùng giải pháp exception đoạn mã trông như sau TRY TO DO THESE THINGS: GET A FILENAME OPEN THE FILE READ SOME DATA PROCESS THE DATA WRITE THE DATA CLOSE THE FILE RETURN IF ERROR OPENING THE FILE THEN ... IF ERROR READING THE DATA THEN ... IF ERROR WRITING THE DATA THEN ... IF ERROR CLOSING THE FILE THEN ... Gôm tất cả đoạn mã chính lại với nhau Gôm tất cả đoạn mã xử lý lỗi với nhau

12 Exception Các giải pháp khắc phục lỗi
Nhận xét về giải pháp exception Tách phần kiểm tra lỗi và “đoạn mã chính” Dễ dàng xác định nhiệm vụ chính yếu của phương thức Ngắn hơn và dễ dàng đọc hơn

13 Exception Các giải pháp khắc phục lỗi
Giải pháp exception (exception handling) Dùng 4 từ khóa try catch throw finally Mỗi loại exception tương ứng với một lớp System exception: Cung cấp sẵn một số lớp để bắt các exception thông dụng Application exception: Cho phép người viết chương trình tự tạo các lớp exception để sinh ra các exception cho riêng ứng dụng Mỗi loại exception tương ứng với một lớp Vi du: DivideByZeroException System exception thuong do CLR nem ra, tuy nhien chúng ta cung co the tu nem nhung doi tuong thuoc cac lop nay hay dan xuat tu nhung lop nay

14 Exception Cơ chế hoạt động
Cơ chế hoạt động: Trong C#, khi một Exception xuất hiện Một đối tượng exception được tạo ra để lưu thông tin exception Đối tượng exception này được ném (throw) trả về cho phương thức cha (theo code path) cho đến khi tìm thấy phương thức nào chịu bắt nó Nếu không có phương thức nào bắt đối tượng exception thì CLR in thông tin lỗi và kết thúc chương trình

15 Exception Cơ chế hoạt động
CLR Các Method được gọi tuần tự Main() One() Two() Three() Divide() Đối tượng Exception được truyền ngược lại Ve cu the 1 doan ma de minh hoa bo qua nhung dong lenh sau dong bi loi

16 Exception Các lớp Exception thông dụng
Một số lớp exception được định nghĩa trước Exception SystemException ArgumentException ArgumentNullException ArgumentOutOfRangeException ArithmeticException   DivideByZeroException OverflowException NotFiniteNumberException IOException FileNotFoundException DirectoryNotFoundException   FileLoadException EndOfStreamException Màu xanh là lớp cơ sở: Không tạo đối tượng từ nhữn lớp này Nếu muốn bắt các ngoại lệ thuộc các lớp con của lớp này thì dùng lớp này trong catch SystemException: Base class for all runtime-generated errors. IndexOutOfRangeException: Thrown by the runtime only when an array is indexed improperly. arr[arr.Length+1] NullReferenceException: Thrown by the runtime only when a null object is referenced. object o = null; o.ToString(); InvalidOperationException : Thrown by methods when in an invalid state. Calling Enumerator.GetNext() after removing an Item from the underlying collection. ArgumentException: Base class for all argument exceptions. ArgumentNullException : Thrown by methods that do not allow an argument to be null. String s = null; "Calculate".IndexOf (s); ArgumentOutOfRangeException : Thrown by methods that verify that arguments are in a given range. String s = "string"; s.Chars[9];

17 Exception Các lớp Exception thông dụng
Một số lớp exception được định nghĩa trước Exception SystemException EndOfStreamException NotImplementedException InvalidCastException FormatException IndexOutOfRangeException NullReferenceException RankException StackOverflowException ApplicationException Các kiểu exception tự định nghĩa Màu xanh là lớp cơ sở: Không tạo đối tượng từ nhữn lớp này Nếu muốn bắt các ngoại lệ thuộc các lớp con của lớp này thì dùng lớp này trong catch SystemException: Base class for all runtime-generated errors. IndexOutOfRangeException: Thrown by the runtime only when an array is indexed improperly. arr[arr.Length+1] NullReferenceException: Thrown by the runtime only when a null object is referenced. object o = null; o.ToString(); InvalidOperationException : Thrown by methods when in an invalid state. Calling Enumerator.GetNext() after removing an Item from the underlying collection. ArgumentException: Base class for all argument exceptions. ArgumentNullException : Thrown by methods that do not allow an argument to be null. String s = null; "Calculate".IndexOf (s); ArgumentOutOfRangeException : Thrown by methods that verify that arguments are in a given range. String s = "string"; s.Chars[9];

18 Exception Các lớp Exception thông dụng
Để trống: cho sv ghi một số vi du về từng trường hợp sinh ra các ngoại lệ

19 Exception Các lớp Exception thông dụng
Một số thuộc tính trong lớp Exception Message Source StackTrace TargetSite Message: Mo ta loi Source: Get/Set nguon gay loi – Thu vien gay loi StackTrace: Tra cuu nguon gay loi TargetSite: Phuong thuc gay loi

20 Exception Các cách sử dụng Exception
try { A; B; C; } catch (xxxException ex) { … } catch (xxxException ex) { … } … finally { … } Cú pháp Khối finally đảm bảo những câu lệnh trong khối đó luôn luôn chạy cho dù có exception xảy ra hay không Chỉ huong chạy của câu lệnh

21 Exception Các cách sử dụng Exception
Nếu có nhiều catch phù hợp với lỗi thì catch nào gần try nhất sẽ được sử dụng Không nên đặt catch tổng quát hơn lên trên những catch khác

22 Exception Các cách sử dụng Exception
Bắt mọi exception try { A; B; C; } catch (Exception ex) { … } finally { … } try { A; B; C; } catch { … } finally { … }

23 Exception Các cách sử dụng Exception
double input try { input = Convert.ToDouble(Console.ReadLine()); } catch { Console.WriteLine(“Ban danh so không hop le”); input = double.NaN; }

24 Exception Các cách sử dụng Exception
class InputDoubles { static void Main() { double num = GetDouble("Enter the base: "); double exp = GetDouble("Enter the exponent: "); Console.WriteLine("{0} to the power of {1} is {2}", num, exp, Math.Pow(num, exp)); } static double GetDouble(string strPrompt) { double input = Double.NaN; do { Console.Write(strPrompt); try { input = Double.Parse(Console.ReadLine()); } catch { Console.WriteLine(); Console.WriteLine("You typed an invalid number!"); Console.WriteLine("Please try again."); Console.WriteLine(); } } while (Double.IsNaN(input)); return input; } } Chuyen chu sang mau de thay chuong trinh

25 Exception Các cách sử dụng Exception
Kiểm tra tràn số học: Câu lệnh checked kiểm tra tất cả phép toán số học trên số nguyên trong 1 khối xem có bị tràn số không – OverflowException Chúng ta cũng có thể dùng từ khóa checked và unchecked để kiểm tra tràn số học trên từng biểu thức

26 Exception Các cách sử dụng Exception
int number = int.MaxValue; checked {      int willThrow = number++;      Console.WriteLine(“Cau lenh không chay"); } int number = int.MaxValue; unchecked {      int willThrow = number++;      Console.WriteLine(“Cau lenh chay"); } int wontThrow = unchecked(int.MaxValue + 1); int willThrow = checked(int.MaxValue + 1);

27 Exception Ném ngoại lệ Ném ngoại lệ được dùng khi phương thức đang chạy gặp lỗi và không thể giải quyết được nên cần thông báo lỗi đó cho phương thức “cha” (phương thức gọi nó) Cú pháp try {} catch (…) { throw; } Không the giai quyet: không du thong tin de tu giai quyet nen nem ra ben ngoai hy vong la ben ngoai co du thong tin de quyet quyet loi do throw; Nem lai loi objException = new xxxException(…); throw objException;

28 Cố gắng dùng 1 trong những lớp exception có sẵn
Exception Ném ngoại lệ Cố gắng dùng 1 trong những lớp exception có sẵn Ví dụ: Phương thức của chúng ta không thể làm việc nếu tham số bằng null … if (strInput == null) throw new ArgumentNullException(); …

29 Exception Ném ngoại lệ static uint MyParse(string str) { uint result = 0; int i = 0; // If argument is null, throw an exception. if (str == null) throw new ArgumentNullException(); // Get rid of white space. str = str.Trim(); // Check if there's at least one character. if (str.Length == 0) throw new FormatException(); // Loop through all the characters in the string. while (i < str.Length) { // If the next character's not a digit, throw exception. if (!Char.IsDigit(str, i)) throw new FormatException(); // Accumulate the next digit (notice "checked"). result = checked(10 * result + (uint) str[i] - (uint) '0'); i++; } return result; } Chuyen chu sang mau de thay chuong trinh static void Main() { uint input; Console.Write("Enter an unsigned integer: "); try { input = MyParse(Console.ReadLine()); Console.WriteLine("You entered {0}", input); } catch (Exception exc) { Console.WriteLine(exc.Message); } }

30 Exception Ném ngoại lệ static void Main() { double num = GetDouble("Enter the base: "); double exp = GetDouble("Enter the exponent: "); Console.WriteLine("{0} to the power of {1} is {2}", num, exp, Math.Pow(num, exp)); } static double GetDouble(string strPrompt) { double input; Console.Write(strPrompt); while (!Double.TryParse(Console.ReadLine(), out input)) { Console.WriteLine(); Console.WriteLine("You typed an invalid number!"); Console.WriteLine("Please try again: "); Console.WriteLine(); Console.Write(strPrompt); } return input; } Chuyen chu sang mau de thay chuong trinh

31 Exception Tự tạo các ngoại lệ
Sinh viên lên Google tìm hiểu Cách tạo các ngoại lệ dành riêng cho ứng dụng Từ khóa: user defined exceptions Các trường hợp nào thì cần ném ngoại lệ Từ khóa: Best Practices for Handling Exceptions

32 Tóm tắt chương 1 Exception (Ngoại lệ) là lỗi khi chương trình đang chạy Một loại Exception tương ứng với một lớp (Lớp ngoại lệ) Đề tìm lớp exception của một phương thức (hay property, indexer) chúng ta xem document của lớp chứa chúng Có 2 loại Exception System Exception Application Exceltion Để bắt exception chúng ta dùng 4 từ khóa: try, catch, finally, throw Sau try phải có catch hoặc finally. Một try có không hay nhiều catch và có không hay một finally Không nên đặt catch tổng quát hơn lên trên những catch khác Khi ngữ cảnh hiện tại Có đủ thông tin để xử lý ngoại lệ thì hãy bắt ngoại lệ Không có đủ thông tin để xử lý ngoại thì hãy ném ngoại lệ


Tải xuống ppt "Chương 3 Exception."

Các bản thuyết trình tương tự


Quảng cáo bởi Google