Chương 3 Exception.

Slides:



Advertisements
Các bản thuyết trình tương tự
TRANG COVER Viết tiêu đề Ebook vào chỗ này…
Advertisements

Công nghệ phần mềm Các quy trình phần mềm.
CHÚA NHẬT 4 MÙA THƯỜNG NIÊN
CHÚA NHẬT 33 MÙA THƯỜNG NIÊN NĂM B
CHÚA NHẬT 20 MÙA THƯỜNG NIÊN NĂM A TWENTIETH SUNDAY IN ORDINARY TIME
LỄ ĐỨC MARIA LÀ MẸ THIÊN CHÚA
Lễ Chúa Giêsu Lên Trời Năm C
PHÒNG TÀI NGUYÊN VÀ MÔI TRƯỜNG CÁC CÔNG TÁC BẢO VỆ MÔI TRƯỜNG
ThS. Phạm Đức Thành Lập trình trên Windows ThS. Phạm Đức Thành
“Khi Chúa Giêsu đã chịu phép rửa và đang cầu nguyện, thì trời mở ra”.
Hướng dẫn lập trình trên
Kiểm thử và đảm bảo chất lượng phần mềm
Hùng Phương & Thanh Quảng thực hiện
CHÚA NHẬT PHỤC SINH NĂM B EASTER SUNDAY
TWENTY-FIFTH SUNDAY IN ORDINARY TIME
CHÚA NHẬT 19 MÙA THƯỜNG NIÊN
Lê Tân Bộ môn: Lập trình máy tính
Đồ họa máy tính Ánh sáng Bùi Thế Duy - Bộ môn KHMT 7/15/2019.
Sáng tác: MS David Dong 2007.
Thứ Tư Thánh I-si-đo-rô
Chương 3 – Các kỹ thuật gỡ lỗi và kiểm thử chương trình
Chương 7 INTERFACE.
Giới thiệu môn học.
Hướng dẫn sử dụng Tôn Nữ Phương Mai Tháng 3/2013.
Đứng Vững & Giữ Chặt Stand Firm & Hold Fast
Class & Struct II Lập trình nâng cao.
Con trỏ Lập trình nâng cao
Bài 3: Ngôn ngữ lập trình C#
Chương 02 CẤU TRÚC VÀ CÁC THÀNH PHẦN CHƯƠNG TRÌNH C/C++
Chương 5 ỨNG DỤNG CSDL VÀ ADO.NET.
THIRD SUNDAY OF LENT CHÚA NHẬT 3 MÙA CHAY NĂM C.
CHƯƠNG II: CHUẨN ETHERNET
Bài 1: giới thiệu C# và .NET framework
Chương 06 KIỂU DỮ LIỆU NGƯỜI LẬP TRÌNH ĐỊNH NGHĨA
Hiểu Biết về Kết Quả SBAC CAASPP – California Assessment of Student Performance and Progress (Đánh Giá của California về Thành Quả và Tiến.
CHÚA NHẬT 5 MÙA THƯỜNG NIÊN
17th Sunday in Ordinary Time - Year C Chúa Nhật 17 Thường Niên Năm C
THE NATIVITY OF THE LORD CHRISTMAS
Chương 2 Đại cương về máy tính điện tử (MTĐT)
YÊU CẦU ĐẶT RA Tôi có một số đoạn phim / hình ảnh (vừa quay / chụp được hoặc sưu tầm được,…), tôi muốn lắp ghép nó để trở thành một đoạn phim trình.
Hệ thống quản lý và phát hành kho quỹ theo hướng tập trung - CMO
Giới thiệu & Tập huấn Phần mềm TKB 11.0
Tác giả: Đa-vít Bát-ti By Dave Batty
Maria thì ghi nhớ tất cả những việc đó và suy niệm trong lòng
PALM SUNDAY OF THE LORD’S PASSION
SỬ DỤNG LỆNH LẶP WHILE...DO
Chương 03 TỔ CHỨC DỮ LIỆU TRONG CHƯƠNG TRÌNH
Korea-Vietnam Friendship IT College
Tin Mừng Chúa Giêsu Kitô theo Thánh Matthêu.
BÀI TẬP THỰC HÀNH 3 SỬ DỤNG LỆNH LẶP FOR...DO.
LỄ ĐỨC MARIA, MẸ THIÊN CHÚA MARY, THE HOLY MOTHER OF GOD
NHẬP MÔN LẬP TRÌNH MẢNG MỘT CHIỀU.
Trainer: Bạch Ngọc Toàn Phát hành bởi: TEDU –
SẮP XẾP, TÌM KIẾM, LỌC DỮ LIỆU
MÔN HỌC: NHẬP MÔN VỄ KỸ THUẬT CHƯƠNG 7: KỸ NĂNG GIẢI QUYẾT VẤN ĐỀ
Đề kiểm tra 15’ lớp K58B Cho đồ thị không gian trạng thái của bài toán như sau: Trạng thái đầu: A Trạng thái đích: P Và cho giải thuật tìm kiếm theo chiều.
Mô hình OSI và TCP/IP MẠNG MÁY TÍNH.
Nhập môn Công nghệ học Phần mềm Introduction to Software Engineering
LỄ THĂNG THIÊN THE ASCENSION OF THE LORD.
Trainer: Bạch Ngọc Toàn Phát hành bởi: TEDU –
"Đang khi cầu nguyện, diện mạo Người biến đổi khác thường".
Wireless Communications Principles and Practice
Mục tiêu Ưu điểm của ADO.NET Kiến trúc của ADO.NET
CHÚA NHẬT 13 MÙA THƯỜNG NIÊN THIRTEENTH SUNDAY IN ORDINARY TIME
CUỘC SỐNG ĐẸP THAY Âm nhạc: Ernesto Cortazar, “La Vida Es Bella”
Nhịp & Phách (Time and Beat).
Hàm Lập trình nâng cao.
Bản ghi của bản thuyết trình:

Chương 3 Exception

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

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()

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

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

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

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

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

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

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

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

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

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

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

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

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];

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];

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ệ

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

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

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

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 { … }

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; }

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

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

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);

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;

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(); …

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); } }

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

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

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ệ