Bài giảng Lập trình hướng đối tượng - Chương 4: Interface & Class trong C#

Chương 4  
Interface & Class trong C#  
4.0 Dẫn nhập  
4.1 Tổng quát về phát biểu class của C#  
4.2 Định nghĩa thuộc tính vật lý  
4.3 Định nghĩa tác vụ chức năng  
4.4 Định nghĩa toán tử chức năng  
4.5 Định nghĩa thuộc tính giao tiếp (luận lý)  
4.6 Định nghĩa ₫ối tượng ₫ại diện hàm (delegate)  
4.7 Định nghĩa sự kiện (Event)  
4.8 Định nghĩa phần tử quản lý danh sách (indexer)  
4.9 Thành phần static và thành phần không static  
4.10 Lệnh ₫ịnh nghĩa 1 class C# ₫iển hình  
4.11 Kết chương  
Môn : Lập trình hướng ₫ối tượng  
Khoa Khoa học & Kỹ thuật Máy tính  
Chương 4 : Interface & Class trong C#  
Slide 1  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.0 Dẫn nhập  
Chương này giới thiệu cú pháp của phát biểu class C# ₫ược dùng  
₫ể ₫ặc tả chi tiết hiện thực 1 loại ₫ối tượng ₫ược dùng trong  
chương trình.  
Chương này cũng giới thiệu cú pháp các phát biểu ₫ể ₫ịnh nghĩa  
các thành phần cấu thành ₫ối tượng như thuộc tính vật lý, thuộc  
tính giao tiếp, tác vụ chức năng, toán tử, delegate, event, indexer.  
Chương này cũng phân biệt 2 loại thành phần ₫ược ₫ặc tả trong 1  
class : thành phần dùng chung (static) và thành phần nhân bản  
theo từng ₫ối tượng.  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 2  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.1 Tổng quát về phát biểu class của C#  
Ngôn ngữ C# (hay bất kỳ ngôn ngữ lập trình nào khác) cung cấp cho  
người lập trình nhiều phát biểu (statement) khác nhau, trong ₫ó phát  
biểu class ₫ể ₫ặc tả chi tiết hiện thực từng loại ₫ối tượng cấu thành  
phần mềm là phát biểu quan trọng nhất. Sau ₫ây là 1 template của 1  
class C# :  
class MyClass : BaseClass, I1, I2, I3 {  
//₫ịnh nghĩa các thuộc tính vật lý của ₫ối tượng  
//₫ịnh nghĩa các tác vụ chức năng, các toán tử  
//₫ịnh nghĩa các thuộc tính giao tiếp (luận lý)  
//₫ịnh nghĩa các ₫ại diện hàm chức năng (delegate)  
//₫ịnh nghĩa các sự kiện (event)  
//₫ịnh nghĩa indexer của class  
//₫ịnh nghĩa các tác vụ quản lý ₫ời sống ₫ối tượng  
}
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 3  
4.1 Tổng quát về phát biểu class của C#  
Khi ₫ịnh nghĩa 1 class mới, ta có thể thừa kế tối ₫a 1 class ₫ã có  
(₫ơn thừa kế), tên class này nếu có, phải nằm ở vị trí ₫ầu tiên ngay  
sau dấu ngăn ":".  
Khi ₫ịnh nghĩa 1 class, ta có thể hiện thực nhiều interface khác  
nhau (₫a hiện thực), danh sách này nếu có, phải nằm sau tên class  
cha. Trong trường hợp nhiều interface có cùng 1 tác vụ (phân biệt  
bằng chữ ký) và nếu class muốn hiện thực chúng khác nhau thì ta  
dùng tên dạng phân cấp :  
class MyClass : BaseClass, I1, I2, I3 {  
//hiện thực các tác vụ cùng chữ ký trong các interface khác nhau  
void I1.func1() {}  
void I2.func1() {}  
void I3.func1() {}  
...  
}
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 4  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.2 Định nghĩa thuộc tính vật lý  
Mỗi thuộc tính vật lý của ₫ối tượng là 1 biến dữ liệu cụ thể. Phát  
biểu ₫ịnh nghĩa 1 thuộc tính vật lý sẽ ₫ặc tả các thông tin sau về  
thuộc tính tương ứng :  
. Tên nhận dạng.  
. Kiểu dữ liệu.  
. Giá trị ban ₫ầu.  
. Tầm vực truy xuất  
. Tinh chat va hanh vi  
Cú pháp ₫ơn giản ₫ể ₫ịnh nghĩa 1 thuộc tính vật lý như sau :  
[scope] [attribute] type name [= value];  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 5  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.2 Định nghĩa thuộc tính vật lý  
thành phần scope miêu tả tầm vực truy xuất của thuộc tính, có thể  
chọn 1 trong 5 khả năng sau :  
. public : thuộc tính có thể ₫ược truy xuất bất kỳ ₫âu.  
. internal : thuộc tính có thể ₫ược truy xuất bất kỳ ₫âu trong  
cùng assembly chứa class.  
. protected : thuộc tính có thể ₫ược truy xuất bởi class hiện hành  
và các class con, cháu.  
. protected internal : thuộc tính có thể ₫ược truy xuất bất kỳ ₫âu  
trong cùng assembly chứa class hay các class con, cháu.  
. private : thuộc tính chỉ có thể ₫ược truy xuất nội bộ trong class  
hiện hành.  
. nếu thành phần scope không ₫ược miêu tả tường minh, thuộc  
tính sẽ có tầm vực private.  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 6  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.2 Định nghĩa thuộc tính vật lý  
Hệ thống các ₫ối tượng trên máy tính  
Assembly  
class  
public i1;  
internal i2;C1  
protected i3;  
protected internal i4;  
private i5;  
C2  
A1  
C3  
C4  
A2  
Môn : Lập trình hướng ₫ối tượng  
Khoa Khoa học & Kỹ thuật Máy tính  
Chương 4 : Interface & Class trong C#  
Slide 7  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.2 Định nghĩa thuộc tính vật lý  
thành phần type thường là tên kiểu dữ liệu của thuộc tính tương  
ứng, nó có thể là tên kiểu giá trị hay tên kiểu tham khảo.  
thành phần name là tên nhận dạng thuộc tính.  
thành phần [= value] miêu tả biểu thức xác ₫ịnh trị ban ₫ầu của  
thuộc tính.  
thành phần nào nằm trong [] là nhiệm ý (optional), có thể có hoặc  
không. Các thành phần khác bắt buộc phải có.  
Thí dụ :  
private int dorong = 10;  
private int docao = 10;  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 8  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.3 Định nghĩa tác vụ chức năng  
Mỗi tác vụ (operation) thực hiện 1 chức năng xác ₫ịnh, rõ ràng  
nào ₫ó mà bên ngoài ₫ối tượng (client) cần dùng. Định nghĩa tác  
vụ gồm 2 phần : ₫ịnh nghĩa interface sử dụng và ₫ịnh nghĩa thuật  
giải chi tiết mà tác vụ thực hiện (method).  
Lệnh ₫ịnh nghĩa 1 tác vụ thường gồm 5 phần sau :  
[scope] [attribute] return_type name (arg_list) body  
. scope miêu tả tầm vực truy xuất của tác vụ : public, protected,  
internal, protected internal, private.  
. attribute miêu tả tính chất hoạt ₫ộng của tác vụ : static, virtual,  
sealed, override, abstract, extern.  
. return_type là tên kiểu của giá trị mà tác vụ sẽ trả về.  
. name là tên tác vụ, arg_list là danh sách từ 0 tới n tham số  
hình thức cách nhau bởi dấu ',', ₫ịnh nghĩa mỗi tham số hình  
thức gần giống như ₫ịnh nghĩa thuộc tính vật lý.  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 9  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.4 Định nghĩa toán tử chức năng  
Mỗi toán tử (operator) thực hiện 1 phép toán xác ₫ịnh. Toán tử là  
trường hợp ₫ặc biệt của tác vụ. Định nghĩa toán tử gồm 2 phần :  
₫ịnh nghĩa interface sử dụng và ₫ịnh nghĩa thuật giải chi tiết mà  
toán tử thực hiện (method).  
Lệnh ₫ịnh nghĩa 1 toán tử thường gồm 6 phần sau :  
[scope] [attribute] return_type operator name (arg_list) body  
. scope miêu tả tầm vực truy xuất của toán tử : public, static,  
extern.  
. return_type là tên kiểu của giá trị mà toán tử sẽ trả về.  
. name là tên toán tử : +,-,*,/,...  
. arg_list là danh sách từ 1 tới 3 tham số hình thức cách nhau bởi  
dấu ',', ₫ịnh nghĩa mỗi tham số hình thức gần giống như ₫ịnh  
nghĩa thuộc tính vật lý.  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 10  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.5 Định nghĩa thuộc tính giao tiếp (luận lý)  
Mỗi thuộc tính giao tiếp (luận lý) chẳng qua là 1 hay 2 tác vụ  
get/set (tham khảo/thiết lập) nội dung thuộc tính tương ứng. Định  
nghĩa thuộc tính giao tiếp là ₫ịnh nghĩa 1 hay 2 tác vụ get/set.  
Lệnh ₫ịnh nghĩa 1 thuộc tính thường có dạng sau :  
[scope] [attribute] type name {[getdef] [setdef]};  
. scope, attirbute, type, name có ý nghĩa giống như lệnh ₫ịnh  
nghĩa tác vụ.  
. getdef và setdef là lệnh ₫ịnh nghĩa tác vụ get và set thuộc tính  
tương ứng.  
class Rectangle {  
private int m_cao; //thuộc tính vật lý  
public int Cao { //thuộc tính luận lý  
get { return m_cao; }  
set { if (value>0 && value <1024) m_cao = value; }  
}
}
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 11  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.6 Định nghĩa ₫ối tượng ₫ại diện hàm (delegate)  
Nhiều khi chúng ta cần viết lệnh gọi hàm mà chưa biết tên cụ thể,  
tên của hàm chỉ có thể xác ₫ịnh tại thời ₫iểm run-time. Delegate  
của C# cho phép ta giải quyết ₫ược yêu cầu này.  
Delegate là 1 class ₫ối tượng ₫ặc biệt, ₫ối tượng delegate chỉ chứa  
1 field thông tin, field này là ₫ịa chỉ của 1 hàm chức năng nào ₫ó.  
Delegate ₫ặc biệt hữu dụng khi kết hợp với sự kiện (Event) mà ta  
sẽ trình bày sau.  
Lệnh ₫ịnh nghĩa delegate thường có dạng :  
[scope] [attribute] delegate return_type name (arg_list);  
. scope, return_type, name, arg_list có ý nghĩa giống như lệnh  
₫ịnh nghĩa tác vụ.  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 12  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.7 Định nghĩa sự kiện (Event)  
Tác vụ chỉ có thể ₫ược (gọi) kích hoạt bởi người lập trình, trong  
khi nhiều lúc ta muốn người dùng có thể kích hoạt trực tiếp chức  
năng nào ₫ó của ₫ối tượng (thí dụ ₫ối tượng giao diện). Event là  
phương tiện giải quyết yêu cầu này.  
Event là 1 ₫ối tượng thuộc class delegate, sau khi ₫ược khởi ₫ộng,  
nó có thể miêu tả từ 1 tới n tác vụ chức năng mà sẽ ₫ược tự kích  
hoạt mỗi khi event xảy ra.  
Lệnh ₫ịnh nghĩa Event giống như lệnh ₫ịnh nghĩa thuộc tính dữ  
liệu :  
[scope] [attribute] event delegate_type name;  
. scope, name có ý nghĩa giống như lệnh ₫ịnh nghĩa thuộc tính.  
. delegate_type là tên của 1 delegate ₫ã ₫ịnh nghĩa trước.  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 13  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.8 Định nghĩa phần tử quản lý danh sách (indexer)  
Để truy xuất 1 ₫ối tượng thuộc 1 class, ta dùng biến ₫ối tượng.  
Thông qua biến ₫ối tượng (tham khảo), ta truy xuất từng thành  
phần ₫ược phép (thuộc tính, tác vụ, toán tử,...) thông qua cú pháp  
gởi thông ₫iệp : objVar.tên thành phần.  
Ngoài khả năng thông thường trên, C# còn cho phép kết hợp với  
₫ối tượng 1 danh sách các phần tử dữ liệu thuộc 1 kiểu nào ₫ó.  
Indexer chính là khả năng này.  
Nếu thuộc tính giao tiếp cho phép ta miêu tả 1 giá trị luận lý duy  
nhất thì Indexer cho phép ta miêu tả 1 danh sách nhiều giá trị luận  
lý. Lệnh ₫ịnh nghĩa Indexer giống như lệnh ₫ịnh nghĩa thuộc tính  
luận lý :  
[scope] [attribute] type this [int i] {[getdef] [setdef]};  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 14  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.8 Định nghĩa phần tử quản lý danh sách (indexer)  
. scope, attirbute, type có ý nghĩa giống như lệnh ₫ịnh nghĩa  
thuộc tính.  
. getdef và setdef là lệnh ₫ịnh nghĩa tác vụ get và set phần tử thứ  
i trong danh sách.  
class Rectangle {  
private int[] arr = new int[100];  
public int this[int index] { //₫ịnh nghĩa Indexer  
get {  
if (index < 0 || index >= 100) { return 0; }  
else { return arr[index]; }  
}
set {  
if (!(index < 0 || index >= 100)) { arr[index] = value; }  
}
}
}
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 15  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.8 Định nghĩa phần tử quản lý danh sách (indexer)  
Để truy xuất phần tử thứ i trong danh sách, ta dùng cú pháp giống  
như truy xuất biến array.  
Rectangle objRec = new Rectangle();  
objRec.component…;  
objRec[0] = 0;  
int ret = objRec[10];  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 16  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.9 Thành phần static và thành phần không static  
Phát biểu class ₫ược dùng ₫ể ₫ặc tả các ₫ối tượng cùng loại mà  
phần mềm dùng. Về nguyên tắc, khi ₫ối tượng ₫ược tạo ra (bằng  
lệnh new), nó sẽ chứa tất cả các thành phần ₫ược ₫ặc tả trong  
class tương ứng. Tuy nhiên, nếu xét chi li thì VC# cho phép ₫ặc tả  
2 loại thành phần trong 1 class như sau :  
1. Thành phần static : là thành phần có từ khóa static trong lệnh  
₫ịnh nghĩa nó. Đây là thành phần kết hợp với class, nó không  
₫ược nhân bản cho từng ₫ối tượng và như thế ₫ối tượng không  
thể truy xuất nó. Cách duy nhất ₫ể truy xuất thành phần static  
là thông qua tên class.  
//Console là tên class chứa các hàm truy xuất  
//các thiết bị nhập/xuất chuẩn  
Console.Writeln("Nội dung cần hiển thị");  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 17  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.9 Thành phần static và thành phần không static  
2. Thành phần không static : là thành phần không dùng từ khóa  
static trong lệnh ₫ịnh nghĩa nó. Đây là thành phần kết hợp với  
từng ₫ối tượng, nó sẽ ₫ược nhân bản cho từng ₫ối tượng. Ta  
truy xuất thành phần không static thông qua tham khảo ₫ối  
tượng.  
class Rectangle {  
private int m_cao;  
public int Cao {  
//thuộc tính vật lý  
//thuộc tính luận lý  
get { return m_cao; }  
set { if (value>0 && value <1024) m_cao = value; }  
}
}
Rectangle r = new Rectangle();  
r.Cao = 10;  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 18  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.9 Các thuộc tính miêu tả hành vi  
Từ khóa virtual trong lệnh ₫ịnh nghĩa tác vụ miêu tả tác vụ này sẽ  
₫ược xử lý theo cơ chế liên kết ₫ộng và sẽ ₫ảm bảo ₫ược tính ₫a  
xạ, tức ₫ảm bảo tính ₫úng ₫ắn trong lời gởi thông ₫iệp. Biết ₫ược  
₫iều này, từ ₫ây về sau, mỗi lần ₫ịnh nghĩa 1 tác vụ hay 1 toán tử,  
ta hãy luôn dùng từ khóa virtual kết hợp với nó.  
Từ khóa sealed trong lệnh ₫ịnh nghĩa tác vụ miêu tả tác vụ này sẽ  
₫ược khóa lại, class con cháu không còn cơ may override ₫ược.  
Từ khóa abstract trong lệnh ₫ịnh nghĩa tác vụ miêu tả tác vụ này  
chỉ có interface sử dụng, class con cháu sẽ phải override ₫ể hiện  
thực theo yêu cầu riêng.  
Từ khóa override trong lệnh ₫ịnh nghĩa tác vụ miêu tả tác vụ này  
₫ã có trong class cha, class hiện hành chỉ muốn override nó chứ  
không phải ₫ịnh nghĩa mới.  
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 19  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
4.9 Các thuộc tính miêu tả hành vi  
class A {  
public void func1() {…}  
public virtual void func2() {…}  
}
class B : A {  
public override void func1() {…}  
public sealed void func2() {…}  
}
class C : B {  
public override void func1() {…}  
public override void func2() {…}  
}
Môn : Lập trình hướng ₫ối tượng  
Chương 4 : Interface & Class trong C#  
Slide 20  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Tải về để xem bản đầy đủ
pdf 27 trang myanh 22360 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Chương 4: Interface & Class trong C#", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_chuong_4_interface_class.pdf