Ngôn ngữ lập trình - Bài 7: Kế thừa - Nguyễn Xuân Hùng

Tài liệu Ngôn ngữ lập trình - Bài 7: Kế thừa - Nguyễn Xuân Hùng: Giảng viên: Nguyễn Xuân Hùng Mobile: 0908 386 366 Email: nguyenxuanhung@wru.vn Bài 7: KẾ THỪA NGÔN NGỮ LẬP TRÌNH Nguyễn Xuân Hùng – Khoa CNTT – Trường Đại học Thủy Lợi NỘI DUNG 1. Các kiểu kế thừa. 2. Hàm ảo 3. Lớp trừu tượng và hàm thuần ảo 12/18/20142 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Thừa kế là một quá trình mà một lớp mới (lớp dẫn xuất-derived class) được tạo ra từ một lớp khác gọi là lớp cơ sở - base class. Lớp dẫn xuất sẽ tự động có các biến thành viên và tất cả hàm thành viên của lớp cơ sở, và nó có thể thêm các biến thành viên và hàm thành viên của chính nó.  Ví dụ: class Student, Doctor, Person  Student, Doctor đều có tên, tuổi, địa chỉ giống như lớp Person  Nhưng nó sẽ có một số biến thành viên khác như: học sinh thêm thuộc tính môn học, bác sĩ có thêm thuộc tính chuyên môn  Ví dụ: Class Employee, Worker, Manager, Director  4 lớp trên đều có tên, tuổi, địa chỉ  Nhưng một số lớp khác có thêm các đặc tính riêng như: worker có ...

