YOMEDIA
ADSENSE
CHƯƠNG 8 THỪA KẾ ẢO-TÍNH ĐA HÌNH
76
lượt xem 14
download
lượt xem 14
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Đa hình: “nhiều hình thức”, hành động cùng tên có thể được thực hiện khác nhau đối với các đối tượng/các lớp khác nhau.
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: CHƯƠNG 8 THỪA KẾ ẢO-TÍNH ĐA HÌNH
- CH CHƯƠNG 8 THỪA KẾ ẢO-TÍNH ĐA HÌNH 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 2 Giới thiệu khái niệm thừa kế ảo, hàm ảo 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 3 TÍNH ĐA HÌNH OVERLOADED VÀ OVERRIDDEN LIÊN KẾT TĨNH LIÊN KẾT ĐỘNG HÀM HÀM ẢO 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(Polymorphism) 4 Đa hình: “nhiều hình thức”, hành động cùng tên có thể được thực hiện khác nhau đối với các đối tượng/các lớp khác nhau. Ngữ cảnh khác kết quả khác Đ i ểm Đường Thẳng Hình Tròn 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 5 Khả năng có những hiện thực khác nhau cho cùng một hành vi Kỹ thuật cho phép thay đổi nội dung của cùng 1 hành vi trong 2 lớp cha – con Bản chất: Sửa code của cùng 1 hành vi ở 2 lớp cha con để code này khác nhau khá Đ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 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 CIRCLE class ĐànBà int x,y,r; void Draw ()() void DiChuyển(); { circle (x,y,r); } class RECTANGLE RECTANGLE class SHAPE int x1,y1, x2, y2; void Draw () class Người void Draw () { void DiChuyển(); { rectangle(x1,y1, x2, y2); } } class TRIANGLE int x1,y1, x2, y2 , x3, y3; class ĐànÔng void Draw () void DiChuyển(); DiChuy { 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ủa chương trình ch trình GV:Slideồ6/54ảo Châu Võ H ng B OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH
- OVERLOADED VÀ OVERRIDDEN 7 Overloaded methods: 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. 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 8 Liên kết tĩnh (static binding): Xác định khi biên dịch chương trình. Dùng hàm thành viên. Gọi hàm của lớp cơ sở (lớp cha). class ContactDir { ContactDir class SortedDir : public ContactDir { SortedDir //... public: public: SortedDir(const int max) : int Lookup (const char ContactDir(max) {} *name); int Lookup(const char *name); //... }; }; void main() { cout
- LIÊN KẾT ĐỘNG 9 Liên kết động (dynamic binding) Xác định khi thực thi chương trình. Gọi hàm của lớp Dùng hàm ảo (virtual function). 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 ContactDir { ContactDir void main() { //... ContactDir c1(10); c1(10); public: SortedDir *p1; p1 = &c1; virtual int Lookup (const char cout
- HÀM ẢO 10 Xem Xem kết qủa của việc khái quát hóa sau: Bạn có hình dung nổi một class ANIMAL Không ANIMAL di void Travel(); Dùng hàm ảo chuyển như thế nào không? class Bird class Fish class Snake Bạn có hình dung nổi có hình dung void Travel() void Travel() void Travel() một đối tượng thuộc các lớp này di chuyển Có cụ thể như thế nào không? GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH
- HÀM ẢO 11 Là kết qủa của việc khái quát hóa qúa cao đến nỗi không biết viết code thế nào. Là những hành vi chỉ khai báo mà không viết code. Để dành code cụ thể sẽ được hiện thực ở các lớp dẫn xuất ( lớp cụ thể hơn). Tư duy tự nhiên: Từ các đối tượng cụ thể hàm cụ thể. Từ các lớp cụ thể có cùng tính chất hàm ảo. GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH
- KHAI BÁO HÀM ẢO 12 Cú pháp: Class Tên lớp { … public: virtual Tên hàm ảo () { } … } GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH
- VÍ DỤ 13 Động cơ Nhiên liệu Động cơ xăng Động cơ diezel Nhiên liệu Nhiên liệu Động cơ 2 thì Động cơ 4 thì Nhiên liệu Nhiên liệu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH
- Class DongCoDiezel{ public: Class DongCo{ void NhienLieu(){ public: cout
- PHÂN LOẠI PHƯƠNG THỨC ẢO 15 Phương thức ảo rỗng Khai báo nhưng không làm gì Dùng tạo sự liên kết động trong hệ thống lớp kế thừa. Có Có thể khai báo đối tượng thuộc lớp có phương thức ảo rỗng và gởi thông điệp đến đối tượng đó. Ví dụ: DongCo obj; obj.NhienLieu(); Phương thức ảo thuần Lớp chứa phương thức này được gọi là lớp trừu tượng. Không thể khai báo đối tượng thuộc lớp này cũng như không thể gởi thông điệp đến phương thức ảo thuần. Class A{ public : virtual void NhienLieu()=0; GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH
- VÍ DỤ HÀM ẢO – TÍNH ĐA HÌNH 16 GIÁ THÀNH Dữ liệu: đơn giá Phương thức: HÀM ẢO +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 Dữ liệu: dài, rộng dà Phương thức: Phương thức: +khởi tạo +khởi tạo +diện tích +diện tích GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH
- 17 class GIATHANH{ class HINHCN: public GIATHANH{ HINHCN: public GIATHANH{ protected: float dongia; float dai,rong; public: public: giathanh (float c){ dongia=c);}; HINHCN(float d,float r, float c): virtual dientich(){ virtual dientich(){ } GIATHANH(c){ float trigia() { return dientich()*dongia;} Nếu không khaidai=d;rong=r;} báo } float dientich(){ return dai*rong;} hàm dientich};là hàm ảo }; class HINHTRON: public GIATHANH{ class HINHTRON: public GIATHANH{ thì kết quả chương trình float bk; voidgì? là main(){ public: HINHTRON a(5,1000); HINHTRON(float r, float c): HINHCN b(2,4,2000); GIATHANH(c){ cout
- THỪA KẾ ẢO 18 class A class C class B 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ụ 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 → = phần hành vi Dư thừa dữ liệu dữ liệu và 2 thành “2 lần” GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH
- Giải quyết 20 Để tránh tình trạng một thành phần trong lớp A xuất 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{ //... }; GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 8-THỪA KẾ ẢO-TÍNH ĐA HÌNH
ADSENSE
CÓ THỂ BẠN MUỐN DOWNLOAD
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn