bài 5 - tính thừa kế và Đa hình - nền tảng lập trình ứng dụng với c#

42
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC 1 HOCLAPTRINHWEB.COM

Upload: hoc-lap-trinh-web

Post on 17-Jul-2015

5.550 views

Category:

Documents


4 download

TRANSCRIPT

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

1 HOCLAPTRINHWEB.COM

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

2 HOCLAPTRINHWEB.COM

Bài 5: Tính thừa kế và Đa hình

• Tính thừa kế (Inheritance)

• Lớp trừu tượng (Abstract)

• Lớp niêm phong (Sealed)

• Tính đa hình của lớp (Polymorphism)

- 8 tiết -

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

3 HOCLAPTRINHWEB.COM

Tính thừa kế (Inheritance)

• Khái niệm

• Xây dựng lớp kế thừa

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

4 HOCLAPTRINHWEB.COM

Khái niệm

• Tính thừa kế là một khái niệm nền tảng cho phép tái sử dụng mã lệnh đang tồn tại và điều này giúp tiết kiệm được thời gian trong việc lập trình

• Các class có thể thừa kế từ class khác. Class mới được gọi là class được dẫn xuất (hay còn gọi là class con) sẽ được quyền truy xuất đến tất cả các thành viên dữ liệu và các phương thức không được biểu thị private của class cơ sở (hay còn gọi là class cha)

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

5 HOCLAPTRINHWEB.COM

Xây dựng lớp kế thừa

• Cú pháp:

Tên_class_con : Tên_class_cơ_sở

• Ví dụ 1:

Xét class cơ sở với khai báo như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

6 HOCLAPTRINHWEB.COM

Xây dựng lớp kế thừa

• Ví dụ 1:

Xét class được dẫn xuất từ class cơ sở với khai báo như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

7 HOCLAPTRINHWEB.COM

Xây dựng lớp kế thừa

• Ví dụ 1:

Kết quả xuất ra màn hình khi thực thi ví dụ trên:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

8 HOCLAPTRINHWEB.COM

Xây dựng lớp kế thừa

• Ví dụ 2:

Xét class cơ sở với khai báo như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

9 HOCLAPTRINHWEB.COM

Xây dựng lớp kế thừa

• Ví dụ 2:

Xét hai class được dẫn xuất từ class cơ sở với khai báo như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

10 HOCLAPTRINHWEB.COM

Xây dựng lớp kế thừa

• Ví dụ 2:

Đoạn lệnh khai báo và khởi tạo đối tượng như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

11 HOCLAPTRINHWEB.COM

Xây dựng lớp kế thừa

• Ví dụ 2:

Kết quả xuất ra màn hình khi thực thi đoạn lệnh trên:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

12 HOCLAPTRINHWEB.COM

Lớp trừu tượng (Abstract)

• Khái niệm

• Xây dựng lớp trừu tượng

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

13 HOCLAPTRINHWEB.COM

Khái niệm

• class trừu tượng thực chất là class cơ sở (base class) mà các class khác có thể được dẫn xuất từ nó.

• Các class không phải là class trừu tượng (non-abstract class) được gọi là lớp cụ thể (concrete class)

• class trừu tượng có thể có cả hai loại phương thức: phương thức trừu tượng và phương thức cụ thể.

• Một kiểu được dẫn xuất từ một lớp cơ sở trừu tượng thừa kế tất cả các thành viên kiểu cơ sở bao gồm sự thực thi mọi phương thức

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

14 HOCLAPTRINHWEB.COM

Khái niệm

• Khi nào thì sử dụng class trừu tượng?

Nếu muốn tạo các class mà các class này sẽ chỉ là các class cơ sở, và không muốn bất cứ ai tạo các đối tượng của các kiểu class này.

Class trừu tượng thường được dùng để biểu thị rằng nó là class không đầy đủ và rằng nó được dự định sẽ chỉ được dùng như là một class cơ sở.

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

15 HOCLAPTRINHWEB.COM

