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 đủ
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:
bai_giang_phuong_phap_lap_trinh_huong_doi_tuong_tuan_06_ke_t.pdf