pdf26 trang | Chia sẻ: putihuynh11 | Lượt xem: 636 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Ngôn ngữ lập trình - Bài 7: Kế thừa - Nguyễn Xuân Hùng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Giảng viên: Nguyễn Xuân Hùng Mobile: 0908 386 366 Email: nguyenxuanhung@wru.vn Bài 7: KẾ THỪA NGÔN NGỮ LẬP TRÌNH Nguyễn Xuân Hùng – Khoa CNTT – Trường Đại học Thủy Lợi NỘI DUNG 1. Các kiểu kế thừa. 2. Hàm ảo 3. Lớp trừu tượng và hàm thuần ảo 12/18/20142 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Thừa kế là một quá trình mà một lớp mới (lớp dẫn xuất-derived class) được tạo ra từ một lớp khác gọi là lớp cơ sở - base class. Lớp dẫn xuất sẽ tự động có các biến thành viên và tất cả hàm thành viên của lớp cơ sở, và nó có thể thêm các biến thành viên và hàm thành viên của chính nó.  Ví dụ: class Student, Doctor, Person  Student, Doctor đều có tên, tuổi, địa chỉ giống như lớp Person  Nhưng nó sẽ có một số biến thành viên khác như: học sinh thêm thuộc tính môn học, bác sĩ có thêm thuộc tính chuyên môn  Ví dụ: Class Employee, Worker, Manager, Director  4 lớp trên đều có tên, tuổi, địa chỉ  Nhưng một số lớp khác có thêm các đặc tính riêng như: worker có cấp bậc, manager có quản lý phòng nào. 12/18/20143 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Cả 3 lớp trên đều có những hàm và biến giống hệt nhau. Do đó thay vì tạo ra ba lớp riêng biệt, chúng ta cần tạo một lớp chung Employee chứa các thông tin chung đó để sử dụng lại.  Ưu điểm: Sử dụng lại mã nguồn giảm mã nguồn viết lại, dễ dàng bảo trì, sửa đổi về sau, rõ ràng về mặt logic trong thiết kế chương trình. 12/18/20144 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Kế thừa cho phép lớp con sử dụng các biến và phương thức của lớp cha, trừ các biến và phương thức mức private. 12/18/20145 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Cú pháp kết thừa: class lopcon: lopcha  Ví dụ:  Phạm vi truy cập ở mức kế thừa: public, private  Public: các thành phần public của lớp cha vẫn là public trong lớp con  Private: toàn bộ các thành phần của lớp cha trở thành private của lớp con 12/18/20146 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Kế thừa public:  Các thành viên public của lớp mẹ vẫn là public trong lớp con  Lớp con chuyển kiểu thành lớp mẹ, nhưng ngược lại thì không đúng. 12/18/20147 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Kế thừa private:  Tất cả thành viên trong lớp mẹ đều trở thành private của lớp con. 12/18/20148 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Thành phần protected: có thể được sử dụng bởi các phương thức trong lớp dẫn xuất từ nó, nhưng không sử dụng được ngoài lớp đó. 12/18/20149 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Tổng kết các kiểu kế thừa:  Cột: các kiểu kế thừa  Hàng: phạm vi các biến/hàm thành viên trong lớp cha  Ô: phạm vi các biến/ hàm thành viên trong lớp con. 12/18/201410 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Hàm tạo và hủy trong kế thừa: không được lớp con kế thừa  Mỗi hàm tạo của lớp dẫn xuất phải gọi một hàm tạo của lớp cha, nếu không sẽ gọi hàm tạo mặc định.  Hàm hủy của lớp sẽ được tự động gọi theo thứ tự ngược lại từ lớp dẫn xuất tới lớp cơ sở. 12/18/201411 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Gọi hàm tạo của lớp cha: không thể gọi hàm tạo của lớp cha như gọi hàm thông thường, mà phải gọi ở danh sách khởi tạo. 12/18/201412 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 1. Kế thừa  Định nghĩa lại hàm thành viên:  Một lớp dẫn xuất sẽ kế thừa toàn bộ các hàm thành viên của lớp cơ sở.  Khi định nghĩa lại bạn phải khai báo và định nghĩa lại trong lớp dẫn xuất.  Định nghĩa lại so với nạp chồng:  Khác nhau về chữ ký hàm  nạp chồng  Ngược lại là định nghĩa lại.  Truy cập đến các hàm của lớp cơ sở đã được định nghĩa lại:  Sử dụng: toán tử phân giải phạm vi ::  Ví dụ: Employee::print(); 12/18/201413 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 2. Hàm ảo  Hai đặc điểm mạnh mẽ nhất của kế thừa đó là khả năng sử dụng lại mã chương trình và đa hình  Đa hình là ý tưởng “sử dụng một giao diện chung cho nhiều phương thức khác nhau” dựa trên phương thức ảo (virtual method).  Nói cách khác: tính đa hình cho phép một thao tác có cách xử lý khác nhau trên các đối tượng khác nhau.  Ví dụ:  Lớp: Shape, và lớp Rectangle, Circle, Triangle 12/18/201414 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 2. Hàm ảo  Liên kết muộn: khi khai báo một hàm ảo- tức là “không biết cài đặt như thế nào”, phải đợi khi nó được sử dụng trong chương trình, và lấy cài đặt từ đối tượng thể hiện  liên kết muộn.  Lưu ý: những thành viên và những hàm tĩnh thì không được khai báo virtual. 12/18/201415 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 2. Hàm ảo  Thực thi hàm ảo: thêm bổ từ virtual trong khai báo hàm thành viên.  Ví dụ: hàm bill() trong lớp Sale (trang 216 – Giáo trình tập 2) 12/18/201416 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 2. Hàm ảo  Tham chiếu giữa lớp cơ sở và lớp dẫn xuất:  Tham chiếu thuộc lớp cơ sở có thể trỏ tới đối tượng của lớp dẫn xuất và có thể truy cập phương thức ảo đã định nghĩa trong lớp dẫn xuất.  Nếu tham chiếu này trỏ tới đối tượng thuộc lớp cơ sở thì phương thức ảo của lớp cơ sở được thực hiện.  Nếu tham chiếu này trỏ tới đối tượng của lớp dẫn xuất thì hàm ảo đã được lớp dẫn xuất định nghĩa lại được thực hiện  Lưu ý: khi khai báo một hàm ảo trong lớp cơ sở, nó sẽ tự động là ảo trong lớp dẫn xuất. Bạn có thể thêm hoặc bỏ từ khóa virtual trong lớp dẫn xuất.  Không nhắc lại từ khóa virtual trong định nghĩa hàm thành viên. 12/18/201417 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 2. Hàm ảo  Ví dụ: Xây dựng lớp DiscountSale kế thừa từ lớp Sale (trang 214 – Giáo trình tập 2). 12/18/201418 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 2. Hàm ảo  Ví dụ: Xây dựng lớp DiscountSale kế thừa từ lớp Sale (trang 214 – Giáo trình tập 2). 12/18/201419 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 2. Hàm ảo  Kết luận:  Đa hình: ám chỉ khả năng kết hợp nhiều khả năng thực thi vào trong một tên hàm bằng cơ chế liên kết muộn. Do đó, đa hình, liên kết muộn, và hàm ảo thực sự đều cùng một chủ đề  Ghi đè (override): khi định nghĩ hàm ảo bị thay đổi trong lớp dẫn xuất thì chúng đã bị ghi đè.  Định nghĩa lại (redefinded): nếu hàm không phải là hàm ảo, thì lớp dẫn xuất viết lại hàm của lớp cơ sở thì hàm đó được định nghĩa lại.  Ưu điểm: thuận lợi khi thực thi chương trình  Khó khăn: tốn tài nguyên. 12/18/201420 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 3. Lớp trừu tượng và hàm thuần ảo  Hàm thuần ảo:  Một hàm không có thân gọi là hàm thuẩn áo.  Ví dụ:  Lớp trừu tượng:  Một lớp có một hoặc nhiều hàm thuần ảo được gọi là lớp trừu tượng (abstract class).  Được sử dụng như một lớp cơ sở để dẫn xuất ra lớp khác.  Không thể tạo đối tượng của lớp trừu tượng 12/18/201421 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 3. Lớp trừu tượng và hàm thuần ảo  Ví dụ lớp trừu tượng 12/18/201422 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 3. Lớp trừu tượng và hàm thuần ảo  Con trỏ và hàm ảo  Lớp dẫn xuất có thể được gán cho lớp cơ sở, điều ngược lại không đúng.  Vấn đề lát cắt (slicing) trong kế thừa.  Ví dụ: 12/18/201423 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 3. Lớp trừu tượng và hàm thuần ảo  Con trỏ và hàm ảo  Để giải quyết vấn đề lát cắt trong kế thừa, hay coi một lớp dẫn xuất như một lớp cơ sở mà không bị mất thuộc tính của lớp dẫn xuất, chúng ta có thể sử dụng con trỏ.  Ví dụ: 12/18/201424 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi 3. Lớp trừu tượng và hàm thuần ảo  Chuyển kiểu xuống và chuyển kiểu lên:  Chuyển kiểu từ lớp con cháu sang kiểu cha, ông được biết đến như chuyển kiểu lên.  Ví dụ: vpet = vdog (vpet là đối tượng lớp cha, vdog là đối tượng lớp con)  Chuyển kiểu từ lớp cha, ông sang lớp con cháu được gọi là chuyển kiểu xuống và rát nguy hiểm vì giả thiết thông tin đang được thêm vào.  dynamic_cast được sử dụng cho chuyển kiểu xuống (hoạt động với kiểu con trỏ) có thể triệt tiêu vấn đề lát cắt nhưng chứa đựng nhiều nguy hiểm.  Ví dụ: 12/18/201425 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi EOF! 12/18/2014Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi26

Các file đính kèm theo tài liệu này:

  • pdfnnlt_6_kethua_hamao_1_2209_1993531.pdf