Bài giảng nguyên lý lập trình hướng đối tượng bài 6 ts lý anh tuấn

38 3 0
Bài giảng nguyên lý lập trình hướng đối tượng bài 6   ts  lý anh tuấn

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

NGUYÊN LÝ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 6: Kế thừa Giảng viên: TS Lý Anh Tuấn Email: tuanla@tlu.edu.vn Nội dung Cơ kế thừa ◦ ◦ ◦ ◦ Lớp dẫn xuất với hàm tạo Bổ từ protected Định nghĩa lại hàm thành viên Hàm không kế thừa Lập trình với kế thừa ◦ Tốn tử gán hàm tạo chép ◦ Hàm hủy lớp dẫn xuất ◦ Đa kế thừa Giới thiệu kế thừa  Lập trình hướng đối tượng ◦ Cung cấp kỹ thuật phân đoạn trừu tượng gọi kế thừa  Định nghĩa dạng khái quát lớp ◦ Phiên chuyên biệt sau kế thừa tính chất lớp khái quát ◦ Và thêm vào sửa đổi chức để phù hợp với việc sử dụng Cơ kế thừa Lớp kế thừa từ lớp khác  Lớp sở  ◦ Lớp khái quát lớp khác dẫn xuất  Lớp dẫn xuất ◦ Lớp ◦ Tự động bao gồm biến thành viên hàm thành viên lớp sở ◦ Sau thêm vào hàm biến thành viên Lớp dẫn xuất Xét ví dụ: Lớp nhân viên “Employees”  Bao gồm:  ◦ Các nhân viên hưởng lương theo năm ◦ Các nhân viên làm việc theo  Các tập tập nhân viên ◦ Có thể bao gồm tập nhân viên hưởng lương theo tháng theo tuần Lớp dẫn xuất  Không cần kiểu “employee” tổng qt ◦ Vì khơng có đơn “employee”  Khái niệm nhân viên tổng quát có ý nghĩa ◦ Tất có tên ◦ Tất có số bảo hiểm xã hội ◦ Các hàm kèm theo thông tin giống với tất nhân viên  Lớp tổng qt chứa tất mơ tả nhân viên Lớp Employee  Nhiều thành viên lớp “employee” áp dụng cho tất kiểu nhân viên ◦ Các hàm truy cập ◦ Các hàm biến đổi ◦ Phần lớn mục liệu  SSN  Name  Pay ◦ Tuy nhiên khơng có đối tượng thuộc lớp Lớp Employee  Xét hàm printCheck(): ◦ Luôn phải định nghĩa lại lớp dẫn xuất ◦ Do kiểu nhân viên khác có séc ngân hàng khác ◦ Khơng thực có ý nghĩa với nhân viên chưa tách biệt ◦ Do hàm printCheck() lớp Employee thực công việc:  Đưa thông điệp lỗi: “printCheck called for undifferentiated employee!! Aborting…” Dẫn xuất từ lớp Employee  Các lớp dẫn xuất từ lớp Employee: ◦ Tự động bao gồm tất biến thành viên ◦ Tự động bao gồm tất hàm thành viên Chúng ta nói lớp dẫn xuất “kế thừa” thành viên từ lớp sở  Sau định nghĩa lại thành viên có thêm vào thành viên  Giao diện lớp dẫn xuất HourlyEmployee 10 Định nghĩa lại hàm thành viên  Giao diện lớp dẫn xuất: ◦ Chứa khai báo hàm thành viên ◦ Chứa khai báo hàm thành viên kế thừa thay đổi ◦ Các hàm thành viên kế thừa không khai báo  Sự thi hành lớp dẫn xuất sẽ: ◦ Định nghĩa hàm thành viên ◦ Định nghĩa lại hàm kế thừa khai báo 24 Định nghĩa lại vs Nạp chồng Rất khác  Định nghĩa lại lớp dẫn xuất  ◦ Danh sách tham số giống ◦ Về viết lại hàm tương tự  Nạp chồng ◦ Danh sách tham số khác ◦ Định nghĩa hàm nhận tham số khác ◦ Các hàm nạp chồng phải có ký hiệu khác 25 Một ký hiệu hàm  Định nghĩa ký hiệu bao gồm: ◦ Tên hàm ◦ Chuỗi kiểu danh sách tham số  bao gồm thứ tự, số lượng, kiểu  Ký hiệu không bao gồm: ◦ Kiểu trả ◦ Từ khóa const ◦ & 26 Truy cập hàm sở định nghĩa lại   Khi định nghĩa lại lớp dẫn xuất, định nghĩa lớp sở khơng Có thể sử dụng theo cách sau: Employee JaneE; HourlyEmployee SallyH; JaneE.printCheck();  gọi hàm printCheck Employee SallyH.printCheck();  gọi hàm printCheck HourlyEmployee SallyH.Employee::printCheck();  gọi hàm printCheck Employee  Ở khơng có ý nghĩa, hữu ích số trường hợp 27 Hàm không kế thừa Tất hàm thông thường lớp sở kế thừa lớp dẫn xuất  Ngoại trừ:  ◦ ◦ ◦ ◦ Các hàm tạo (đã xét) Các hàm hủy Hàm tạo chép Toán tử gán 28 Toán tử gán hàm tạo chép  Toán tử gán nạp chồng hàm tạo chép khơng kế thừa ◦ Nhưng sử dụng định nghĩa lớp dẫn xuất ◦ Thường phải sử dụng ◦ Tương tự cách hàm tạo lớp dẫn xuất gọi tới hàm tạo lớp sở 29 Ví dụ tốn tử gán  Cho “Derived” dẫn xuất từ “Base”: Derived& Derived::operator =(const Derived & rightSide) { Base::operator =(rightSide); … }  Lưu ý dịng lệnh ◦ Gọi tốn tử gán từ lớp sở  Việc gán giá trị cho tất biến thành viên kế thừa ◦ Sau thiết lập giá trị cho biến lớp dẫn xuất 30 Ví dụ hàm tạo chép  Xét: Derived::Derived(const Derived& Object) : Base(Object), … {…}  Sau : lời gọi tới hàm tạo chép sở ◦ Thiết lập giá trị cho biến thành viên kế thừa đối tượng lớp dẫn xuất tạo ◦ Lưu ý Object thuộc kiểu Derived, thuộc kiểu Base, nên đối số 31 Hàm hủy lớp dẫn xuất  Nếu hàm hủy lớp sở xác: ◦ Dễ dàng viết hàm hủy lớp dẫn xuất  Khi hàm hủy lớp dẫn xuất gọi: ◦ Tự động gọi hàm hủy lớp sở ◦ Do không cần lời gọi tường minh  Do hàm hủy lớp dẫn xuất cần quan tâm đến biến lớp dẫn xuất ◦ Và liệu chúng trỏ tới ◦ Hàm hủy lớp sở tự động xử lý liệu kế thừa 32 Thứ tự gọi hàm hủy Xét: lớp B dẫn xuất từ lớp A lớp C dẫn xuất từ lớp B ABC  Khi đối tượng lớp C phạm vi:  ◦ Hàm hủy lớp C gọi trước ◦ Sau hàm hủy lớp B gọi ◦ Cuối hàm hủy lớp A gọi  Ngược lại với thứ tự gọi hàm tạo 33 Mối quan hệ “là một” “có một”  Sự kế thừa: ◦ Được xem mối quan hệ lớp “là một” ◦ Ví dụ, HourlyEmployee “là một" Employee ◦ Một Convertible “là một" Automobile  Lớp bao gồm đối tượng lớp khác liệu thành viên ◦ Được xem mối quan hệ lớp “có một” ◦ Ví dụ, lớp “có một” đối tượng lớp khác liệu 34 Kế thừa protected private  Các dạng kế thừa ◦ Cả hai sử dụng  Kế thừa protected: class SalariedEmployee : protected Employee {…} ◦ Các thành viên public lớp sở trở thành protected lớp dẫn xuất  Kế thừa private class SalariedEmployee : private Employee {…} ◦ Tất thành viên lớp sở trở thành private lớp dẫn xuất 35 Đa kế thừa  Lớp dẫn xuất có nhiều lớp sở ◦ Cú pháp bao gồm lớp sở tách biệt dấu phẩy: class derivedMulti : public base1, base2 {…} Khả nhập nhằng cao  Chứa đựng nhiều rủi ro  ◦ Một số người cho không nên sử dụng đa kế thừa ◦ Chỉ nên sử dụng người lập trình có kinh nghiệm 36 Tóm tắt  Kế thừa cung cấp việc sử dụng lại mã lệnh ◦ Cho phép lớp dẫn xuất từ lớp khác, thêm vào thuộc tính  Các đối tượng lớp dẫn xuất kế thừa thành viên lớp sở ◦ Và đưa thêm thành viên Các biến thành viên private lớp sở không phép truy cập tên lớp dẫn xuất  Các hàm thành viên private khơng kế thừa  37 Tóm tắt  Có thể định nghĩa lại hàm thành viên kế thừa ◦ Để thể khác biệt lớp dẫn xuất  Các thành viên protected lớp sở ◦ Có thể truy cập tên hàm thành viên lớp dẫn xuất  Toán tử gán nạp chồng không kế thừa ◦ Nhưng gọi từ lớp dẫn xuất  Các hàm tạo không kế thừa ◦ Được gọi từ hàm tạo lớp dẫn xuất 38 ... không kế thừa Lập trình với kế thừa ◦ Tốn tử gán hàm tạo chép ◦ Hàm hủy lớp dẫn xuất ◦ Đa kế thừa Giới thiệu kế thừa  Lập trình hướng đối tượng ◦ Cung cấp kỹ thuật phân đoạn trừu tượng gọi kế... Chỉ nên sử dụng người lập trình có kinh nghiệm 36 Tóm tắt  Kế thừa cung cấp việc sử dụng lại mã lệnh ◦ Cho phép lớp dẫn xuất từ lớp khác, thêm vào thuộc tính  Các đối tượng lớp dẫn xuất kế... Một Convertible “là một" Automobile  Lớp bao gồm đối tượng lớp khác liệu thành viên ◦ Được xem mối quan hệ lớp “có một” ◦ Ví dụ, lớp “có một” đối tượng lớp khác liệu 34 Kế thừa protected private

Ngày đăng: 25/10/2022, 19:53

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan