Đề cương lập trình hướng đối tượng

151 166 0
Đề cương lập trình hướng đối tượng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Đề cương Lập trình hướng đối tượng với C# Trang MỤC LỤC Bài 1: Các khái niệm lập trình hướng đối tượng 1.1 Lịch sử phát triển phương pháp lập trình 1.1.1 Lập trình cấu trúc (hay lập trình tuyến tính) 1.1.2 Lập trình hướng chức năng(lập trình cấu trúc) 1.1.3 Lập trình module 1.1.4 Lập trình hướng đối tượng 1.2 Một số khái niệm lập trình hướng đối tượng 10 1.2.1 Trừu tượng hóa liệu (Data Abstraction) 10 1.2.2 Lớp (Class) 13 1.2.3 Đối tượng (Object) 15 1.2.4 Thuộc tính 17 1.2.5 Hoạt động (Operation) 19 1.2.6 Phương thức (Method) 19 1.2.7 Thông điệp (Message) 20 1.2.8 Sự kiện (Event) 20 1.2.8 Phân biệt lớp đối tượng 21 1.2.9 Thiết lập (Construction) Hủy (Destruction) 21 1.2.10 Tính Bền vững (Persistence) 23 1.2.11 Tính Đóng gói liệu 24 1.2.12 Tính thừa kế 25 1.2.13 Tính Đa Thừa kế 28 1.2.14 Tính Đa hình 29 1.3 Các ưu điểm lập trình hướng đối tượng 31 1.3.1 Các ưu điểm lập trình hướng đối tượng 31 1.3.2 Mốt số ngôn ngữ lập trình hướng đối tượng 32 1.3.3 Ngôn ngữ lập trình C# 33 Bài 2: Lớp đối tượng(1) 35 2.1 Lớp 35 2.1.1 Định nghĩa lớp 35 Đề cương Lập trình hướng đối tượng với C# Trang 2.1.2 Thành phần liệu 39 2.1.3 Phương thức 42 2.1.4 Các từ khoá đặc tả truy cập 42 2.1.5 Khai báo đối tượng, mảng đối tượng 45 2.1.6 Định nghĩa chồng phương thức 46 2.1.7 Thuộc tính thủ tục thuộc tính 48 2.1.8 Từ khoá this 53 Bài 3: Lớp đối tượng(2) 57 3.1 Phép gán đối tượng 57 3.2 Phương thức thiết lập chép 58 3.2.1 Phương thức thiết lập 58 3.2.2 Phương thức chép 64 3.3 Huỷ bỏ đối tượng, chế gom rác Net 65 Bài 5: Lớp đối tượng(3) 70 5.1 Thành phần tĩnh cách sử dụng 70 5.1.1 Thành phần liệu tĩnh 70 5.1.2 Phương thức tĩnh 72 5.2 Lớp bao cách sử dụng 75 Bài 7: Định nghĩa chồng toán tử lớp 77 7.1 Khái niệm chồng toán tử 77 7.2 Cú pháp nạp chồng toán tử 77 7.2.1 Toán tử 78 7.2.2 Toán tử 78 7.3 Yêu cầu sử dụng toán tử 78 Bài 12: Kế thừa đa hình(1) 82 12.1 Giới thiệu chung thừa kế 82 12.2 Xây dựng lớp dẫn xuất thừa kế từ lớp sở 85 12.3 Mức truy cập lớp dẫn xuất 88 12.4 Gọi phương thức khởi tạo lớp sở 90 12.5 Truy xuất thành phần lớp sở 91 12.6 Boxing Unboxing liệu 91 Đề cương Lập trình hướng đối tượng với C# Trang 12.7 Các lớp lồng 94 Bài 14: Kế thừa đa hình(2) 97 14.1 Giới thiệu chung đa hình 97 14.2 Phương thức đa hình 97 14.3 Từ khoá new override 101 Bài 17 Kế thừa đa hình(3) 104 17.1 Lớp trừu tượng 104 17.1.1 Xây dựng lớp sở trừu tượng 104 17.1.2 Kế thừa từ lớp trừu tượng 107 17.1.3 Hạn chế lớp trừu tượng 111 17.2 Lớp cô lập (sealed class) 113 17.3 Lớp Object 113 Bài 21: Giao diện 116 21.1 Giao diện 116 21.1.1 Xây dựng giao diện 116 21.1.2 Khai báo thuộc tính giao diện 117 21.1.3 Khai báo phương thức giao diện 118 21.2 Thực thi giao diện 119 21.2.1 Thực thi giao diện 119 21.2.2 Toán tử is 123 21.2.3 Toán tử as 125 21.2 Thực thi giao diện 127 21.2.1 Thực thi giao diện 127 21.2.4 Mở rộng giao diện 137 21.2.5 Tham chiếu đối tượng lớp qua giao diện 138 21.2.6 Giao diện đối lập với lớp trừu tượng 139 Bài 25: Kỹ thuật xử lý ngoại lệ 141 25.1 Khái niệm xử lý ngoại lệ 141 25.1.1 Đón bắt lỗi với try catch 141 25.1.2 Dọn dẹp lệ với try finally 143 Đề cương Lập trình hướng đối tượng với C# Trang 25.1.3 Kiểm soát tất ngoại lệ với try-catch-finally 145 25.2 Các lớp ngoại lệ Net 147 25.3 Ném ngoại lệ 148 25.3.1 Ném lại ngoại lệ 148 25.3.2 Tạo đối tượng ngoại lệ cho ứng dụng 149 Đề cương Lập trình hướng đối tượng với C# Trang Bài 1: Các khái niệm lập trình hướng đối tượng 1.1 Lịch sử phát triển phương pháp lập trình Phần trình bày số kỹ thuật hay phương pháp lập trình phát triển để giải vấn đề Tin học kể từ máy tính đời Sự phát triển kỹ thuật lập trình liên quan chặt chẽ tới phát triển phần cứng máy vi tính việc ứng dụng máy tính vào giải vấn đề thực tế Chúng ta chia phương pháp lập trình thành kiểu sau:  Lập trình cấu trúc  Lập trình hướng thủ tục  Lập trình theo kiểu module hóa  Lập trình hướng đối tượng Chúng ta xem xét kỹ thuật lập trình 1.1.1 Lập trình cấu trúc (hay lập trình tuyến tính) Thông thường người bắt đầu học lập trình cách viết chương trình nhỏ đơn giản chứa “chương trình chính” Ở chương trình có nghĩa tập lệnh câu lệnh làm việc với liệu toàn cục chương trình (các biến dùng chương trình biến toàn cục) Chúng ta minh hoạ hình vẽ sau đây: Lập trình cấu trúc Chương trình thao tác trực tiếp liệu toàn cục Một số nhược điểm lập trình cấu trúc: + Lập trình cấu trúc khả kiểm soát tính thấy liệu Mọi liệu chương trình biến toàn cục bị thay đổi phần chương trình Đề cương Lập trình hướng đối tượng với C# Trang + Việc không kiểm soát tính thấy liệu dẫn đến khó khăn việc gỡ lỗi chương trình, đặc biệt chương trình lớn + Kỹ thuật lập trình cấu trúc có nhiều bất lợi lớn chương trình đủ lớn Ví dụ cần thực lại đoạn câu lệnh tập liệu khác buộc phải copy đoạn lệnh tới vị trí chương trình mà muốn thực Điều làm nảy sinh ý tưởng trích đoạn lệnh thường xuyên cần thực đó, đặt tên cho chúng đưa kỹ thuật cho phép gọi trả giá trị từ thủ tục 1.1.2 Lập trình hướng chức năng(lập trình cấu trúc) Những ngôn ngữ lập trình truyền thống như: Pascal, C, Foxpro gọi chung ngôn ngữ lập trình hướng thủ tục Theo cách tiếp cận hướng thủ tục hệ thống phần mềm xem dãy công việc cần thực đọc liệu, tính toán, xử lý, lập báo cáo in ấn kết Mỗi công việc dược thực hàm hay thủ tục định Như trọng tâm cách tiếp cận hàm chức Nói rõ theo cách tiếp cận này, chương trình tổ chức thành chương trình Mỗi chương trình đảm nhận xử lý công việc nhỏ toàn hệ thống Mỗi chương trình lại chia nhỏ thành chương trình nhỏ Quá trình phân chia tiếp tục diễn chương trình nhận đủ đơn giản Người ta gọi trình làm mịn dần Khi tập trung vào trọng tâm phát triển hàm lại ý đến liệu ( Nghĩa lập trình hướng thủ tục liệu không coi trọng) mà hàm sử dụng để thực công việc Cái xẩy liệu gắn liệu với hàm nào? Trong chương trình có nhiều hàm, thường có nhiều thành phần liệu quan trọng khai báo tổng thể nhiều hàm truy nhập, đọc làm thay đổi giá trị biến tổng thể Ngoài hàm có vùng liệu riêng Để liên kết hàm thành đơn vị chương trình thông qua biến toàn cục Đề cương Lập trình hướng đối tượng với C# Trang Dữ liệu chung Dữ liệu chung Hàm Hàm Hàm Dữ liệu riêng Dữ liệu riêng Dữ liệu riêng Điều có nghĩa nhiều hàm truy nhập, sử dụng liệu chung , làm thay đổi giá trị chúng khó kiểm soát Nhất chương trình lớn, phức tạp vấn đề trở nên khó khăn Điều xẩy muốn thay đổi, bổ xung cấu trúc liệu biến toàn cục Đó phải viết lại toàn hàm có liên quan Tóm lại đặc tính phương pháp lập trình hướng thủ tục là: + Tập chung vào công việc cần thực (thuật toán) + Chương trình lớn chia thành hàm nhỏ + Phần lớn hàm sử dụng liệu chung + Dữ liêu hệ thống chuyển động từ hàm sang hàm khác + Hàm biến đổi liệu từ dạng sang dạng khác + Sử dụng cách tiếp cận top-down thiết kế chương trình 1.1.3 Lập trình module Trong lập trình module thủ tục có chức chung nhóm lại với tạo thành module riêng biệt Một chương trình không bao gồm phần đơn lẻ Nó chia thành vài phần nhỏ tương tác với qua lời gọi thủ tục tạo thành toàn chương trình Đề cương Lập trình hướng đối tượng với C# Trang Lập trình module Chương trình kết hợp lời gọi tới thủ tục module riêng biệt với liệu thích hợp Mỗi module có liệu riêng Điều cho phép module kiểm soát liệu riêng lời gọi tới thủ tục module Tuy nhiên module xuất nhiều lần chương trình Yếu điểm lập trình thủ tục lập trình module hóa: + Khi độ phức tạp chương trình tăng lên phụ thuộc vào kiểu liệu mà xử lý tăng theo Vấn đề trở nên rõ ràng cấu trúc liệu sử dụng chương trình quan trọng không phép toán thực chúng Điều lộ rõ kích thước chương trình tăng Các kiểu liệu xử lý nhiều thủ tục chương trình có cấu trúc Do thay đổi cài đặt kiểu liệu dẫn đến nhiều thay đổi thủ tục sử dụng + Một nhược điểm cần dùng nhiều nhóm làm việc để xây dựng chương trình chung Trong lập trình có cấu trúc người giao xây dựng số thủ tục kiểu liệu Những lập trình viên xử lý thủ tục khác lại có liên quan tới kiểu liệu dùng chung nên người thay đổi kiểu liệu làm ảnh hưởng tới công việc nhiều người khác, đặc biệt có sai sót việc liên lạc thành viên nhóm Đề cương Lập trình hướng đối tượng với C# Trang + Việc phát triển phầm mềm nhiều thời gian tập trung xây dựng lại cấu trúc liệu Khi xây dựng chương trình lập trình có cấu trúc lập trình viên thường phải xây dựng lại cấu trúc liệu cho phù hợp với toán điều thời gian 1.1.4 Lập trình hướng đối tượng Phong cách phương pháp lập trình hướng đối tượng (OOP - Object Oriented Programming) tập chung vào liệu Theo cách tiếp cận câu hỏi thường đặt liệu phương thức(hay hàm) xử lý người ta đem gói tất liệu phương thức có liên quan với thành nhóm giống lọ thuốc có hai thứ: Các viên thuốc(dữ liệu) tờ giấy ghi cách dùng viên thuốc đó(phương thức) Hai thứ gộp lại thành kiểu liệu gọi liệu đối tượng(Object) Lập trình có sử dụng kiểu liệu loại gọi lập trình hướng đối tượng Lập trình hướng đối tượng đặt trọng tâm vào đối tượng Yếu tố quan trình phát triển chương trình không cho phép liệu biến động tự hệ thống Trong đối tương liệu gắn chặt với hàm thành viên thành vùng riêng mà có hàm tác động nên cấm hàm bên truy nhập tới tuỳ tiện Lập trình hướng đối tượng cho phép phân tích toán thành thực thể gọi đối tượng sau xây dựng liệu hàm xung quanh đối tượng Các đối tựng tác động, trao đổi thông tin với thông qua chế thông báo(mesage) thông qua phương thưc(hàm) Đối tượng A Đối tượng B Dữ liệu Dữ liệu Các phương thức Các phương thức Đối tượng C Dữ liệu Các phương thức Đề cương Lập trình hướng đối tượng với C# Trang 10 Lập trình hướng đối tượng có đặc tính sau: + Tập chung vào liệu thay cho hàm + Chương trình chia thành đối tượng + Cấu trúc liệu thiết kế cho đặc tả đối tượng gắn với cấu trúc liệu + Dữ liệu đóng gói lại, che giấu không cho phép hàm ngoại lai truy nhập tự + Các đối tượng tác động trao đổi thông tin với qua hàm + Có thể dẽ dàng bổ sung liệu hàm vào đối tượng cần thiết + Chương trình thiết kế theo cách tiếp cận từ lên(bottom- up) 1.2 Một số khái niệm lập trình hướng đối tượng 1.2.1 Trừu tượng hóa liệu (Data Abstraction) Khi lập trình viên phải phát triển chương trình ứng dụng nghĩa người viết mã cho ứng dụng Trước hết, người phải nghiên cứu ứng dụng xác định thành phần tạo nên ứng dụng Kế tiếp, người phải xác định thông tin cần thiết thành phần Hãy khảo sát chương trình ứng dụng cho việc mua bán xe nói Chương trình phải xuất hóa đơn cho xe bán cho khách hàng Để xuất hóa đơn, cần thông tin chi tiết khách hàng Vậy bước thứ xác định đặc tính khách hàng Một vài đặc tính gắn kết với khách hàng là:  Tên  Địa  Tuổi  Chiều cao Đề cương Lập trình hướng đối tượng với C# Trang 137 // thực thi ngầm định phương thức dẫn xuất public int P() { } } class myClass : IDerived { // thực thi ngầm định cho thuộc tính sở public int P { get{ }} // thực thi tường minh phương thức dẫn xuất int IDerived.P() { } } class myClass : IDerived { // thực thi tường minh cho thuộc tính sở int IBase.P { get{ }} // thực thi tường minh phương thức dẫn xuất int IDerived.P(){ } } 21.2.4 Mở rộng giao diện C# cung cấp chức cho mở rộng giao diện có cách thêm phương thức thành viên hay bổ sung cách làm việc cho thành viên Ví dụ, mở rộng giao diện IHinh với giao diện IHinhs Giao diện mở rộng giao diện cũ cách thêm phương thức Tinhchat Đề cương Lập trình hướng đối tượng với C# Trang 138 Interface Ihinhs:IHinh { Void TinhChat(); } Các lớp khác thực thi tự giao diện IHinh hay Ihinhs tùy thuộc vào mục đích có cần thêm chức hay không Nếu lớp thực thi giao diện IHinhs, lớp phải thực thi tất phương thức hai giao diện IHinh giao diện IHinhs Những đối tượng lớp thực thi giao diện IHinhs gán cho hai giao diện IHinhs IHinh Kết hợp giao diện Một cách tương tự, tạo giao diện cách kết hợp giao diện cũ ta thêm phương thức hay thuộc tính cho giao diện Ví dụ, định tạo giao diện IhinhDaGiac Giao diện kết hợp phương thức hai giao diện I H i n h v I D a G i a c thêm vào phương thức m i S o C a n h ( ) interface IhinhDaGiac:IHinh,IDaGiac { int SoCanh(); } Khi lớp lớp triển khai giao diện IhinhDaGiac phải triển khai tất phương thức, thuộc tính hai giao diện IHinh IdaGiac phương thức bổ sung SoCanh 21.2.5 Tham chiếu đối tượng lớp qua giao diện Như trình bày mục trước, thường sử dụng giao diện để thực thi phương thức đối tượng lớp triển khai từ giao diện, điều giúp đa hình Đề cương Lập trình hướng đối tượng với C# Trang 139 Class chay { static void ThaoTacHinh(IHinh i) { i.InThongTin(); } static void Main() { ThaoTacHinh(new HinhChuNhat(3,4)); ThaoTacHinh(new HinhTron(3,6,8)); ThaoTacHinh(new HinhVuong(7)); } } 21.2.6 Giao diện đối lập với lớp trừu tượng Giao diện giống lớp trừu tượng Thật vậy, thay khai báo IStorable trở thành lớp trừu tượng: abstract class Storable { abstract public void Read(); abstract public void Write(); } Bây lớp Document thừa kế từ lớp trừu tượng IStorable, khác nhiều so với việc sử dụng giao diện Tuy nhiên, giả sử mua lớp List từ hãng thứ ba muốn kết hợp với lớp có sẵn Storable Trong ngôn ngữ C++ tạo lớp StorableList kế thừa từ List Storable Nhưng ngôn ngữ C# làm được, kế thừa từ lớp trừu tượng Storable từ lớp List C# không cho phép thực đa kế thừa từ lớp Tuy nhiên, ngôn ngữ C# cho phép thực thi giao diện Đề cương Lập trình hướng đối tượng với C# Trang 140 dẫn xuất từ lớp sở Do đó, cách làm cho Storable giao diện, kế thừa từ lớp List từ IStorable Ta tạo lớp StorableList sau: public class StorableList : List, IStorable { // phương thức List public void Read() { } public void Write( object o) { } // } Đề cương Lập trình hướng đối tượng với C# Trang 141 Bài 25: Kỹ thuật xử lý ngoại lệ 25.1 Khái niệm xử lý ngoại lệ 25.1.1 Đón bắt lỗi với try catch Xét đoạn chương trình sau: static void Main() { int i; Console.Write("Nhap gia tri cho i: "); i = int.Parse(Console.ReadLine()); Console.WriteLine("Giá tri i vừa nhập " + i); } Chương trình dịch chạy chương trình chẳng có vấn đề xảy ra, người sử dụng nhập giá trị cho biến i Nhưng đoạn chương trình bị tạm ngừng không chạy người sử dụng không nhập vào giá trị số mà nhập vào chữ ‘a’ chẳng hạn Khi lỗi phát sinh chương trình lỗi có nguyên nhân phía hình động người sử dụng làm phát sinh ngoại lệ lỗi lập trình Ngôn ngữ C# giống ngôn ngữ hướng đối tượng khác, cho phép xử lý lỗi điều kiện không bình thường với ngoại lệ Ngoại lệ đối tượng đóng gói thông tin cố chương trình không bình thường Một điều quan trọng để phân chia bug, lỗi, ngoại lệ Một bug lỗi lập trình sửa chữa trước mã nguồn chuyển giao Những ngoại lệ không bảo vệ tương phản với bug Mặc dù bug nguyên nhân sinh ngoại lệ, không dựa vào ngoại lệ để xử lý bug chương trình, tốt nên sửa chữa bug Khi thực chương trình có ngoại lệ phát sinh trình chạy tác động mà nguyên nhân lỗi lập trình, lỗi với người lập trình có kinh nghiệm họ dự đoán Đề cương Lập trình hướng đối tượng với C# Trang 142 trước lỗi phát sinh chạy chương trình Khi ngoại lệ tạo ra, việc thực thi chức hành bị treo việc xử lý ngoại lệ tương ứng tìm thấy Điều có nghĩa chức hoạt động hành không thực việc xử lý ngoại lệ, chức bị chấm dứt hàm gọi nhận thay đổi đến việc xử lý ngoại lệ Nếu hàm gọi không thực việc xử lý ngoại lệ, ngoại lệ xử lý sớm CLR, điều dẫn đến chương trình kết thúc Một trình xử lý ngoại lệ khối lệnh chương trình thiết kế xử lý ngoại lệ mà chương trình phát sinh Xử lý ngoại lệ thực thi trong câu lệnh catch Một cách lý tưởng ngoại lệ bắt xử lý, chương trình sửa chữa vấn đề tiếp tục thực hoạt động Thậm chí chương trình không tiếp tục, việc bắt giữ ngoại lệ có hội để in thông điệp có ý nghĩa kết thúc chương trình cách rõ ràng Cấu trúc xử dụng khối try …catch để xử lý ngoại lệ sau: try { // Đoạn chương trình có khả phát sinh ngoại lệ trình chạy } Catch (KieuNgoaiLe bien) { // Lệnh xử lý đoạn lệnh bị phát sinh lỗi chương trình chuyển sang //thực câu lệnh đây/ } Catch (KieuNgoaiLe bien) { // Lệnh xử lý đoạn lệnh bị phát sinh lỗi chương trình chuyển sang //thực câu lệnh đây/ } … Đề cương Lập trình hướng đối tượng với C# Trang 143 Finally { // Lệnh xử lý cho dù có ngoại lệ hay ngoại lệ phát sinh } Ví dụ 25.1 xử lý bắt ngoại lệ try…catch static void Main() { try { int i; Console.Write("Nhap gia tri cho i: "); i = int.Parse(Console.ReadLine()); Console.WriteLine("Giá tri i vừa nhập " + i); } catch { Console.WriteLine("Co loi phat sinh"); } Console.ReadLine(); } 25.1.2 Dọn dẹp lệ với try finally Trong số tình huống, việc phát sinh ngoại lệ unwind stack tạo số vấn đề Ví dụ mở tập tin hay trường hợp khác xác nhận tài nguyên, cần thiết hội để đóng tập tin giải phóng nhớ đệm mà chương trình chiếm giữ trước Ghi chú: Trong ngôn ngữ C#, vấn đề xảy chế thu dọn tự động C# ngăn ngừa ngoại lệ phát sinh từ việc thiếu nhớ Tuy nhiên, có số hành động mà cần phải quan tâm Đề cương Lập trình hướng đối tượng với C# Trang 144 ngoại lệ phát sinh ra, việc đóng tập tin, có hai chiến lược để lựa chọn thực Một hướng tiếp cận đưa hành động nguy hiểm vào khối try sau thực việc đóng tập tin hai khối catch try Tuy nhiên, điều gây đoạn chương trình không đẹp sử dụng trùng lặp lệnh Ngôn ngữ C# cung cấp thay tốt khối finally Đoạn chương trình bên khối catch đảm bảo thực thi mà không quan tâm đến việc ngoại lệ phát sinh Phương thức TestFunc() ví dụ 5.2 minh họa việc mở tập tin hành động nó, sau phương thức thực vài phép toán toán học, sau tập tin đóng Có thể trình mở tập tin đóng tập tin chương trình phát sinh ngoại lệ Nếu xuất ngoại lệ, tập tin mở Người phát triển biết chuyện xảy ra, cuối phương thức tập tin đóng Do chức đóng tập tin di chuyển vào khối finally, thực thi mà không cần quan tâm đến việc có phát sinh hay không ngoại lệ chương trình Ví dụ 5.2: Sử dụng khối finally class NgoaiLe { public void MoTep() { StreamWriter f = new StreamWriter(new FileStream("ketqua.txt", FileMode.Append)); try { int x, y; Console.Write("Gia tri x: "); x = int.Parse(Console.ReadLine()); Console.Write("Gia tri y: "); y = int.Parse(Console.ReadLine()); double z = (double)x / y; Console.Write("Nhap vao mot so: "); int so = int.Parse(Console.ReadLine()); Đề cương Lập trình hướng đối tượng với C# Trang 145 f.WriteLine("{0}/{1}={2}", x, y, z); //f.Close(); } // Các câu lệnh đặt khối catch xử lý có ngoại lệ xảy catch(Exception ex) { Console.WriteLine(ex.Message); //f.Close(); } // Các câu lệnh đặt khối finally xử lý dù có hay ngoại lệ phát sinh Finally { f.Close(); } StreamReader fd = new StreamReader(new FileStream("ketqua.txt", FileMode.Open)); Console.WriteLine(fd.ReadToEnd()); fd.Close(); Console.ReadLine(); } } class chay { static void Main() { NgoaiLe f = new NgoaiLe(); f.MoTep(); } } 25.1.3 Kiểm soát tất ngoại lệ với try-catch-finally Với đoạn chương trình xảy nhiều ngoại lệ khác tùy vào trường hợp, muốn ứng xử khác tùy vào trường hợp khác sử dụng nhiều khối catch Mỗi khối catch bắt kiểu ngoại lệ khác nhau, lưu ý kiểu ngoại lệ cha phải đặt sau ngoại lệ Các câu lệnh xử lý dù có hay ngoại lệ xảy đặt khối finally Ví dụ 5.3: public void NhapSo() { int x, y,z=0; try { Console.Write("Nhap gia tri x: "); x = int.Parse(Console.ReadLine()); Console.Write("Nhap gia tri y: "); y = int.Parse(Console.ReadLine()); z = x / y; } catch (DivideByZeroException ex) { Console.WriteLine(ex.Message ); Console.WriteLine("gia tri mac dinh z =0"); z = 0; } catch (FormatException ex) { Console.WriteLine(ex.Message ); Console.WriteLine("Gia tri mac dinh cua z=1"); z = 1; } finally { Console.WriteLine("z= " +z); } Console.ReadLine(); } 25.2 Các lớp ngoại lệ Net Đối tượng System.Exception cung cấp số phương thức thuộc tính hữu dụng Thuộc tính Message cung cấp thông tin ngoại lệ, lý ngoại lệ phát sinh Thuộc tính Message thuộc tính đọc, đoạn chương trình phát sinh ngoại lệ thiết lập thuộc tính Message đối mục cho khởi dựng ngoại lệ Thuộc tính HelpLink cung cấp liên kết để trợ giúp cho tập tin liên quan đến ngoại lệ Đây thuộc tính đọc Thuộc tính StackTrace thuộc tính đọc thiết lập CLR Trong ví dụ 5.4 thuộc tính Exception.HelpLink thiết lập truy cập để cung cấp thông tin cho người sử dụng ngoại lệ DivideBy-ZeroException Thuộc tính StackTrace ngoại lệ sử dụng để cung cấp thông tin stack cho câu lệnh lỗi Một thông tin stack cung cấp hàng loạt gọi stack phương thức gọi mà dẫn đến ngoại lệ phát sinh Bảng sau mô tả số lớp ngoại lệ chung khai báo bên namespace System CÁC LỚP NGOẠI LỆ Tên ngoại lệ MethodAccessException Mô tả Lỗi truy cập, truy cập đến thành viên hay phương thức không truy cập ArgumentException Lỗi tham số đối mục ArgumentNullException Đối mục Null, phương thức truyền đối mục null không chấp nhận ArithmeticException Lỗi liên quan đến phép toán ArrayTypeMismatchException Kiểu mảng không hợp, cố lưu trữ kiểu không thích hợp vào mảng DivideByZeroException Lỗi chia zero FormatException Định dạng không xác đối mục IndexOutOfRangeException Chỉ số truy cập mảng không hợp lệ, dùng nhỏ số nhỏ hay lớn số lớn mảng InvalidCastException Phép gán không hợp lệ MulticastNotSupportedException Multicast không hỗ trợ, việc kết hợp hai delegate không NotFiniteNumberException Không phải số hữu hạn, số không hợp lệ NotSupportedException Phương thức không hỗ trợ, gọi phương thức không tồn bên lớp NullReferenceException Tham chiếu null không hợp lệ OutOfMemoryException Out of memory OverflowException Lỗi tràn phép toán StackOverflowException Tràn stack TypeInitializationException Kiểu khởi tạo sai, khởi dựng tĩnh có lỗi 25.3 Ném ngoại lệ 25.3.1 Ném lại ngoại lệ Khi có ngoại lệ xảy muốn phát sinh ngoại lệ bên khối cacth (trong hàm gọi) cần ném ngoại lệ khối catch, Cú pháp để thực phát sinh lại ngoại lệ mà bổ sung hay hiệu chỉnh : throw bienNgoaiLe; Ví dụ 5.4 class NgoaiLe { public int Chia() { int x, y,z=0; try { Console.Write("Nhap gia tri x: "); x = int.Parse(Console.ReadLine()); Console.Write("Nhap gia tri y: "); y = int.Parse(Console.ReadLine()); z = x / y; } catch (Exception ex) { // Ném ngoại lệ khối cacth Exception x = new Exception(ex.Message); throw x; // Hoặc //throw new Exception(ex.Message); } return z; } } class chay { static void Main() { NgoaiLe f = new NgoaiLe(); try {//Phương thức Chia() lớp Ngoại lệ phát sinh ngoại lệ xây //dựng phương thức ném ngoại lệ khối catch Console.WriteLine ( f.Chia()); } catch (Exception ex) { Console.WriteLine(ex.Message); } } 25.3.2 Tạo đối tượng ngoại lệ cho ứng dụng CLR cung cấp kiểu liệu ngoại lệ bản, ví dụ trước tạo vài kiểu ngoại lệ riêng Thông thường cần thiết phải cung cấp thông tin mở rộng cho khối catch ngoại lệ phát sinh Tuy nhiên, có lúc muốn cung cấp nhiều thông tin mở rộng khả đặc biệt cần thiết ngoại lệ mà tạo Chúng ta dễ dàng tạo ngoại lệ riêng, hay gọi ngoại lệ tùy chọn (custom exception), điều bắt buộc với ngoại lệ chúng phải dẫn xuất từ System.ApplicationException Ví dụ 5.5 sau minh họa việc tạo ngoại lệ riêng Ví dụ 5.5 class ClsNgoaile : System.ApplicationException { public ClsNgoaile(string message) : base(message) { } } class HinhTront { public int x, y, r; public HinhTront(int x, int y, int r) { if (r < 0) throw new ClsNgoaile("So Khong duoc am"); else this.x = x; this.y = y; this.r = r; } } class test { static void Main() { try { HinhTront t = new HinhTront(4, 3, -4); } catch (ClsNgoaile ex) { Console.WriteLine(ex.Message); } Console.ReadLine(); } } ... pháp lập trình thành kiểu sau:  Lập trình cấu trúc  Lập trình hướng thủ tục  Lập trình theo kiểu module hóa  Lập trình hướng đối tượng Chúng ta xem xét kỹ thuật lập trình 1.1.1 Lập trình. .. gọi liệu đối tượng( Object) Lập trình có sử dụng kiểu liệu loại gọi lập trình hướng đối tượng Lập trình hướng đối tượng đặt trọng tâm vào đối tượng Yếu tố quan trình phát triển chương trình không... biết Đề cương Lập trình hướng đối tượng với C# Trang 31 1.3 Các ưu điểm lập trình hướng đối tượng 1.3.1 Các ưu điểm lập trình hướng đối tượng LTHĐT đem lại số lợi cho người thiết kế lẫn người lập

Ngày đăng: 24/10/2017, 15:51

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan