Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
525,9 KB
Nội dung
CH ƯƠ NG 8 CH ƯƠ NG 8 TH Ừ A K Ế Ả O -TÍ N H ĐA HÌ N H Ừ O N N 1 GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH MỤC TIÊU y Gi ớ i thi ệ u khái ni ệ m th ừ a k ế ảo , hàm ảo 2 ệ ệ , y Tính đa hình trong lập trình hướng đối tượng GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH NỘI DUNG CHI TIẾT y TÍNH ĐA HÌNH 3 y OVERLOADED VÀ OVERRIDDEN y LIÊN K Ế T TĨNH y LIÊN KẾT ĐỘNG y HÀM Ả O HÀM Ả O y THỪA KẾẢO GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH Tính Đa Hình ( Pol y mor p hism ) (y p ) y Đa hình: “nhi ề u hình th ứ c” , hành đ ộ n g cùn g tên có 4 , ộ gg thể được thực hiện khác nhau đối với các đối tượng/các lớp khác nhau. ế y Ng ữ cảnh khác Æ k ế t quả khác Đường Thẳng Hình TrònĐiểm Hình Vuông Vẽ GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH TÍNH ĐA HÌNH y Khả năn g có nh ữ n g hi ệ n th ự c khác nhau cho cùn g 5 g g ệ ự g một hành vi y Kỹ thuật cho phép thay đổi nội dung của cùng 1 hành v i trong 2 l ớ p cha – con y Bản chất: Sửa code của cùng 1 hành vi ở 2 lớp cha con đ ể d à khá h đ ể co d e n à y khá c n h au y Đa hình tạo ra khả năng cho phép gọi một hành vi c ủ a m ộ t l ớ p mà không c ầ n quan tâm đ ế n hi ệ n th ự c c ủ a m ộ t l ớ p mà không c ầ n quan tâm đ ế n hi ệ n th ự c của hành vi này. GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH VÍ DỤ VỀ TÍNH ĐA HÌNH class ĐànBà ể class CIRCLE int x,y,r; id D () void DiChuy ể n(); vo id D raw () { circle (x,y,r); } class RECTANGLE class Người void DiChuyển(); class SHAPE void Draw () { } class RECTANGLE int x1,y1, x2, y2; void Draw () { rectangle(x1,y1, x2, y2); } class ĐànÔng void DiChuyển(); class TRIANGLE int x1,y1, x2, y2 , x3, y3; void Draw () void DiChuyển(); { line(x1,y1, x2, y2); line(x2,y2, x3, y3); line(x3,y3, x1, y1); } Đa hình tạo được tính mềm dẻo/linh động củachương trình Slide 6/54 của chương trình GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH OVERLOADED VÀ OVERRIDDEN y Overloaded methods: 7 { Nhằm cung cấp các dạng khác nhau của hành vi (danh sách tham số khác nhau), nhưng vẫn có cùng tên gọi trong cùng m ộ t l ớ p m ộ t l ớ p . y Overridden methods: { Hi ệ n th ự c l ạ i hành vi đã có của t ổ tiên ệ ự ạ { Phải có cùng tên và trùng mọi yếu tố tạo nên hành vi này. GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH LIÊN KẾT TĨNH y Liên k ế t tĩnh ( static bindin g ) : 8 ( g ) { Xác định khi biên dịch chương trình. { Dùng hàm thành viên. G i hà ủ l ớ ở (l ớ h) { G ọ i hà m c ủ a l ớ p cơ s ở (l ớ p c h a ) . class ContactDirContactDir { // class SortedDirSortedDir : public ContactDir { p ublic: public: int Lookup (const char *name); // p SortedDir(const int max) : ContactDir(max) {} in t L oo k up(co n st c h a r *n a m e); // }; t oo up(co st c a a e); }; void main() { ContactDir c1(10); cout<<p->Lookup(“ABC”); Gọi Gọi ContactDir c1(10); SortedDir *p; p = &c1; …. } hàm hàm nào ?nào ? GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH LIÊN KẾT ĐỘNG y Liên kết động (dynamic binding) 9 { Xác định khi thực thi chương trình. { Dùng hàm ảo (virtual function). { G ọ i hàm c ủ a l ớ p d ẫ n xu ấ t (l ớ p con) Gọi hàm Gọi hàm của lớp của lớp nào ?nào ? { G ọ i hàm c ủ a l ớ p d ẫ n xu ấ t (l ớ p con) . { Thể hiện tính đa hình của OOP. class ContactDirContactDir { // void main() { ContactDir c1(10); // public: virtual int Lookup (const char *name); }; ContactDir c1(10); SortedDir *p1; p1 = &c1; cout<<p->Lookup(“ABC”); }; class SortedDirSortedDir : public ContactDir { //…. public: itL k ( t h * ) SortedDir c2(20); ContactDir *p2; p2 = &c2; cout<<p->Lookup(“ABC”); i n t L oo k up ( cons t c h ar * name ) ; }; } GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH HÀM ẢO y Xem k ế t q ủ a c ủ a vi ệ c khái quát hóa sau: 10 Xem k ế t q ủ a c ủ a vi ệ c khái quát hóa sau: Bạn có hình dngnổimột class ANIMAL void Travel(); d u ng nổi một ANIMAL di chuyển như thế nào khôn g ? Không Î Dùng hàm ảo class Bird id T l() class Fish id T l() class Snake id T l() g Bạn có hình dung nổi vo id T rave l() vo id T rave l() vo id T rave l() Bạn có hình dung nổi một đối tượng thuộc các lớp này di chuyển như thế nào không? Có Î cụ thể GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH [...]... Class A{ public : OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH GV: Võ Hồng Bảo Châu virtual void NhienLieu()=0; VÍ DỤ HÀM ẢO – TÍNH ĐA HÌNH 16 GIÁ THÀNH HÀM ẢO Dữ liệu: đơn giá Phương thức: +giá thành +diện tích +trị giá HÌNH TRÒN HÌNH CHỮ NHẬT Dữ liệu: bán kính Phương thức: +khởi tạo +diện tích Dữ l liệu: dà rộng dài, Phương thức: +khởi tạo +diện tích OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH GV: Võ Hồng Bảo Châu... Châu THỪA KẾ ẢO 18 class A class C class B class D OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH GV: Võ Hồng Bảo Châu Ví dụ 19 class A{ int dulieu; // }; class B: public A{}; class C: public A{}; class D: public B, public C{ // // }; D có 2 thành phần D thừa kế A dữ liệu và 2 t à ệu thành = phần hành vi “2 lần” ầ OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH → Dư thừa dữ liệu ? GV: Võ Hồng Bảo Châu Giải quyết 20 Để... Để tránh tình trạng một thành phần trong lớp A xuất ạ g ộ p g p hiện 2 lần trong lớp D, sử dụng thừa kế ảo class B: virtual public A{}; class C: virtual public A{}; class D: public B, public C{ // }; OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH GV: Võ Hồng Bảo Châu 21 THANK YOU OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH GV: Võ Hồng Bảo Châu ... HÌNH GV: Võ Hồng Bảo Châu KHAI BÁO HÀM ẢO 12 Cú pháp: p p Class Tên lớp { … p public: virtual Tên hàm ảo () { } … } OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH GV: Võ Hồng Bảo Châu VÍ DỤ 13 Động cơ Nhiên liệu Động cơ xăng ệ Nhiên liệu Động cơ 2 thì Nhiên liệu OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH Động cơ diezel Nhiên liệu Động cơ 4 thì Nhiên liệu GV: Võ Hồng Bảo Châu Class DongCo{ public: virtual void Nhi Li... public GIATHANH{ thì kết quả chương trình float bk; voidgì? public: là main(){ HINHTRON a(5,1000); HINHTRON(float r, float c): HINHCN b(2,4,2000); GIATHANH(c){ cout . M _ PI;} }; getch(); } GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH THỪA KẾẢO 18 class A class B class C class D GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH Ví dụ class A{ 19 int dulieu; //. KẾT ĐỘNG y HÀM Ả O HÀM Ả O y THỪA KẾẢO GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH Tính Đa Hình ( Pol y mor p hism ) (y p ) y Đa hình: “nhi ề u hình th ứ c” , hành đ ộ n g . Châu OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH ĐA HÌNH KHAI BÁO HÀM ẢO y Cú p há p : 12 pp y Class Tên lớp y { { y … y p ublic: p y virtual Tên hàm ảo () { } y … y } GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8- THỪA KẾ ẢO-TÍNH