Lập trình hướng đối tượng tren C/C++ - OOP 09 interface and polymorphism
Trang 2Nội dung dung
Khái Khái niệm niệm interface interface.
Hàm Hàm ảo ảo và và liên liên kết kết động động
Phương Phương thức thức hủy hủy ảo ảo
Trang 3Nội dung dung
Khái Khái niệm niệm interface interface.
Hàm Hàm ảo ảo và và liên liên kết kết động động
Phương Phương thức thức hủy hủy ảo ảo
Trang 4Khái niệm niệm interface interface
Giao Giao tiếp tiếp giữa giữa đối đối tượng tượng và và bên bên ngoài ngoài::
Quy Quy tắc tắc hộp hộp đen đen::
Thuộc Thuộc tính tính: : private, private, hạn hạn chế chế truy truy xuất xuất
Phương Phương thức thức: : public, public, cung cung cấp cấp tính tính năng năng
Trang 5Khái niệm niệm interface interface
Đặc Đặc điểm điểm Interface: Interface:
Là Là ““phần phần vỏ vỏ” ” của của lớp lớp
Lớp Lớp = = Interface Interface + + Khai Khai báo báo private + private + Cài Cài đặt đặt
Quy Quy định định cách cách thức thức giao giao tiếp tiếp
Không Không chứa chứa cài cài đặt đặt
void void xuLyxuLy((PhanSo PhanSo p p))
Nhận interface PhanSoclass
class PhanSoPhanSo
public:
PhanSo PhanSo((int int tu tu, , int int mau mau); );
PhanSo
PhanSo rutGon rutGon(); ();
PhanSo PhanSo nghichDao nghichDao(); ();
};
void void xuLyxuLy((PhanSo PhanSo p p))
{{ // // XửXử lýlý trêntrên papa}}
void main(){{
PhanSoPhanSo p1(1, 2);p1(1, 2);
PhanSoPhanSo p2(1, 3);p2(1, 3);
xuLy
xuLy(p1); (p1);
xuLy xuLy(p2); (p2);
Trang 6Khái niệm niệm interface interface
Interface Interface trong trong kế kế thừa thừa::
Lớp Lớp kế kế thừa thừa thừa thừa hưởng hưởng::
Thuộc Thuộc tính tính từ từ lớp lớp cơ cơ sở sở
Phương Phương thức thức từ từ lớp lớp cơ cơ sở sở
Thừa Thừa hưởng hưởng interface interface của của lớp lớp cơ cơ sở sở
Lớp Lớp kế kế thừa thừa có có interface interface của của lớp lớp cơ cơ sở sở
Lớp Lớp kế kế thừa thừa có có interface interface của của lớp lớp cơ cơ sở sở
Hàm Hàm nhận nhận đối đối tượng tượng lớp lớp cơ cơ sở sở
Cũng Cũng nhận nhận đối đối tượng tượng lớp lớp kế kế thừa thừa
Con Con trỏ trỏ kiểu kiểu lớp lớp cơ cơ sở sở
Có Có thể thể trỏ trỏ đến đến đối đối tượng tượng lớp lớp kế kế thừa thừa
Trang 7Khái niệm niệm interface interface
Interface Interface và và trong trong kế kế thừa thừa::
class
class Cat Cat: public : public Animal Animal
void void xuLyxuLy((Animal p Animal p))
Trang 8Nội dung dung
Khái Khái niệm niệm interface interface.
Hàm Hàm ảo ảo và và liên liên kết kết động động
Phương Phương thức thức hủy hủy ảo ảo
Trang 9Hàm ảo ảo và và liên liên kết kết động động
Vấn Vấn đề đề liên liên kết kết tĩnh tĩnh trong trong C++: C++:
class
class Cat Cat: public : public Animal Animal
void void xuLyxuLy((Animal p Animal p))
Cat c;
Liên kếtcài đặtAnimalclass
class Cat Cat: public : public Animal Animal
Cat c;
Dog d;
xuLy xuLy(c); (c);
xuLy xuLy(d); (d);
Animal *p;
p = &c;
p p >talk(); >talk();
p = &d;
p p >talk(); >talk();
Liên kếtcài đặtAnimal
Trang 10Hàm ảo ảo và và liên liên kết kết động động
Khái Khái niệm niệm hàm hàm ảo ảo::
Phương Phương thức thức bình bình thường thường::
Lời Lời gọi gọi hàm hàm gắn gắn với với cài cài đặt đặt hàm hàm lúc lúc dịch dịch Liên Liên kết kết tĩnh tĩnh
Hàm Hàm ảo ảo::
Phương Phương thức thức đặc đặc biệt biệt
Lời Lời gọi gọi hàm hàm chỉ chỉ gắn gắn với với interface interface Liên Liên kết kết động động
Lời Lời gọi gọi hàm hàm chỉ chỉ gắn gắn với với interface interface Liên Liên kết kết động động
Khai Khai báo báo: : virtual virtual < <Chữ Chữ ký ký hàm hàm>; >;
Chỉ Chỉ dùng dùng được được với với con con trỏ trỏ đối đối tượng tượng
Trang 11Hàm ảo ảo và và liên liên kết kết động động
Vấn Vấn đề đề liên liên kết kết tĩnh tĩnh trong trong C++: C++:
class
class Cat Cat: public : public Animal Animal
void void xuLyxuLy((Animal *p Animal *p))
Cat c;
Liên kếtinterface Animal
Bỏ ngõcài đặtclass
class Cat Cat: public : public Animal Animal
Cat c;
Dog d;
xuLy xuLy(c); (c);
xuLy xuLy(d); (d);
Animal *p;
p = &c;
p p >talk(); >talk();
p = &d;
p p >talk(); >talk();
cài đặt
Liên kếtinterface Animal
Bỏ ngõcài đặt
Trang 12Hàm ảo ảo và và liên liên kết kết động động
Xây Xây dựng dựng interface interface trong trong C++: C++:
C++ C++ giả giả lập lập interface interface bằng bằng abstract class abstract class.
Đặc Đặc điểm điểm abstract class: abstract class:
Khai Khai báo báo lớp lớp: : dùng dùng từ từ khóa khóa “abstract” “abstract”
Khai Khai báo báo phương phương thức thức: : hàm hàm ảo ảo thêm thêm “ “dấu dấu =“ =“ ở ở cuối cuối
Không Không có có thuộc thuộc tính tính và và cài cài đặt đặt phương phương thức thức
Không Không có có thuộc thuộc tính tính và và cài cài đặt đặt phương phương thức thức
Trang 13Hàm ảo ảo và và liên liên kết kết động động
Xây Xây dựng dựng interface interface trong trong C++: C++:
Cat c;
Dog d;
xuLy xuLy(c); (c);
xuLy xuLy(d); (d);
p >talk();>talk();
}}
Trang 14Hàm ảo ảo và và liên liên kết kết động động
Ý Ý nghĩa nghĩa của của liên liên kết kết động động::
Giao Giao tiếp tiếp thông thông qua interface qua interface.
Cài Cài đặt đặt thay thay đổi đổi động động tùy tùy nhu nhu cầu cầu người người dùng dùng
d.talkd.talk();();
}}
Trang 15Nội dung dung
Khái Khái niệm niệm interface interface.
Hàm Hàm ảo ảo và và liên liên kết kết động động
Phương Phương thức thức hủy hủy ảo ảo
Trang 16GiaoVien *p1 = new *p1 = new GiaoVienGiaoVien;;delete p1;
GVCN *p2 = new GVCN;delete p2;
}}
Thứ tự gọi phương thức hủy??
Trang 17Phương thức thức hủy hủy ảo ảo
Dr Guru Dr Guru khuyên khuyên::
Phương Phương thức thức hủy hủy của của lớp lớp phải phải luôn luôn là là hàm hàm ảo ảo
Trang 18Tóm tắt tắt
Khái Khái niệm niệm interface: interface:
Lớp Lớp = Interface + = Interface + Khai Khai báo báo private + private + Cài Cài đặt đặt
Lớp Lớp kế kế thừa thừa thừa thừa hưởng hưởng interface interface lớp lớp cơ cơ sở sở
Giả Giả lập lập interface interface trong trong C++: abstract class C++: abstract class.
Hàm Hàm ảo ảo::
Hàm Hàm ảo ảo::
Chỉ Chỉ ràng ràng buộc buộc với với interface, interface, không không ràng ràng buộc buộc cài cài đặt đặt
Khai Khai báo báo dùng dùng “virtual” “virtual”
Phương Phương thức thức hủy hủy ảo ảo::
Phương Phương thức thức hủy hủy phải phải luôn luôn là là hàm hàm ảo ảo
Trang 19[[yyy yyy]] void f1() { void f1() { coutcout << “Good morning.<< “Good morning.\\n”; n”; f2(); f2(); }}
[[zzz zzz]] void f2() { void f2() { coutcout << “Good afternoon.<< “Good afternoon.\\n”; }n”; }
};
class B: public A
{ public:
Cho Cho biếtbiết nhữngnhững gìgì xuấtxuất hiệnhiệntrên
trên mànmàn hìnhhình trongtrong cáccáctrường
trường hợphợp::
a) [a) [yyyyyy] ] trốngtrống, [, [zzzzzz] ] trốngtrống b) [
b) [yyyyyy] ] trốngtrống, [, [zzzzzz] virtual.] virtual.c) [
c) [yyyyyy] virtual, [] virtual, [zzzzzz] ] trốngtrống { public:
void f1() {
void f1() { coutcout << “Good evening.<< “Good evening.\\n”; n”; f2(); f2(); }}
void f2() { void f2() { coutcout << “Good night.<< “Good night.\\n”; }n”; }};
void main()
{{
A *p = new B;
pp >f1();>f1();
}}
c) [c) [yyyyyy] virtual, [] virtual, [zzzzzz] ] trốngtrống d) [
d) [yyyyyy] virtual, [] virtual, [zzzzzz] virtual.] virtual
Trang 20Bài tập tập
Bài Bài tập tập 9.2: 9.2:
Cho 2
Cho 2 loại loại hình hình::
Hình Hình tam tam giác giác: : biểu biểu diễn diễn bởi bởi 3 3 đỉnh đỉnh
Hình Hình chữ chữ nhật nhật: : biểu biểu diễn diễn bởi bởi 2 2 điểm điểm trên trên trái trái và và dưới dưới phải phải
Nếu thêm thêm vào vào loại loại hình hình mới mới là là hình hình tròn tròn
Hình Hình tròn tròn: : biểu biểu diễn diễn bởi bởi tâm tâm và và bán bán kính kính
Khi
Khi đó đó, , chương chương trình trình sẽ sẽ thay thay đổi đổi như như thế thế nào nào? ?
Trang 22Bài tập tập
Bài Bài tập tập 9.4: 9.4:
Cho
Cho bảng bảng cách cách thức thức hoạt hoạt động động của của các các loài loài động động vật vật như như sau sau::
Ăn Di chuyển Sinh sản
Cá mập Tạp Bơi Đẻ trứng
Cá
Cá chép chép Phiêu sinh Bơi Đẻ trứng
Trang 23dv.anTapdv.anTap();();
V con =
V con = dv.deTrungdv.deTrung();();
}}
Trang 24Yêu cầu cầu::
Sử Sử dụng dụng ((không không chỉnh chỉnh sửa sửa) ) lớp lớp Line Line và và Rectangle Rectangle.
Hàm Hàm vẽ vẽ phải phải không không đổi đổi khi khi thêm thêm hình hình mới mới vào vào
Point m_p2;
public:
void void drawRectdrawRect();();
};