Bài giảng Phương pháp lập trình hướng đối tượng – Tuần 6: Kế thừa” cung cấp cho người học các kiến thức: 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 áp dụng. Mời các bạn cùng tham khảo nội dung chi tiết.
Tuần 06: Kế thừa Nội dung Khái niệm kế thừa Tầm vực kế thừa Định nghĩa lại phương thức Quan hệ IS-A HAS-A Bài tập 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 Có dạng: Dạng chia sẻ: A ∩ B ≠ Ø Dạng mở rộng: B = A + ε Nhược điểm: Xây dựng tốn Dung lượng lưu trữ lớn Thay đổi phần chung khó khăn A x, y, z a, b, c B x, y, z u, v, w A x, y, z B x, y, z a, b, c Giải quyết: tái sử dụng!! Khái niệm kế thừa Khái niệm kế thừa: Định nghĩa lớp dựa lớp có Lớp sở: lớp dùng để định nghĩa lớp Lớp kế thừa: lớp định nghĩa từ lớp có Lớp kế thừa thừa hưởng TẤT CẢ từ lớp sở O x, y, z A x, y, z a, b, c A x, y, z B x, y, z u, v, w B x, y, z a, b, c Ví dụ kế thừa Thơng tin: Họ tên Mức lương Số ngày nghỉ Công việc: Giáo viên Giảng dạy Tính lương Thơng tin: Họ tên Mức lương Số ngày nghỉ Lớp chủ nhiệm Công việc: GVCN Giảng dạy Tính lương Sinh hoạt chủ nhiệm GiaoVien Ho Ten Muc Luong SoNgayNghi GVCN Lop CN Khái niệm kế thừa Khai báo C++: class : Loại kế thừa: public, private, protected Ví dụ: class A : public O { private: // Khai báo thuộc tính A public: // Khai báo phương thức A }; Khái niệm kế thừa Ví dụ: class GiaoVien { private: string mHoTen; float mMucLuong; int mSoNgayNghi; public: GiaoVien(string HoTen, float fMucLuong, int iSoNgayNghi); void giangDay(); float tinhLuong(); }; Lớp kế thừa Lớp sở class GVCN : public GiaoVien { private: string mLopCN; public: GVCN(string HoTen, float fMucLuong, int iSoNgayNghi, string sLopCN); void sinhHoatCN(); }; GVCN thừa hưởng TẤT CẢ thuộc tính phương thức GiaoVien 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(); } Một số lưu ý kế thừa A B Các thành phần thuộc tính hành động public A thành phần B Các thành phần private A phần B truy xuất qua hàm public hay protected A Nội dung Khái niệm kế thừa Tầm vực kế thừa Định nghĩa lại phương thức Quan hệ IS-A HAS-A Bài tập 10 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); public: gv1.giangDay(); GVCN(string sTen, float fLuong, float fLuong1 = gv1.tinhLuong(); int iNgayNghi, string sLopCN); GVCN gv2(“Hanh”, 700000, 3); void sinhHoatCN(); 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 kế thừa Định nghĩa lại phương thức Quan hệ IS-A HAS-A Bài tập 19 Quan hệ IS-A HAS-A Quan hệ IS-A: Lớp A quan hệ IS-A với lớp B A trường hợp đặc biệt B A loại với B Ví dụ: GVCN GiaoVien đặc biệt HinhVuong HinhChuNhat đặc biệt ConMeo ConVat đặc biệt 20 Quan hệ IS-A HAS-A Quan hệ HAS-A: Lớp A quan hệ HAS-A với lớp B A bao hàm B A chứa B B phận A Ví dụ: ChiecXe chứa BanhXe QuyenSach chứa TrangSach 21 Quan hệ IS-A HAS-A Luật xây dựng lớp A có quan hệ IS-A với B Cho A kế thừa B A có quan hệ HAS-A với B Cho B thuộc tính A Ví dụ: class ConMeo : public ConVat { }; class ChiecXe { private: BanhXe *mBanhXe; }; 22 Tóm tắt Khái niệm kế thừa: Định nghĩa lớp dựa lớp có Lớp kế thừa thừa hưởng tất từ lớp sở Tầm vực kế thừa: Tầm vực thay đổi tùy theo loại kế thừa Định nghĩa lại phương thức: Thay đổi phương thức kế thừa từ lớp sở Quan hệ IS-A HAS-A: IS-A: A trường hợp đặc biệt B => A kế thừa B HAS-A: A bao hàm B => B thuộc tính A 23 SƠ ĐỒ LỚP Sơ đồ lớp – quan hệ kế thừa chứa class ConMeo : public ConVat { }; class ChiecXe { private: BanhXe *mBanhXe; }; ConVat ChiecXe ConMeo BanhXe Sơ đồ lớp mức chi tiết GiaoVien - mHoTen: string - mMucLuong: float - mSoNgayNghi: int + GiangDay(): void + TinhLuong(): float + Nhap(): void + Xuat(): void GVCN - mLopChuNhiem: string + SinhHoatChuNhiem(): void + TinhLuong(): float + Nhap(): void + Xuat(): void BÀI TẬP Bài tập 9.1 Những cặp đối tượng sau có quan hệ IS-A hay HAS-A? Vẽ sơ đồ lớp sau khai báo lớp cho cặp thể quan hệ chúng - Hình vng / Hình chữ nhật - Đa giác / Cạnh - Giám đốc / Nhân viên - Hình trịn / Hình Ellipse - Máy bay / Động - Câu / Từ - Mỹ phẩm / Hàng hóa - Cây lúa / Cây lương thực - Thư viện / Sách - Phim hoạt hình / Phim ảnh 28 Bài tập 9.2 Cho lớp TaiKhoan: class TaiKhoan { private: float mSoDu = 0; public: float baoSoDu() { return mSoDu; } void napTien(float fSoTien) { mSoDu += fSoTien; } void rutTien(float fSoTien) { if (fSoTien A kế thừa B HAS-A: A bao hàm B => B thuộc tính A 23 SƠ ĐỒ LỚP Sơ đồ lớp – quan