1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình hướng đối tượng với C docx

142 309 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 142
Dung lượng 0,94 MB

Nội dung

Đề 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 khơng có cấu trúc (hay lập trình tuyến tính) .5 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) 18 1.2.6 Phương thức (Method) 18 1.2.7 Thông điệp (Message) 19 1.2.8 Sự kiện (Event) 20 1.2.8 Phân biệt lớp đối tượng 20 1.2.9 Thiết lập (Construction) Hủy (Destruction) 20 1.2.10 Tính Bền vững (Persistence) 22 1.2.11 Tính Đóng gói liệu 23 1.2.12 Tính thừa kế 24 1.2.13 Tính Đa Thừa kế 26 1.2.14 Tính Đa hình 27 1.3 Các ưu điểm lập trình hướng đối tượng 29 1.3.1 Các ưu điểm lập trình hướng đối tượng 29 1.3.2 Mốt số ngơn ngữ lập trình hướng đối tượng 29 1.3.3 Ngôn ngữ lập trình C# 31 Bài 2: Lớp đối tượng(1) 33 2.1 Lớp 33 2.1.1 Định nghĩa lớp 33 2.1.2 Thành phần liệu 37 Đề cương Lập trình hướng đối tượng với C# Trang 2.1.3 Phương thức 39 2.1.4 Các từ khoá đặc tả truy cập 39 2.1.5 Khai báo đối tượng, mảng đối tượng 42 2.1.6 Định nghĩa chồng phương thức 43 2.1.7 Thuộc tính thủ tục thuộc tính 45 2.1.8 Từ khoá this 49 Bài 3: Lớp đối tượng(2) 53 3.1 Phép gán đối tượng 53 3.2 Phương thức thiết lập chép 53 3.2.1 Phương thức thiết lập 53 3.2.2 Phương thức chép 60 3.3 Huỷ bỏ đối tượng, chế gom rác Net 61 Bài 5: Lớp đối tượng(3) 65 5.1 Thành phần tĩnh cách sử dụng 65 5.1.1 Thành phần liệu tĩnh 65 5.1.2 Phương thức tĩnh 67 5.2 Lớp bao cách sử dụng 70 Bài 7: Định nghĩa chồng toán tử lớp 72 7.1 Khái niệm chồng toán tử 72 7.2 Cú pháp nạp chồng toán tử 72 7.2.1 Toán tử 72 7.2.2 Tốn tử ngơi 73 7.3 Yêu cầu sử dụng toán tử 73 Bài 12: Kế thừa đa hình(1) 76 12.1 Giới thiệu chung thừa kế 76 12.2 Xây dựng lớp dẫn xuất thừa kế từ lớp sở 79 12.3 Mức truy cập lớp dẫn xuất 82 12.4 Gọi phương thức khởi tạo lớp sở 83 12.5 Truy xuất thành phần lớp sở 84 12.6 Boxing Unboxing liệu 85 12.7 Các lớp lồng 87 Đề cương Lập trình hướng đối tượng với C# Trang Bài 14: Kế thừa đa hình(2) 90 14.1 Giới thiệu chung đa hình 90 14.2 Phương thức đa hình 90 14.3 Từ khoá new override 94 Bài 17 Kế thừa đa hình(3) 97 17.1 Lớp trừu tượng 97 17.1.1 Xây dựng lớp sở trừu tượng 97 17.1.2 Kế thừa từ lớp trừu tượng 100 17.1.3 Hạn chế lớp trừu tượng 104 17.2 Lớp cô lập (sealed class) 105 17.3 Lớp Object 106 Bài 21: Giao diện 109 21.1 Giao diện 109 21.1.1 Xây dựng giao diện 109 21.1.2 Khai báo thuộc tính giao diện 110 21.1.3 Khai báo phương thức giao diện 111 21.2 Thực thi giao diện 112 21.2.1 Thực thi giao diện 112 21.2.2 Toán tử is 116 21.2.3 Toán tử as 118 21.2 Thực thi giao diện 119 21.2.1 Thực thi giao diện 119 21.2.4 Mở rộng giao diện 129 21.2.5 Tham chiếu đối tượng lớp qua giao diện 130 21.2.6 Giao diện đối lập với lớp trừu tượng 131 Bài 25: Kỹ thuật xử lý ngoại lệ 133 25.1 Khái niệm xử lý ngoại lệ 133 25.1.1 Đón bắt lỗi với try catch 133 25.1.2 Dọn dẹp lệ với try finally 135 25.1.3 Kiểm soát tất ngoại lệ với try-catch-finally 137 25.2 Các lớp ngoại lệ Net 138 25.3 Ném ngoại lệ 140 Đề cương Lập trình hướng đối tượng với C# Trang 25.3.1 Ném lại ngoại lệ 140 25.3.2 Tạo đối tượng ngoại lệ cho ứng dụng 141 Đề 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 khơng có 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 khơng có 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 tồn cục chương trình (các biến dùng chương trình biến tồn cục) Chúng ta minh hoạ hình vẽ sau đây: Lập trình khơng có cấu trúc Chương trình thao tác trực tiếp liệu tồn cục Một số nhược điểm lập trình khơng có cấu trúc: + Lập trình khơng có cấu trúc khơng có khả kiểm sốt tính thấy liệu Mọi liệu chương trình biến tồ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 số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 khơng có 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 tố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ỏ tồ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ể Ngồ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 tồ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 số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 tồn cục Đó phải viết lại tồ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 tố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 tồ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 số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 + 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 Đề cương Lập trình hướng đối tượng với C# Trang 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 q 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 ngồi truy nhập tới tuỳ tiện Lập trình hướng đối tượng cho phép phân tích tố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 Lập trình hướng đối tượng có đặc tính sau: Đề cương Lập trình hướng đối tượng với C# Trang 10 + 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 khơng có 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 Màu tóc Từ danh sách kể trên, xác định đặc tính thiết yếu ứng dụng Bởi đề cập đến khách hàng mua xe, chi tiết thiết yếu là: Đề cương Lập trình hướng đối tượng với C# Trang 128 Chúng ta lưu ý thực thi giao diện tường minh ngăn ngừa việc sử dụng từ khóa virtual, lớp dẫn xuất hỗ trợ để thực thi lại phương thức Do đó, HinhVuong dẫn xuất từ HinhChuNhat, thực thi lại phương thức HinhChuNhat.InThongTin () lớp HinhChuNhat thực thi phương thức InThongTin() khơng phải ảo Ẩ n thành viên Ngôn ngữ C# cho phép ẩn thành viên giao diện Ví dụ, có giao diện IBase với thuộc tính P: interface IBase { int P { get; set;} } sau dẫn xuất từ giao diện giao diện khác, IDerived, giao diện làm ẩn thuộc tính P với phương thức P(): interface IDerived : IBase { new int P(); } Việc cài đặt ý tưởng tốt, ẩn thuộc tính P lớp sở Một thực thi giao diện dẫn xuất đòi hỏi tối thiểu thành viên giao diện tường minh Chúng ta sử dụng thực thi tường minh cho thuộc tính lớp sở phương thức dẫn xuất, sử dụng thực thi tường minh cho hai Do đó, ba phiên viết sau hợp lệ: class myClass : IDerived { // thực thi tường minh cho thuộc tính sở Đề cương Lập trình hướng đối tượng với C# Trang 129 int IBase.p { get{ }} // 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 Interface Ihinhs:IHinh Đề cương Lập trình hướng đối tượng với C# Trang 130 { 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 in h v I D aG ia c thêm vào phương thức m i S o C an h ( ) i n t e r fa ce I h in h D a G ia c: I H in h , I D aG ia c { in t S o C an h ( ) ; } 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 Class chay { Đề cương Lập trình hướng đối tượng với C# Trang 131 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ơng có 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 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: Đề cương Lập trình hướng đối tượng với C# public class StorableList : List, IStorable { // phương thức List public void Read() { } public void Write( object o) { } // } Trang 132 Đề cương Lập trình hướng đối tượng với C# Trang 133 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ó ngun 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 q trình chạy tác động mà ngun nhân khơng phải lỗi lập trình, lỗi với người lập trình có kinh nghiệm họ dự đốn 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 Đề cương Lập trình hướng đối tượng với C# Trang 134 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/ } … Finally { // Lệnh xử lý cho dù có ngoại lệ hay khơng có ngoại lệ phát sinh } Ví dụ 25.1 xử lý bắt ngoại lệ try…catch Đề cương Lập trình hướng đối tượng với C# Trang 135 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 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 Đề cương Lập trình hướng đối tượng với C# Trang 136 Đ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ể q 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 cịn mở Người phát triển biết khơng có 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()); 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); Đề cương Lập trình hướng đối tượng với C# Trang 137 //f.Close(); } // Các câu lệnh đặt khối finally xử lý dù có hay khơng có 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 khơng có 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 tố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 ngồi khối cacth (trong hàm gọi) cần ném ngoại lệ ngồi khối catch, Cú pháp để thực phát sinh lại ngoại lệ mà khơng có 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(); } } ... tượng C Dữ liệu C? ?c phương th? ?c Lập trình hướng đối tượng c? ? đ? ?c tính sau: Đề c? ?ơng Lập trình hướng đối tượng với C# Trang 10 + Tập chung vào liệu thay cho hàm + Chương trình chia thành đối tượng. .. tồn c? ? ?c) Chúng ta minh hoạ hình vẽ sau đây: Lập trình khơng c? ? 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 khơng c? ? c? ??u tr? ?c: + Lập trình khơng c? ? c? ??u tr? ?c. .. 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 tồn c? ? ?c chương trình (c? ?c biến dùng chương trình biến

Ngày đăng: 13/08/2014, 18:20

HÌNH ẢNH LIÊN QUAN

Hình  dưới  đây  cho  ta  một  cái  nhìn  tổng  quan  về  sự  phát  triển  các  ngôn  ngữ  lập  trình  hướng đối tượng - Lập trình hướng đối tượng với C docx
nh dưới đây cho ta một cái nhìn tổng quan về sự phát triển các ngôn ngữ lập trình hướng đối tượng (Trang 30)
Bảng 2.3.1: Giá trị mặc định của kiểu dữ liệu cơ bản. - Lập trình hướng đối tượng với C docx
Bảng 2.3.1 Giá trị mặc định của kiểu dữ liệu cơ bản (Trang 54)
Bảng 3.1: Tóm tắt các phương thức của lớp Object. - Lập trình hướng đối tượng với C docx
Bảng 3.1 Tóm tắt các phương thức của lớp Object (Trang 107)

TỪ KHÓA LIÊN QUAN