1. Trang chủ
  2. » Công Nghệ Thông Tin

CHƯƠNG 8 THỪA KẾ ẢO-TÍNH ĐA HÌNH ppt

21 272 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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

Ngày đăng: 27/07/2014, 13:21

TỪ KHÓA LIÊN QUAN