intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Kỹ thuật lập trình C/C++: Chương 10 (3) - Lê Thành Sách

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:74

42
lượt xem
10
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng "Kỹ thuật lập trình C/C++ - Chương 10: Lập trình hướng đối tượng" phần Thừa kế giúp người học nắm bắt các kiến thức: Tại sao cần đến thừa kế, các khái niệm, các kiểu thừa kế, thiết kế các lớp, khởi tạo lớp cha từ lớp con,... Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Kỹ thuật lập trình C/C++: Chương 10 (3) - Lê Thành Sách

  1. Chương 10 Lập trình hướng đối tượng --Thừa kế-- Lê Thành Sách Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 1 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  2. Nội dung n Tại sao cần đến thừa kế n Các khái niệm n Thừa kế là gì? n Các kiểu thừa kế n Thiết kế các lớp (I). n Khởi tạo lớp cha từ lớp con n Thiết kế các lớp (II). n Tổng kết Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  3. Tại sao cần đến thừa kế n Giả sử một hệ thống phần mềm cho một trường đại học (Bách Khoa). Nhiều nhóm người dùng có thể dùng hệ thống này, họ có thể là: a) Giảng viên (lecturer) b) Sinh viên (student) c) Nhân viên văn phòng (clerk) d) Bảo vệ (guardian) e) Người dọn dẹp (cleaner) f) v.v n Mỗi nhóm người dùng có những tính năng khác nhau, hệ thống xử lý dữ liệu với từng nhóm cũng khác nhau. n Giải pháp là gì để phầm mềm xử lý dữ liệu với từng nhóm người theo cách khác nhau? Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  4. Tại sao cần đến thừa kế n (1) Tạo chung một cấu trúc “User”, cấu trúc này có trường thông tin “type”. Giải thuật xử lý có dạng: switch (type){ case STUDENT:{ //Xử lý, nếu là sinh viên } case LECTURER:{ //Xử lý, nếu là giảng viên } ... }; Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  5. Tại sao cần đến thừa kế n (1) Tạo chung một cấu trúc “User”, cấu trúc này có trường thông tin “type”. Giải thuật xử lý có dạng: n Nhược điểm: n Code dài dòng n Khó thay đổi n Khó mở rộng n … Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 5 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  6. Tại sao cần đến thừa kế n (2) Chia thành các nhóm nhỏ (lớp) nhỏ như: Student, Lecturer, … Các phương thức xử lý gắn kèm với từng loại. class Student{ public: //Phương thức cho sinh viên }; class Lecturer{ public: //Phương thức cho giảng viên }; … Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  7. Tại sao cần đến thừa kế n (2) Chia thành các nhóm (lớp) nhỏ như: Student, Lecturer, … Các phương thức xử lý gắn kèm với từng loại. n Nhược điểm: n Lặp lại code (code duplication) n Ví dụ: n Phương thức “getName”/”setName” (lấy/gán tên) đều phải hiện thực lại cho tất cả các lớp. n Khó bảo trì n Khó thay đổi hay nâng cấp n … Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 7 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  8. Tại sao cần đến thừa kế n (3) Sử dụng tính năng thừa kế (inheritance) n Chia tập lớn thành các lớp nhỏ (lớp nhỏ, như giải pháp số 2) n Với các lớp có quan hệ “is-a”, hãy khai báo thừa kế cho chúng n Tính năng thừa kế của ngôn ngữ lập trình (C++): n Các lớp con có thể thừa kế các thành viên từ lớp cha. n è Tránh được sự lặp lại code nói trên. n Các lớp cha có thể đại diện cho lớp con để xử lý một thông điệp (tính polymorphism) n è Dễ thiết kế + dễ thay đổi. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  9. Các khái niệm (I) Lecturer Guardian Student Cleaner Accountant Staff User Chia nhỏ tập hợp “User” thành các tập hợp con Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 9 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  10. Các khái niệm (I) Lý thuyết tập hợp Hướng đối tượng Thuật ngữ Tập cha Lớp cha Base class Parent class Super-class Tập con Lớp con Derived class Child-class Sub-class Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  11. Các khái niệm (I) Lecturer Guardian Student Cleaner Accountant Staff User Mô hình cây tương ứng Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  12. Các khái niệm (I) • Các lớp: Hình chữ nhật, trong đó có các thuộc tính và phương thức (nếu cần) • Quan hệ thừa kế: mũi tên từ lớp con đến lớp cha Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  13. Thừa kế là gì? n Là một tính chất cho biết: n Một lớp con thể thừa hưởng các thành viên (thuộc tính + phương thức) có tính public và protected trong lớp cha. n Không thừa hưởng thành viên có tính private. n Cũng có nghĩa, n Lớp con không khai báo nhưng vẫn có các thành viên public và protected của lớp cha. n Với phương thức: có thể thừa kế và thay đổi nội dung của phương thức (xem: Phần định nghĩa phương thức - Overriding) Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 13 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  14. Thừa kế là gì?: Minh hoạ (I) class X{ Khai báo: public: Lớp Y thừa kế lớp X string sayHello(){ return "Hello"; Chú ý: dấu hai chấm “:” và } từ khoá public trước tên lớp }; cha class Y: public X{ } int main(){ Y obj; obj.sayHello(); return 0; } Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  15. Thừa kế là gì?: Minh hoạ (I) sayHello: được gọi với đối class X{ public: tượng obj, kiểu Y. string sayHello(){ return "Hello"; Trong phần mô tả của lớp Y, } không có sayHello. }; class Y: public X{ Nhưng, lớp Y thừa kế } sayHello (public) của lớp X. int main(){ Do đó, biên dịch thành công Y obj; và chạy được. obj.sayHello(); Xuất ra màn hình: return 0; } Hello Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  16. Thừa kế là gì?: Minh hoạ (II) (1) “name” là thuộc tính có tính private è ClassB không thừa kế được từ ClassA (2) Truy xuất đến “name” trong ClassB hay trong main (bên ngoài ClassA) à có lỗi biên dịch Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  17. Thừa kế là gì?: Minh hoạ (III) class ClassA{ private: (1) getName(): có tính public trong ClassA string name; =>ClassB thừa kế được phương thức public: này. string getName(){ return this->name; } void setName(string name){ this->name = name; } (2) getName(): có thể dùng được trong các }; phương thức của ClassB class ClassB: public ClassA{ public: void print(){ cout
  18. Thừa kế là gì?: Minh hoạ (III) (1) getName(): có tính public trong ClassA =>ClassB thừa kế được phương thức int main(){ này. ClassB obj; obj.setName("Nguyen Van An"); cout
  19. Thừa kế là gì?: Minh hoạ (III) (1) getName(): có tính public trong ClassA =>ClassB thừa kế được phương thức này. int main(){ ClassB obj; obj.setName("Nguyen Van An"); cout
  20. Thừa kế là gì?: Minh hoạ (IV) (1): “name” có tính protected trong ClassA è ClassB thừa kế được nó. (2): Do đó, truy cập “name” trong ClassB là không bị báo lỗi Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2