Xây dựng lớp trừu tượng

• Cú pháp:

<khai báo cấp độ truy xuất> abstract class tên_class

{

// Các thành viên của class trừu tượng.

}

• Ví dụ 1:

Xét class trừu tượng được khai báo như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

16 HOCLAPTRINHWEB.COM

Xây dựng lớp trừu tượng

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

17 HOCLAPTRINHWEB.COM

Xây dựng lớp trừu tượng

• Ví dụ 1:

Kết quả được xuất ra màn hình:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

18 HOCLAPTRINHWEB.COM

Xây dựng lớp trừu tượng

• Ví dụ 2:

Xét lớp trừu tượng và lớp dẫn xuất được khai báo như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

19 HOCLAPTRINHWEB.COM

Xây dựng lớp trừu tượng

• Ví dụ 2:

Xét đoạn lệnh khai báo và gọi thực thi như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

20 HOCLAPTRINHWEB.COM

Xây dựng lớp trừu tượng

• Ví dụ 2:

Kết quả xuất ra màn hình:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

21 HOCLAPTRINHWEB.COM

Xây dựng lớp trừu tượng

• Chú ý:

Mục tiêu của một class trừu tượng là cung cấp định nghĩa chung của một class cơ sở mà nhiều class được dẫn xuất có thể chia sẻ.

Một thành viên abstract không thể là static

Không thể tạo một instance của class trừu tượng

Một class trừu tượng không thể được niêm phong (Sealed).

Một phương thức trừu tượng không thể là private .

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

22 HOCLAPTRINHWEB.COM

Xây dựng lớp trừu tượng

• Chú ý:

Từ khóa Override : hành động ghi đè (Overriding) là hành động sửa đổi hoặc thay thế sự cài đặt của class cha với một cài đặt mới. Các thành viên virtual hoặc abstract của class cha cho phép các class dẫn xuất ghi đè chúng.

Phương thức abstract thực chất là một phương thức virtual ngầm định.

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

23 HOCLAPTRINHWEB.COM

Lớp niêm phong (Sealed)

• Khái niệm

• Xây dựng lớp niêm phong

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

24 HOCLAPTRINHWEB.COM

Khái niệm

• Từ khóa sealed được sử dụng để biểu thị khi

khai báo một class nhằm ngăn ngừa sự dẫn

xuất từ một class, điều này cũng giống như

việc ngăn cấm một class nào đó có class con.

• Một class sealed cũng không thể là một class

trừu tượng.

• Các structs trong C# được ngầm định sealed.

Do vậy, chúng không thể được thừa kế.

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

25 HOCLAPTRINHWEB.COM

Xây dựng lớp niêm phong

• Cú pháp:

<khai báo cấp độ truy xuất> sealed class tên_class

{

// Các thành viên của class trừu tượng.

}

• Ví dụ:

Xét class niêm phong được khai báo như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

26 HOCLAPTRINHWEB.COM

Xây dựng lớp niêm phong

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

27 HOCLAPTRINHWEB.COM

Xây dựng lớp niêm phong

• Ví dụ:

Kết quả xuất ra màn hình:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

28 HOCLAPTRINHWEB.COM

Tính đa hình của lớp (Polymorphism)

• Từ khóa base, this

• Ghi đè (overriding)

• Nạp chồng hàm (Overloading)

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

29 HOCLAPTRINHWEB.COM

Từ khóa base, this

• Từ khóa base:

Được sử dụng để tham chiếu đến lớp cơ sở từ lớp

dẫn xuất.

Ví dụ: xét lớp cơ sở nhan_vien với khai báo như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

30 HOCLAPTRINHWEB.COM

Từ khóa base, this

• Từ khóa base:

Ví dụ: xét lớp dẫn xuất nv_van_phong với khai báo

như sau:

Trong ví dụ trên, để tham chiếu đến phương thức khởi

tạo có tham số trong lớp cơ sở nhan_vien phải sử

dụng từ khóa base

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

