Bài giảng Phương pháp lập trình hướng đối tượng: Kế thừa lớp đối tượng
lượt xem 2
download
Bài giảng Phương pháp lập trình hướng đối tượng: Kế thừa lớp đối tượng trình bày các nội dung: Lớp cơ sở – Lớp đẫn xuất, cây kế thừa, kế thừa, thiết kế cây kế thừa, thiết kế lớp hướng kế thừa,... Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Phương pháp lập trình hướng đối tượng: Kế thừa lớp đối tượng
- GV: Lê Xuân Định L.X.Định CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Lớp Cơ sở – Lớp Dẫn xuất Lớp Cơ sở Phương tiện Giao thông • Các thuộc tính cơ sở - Thuộc tính: Tốc độ tối đa • Các phương thức cơ sở: - Phương thức: Di chuyển Trừu tượng hơn (thường là Xe cộ ảo, tức chỉ định nghĩa giao - Thuộc tính: Tốc độ tối đa, bánh, thân diện, còn nội dung cài đặt thì chưa có hoặc có đơn giản) - Phương thức: Di chuyển (chạy trên đường) Tàu đạp Xethuyền thừa kế - Thuộc - Thuộctính: Tốcđộ tính:Tốc tối đa, độ tối đa, bánh, boong, mũi thân, xích, - Phương líp, ... thức: Di chuyển (trôi trên mặt nước) - Phương thức: Di chuyển Lớp Dẫn xuất Máy • Các thuộc tính cơ sở Xebay hơi - Thuộc tính: Tốc độ tối đa, cánh, thân, • Các thuộc tính dẫn xuất - Thuộc tính: Tốc độ tối đa, bánh, thân, xăng, đuôi • Các phương thức cơ sở động cơ,thức: - Phương ... Di chuyển (bay trên trời) • Các phương thức dẫn xuất: - Phương thức: Di chuyển, đổ xăng Cụ thể hơn (có nội dung cài đặt cụ thể) CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 2
- PT Giao thông Cây kế thừa tốc độ tối đa DiChuyển() = 0 Phương tiện Giao thông Xe cộ Xe cộ Máy bay Xe máy bánh xe cánh Xe đạp thân xe thân đuôi Xe hơi DiChuyển() { /*chạy trên đường */} DiChuyển() Xe tải { /* bay trên không */} Tàu thuyền Tàu cánh ngầm Xe đạp Xe hơi Phản lực Trực thăng Thuyền buồm Máy bay Phản lực Trực thăng CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 3
- Kế thừa (chiều thuận) Bài toán 1 Đã có sẵn lớp SinhVien Thuộc tính: MSSV, điểm lý thuyết (đLT), điểm thực hành (đTH) Phương thức: Khởi tạo, xuất, thi LT, thi TH Tính điểm Tổng kết (đTK): Trả về đTK = (6*đLT + 4*đTH)/10 Cần định nghĩa lớp SinhVienB Thuộc tính: MSSV, điểm lý thuyết (đLT), điểm thực hành (đTH), điểm cộng (đCộng) Phương thức: Khởi tạo, xuất, thi LT, thi TH, làm bài tập (lấy điểm cộng) Tính điểm Tổng kết (đTK): Trả về đTK = (6*đLT + 4*đTH)/10 + đCộng CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 4
- Kế thừa – Giao diện SinhVien SinhVienB Lớp dẫn xuất MSSV MSSV điểmLýThuyết điểmLýThuyết Thừa kế mọi thành điểmThựcHành điểmThựcHành phần(*) của lớp cơ sở; điểmCộng điểmCộng Thừa Thêm một số thành SinhVien(mssv) kế SinhVienB(mssv) phần riêng của lớp dẫn xuất() xuất() xuất; thiLýThuyết() thiLýThuyết() Cài đặt lại (đè lên) một thiThựcHành() thiThựcHành() điểmTổngKết() điểmTổngKết() số phương thức của làmBàiTập() làmBàiTập() lớp cơ sở. class SinhVien class SinhVienB:public SinhVien { {private: † (*) Nhưng lớp dẫn private: protected: float dCong; xuất chỉ truy cập được tới các thành int mssv; public: phần trong phạm vi float dLT, dTH; void lamBT(); protected & public public: SinhVienB(int mssv); của lớp cơ sở. SinhVien(int mssv); void xuat(); † Cài đặt đè: override ... float diemTK(); }; }; CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 5
- Kế thừa – Giao diện SinhVien SinhVienB Lớp dẫn xuất MSSV MSSV điểmLýThuyết điểmLýThuyết Thừa kế mọi thành điểmThựcHành điểmThựcHành phần(*) của lớp cơ sở; điểmCộng điểmCộng Thêm một số thành SinhVien(mssv) Thêm SinhVienB(mssv) phần riêng của lớp dẫn xuất() xuất() xuất; thiLýThuyết() thiLýThuyết() Cài đặt lại (đè lên) một thiThựcHành() thiThựcHành() điểmTổngKết() điểmTổngKết() số phương thức của làmBàiTập() làmBàiTập() lớp cơ sở. class SinhVien class SinhVienB:public SinhVien {protected: ... {private: † (*) Nhưng lớp dẫn public: float dCong; xuất chỉ truy cập được tới các thành SinhVien(int mssv); public: phần trong phạm vi void xuat(); void lamBT(); protected & public void thiLT(); SinhVienB(int mssv); của lớp cơ sở. void thiTH(); void xuat(); † Cài đặt đè: override float diemTK(); float diemTK(); }; }; CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 6
- Kế thừa – Giao diện SinhVien SinhVienB Lớp dẫn xuất MSSV MSSV điểmLýThuyết điểmLýThuyết Thừa kế mọi thành điểmThựcHành điểmThựcHành phần(*) của lớp cơ sở; điểmCộng điểmCộng Thêm một số thành SinhVien(mssv) Đè SinhVienB(mssv) phần riêng của lớp dẫn xuất() xuất() xuất; thiLýThuyết() thiLýThuyết() Cài đặt lại (đè lên) một thiThựcHành() thiThựcHành() điểmTổngKết() điểmTổngKết() số phương thức của làmBàiTập() làmBàiTập() lớp cơ sở. class SinhVien class SinhVienB:public SinhVien {protected: ... {private: † (*) Nhưng lớp dẫn public: float dCong; xuất chỉ truy cập được tới các thành SinhVien(int mssv); public: phần trong phạm vi void xuat(); virtual void xuat(); void lamBT(); protected & public void thiLT(); SinhVienB(int mssv); của lớp cơ sở. void thiTH(); void xuat(); † Cài đặt đè: override virtual float diemTK(); float diemTK(); float diemTK(); }; }; CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 7
- Kế thừa – Cài đặt đè SinhVien SinhVienB Điều kiện để cài đặt đè MSSV MSSV điểmLýThuyết điểmLýThuyết Lớp cơ sở phải cho điểmThựcHành điểmThựcHành phép đè bằng khai báo điểmCộng điểmCộng virtual; Đè SinhVien(mssv) SinhVienB(mssv) Lớp dẫn xuất phải khai xuất() xuất() báo lại đúng như thiLýThuyết() thiLýThuyết() nguyên mẫu hàm ở lớp thiThựcHành() thiThựcHành() cơ sở. điểmTổngKết() điểmTổngKết() làmBàiTập() làmBàiTập() Nếu một phương thức không virtual thì class SinhVien {protected: ... class SinhVienB:public SinhVien {private: PThức của lớp dẫn public: float dCong; xuất độc lập với SinhVien(int mssv); public: phương thức của void xuat(); virtual void xuat(); void thiLT(); void lamBT(); SinhVienB(int mssv); lớp cơ sở! void thiTH(); void xuat(); virtual float diemTK(); float diemTK(); float diemTK(); }; }; CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 8
- Kế thừa – Cài đặt đè Một số phương thức của lớp dẫn xuất Có cùng giao diện (nguyên mẫu hàm) với lớp cơ sở, nhưng Khác phần cài đặt (thường cụ thể, chi tiết hơn). Lựa chọn 1: Cài đặt lại hoàn toàn. Lựa chọn 2: Tái sử dụng phần cài đặt của lớp cơ sở (nếu có) class SinhVien class SinhVienB:public SinhVien { { protected: private: mssv, int mssv; float dCong; dLT, dTH, float dLT, dTH; public: public: mssv, ... dCong ... dLT, dTH void xuat(); virtual void xuat(); // Xuất tất cả các thuộc tính // Xuất tất cả các thuộc tính }; }; CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 9
- Kế thừa – Cài đặt đè Một số phương thức của lớp dẫn xuất Có cùng giao diện (nguyên mẫu hàm) với lớp cơ sở, nhưng Khác phần cài đặt (thường cụ thể, chi tiết hơn). Lựa chọn 1: Cài đặt lại hoàn toàn. Lựa chọn 2: Tái sử dụng phần cài đặt của lớp cơ sở (nếu có) void SinhVien::xuat() void SinhVienB::xuat() { { cout
- Kế thừa – Cài đặt đè Một số phương thức của lớp dẫn xuất Có cùng giao diện (nguyên mẫu hàm) với lớp cơ sở, nhưng Khác phần cài đặt (thường cụ thể, chi tiết hơn). Lựa chọn 1: Cài đặt lại hoàn toàn. Lựa chọn 2: Tái sử dụng phần cài đặt của lớp cơ sở (nếu có) void SinhVien::xuat() void SinhVienB::xuat() { { cout
- Kế thừa – Constructor Constructor của lớp dẫn xuất Không tự động kế thừa từ lớp cơ sở (kể cả default constructor) Buộc phải gọi lại constructor của lớp cơ sở nếu muốn kế thừa! ♣ Nhưng... “sinh cha rồi mới sinh con” C++: Thay lời gọi phương thức bằng cú pháp “kế thừa constructor” Java: Buộc phải gọi constructor của lớp cơ sở trước tiên. SinhVien::SinhVien(int mssv) SinhVienB::SinhVienB(int mssv) { { :SinhVien(mssv) this->mssv = mssv; { this->SinhVien(mssv); this->dLT = this->dTH = -1; this->dCong = 0; } } Đây là lời gọi hàm, không phải là khai báo nguyên mẫu hàm!!! Mang ý nghĩa “giống như” viết trong thân hàm: this->SinhVien(mssv); CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 12
- Bài tập: Ứng dụng Kế thừa Lấy lớp Xe trong bài ứng dụng “Xe - Xăng” làm lớp cơ sở để định nghĩa lớp dẫn xuất sau: XeTải Độ cao (mét), tải trọng (tấn) có thể được chỉ định bởi nhà sản xuất nhưng không đổi đối với mỗi xe. Thực tải (tấn) là lượng hàng mà xe đang chở, chỉ được thay đổi thông qua phương thức lên/xuống hàng, và không được vượt quá tải trọng của xe. 1/(Độ hao xăng)= (tải trọng – thực tải + 10)/(tải trọng) km/lít Số bánh: người sử dụng có thể biết đang có mấy bánh và tuỳ tiện thay đổi số bánh với điều kiện là số chẵn ≥ 4 bánh và ≥ 2*[(thực tải)/10]. ([x] = ceil(x) trong thư viện math ) CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 13
- Kế thừa (chiều nghịch) Bài toán 2: Cần định nghĩa 2 lớp gần giống nhau SinhVienA Thuộc tính: MSSV, điểm lý thuyết (đLT), điểm đồ án (đĐA) Phương thức: Khởi tạo, xuất, thi LT, làm đồ án Tính điểm Tổng kết (đTK): Trả về đTK = ( đLT + đĐA)/2 SinhVienB Thuộc tính: MSSV, điểm lý thuyết (đLT), điểm thực hành (đTH), điểm cộng (đCộng) Phương thức: Khởi tạo, xuất, thi LT, thi TH, làm bài tập (lấy điểm cộng) Tính điểm Tổng kết (đTK): Trả về đTK = (6*đLT + 4*đTH)/10 + đCộng CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 14
- Kế thừa – Thiết kế Cây kế thừa SinhVienA SinhVien SinhVienB MSSV MSSV MSSV điểmLýThuyết điểmLýThuyết điểmLýThuyết điểmĐồÁn điểmThựcHành điểmCộng SinhVienA(mssv) SinhVien(mssv) SinhVienB(mssv) xuất() xuất() xuất() điểmTổngKết() điểmTổngKết() điểmTổngKết() thiLýThuyết() thiLýThuyết() thiLýThuyết() làmĐồÁn() thiThựcHành() làmBàiTập() Định nghĩa lớp cơ sở Có hết những thành phần chung (về giao diện) của các lớp cần định nghĩa. Những phương thức giống nhau về giao diện nhưng khác nhau phần cài đặt giữa các lớp thì có 2 lựa chọn: 1. Lớp cơ sở cài đặt rỗng (hoặc thuần ảo, tức không có phần cài đặt) Các lớp dẫn xuất tự cài đặt hoàn toàn những phương thức đó. 2. Lớp cơ sở cài đặt phần xử lý chung (nếu có) (vẫn ảo, nhưng ko thuần ảo) Các lớp dẫn xuất tái sử dụng phần xử lý chung, và cài đặt thêm phần xử lý riêng CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 15
- Kế thừa – Thiết kế Cây kế thừa SinhVienA SinhVien SinhVienB MSSV MSSV MSSV điểmLýThuyết điểmLýThuyết điểmLýThuyết điểmĐồÁn điểmThựcHành điểmCộng SinhVienA(mssv) SinhVien(mssv) SinhVienB(mssv) xuất() xuất() xuất() điểmTổngKết() điểmTổngKết() điểmTổngKết() thiLýThuyết() thiLýThuyết() thiLýThuyết() làmĐồÁn() thiThựcHành() làmBàiTập() Định nghĩa lớp cơ sở Có hết những thành phần chung (về giao diện) của các lớp cần định nghĩa. Những phương thức giống nhau về giao diện nhưng khác nhau phần cài đặt giữa các lớp thì có 2 lựa chọn: 1. Lớp cơ sở cài đặt rỗng (hoặc thuần ảo, tức không có phần cài đặt) Các lớp dẫn xuất tự cài đặt hoàn toàn những phương thức đó. 2. Lớp cơ sở cài đặt phần xử lý chung (nếu có) (vẫn ảo, nhưng không thuần ảo) Các lớp dẫn xuất tái sử dụng phần xử lý chung, và cài đặt thêm phần xử lý riêng. CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 16
- Thiết kế Lớp Hướng Kế thừa SinhVien Khi thiết kế một lớp, # MSSV # điểmLýThuyết nên nghĩ đến những + SinhVien(mssv) lớp dẫn xuất của nó + xuất() + điểmTổngKết() (trong tương lai). + thiLýThuyết() Những thuộc tính mà lớp dẫn xuất có thể SinhVienX dùng: Cung cấp p.thức get/set qua SinhVienY ... giao diện protected. SinhVienZ Những phương thức mà lớp dẫn xuất có thể thay đổi: virtual. CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 17
- Bài tập 3: ƯD Cây kế thừa Hãy viết chương trình nuôi thú (chó & mèo) sao cho tính tái sử dụng được cao nhất: Mỗi con Chó và Mèo đều có tên và trọng lượng của nó. Mỗi tháng ta đều phải mua thức ăn để nuôi chúng với số tiền Chó: Trọng lượng × 15000₫, và Mèo: Trọng lượng × 12000₫ – số chuột ×1000₫ Ở đây “số chuột” là tổng số chuột bắt được trong tháng. Và mỗi tháng (sau khi mua thức ăn xong) thì số chuột được reset lại thành 0. Ngoài ra, chúng còn có các hành động khác: Kêu: In tiếng kêu ra màn hình. Mèo bắt chuột: tăng số chuột bắt được lên 1 lượng xác định. CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 18
- Bài tập 4: Lớp quản lý Hãy thiết kế lớp Lớp học để quản lý các Sinh viên trong một lớp học. Thuộc tính: Mảng các đối tượng Sinh viên (và số SV trong lớp) Phương thức: Khởi tạo mặc định: Lớp trống (không có SV nào). Thêm một SV vào danh sách lớp. Xuất bảng điểm của cả lớp. (Mỗi SV xuất các thuộc tính & điểm tổng kết) Tìm SV giỏi nhất (có điểm tổng kết lớn nhất). CuuDuongThanCong.com https://fb.com/tailieudientucntt L.X.Định 19
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Phương pháp lập trình: Chương 1 - GV. Từ Thị Xuân Hiền
18 p | 132 | 17
-
Bài giảng Phương pháp lập trình: Chương 2 - GV. Từ Thị Xuân Hiền
50 p | 108 | 15
-
Bài giảng Phương pháp lập trình: Chương 6 - GV. Từ Thị Xuân Hiền
39 p | 105 | 15
-
Bài giảng Phương pháp lập trình: Chương 3 - GV. Từ Thị Xuân Hiền
29 p | 118 | 12
-
Bài giảng Phương pháp lập trình: Chương 5 - GV. Từ Thị Xuân Hiền
37 p | 115 | 12
-
Bài giảng Phương pháp lập trình: Chương 4 - GV. Từ Thị Xuân Hiền
19 p | 104 | 11
-
Bài giảng Phương pháp lập trình: Chương 7 - GV. Từ Thị Xuân Hiền
18 p | 118 | 11
-
Bài giảng Phương pháp lập trình: Chương 9 - GV. Từ Thị Xuân Hiền
36 p | 101 | 10
-
Bài giảng Phương pháp lập trình: Chương 3
23 p | 115 | 10
-
Bài giảng Phương pháp lập trình: Chương 8 - GV. Từ Thị Xuân Hiền
25 p | 102 | 10
-
Bài giảng Phương pháp lập trình: Chương 6 (tiếp theo)
43 p | 85 | 9
-
Bài giảng Phương pháp lập trình: Chương 4
9 p | 96 | 6
-
Bài giảng Phương pháp lập trình hướng đối tượng: Bài tập 5 - Trần Phước Tuấn
4 p | 114 | 6
-
Bài giảng Phương pháp lập trình: Chương 7
16 p | 71 | 4
-
Bài giảng Phương pháp lập trình - Chương 1: Phương pháp lập trình (2016)
64 p | 73 | 4
-
Bài giảng Phương pháp lập trình: Bài 2 - TS. Ngô Hữu Dũng
45 p | 73 | 4
-
Bài giảng Phương pháp lập trình: Bài 4 - TS. Ngô Hữu Dũng
51 p | 92 | 4
-
Bài giảng Phương pháp lập trình: Bài 11 - TS. Ngô Hữu Dũng
42 p | 62 | 3
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