Bài giảng tóm tắt Lập trình hướng đối tượng

MỤC LỤC

I. Giới thiệu lập trình hướng đối tượng.4

I.1. Lập trình hướng thủtục (Pascal, C, ) .4

I.2. Lập trình hướng đối tượng (Object-oriented programming ) .4

I.2.1. Tính đóng gói.5

I.2.2. Tính kếthừa.5

I.2.3. Tính đa hình.5

I.2.4. Ưu điểm của phương pháp lập trình hướng đối tượng.5

II. Lớp và đối tượng .5

II.1. Định nghĩa lớp.5

II.2. Tạo đối tượng .7

II.3. Phương thức tạo lập (constructor) của một đối tượng .9

II.4. Phương thức tạo lập sao chép (copy constructor) .11

II.5. Quá tải hàm .12

II.6. Sửdụng các thành viên tĩnh .15

II.7. Tham sốcủa phương thức .18

II.7.1. Truyền tham trịbằng tham sốkiểu giá trị.18

II.7.2. Truyền tham chiếu bằng tham sốkiểu giá trịvới từkhóa ref.19

II.7.3. Truyền tham chiếu với tham sốkiểu giá trịbằng từkhóa out.20

II.7.4. Truyền tham trịvới tham sốthuộc kiểu tham chiếu.21

II.7.5. Truyền tham chiếu với tham sốthuộc kiểu dữliệu tham chiếu.24

II.8. Tham chiếu this .25

II.9. Đóng gói dữliệu với thuộc tính (property) .27

II.10. Toán tử(operator) .30

II.11. Indexer (Chỉmục) .34

II.12. Lớp lồng nhau .38

II.13. Câu hỏi ôn tập .38

II.14. Bài tập tổng hợp .39

III. Kếthừa (inheritance) và đa hình (polymorphism).40

III.1. Quan hệchuyên biệt hóa và tổng quát hóa .40

III.2. Kếthừa.40

III.3. Gọi phương thức tạo lập của lớp cơsở.42

III.4. Định nghĩa phiên bản mới trong lớp dẫn xuất .44

III.5. Tham chiếu thuộc lớp cơsở.46

III.6. Phương thức ảo (virtual method) và tính đa hình (polymorphism) .48

III.7. Lớp Object .55

III.8. Lớp trừu tượng(abstract).55

III.9. Giao diện (interface) .58

III.9.1. Thực thi giao diện.58

III.9.2. Hủy đối tượng.60

III.9.3. Thực thi nhiều giao diện.64

III.9.4. Mởrộng giao diện.66

III.9.5. Kết hợp giao diện.67

III.9.6. Kiểm tra đối tượng có hỗtrợgiao diện hay không bằng toán tử is

.67

III.9.7. Các giao diện Icomparer, IComparable (giao diện so sánh) và

ArrayList.67

III.9.8. Câu hỏi ôn tập.74

III.9.9. Bài tập tổng hợp.74

PHỤLỤC A - CƠBẢN VỀNGÔN NGỮC#

I. Tạo ứng dụng trong C#.75

I.1. Soạn thảo chương trình “Hello World”.76

I.2. Biên dịch và chạy chương trình “Hello World”.77

II. Cơsởcủa ngôn ngữC# .77

II.1. Kiểu dữliệu.77

II.1.1. Các kiểu xây dựng sẵn trong C#:.77

II.1.2. Hằng.78

II.1.3. Kiểu liệt kê.79

II.1.4. Kiểu chuỗi.80

II.2. Lệnh rẽnhánh.80

II.2.1. Lệnh if.80

II.2.2. Lệnh switch.81

II.2.3. Lệnh goto.82

II.2.4. Lệnh lặp while.83

II.2.5. Lệnh do while.83

II.2.6. Lệnh for.84

II.2.7. Lệnh foreach.85

II.2.8. Lệnh continue và break.85

II.3. Mảng.86

II.3.1. Mảng một chiều.86

II.3.2. Mảng nhiều chiều.88

II.3.3. Một sốví dụvềmảng nhiều chiều.89

II.4. Không gian tên (namespace).90

PHỤLỤC B - BIỆT LỆ

I. Ném ra biệt lệ.92

II. Bắt ngoại lệ.92

III. Khối finally .95

IV. Một sốngoại lệkhác:.95

V. Một sốví dụkhác.96

