Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 06: Kế thừa - Phạm Tú San

Tuần 06:  
Kế thừa  
Nội dung  
Khái niệm kế thừa.  
Tầm vực trong kế thừa.  
Định nghĩa lại phương thức.  
Quan hệ IS-A và HAS-A.  
Bài tập.  
2
Khái niệm kế thừa  
Vấn đề trùng lắp thông tin:  
Nhiều lớp có thông tin giống nhau.  
Có 2 dạng:  
A
x, y, z  
a, b, c  
B
x, y, z  
u, v, w  
Dạng chia sẻ: A ∩ B ≠ Ø.  
Dạng mở rộng: B = A + ε.  
A
x, y, z  
B
x, y, z  
a, b, c  
Nhược điểm:  
Xây dựng tốn kém.  
Dung lượng lưu trữ lớn.  
Thay đổi phần chung khó khăn.  
Giải quyết: tái sử dụng!!  
3
Khái niệm kế thừa  
Khái niệm kế thừa:  
Định nghĩa lớp mới dựa trên những lớp đã có.  
Lớp cơ sở: lớp dùng để định nghĩa lớp mới.  
Lớp kế thừa: lớp được định nghĩa từ lớp đã có.  
Lớp kế thừa thừa hưởng TẤT CẢ từ lớp cơ sở.  
O
A
x, y, z  
x, y, z  
A
B
B
x, y, z  
a, b, c  
x, y, z  
u, v, w  
x, y, z  
a, b, c  
4
Ví dụ kế thừa  
Thông tin:  
Thông tin:  
Họ tên.  
Mức lương.  
Số ngày nghỉ.  
Lớp chủ nhiệm.  
Họ tên.  
Mức lương.  
Số ngày nghỉ.  
Công việc:  
Công việc:  
GVCN  
Giảng dạy.  
Tính lương.  
Giáo viên  
Giảng dạy.  
Tính lương.  
Sinh hoạt chủ nhiệm.  
GiaoVien  
Ho Ten  
Muc Luong  
SoNgayNghi  
5
GVCN  
Lop CN  
Khái niệm kế thừa  
Khai báo trong C++:  
class <Lớp kế thừa> : <Loại kế thừa> <Lớp cơ sở>  
Loại kế thừa:  
public, private, protected.  
Ví dụ:  
class A : public O  
{
private:  
// Khai báo thuộc tính mới của A.  
// Khai báo phương thức mới của A.  
public:  
};  
6
Khái niệm kế thừa  
Lớp kế thừa  
Lớp cơ sở  
Ví dụ:  
class GiaoVien  
{
private:  
class GVCN : public GiaoVien  
{
private:  
string mHoTen;  
float mMucLuong;  
string mLopCN;  
public:  
int  
mSoNgayNghi;  
GVCN(string HoTen,  
float fMucLuong,  
int iSoNgayNghi,  
string sLopCN);  
void sinhHoatCN();  
};  
public:  
GiaoVien(string HoTen,  
float fMucLuong,  
int iSoNgayNghi);  
void giangDay();  
float tinhLuong();  
};  
GVCN thừa hưởng TẤT CẢ thuộc  
tính và phương thức của GiaoVien  
7
Khái niệm kế thừa  
Ví dụ:  
void main()  
{
GiaoVien gv1(“Minh”, 500000, 5);  
gv1.giangDay();  
float fLuong1 = gv1.tinhLuong();  
GVCN gv2(“Hanh”, 700000, 3, “11A”);  
gv2.giangDay();  
gv2.sinhHoatCN();  
float fLuong2 = gv2.tinhLuong();  
}
8
Một số lưu ý trong kế thừa  
A
B
Các thành phần thuộc tính và hành động public  
của A sẽ là các thành phần trong B  
Các thành phần private của A sẽ là 1 phần trong  
B nhưng chỉ được truy xuất qua các hàm public  
hay protected của A  
Nội dung  
Khái niệm kế thừa.  
Tầm vực trong kế thừa.  
Định nghĩa lại phương thức.  
Quan hệ IS-A và HAS-A.  
Bài tập.  
10  
Tầm vực trong kế thừa  
Tầm vực thay đổi thế nào khi kế thừa?  
Lớp cơ sở  
Lớp kế thừa  
private:  
???:  
mX  
protected:  
mY  
public:  
mZ  
mX  
mY  
mZ  
Kế thừa  
???:  
???:  
ꢀ Loại kế thừa quyết định!!  
11  
Tầm vực trong kế thừa  
Bảng tầm vực trong kế thừa:  
Kế thừa  
public  
Kế thừa  
protected  
Kế thừa  
private  
Tầm vực  
public  
public  
protected  
private  
private  
protected  
private  
protected  
protected  
Không thể Không thể Không thể  
truy xuất truy xuất truy xuất  
12  
class A  
{
private:  
class B: private A  
{
};  
int mX;  
protected:  
int mY;  
public:  
int mZ;  
void main()  
{
B b;  
cout<<b.mZ;  
cout<<b.mY;  
cout<<b.mX;  
};  
}
Nội dung  
Khái niệm kế thừa.  
Tầm vực trong kế thừa.  
Định nghĩa lại phương thức.  
Quan hệ IS-A và HAS-A.  
Bài tập.  
14  
Định nghĩa lại phương thức  
Kế thừa một phần:  
Không kế thừa “máy móc” tất cả.  
Lớp kế thừa có thể thay đổi những gì đã kế thừa!!  
ꢀ Định nghĩa lại phương thức đã kế thừa.  
15  
Định nghĩa lại phương thức  
Ví dụ:  
GVCN kế thừa từ GiaoVien.  
GVCN tính lương khác GiaoVien.  
Lương GV = Mức lương – Số ngày nghỉ * 10000.  
Lương GVCN = Lương GV + Phụ cấp 50000.  
ꢀ Viết lại phương thức tinhLuong() cho lớp GVCN.  
16  
Ví dụ - định nghĩa lại phương thức  
class GiaoVien  
{
private:  
string mHoTen;  
float mMucLuong;  
int mSoNgayNghi;  
public:  
GiaoVien(string HoTen, float fMucLuong, int iSoNgayNghi);  
void giangDay();  
float tinhLuong()  
{
return mMucLuong – mSoNgayNghi * 10000;  
}
};  
Ví dụ - định nghĩa lại phương thức (tt)  
class GVCN : public GiaoVien  
{
private:  
void main()  
string mLopCN;  
{
GiaoVien gv1(“Minh”, 500000, 5);  
gv1.giangDay();  
float fLuong1 = gv1.tinhLuong();  
public:  
GVCN(string sTen, float fLuong,  
int iNgayNghi,  
string sLopCN);  
void sinhHoatCN();  
GVCN gv2(“Hanh”, 700000, 3);  
gv2.giangDay();  
float fLuong2 = gv2.tinhLuong();  
float tinhLuong()  
}
{
return GiaoVien::TinhLuong()  
+ 50000;  
}
};  
18  
Nội dung  
Khái niệm kế thừa.  
Tầm vực trong kế thừa.  
Định nghĩa lại phương thức.  
Quan hệ IS-A và HAS-A.  
Bài tập.  
19  
Quan hệ IS-A và HAS-A  
Quan hệ IS-A:  
Lớp A quan hệ IS-A với lớp B  
A là một trường hợp đặc biệt của B.  
A cùng loại với B.  
Ví dụ:  
GVCN là một GiaoVien đặc biệt.  
HinhVuong là một HinhChuNhat đặc biệt.  
ConMeo là một ConVat đặc biệt.  
20  
Tải về để xem bản đầy đủ
pdf 32 trang baolam 20560 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 06: Kế thừa - Phạm Tú San", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_phuong_phap_lap_trinh_huong_doi_tuong_tuan_06_ke_t.pdf