31 HOCLAPTRINHWEB.COM

Từ khóa base, this

• Từ khóa this:

Được sử dụng để tham chiếu đến lớp hiện hành (lớp

chứa đoạn lệnh đang cài đặt).

Ví dụ: xét lớp cơ sở nhan_vien với khai báo như sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

32 HOCLAPTRINHWEB.COM

Tính đa hình của lớp (Polymorphism)

• Từ khóa base, this

• Ghi đè (overriding)

• Nạp chồng hàm (Overloading)

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

33 HOCLAPTRINHWEB.COM

Ghi đè (overriding)

• Khái niệm ghi đè (overriding) được dùng để

định nghĩa lại phương thức của lớp cơ sở

(lớp cha) trong lớp dẫn xuất (lớp con kế thừa)

• Các điểm cần lưu ý khi thực hiện ghi đè:

Phương thức ở lớp cơ sở và lớp dẫn xuất phải có

cùng dạng hàm (signature) và kiểu dữ liệu trả về

Phương thức lớp cơ sở phải được khai báo với từ

khóa virtual

Phương thức lớp dẫn xuất phải được khai báo với từ

khóa override

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

34 HOCLAPTRINHWEB.COM

Ghi đè (overriding)

• Khái niệm ghi đè (overriding) được dùng để

định nghĩa lại phương thức của lớp cơ sở

(lớp cha) trong lớp dẫn xuất (lớp con kế thừa)

• Các điểm cần lưu ý khi thực hiện ghi đè:

Phương thức ở lớp cơ sở và lớp dẫn xuất phải có

cùng dạng hàm (signature) và kiểu dữ liệu trả về

Phương thức lớp cơ sở phải được khai báo với từ

khóa virtual

Phương thức lớp dẫn xuất phải được khai báo với từ

khóa override

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

35 HOCLAPTRINHWEB.COM

Ghi đè (overriding)

• Ví dụ: xét lớp

cơ sở

nhan_vien

với khai báo:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

36 HOCLAPTRINHWEB.COM

Ghi đè (overriding)

• Ví dụ: xét lớp dẫn xuất với khai báo:

Với ví dụ trên, phương thức tinh_luong trong lớp dẫn xuất được ghi đè

lên phương thức tinh_luong trong lớp cơ sở

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

37 HOCLAPTRINHWEB.COM

Ghi đè (overriding)

• Lưu ý:

Các phương thức ghi đè phải trùng tên

Không thể ghi đè các phương thức tĩnh (không có từ khóa virtual)

Phương thức, thuộc tính, chỉ mục, sự kiện đều có thể được ghi đè bằng từ khóa virtual và override

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

38 HOCLAPTRINHWEB.COM

Tính đa hình của lớp (Polymorphism)

• Từ khóa base, this

• Ghi đè (overriding)

• Nạp chồng hàm (Overloading)

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

39 HOCLAPTRINHWEB.COM

Nạp chồng hàm (Overloading)

• Cho phép khai báo các phương thức trùng

tên nhau nhưng có tham số khác nhau

• Các điểm cần lưu ý khi thực hiện nạp chồng

hàm:

Tên của các phương thức phải trùng nhau

Số lượng tham số phải khác nhau

Kiểu dữ liệu của các tham số và thứ tự các tham số phải khác nhau

• Ví dụ: xét lớp nhan_vien với khai báo sau:

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

40 HOCLAPTRINHWEB.COM

Nạp chồng hàm (Overloading)

Nạp chồng

hàm

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

41 HOCLAPTRINHWEB.COM

Nạp chồng hàm (Overloading)

• Nhận xét:

Trong lớp nhan_vien, có hai phương thức khởi tạo

trùng tên (cùng là nhan_vien) nhưng có số lượng

tham số khác nhau. Ta gọi hai phương thức khởi tạo

này được nạp chồng hàm (Overriding)

Tất cả các phương thức trong C# đều có thể nạp

chồng hàm.

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

42 HOCLAPTRINHWEB.COM