pdf98 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 1744 | Lượt tải: 3download
Tóm tắt nội dung Bài giảng tóm tắt Lập trình hướng đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
); 
 m = uint.Parse(Console.ReadLine()); 
 A = new float[n][]; 
 int i; 
 for( i = 0; i < n; i++) A[i] = new float[m]; 
 NhapMaTran(A,n, m); 
 Console.WriteLine("Ma tran vua nhap"); 
 XuatMaTran(A,n,m); 
 Console.ReadLine(); 
 } 
} 
II.3.3. Một số ví dụ về mảng nhiều chiều 
Sau đây là một số ví dụ về mảng nhiều chiều: 
• Khai báo mảng 3 chiều kiểu số nguyên với kích thước mỗi chiều là 4, 2 và 
3: 
int[,,] myArray = new int [4,2,3]; 
• Khai báo mảng 2 chiều, cấp phát và khởi gán giá trị cho mảng: 
int[,] myArray = new int[,] { {1,2}, {3,4}, {5,6}, {7,8} }; 
hoặc 
int[,] myArray = {{1,2}, {3,4}, {5,6}, {7,8}}; 
• Gán giá trị cho một phần tử trong mảng 2 chiều: 
Lập trình hướng đối tượng Phạm Quang Huy 2008 
 90
myArray[2,1] = 25; 
II.4. Không gian tên (namespace) 
Có thể hiểu không gian tên như là thư viện. Sử dụng không gian tên giúp ta tổ 
chức mã chương trình tốt hơn, tránh trường hợp hai lớp trùng tên khi sử dụng các 
thư viện khác nhau. Ngoài ra, không gian tên được xem như là tập hợp các lớp đối 
tượng, và cung cấp duy nhất các định danh cho các kiểu dữ liệu và được đặt trong 
một cấu trúc phân cấp. Việc sử dụng không gian tên trong lập trình là một thói 
quen tốt, bởi vì công việc này chính là cách lưu các mã nguồn để sử dụng về sau. 
Ngoài thư viện (namespace) do MS.NET và các hãng thứ ba cung cấp, ta có thể 
tạo riêng cho mình các không gian tên . 
C# đưa ra từ khóa using để khai báo sử dụng không gian tên trong chương trình: 
using 
Trong một không gian tên ta có thể định nghĩa nhiều lớp và không gian tên . 
Để tạo một không gian tên ta dùng cú pháp sau: 
namespace 
{ 
..... 
} 
Ví dụ II.4.1 : Định nghĩa lớp Tester trong namespace Programming_C_Sharp. 
namespace Programming_C_Sharp 
{ 
 using System; 
 public class Tester 
 { 
 public static int Main( ) 
 { 
 for (int i=0;i<10;i++) 
 { 
 Console.WriteLine("i: {0}",i); 
 } 
 return 0; 
 } 
 } 
} 
Ví dụ II.4.2: Khai báo không gian tên lồng nhau: 
Lập trình hướng đối tượng Phạm Quang Huy 2008 
 91
namespace Programming_C_Sharp 
{ 
 namespace Programming_C_Sharp_Test1 
 { 
 using System; 
 public class Tester 
 { 
 public static int Main( ) 
 { 
 for (int i=0;i<10;i++) 
 { 
 Console.WriteLine("i: {0}",i); 
 } 
 return 0; 
 } 
 } 
 } 
namespace Programming_C_Sharp_Test2 
 { 
 public class Tester 
 { 
 public static int Main( ) 
 { 
 for (int i=0;i<10;i++) 
 { 
 Console.WriteLine("i: {0}",i); 
 } 
 return 0; 
 } 
 } 
 } 
} 
Lập trình hướng đối tượng Phạm Quang Huy 2008 
 92
