Bài giảng Kỹ thuật lập trình C/C++: Chương 10 (3) - Lê Thành Sách
lượt xem 10
download
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.
Bình luận(0) Đăng nhập để gửi bình luận!
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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Kỹ thuật lập trình - Phạm Thế Bảo
0 p | 220 | 32
-
Bài giảng Kỹ thuật lập trình: Chương I - Lưu Hồng Việt
48 p | 194 | 23
-
Bài giảng Kỹ thuật lập trình: Chương IV - Lưu Hồng Việt
32 p | 151 | 17
-
Bài giảng Kỹ thuật lập trình: Chương III - Lưu Hồng Việt
51 p | 147 | 15
-
Bài giảng Kỹ thuật lập trình: Chương V - Lưu Hồng Việt
19 p | 127 | 15
-
Bài giảng Kỹ thuật lập trình: Phần 1 - ĐH CNTT&TT
37 p | 114 | 10
-
Bài giảng Kỹ thuật lập trình - Bài 1: Tổng quan về kỹ thuật lập trình
65 p | 165 | 8
-
Bài giảng Kỹ thuật lập trình: Bài 1 - Phạm Đình Sắc
9 p | 129 | 7
-
Bài giảng Kỹ thuật lập trình nâng cao: Chương 4 - ThS. Dương Thành Phết
26 p | 92 | 7
-
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 p | 15 | 4
-
Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Quang
39 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 2 - Trần Quang
25 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 3 - Trần Quang
52 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 4 - Trần Quang
32 p | 7 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang
37 p | 11 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 p | 6 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
34 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 9 - Trần Quang
33 p | 4 | 2
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