Phụ lục B - BIỆT LỆ (NGOẠI LỆ) 
• Là các dạng lỗi gặp phải khi chạy chương trình (lúc biên dịch chương trình 
không phát hiện được). Thường là do người dùng gây ra lúc chạy chương 
trình. 
• Kết thúc bởi từ khoá Exception. 
I. Ném ra biệt lệ 
Để báo động sự bất thường của chương trình. 
Cú pháp: 
throw [biểu thức tạo biệt lệ]; 
Sau khi ném ra một ngoai lệ, các đoạn lệnh sau lệnh throw sẽ bị bỏ qua. Chương 
trình thực hiện việc bắt ngoại lệ hoặc dừng. 
II. Bắt ngoại lệ 
• Để chương trình có tính dung thứ lỗi cao hơn, cho phép vẫn chạy chương 
trình đối với những lỗi không quá quan trọng. Chẳng hạn khi nhập một giá 
trị nguyên, người dùng vô tình nhập một ký tự, khi đó không nhất thiết 
phải dừng chương trình mà chỉ thông báo lỗi và cho phép người dùng nhập 
lại. 
• Để chương trình thân thiện hơn đối với người sử dụng. Thông báo lỗi cụ 
thể, thay vì dạng thông báo lỗi mang tính kỹ thuật khó hiểu của hệ thống. 
Việc bắt ngoại lệ được thực hiện thông qua khối try { } catch { } như sau: 
try 
{ 
 Các câu lệnh có thể gây ra biệt lệ. 
} 
catch (khai báo biệt lệ 1 ) {các câu lệnh xử lý biệt lệ 1} 
… 
catch (khai báo biệt lệ n ) {các câu lệnh xử lý biệt lệ n} 
• Nếu không có khai báo biệt lệ nào trong khối catch thì khi đó ta bắt tất cả 
các dạng ngoại lệ do khối try gây ra. 
Ví dụ: Xét đoạn chương trình 
using System; 
class Class1 
{ 
 static void Main(string[] args) 
 { 
Lập trình hướng đối tượng Phạm Quang Huy 2008 
 93
 int x=0; 
 Console.WriteLine("Nhap mot so nguyen"); 
 x=int.Parse(Console.ReadLine()); 
 Console.WriteLine("So nguyen vua nhap {0}",x); 
 Console.ReadLine(); 
 } 
} 
• Khi chạy chương trình, nếu ta nhập một số nguyên chương trình sẽ chạy tốt. 
Nếu ta (vô tình) nhập một dữ liệu không phải là số nguyên (chẳng hạn nhập 
ký tự ‘r’), chương trình sẽ dừng và báo lỗi runtime sau: 
An unhandled exception of type 'System.FormatException' occurred in 
mscorlib.dll 
Additional information: Input string was not in a correct format. 
Vì vậy, để chương trình có tính dung thứ lỗi (vì đây có thể là lỗi vô tình của người 
sử dụng) ta cần viết lại như sau để cho người dùng nhập lại: 
using System; 
class Class1 
{ 
 static void Main(string[] args) 
 { 
 int x=0; 
 Console.WriteLine("Nhap mot so nguyen"); 
 NHAPLAI: 
 try 
 { 
 x=int.Parse(Console.ReadLine()); 
 } 
 //catch(System.Exception e) 
 catch(System.FormatException e) 
 { 
 Console.WriteLine("Loi : " + e.ToString()); 
 Console.WriteLine("Khong duoc nhap loai du 
lieu khac. Hay nhap lai"); 
 goto NHAPLAI; 
 } 
 Console.WriteLine("So nguyen vua nhap {0}",x); 
 Console.ReadLine(); 
 } 
} 
Vì đoạn mã 
x=int.Parse(Console.ReadLine()); 
có thể gây ra biệt lệ 
System.FormatException 
Lập trình hướng đối tượng Phạm Quang Huy 2008 
 94
nên ta đặt nó trong khối try và khối catch bắt biệt lệ này. Sau đó xuất thông báo 
lỗi, nhưng không dừng chương trình mà cho phép nhập lại bằng lệnh nhảy tới 
nhãn NHAPLAI: 
goto NHAPLAI; 
Vì mọi loại biệt lệ đều dẫn xuất từ System.Exception nên ta có thể xem mọi 
biệt lệ là một System.Exception. Do vậy, nếu ta không biết loại biệt lệ là gì ta 
thay lệnh 
catch(FormatException e) 
bằng lệnh: 
catch(Exception e) 
Nếu muốn bắt mọi ngoại lệ nhưng không thông báo lỗi ta có thể sử dụng khối 
catch rỗng như sau: 
catch 
 { 
Console.WriteLine("Khong duoc nhap loai du 
lieu khac. Hay nhap lai"); 
 goto NHAPLAI; 
 } 
Khi đó chương trình cho phép nhập lại nhưng không thông báo cho 
người dùng lỗi là gì. 
Ví dụ 2: Bắt nhiều ngoại lệ 
using System; 
class Class1 
{ 
 static void Main(string[] args) 
 { 
 byte x=0; 
NHAPLAI: 
 Console.WriteLine("Nhap mot so nguyen"); 
 try 
 { 
 x=byte.Parse(Console.ReadLine()); 
 } 
 //catch(System.Exception e) 
 catch(FormatException e1) 
 { 
 Console.WriteLine("Loi : " +e1.ToString()); 
 Console.WriteLine("Khong duoc nhap loai du lieu 
khac. Hay nhap lai"); 
 goto NHAPLAI; 
 } 
 catch(OverflowException e2) 
 { 
 Console.WriteLine("Loi : " +e2.ToString()); 
Lập trình hướng đối tượng Phạm Quang Huy 2008 
 95
 Console.WriteLine("So phai thuoc doan [0..256]. 
Hay nhap lai"); 
 goto NHAPLAI; 
 } 
 Console.WriteLine("So nguyen vua nhap {0}",x); 
 Console.ReadLine(); 
 } 
} 
Khi một ngoại lệ phát sinh, chương trình sẽ nhảy ngay tới khối catch gần nhất có 
thể bắt ngoại lệ hoặc dừng nếu không có khối catch nào có thể bắt ngoại lệ này. 
III. Khối finally 
Khi đặt khối finally sau các khối catch thì cho dù có biệt lệ hay không chương 
trình vẫn không dừng mà sẽ thực hiện khối finally. (Nếu bắt được ngoại lệ thì 
chương trình sẽ thực hiện khối catch tương ứng trước khi thực hiện khối finally). 
Hãy thử thêm đoạn lệnh sau vào ví dụ trên. 
finally 
{ 
 Console.WriteLine("So nguyen vua nhap {0}",x); 
} 
IV. Một số ngoại lệ khác: 
• System.OutOfMemoryException: Lỗi không thể cấp phát bộ nhớ. 
• System.StackOverflowException: Lỗi tràn stack. Thường là do gọi đệ qui 
quá sâu hoặc gọi đệ qui bị lặp vô tận. 
• System.NullReferenceException: Lỗi xảy ra khi truy cập tới một tham 
chiếu trỏ tới null trong khi cần một tham chiếu trỏ tới một đối tượng thực 
sự hiện hữu. 
• System.TypeInitializationException: Hàm constructor ném ra một ngoại 
lệ nhưng không có ngoại lệ catch nào bắt ngoại lệ này. 
• System.InvalidCastException: Xảy ra khi không thể thực hiện việc ép kiểu 
tường minh từ một kiểu cơ sở hoặc một giao diện sang một kiểu dẫn xuất. 
• System.ArrayTypeMismatchException: Kiểu của giá trị cần lưu vào mảng 
không hợp kiểu với kiểu của mảng. 
• System.IndexOutOfRangeException: Truy cập ngoài mảng. 
• System.MulticastNotSupportedException: Lỗi liên quan tới việc không thể 
kết hợp 2 delegate không null vì kiểu trả về của delegate không phải là 
void. 
• System.ArithmeticException: Lỗi số học. Chẳng hạn chia cho 0, tràn dữ 
liệu. 
Lập trình hướng đối tượng Phạm Quang Huy 2008 
 96
• System.DivideByZeroException: Lỗi chia cho 0 
• System.OverflowException: Tràn dữ liệu. Chẳng hạn gán dữ liệu quá lớn 
cho một biến kiểu byte. 
• ... 
V. Một số ví dụ khác 
Nên bắt biệt lệ cụ thể trước, biệt lệ tổng quát 
using System; 
public class Test 
{ 
 public static void Main( ) 
 { 
 Test t = new Test( ); 
 t.CanAChiaB(4,-5 ); 
 Console.ReadLine(); 
 } 
 public void CanAChiaB(int a,int b) 
 { 
 try 
 { 
 if (b == 0) 
 throw new DivideByZeroException( ); 
 if (a*b<= 0) 
throw new ArithmeticException( ); 
 else 
 { 
 double kq = Math.Sqrt(a/b); 
 Console.WriteLine ("Ket qua = {0}",kq ); 
 } 
 } 
 // Bat ngoai le cu the truoc 
 catch (DivideByZeroException) 
 { 
 Console.WriteLine("Loi chia cho 0!"); 
 } 
 //Bat ngoai le tong quat sau; 
 catch (ArithmeticException) 
 { 
Console.WriteLine("Co loi so hoc gi gi 
do...hehe!"); 
 } 
 } 
} 
Lập trình hướng đối tượng Phạm Quang Huy 2008 
 97
TÀI LIỆU THAM KHẢO 
1) Phạm Hữu Khang, C# 2005 cơ bản, Nxb Lao Động Xã Hội, 2006. 
2) Phạm Hữu Khang, C# 2005 Tập 2-Lập trình Windows Form, Nxb Lao Động Xã Hội, 
2006. 
3) Dương Quang Thiện, Lập trình Visual C# như thế nào? Tập 1,2,3, Nxb Tổng hợp Tp 
HCM, 2005. 
4) Ths.Nguyễn Cẩn, Tự học ngôn ngữ lập trình C++,Nbx Đồng Nai,1996 . 
5) Jesse Liberty, Programming C#, 2nd Edition, tr 1-320 ,Nxb OReilly. 
6) Ben Albahari, CSharp Essentials, 2nd Edition, tr 1-88, Nxb OReilly. 
7) VN-Guide, Lập trình Java, Nxb Thống Kê, 2000. 

File đính kèm:

  • pdfGT_OOP.pdf