Giáo trình Lập trình hướng đối tượng (Nghề: Công nghệ thông tin - Cao đẳng) - Trường Cao đẳng Cộng đồng Đồng Tháp

230 4 0
Giáo trình Lập trình hướng đối tượng (Nghề: Công nghệ thông tin - Cao đẳng) - Trường Cao đẳng Cộng đồng Đồng Tháp

Đ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

Giáo trình Lập trình hướng đối tượng trình bày một cách hệ thống các khái niệm của lập trình hướng đối tượng được cài đặt trong C++ như: lớp, đối tượng, sự kế thừa, tính đa hình. Mời các bạn cùng tham khảo!

ỦY BAN NHÂN DÂN TỈNH ĐỒNG THÁP TRƯỜNG CAO ĐẲNG CỘNG ĐỒNG ĐỒNG THÁP GIÁO TRÌNH MƠN HỌC: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG NGÀNH, NGHỀ: CƠNG NGHỆ THƠNG TIN TRÌNH ĐỘ: CAO ĐẲNG (Ban hành kèm theo Quyết định số /QĐ-CĐCĐ ngày tháng năm 20… Hiệu trưởng trường Cao đẳng Cộng đồng Đồng Tháp) Đồng Tháp, năm 2017 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng nguyên trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm i LỜI NĨI ĐẦU Bài giảng trình bày cách hệ thống khái niệm lập trình hƣớng đối tƣợng đƣợc cài đặt C++ nhƣ: lớp, đối tƣợng, kế thừa, tính đa hình Bên cạnh đó, giảng giới thiệu chi tiết cách thiết kế chƣơng trình hƣớng đối tƣợng đến ngƣời học Bài giảng bao gồm chƣơng sau:  Chƣơng 1: LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG  Chƣơng 2: CÁC ĐẶC ĐIỂM CỦA C++  Chƣơng 3: LỚP VÀ ĐỐI TƢỢNG  Chƣơng 4: THỪA KẾ  Chƣơng 5: TÍNH ĐA HÌNH  Chƣơng 6: THIẾT KẾ CHƢƠNG TRÌNH HƢỚNG ĐỐI TƢỢNG Cuối cùng, xin gửi lời cảm ơn chân thành đến bạn bè, đồng nghiệp có ý kiến đóng góp sâu sắc cho giảng Mọi ý kiến đóng góp xin vui lịng gửi đến địa mail: pqcuong@dtcc.edu.vn Xin chân thành cảm ơn! Đồng Tháp, ngày 01 tháng 07 năm 2017 Tác giả Phan Quốc Cƣờng i MỤC LỤC LỜI NÓI ĐẦU i MỤC LỤC ii DANH MỤC CÁC HÌNH v Chƣơng LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG 1.1 Thế lập trình hƣớng đối tƣợng 1.2 Một số khái niệm quan trọng CÂU HỎI ÔN TẬP CHƢƠNG Chƣơng CÁC ĐẶC ĐIỂM CỦA C++ 2.1 Cấu trúc chƣơng trình 2.2 Cấu trúc điều khiển 12 2.2.1 Cấu trúc điều kiện: if else 13 2.2.2 Các cấu trúc lặp 14 2.2.3 Các lệnh rẽ nhánh lệnh nhảy 19 2.3 Con trỏ chuỗi ký tự 24 2.3.1 Con trỏ 24 2.3.2 Chuỗi ký tự 38 2.4 Tham số mặc định hàm 47 2.5 Hàm inline 50 2.6 Truyền tham số 53 2.7 Tham chiếu 60 2.8 Struct 64 BÀI TẬP THỰC HÀNH CHƢƠNG 73 Chƣơng 76 LỚP VÀ ĐỐI TƢỢNG 76 3.1 Lớp (Class) 76 Trang ii 3.2 Đối tƣợng 79 3.3 Phạm vi lớp truy cập thành viên lớp 82 3.4 Hàm tạo hàm hủy 86 3.4.1 Hàm tạo 87 3.4.2 Dùng hàm tạo khai báo 88 3.4.3 Dùng hàm tạo cấp phát nhớ 89 3.4.4 Dùng hàm tạo để biểu diễn đối tƣợng 90 3.4.5 Hàm tạo mặc định 92 3.4.6 Hàm hủy 96 3.4.7 Hàm tạo hàm hủy đƣợc gọi nào? 98 3.5 Đối tƣợng hàm thành viên 101 3.6 Hàm bạn lớp bạn 109 3.6.1 Hàm bạn 109 3.6.2 Lớp bạn 121 3.7 Hàm thành viên tĩnh 128 3.8 Con trỏ this 134 BÀI TẬP THỰC HÀNH CHƢƠNG 142 Chƣơng 145 THỪA KẾ 145 4.1 Kế thừa đơn 145 4.1.1 Ép kiểu trỏ lớp sở tới trỏ lớp dẫn xuất 148 4.1.2 Các lớp sở public, protected private 155 4.1.3 Các constructor destructor lớp dẫn xuất 156 4.2 Đa kế thừa 161 4.3 Các lớp sở ảo (virtual base classes) 167 BÀI TẬP THỰC HÀNH CHƢƠNG 172 Chƣơng 178 TÍNH ĐA HÌNH 178 Trang iii 5.1 Giới thiệu 178 5.2 Phƣơng thức ảo (virtual function) 179 5.3 Các đặc trƣng phƣơng thức ảo 182 5.4 Lớp trừu tƣợng (Abstract class) 184 5.5 Các thành viên ảo lớp 188 5.5.1 Toán tử ảo 188 5.5.2 Có constructor destructor ảo hay khơng? 194 BÀI TẬP THỰC HÀNH CHƢƠNG 197 Chƣơng 200 THIẾT KẾ CHƢƠNG TRÌNH THEO HƢỚNG ĐỐI TƢỢNG 200 6.1 Các giai đoạn phát triển hệ thống 200 6.2 Cách tìm lớp 202 6.3 Các bƣớc cần thiết để thiết kế chƣơng trình 202 6.4 Một số ví dụ minh họa 204 BÀI TẬP THỰC HÀNH CHƢƠNG 221 TÀI LIỆU THAM KHẢO 222 Trang iv DANH MỤC CÁC HÌNH Hình - Lớp ấn phẩm lớp dẫn xuất Hình – Minh họa tính đa hình ấn phẩm lớp dẫn xuất Hình – Kết tính thể tích hình hộp 49 Hình – Kết tính thể tích hình lập phƣơng 52 Hình – Một đối tƣợng phần mềm 81 Hình – Đối tƣợng phần mềm xe đạp 82 Hình – Kết minh họa phạm vi lớp 84 Hình – TBD báo lỗi 86 Hình – Kết chƣơng trình có sử dụng hảm hủy 98 Hình 10 – Kết chƣơng trình minh họa thứ tự constructor destructor đƣợc gọi 101 Hình 11 – Lỗi biên dịch 106 Hình 12 – Kết khởi tạo kiểu liệu có sẵn 109 Hình 13 – Trình biên dịch thông báo lỗi 109 Hình 14 – Kết minh họa sử dụng tƣờng minh trỏ this 136 Hình 15 – Kết trả tham chiếu tới đối tƣợng Time 141 Hình 16 – Minh họa phân cấp kế thừa đơn 146 Hình 17 – Phân cấp lớp Shape 146 Hình 18 – Kết minh họa 153 Hình 19 - Minh họa thứ tự contructor destructor lớp sở lớp dẫn xuất đƣợc gọi 160 Hình 20 – Kết minh họa 166 Hình 21 – Kết sau lớp sở ảo 171 Hình 22 – Kết chƣơng trình 180 Hình 23 – Kết minh họa tính chất phƣơng thức ảo 184 Hình 24 – Mơ tả tính đa hình hàm Print() 185 Hình 25 – Kết ví dụ minh họa tính đa hình hàm Print() 188 Trang v Hình 26 – Kết ví dụ minh họa đa hóa tốn tử với hàm tốn tử phƣơng thức ảo 194 Hình 27 – Kết minh họa destructor ảo 196 Hình 28 - Tìm tồn chung đối tƣợng 203 Hình 29 - Tiếp tục theo hƣớng từ dƣới lên 204 Hình 30 – Các lớp Nguoi, BienChe, HopDong 205 Hình 31 – Kết chƣơng trình tính tiền lƣơng nhân viên quan theo dạng khác 212 Hình 32 – Các lớp Nguoi, SinhVien, GiangVien 213 Hình 33 – Kết ví dụ 220 Trang vi Chƣơng LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG MỤC ĐÍCH Phân biệt khác lập trình cổ điển lập trình hƣớng đối tƣợng; giới thiệu khái niệm quan trọng lập trình hƣớng đối tƣợng nhƣ: đối tƣợng, thể hiện, lớp; giới thiệu đặc điểm lập trình hƣớng đối tƣợng nhƣ: tính đóng gói, tính kế thừa, tính đa hình Nhiệm vụ tự học tài liệu tham khảo sinh viên chƣơng Để đạt đƣợc mục đích đề chƣơng 1, sinh viên phải thực tốt yêu cầu sau đây:  Xem trƣớc đề cƣơng chi tiết Chƣơng để biết đƣợc mục đích, nội dung đƣợc trình bày chƣơng  Phải đọc trƣớc nội dung Chƣơng giảng trƣớc lên lớp 1.1 Thế lập trình hƣớng đối tƣợng Phƣơng pháp lập trình cấu trúc - Tƣ tƣởng lập trình cấu trúc tổ chức chƣơng trình thành chƣơng trình Trong PASCAL có kiểu chƣơng trình thủ tục hàm Trong C có loại chƣơng trình hàm Hàm đơn vị chƣơng trình độc lập dùng để thực phần việc nhƣ: Nhập số liệu, in kết hay thực số tính tốn Hàm cần có đối biến, mảng cục dùng riêng cho hàm - Các ngôn ngữ nhƣ C, PASCAL, FOXPRO ngôn ngữ cho phép triển khai phƣơng pháp lập trình cấu trúc Một chƣơng trình cấu trúc gồm cấu trúc liệu (nhƣ biến, mảng, ghi) hàm, thủ tục Nhiệm vụ việc tổ chức thiết kế chƣơng trình cấu trúc tổ chức chƣơng trình thành hàm, thủ tục: Chƣơng trình bao gồm hàm, thủ tục Trang Phƣơng pháp lập trình hƣớng đối tƣợng Khái niệm trung tâm lập trình hƣớng đối tƣợng lớp (class) Có thể xem lớp kết hợp thành phần liệu hàm Cũng xem lớp mở rộng cấu trúc C (struct) cách đƣa thêm vào phƣơng thức (method) hay gọi hàm thành viên (member function) Một lớp đƣợc định nghĩa nhƣ sau: class Tên_Lớp { // Khai báo thành phần liệu // Khai báo phƣơng thức }; Các phƣơng thức đƣợc viết (xây dựng) bên bên ngồi (phía dƣới) phần định nghĩa lớp Cấu trúc (cách viết) phƣơng thức tƣơng tự nhƣ hàm ngoại trừ quy tắc sau: Khi xây dựng phƣơng thức bên định nghĩa lớp dịng cần dùng tên lớp dấu :: đặt trƣớc tên phƣơng thức để phƣơng thức thuộc lớp Sử dụng thành phần liệu phƣơng thức: Vì phƣơng thức thành phần liệu thuộc lớp phƣơng thức đƣợc lập lên cốt để xử lý thành phần liệu, nên thân phƣơng thức có quyền truy nhập đến thành phần liệu (của lớp) Biến lớp: Sau định nghĩa lớp, dùng tên lớp để khai báo biến kiểu lớp hay gọi đối tƣợng Mỗi đối tƣợng có thành phần liệu phƣơng thức Lời gọi phƣơng thức cần chứa tên đối tƣợng để xác định phƣơng thức thực từ đối tƣợng Một chƣơng trình hƣớng đối tƣợng bao gồm lớp có quan hệ với Việc phân tích, thiết kế chƣơng trình theo phƣơng pháp hƣớng đối tƣợng nhằm thiết kế, xây dựng Trang 15: virtual void Nhap(); 16: }; 17: 18: #endif File STAFF.CPP 1: //STAFF.CPP 2: Định nghĩa hàm thành viên cho lớp BienChe 3: #include "staff.h" 4: 5: BienChe::BienChe() 6: { 7: HeSoLuong=HeSoPhuCap=0; 8: } 9: 10: void BienChe::Nhap() 11: { 12: Nguoi::Nhap(); 13: coutHeSoLuong; 15: coutHeSoPhuCap; 17: } 18: 19: void BienChe::TinhLuong() 20: { 21: Luong=MUC_CO_BAN*(1.0+HeSoLuong+HeSoPhuCap); 22: } Trang 208 File CONTRACT.H 1: //CONTRACT.H 2: Định nghĩa lớp HopDong 3: #ifndef CONTRACT_H 4: #define CONTRACT_H 5: 6: #include "person.h" 7: 8: class HopDong : public Nguoi 9: { 10: protected: 11: float TienCong; 12: float NgayCong; 13: float HeSoVuotGio; 14: public: 15: HopDong(); 16: virtual void TinhLuong(); 17: virtual void Nhap(); 18: }; 19: 20: #endif File CONTRACT.CPP 1: //CONTRACT.CPP 2: Định nghĩa hàm thành viên cho lớp HopDong 3: #include "contract.h" 4: 5: HopDong::HopDong() Trang 209 6: { 7: TienCong=NgayCong=HeSoVuotGio=0; 8: } 9: 10: void HopDong::Nhap() 11: { 12: Nguoi::Nhap(); 13: coutTienCong; 15: coutNgayCong; 17: coutHeSoVuotGio; 19: } 20: 21: void HopDong::TinhLuong() 22: { 23: Luong=TienCong*NgayCong*(1+HeSoVuotGio); 24: } File CT.CPP 1: //CT.CPP 2: //Chƣơng trình 3: #include 4: #include 5: #include "person.h" 6: #include "staff.h" 7: #include "contract.h" Trang 210 8: 9: int main() 10: { 11: Nguoi *Ng[100]; 12: int N=0; 13: char Chon,Loai; 14: 15: { 16: coutLoai; 18: Loai=toupper(Loai); 19: if (Loai=='B') 20: Ng[N]=new BienChe; 21: else 22: Ng[N]=new HopDong; 23: Ng[N++]->Nhap(); 24: coutChon; 26: Chon=toupper(Chon); 27: if ((N==100)||(Chon=='K')) 28: break; 29: } 30: while (1); 31: for(int I=0;ITinhLuong(); 34: Ng[I]->Xuat(); 35: } Trang 211 36: return 0; 37: } Chúng ta chạy ví dụ ta đƣợc kết nhƣ hình bên dƣới: Hình 31 – Kết chƣơng trình tính tiền lƣơng nhân viên quan theo dạng khác Ví dụ 2: Giả sử cuối năm học cần trao giải thƣởng cho sinh viên xuất sắc giảng viên có nhiều cơng trình khoa học đƣợc cơng bố tạp chí Các lớp phả hệ nhƣ hình 32: lớp Nguoi để quản lý hồ sơ cá nhân, lớp SinhVien quản lý sinh viên lớp GiangVien quản lý giảng viên Lớp Nguoi:  Dữ liệu họ tên  Phƣơng thức kiểm tra khả đƣợc khen thƣởng Đây phƣơng thức ảo  Phƣơng thức xuất Đây phƣơng thức ảo Lớp SinhVien:  Dữ liệu điểm trung bình Trang 212  Phƣơng thức kiểm tra khả đƣợc khen thƣởng  Phƣơng thức xuất Lớp GiangVien:  Dữ liệu điểm trung bình  Phƣơng thức kiểm tra khả đƣợc khen thƣởng  Phƣơng thức xuất Hình 32 – Các lớp Nguoi, SinhVien, GiangVien File PERSON.H 1: //PERSON.H 2: Định nghĩa lớp Nguoi 3: #ifndef PERSON_H 4: #define PERSON_H 5: 6: #include 7: 8: #define MAX_TEN 50 9: Trang 213 10: class Nguoi 11: { 12: protected: 13: char HoTen[MAX_TEN]; 14: public: 15: Nguoi(char *HT); 16: virtual int DuocKhenThuong() const=0; 17: virtual void Xuat() const=0; 18: }; 19: 20: #endif File PERSON.CPP 1: //PERSON.CPP 2: Định nghĩa hàm thành viên cho lớp Nguoi 3: #include 4: #include "person.h" 5: 6: Nguoi::Nguoi(char *HT) 7: { 8: strcpy(HoTen,HT); 9: } File STUDENT.H 1: //STUDENT.H 2: Định nghĩa lớp SinhVien 3: #ifndef STUDENT_H 4: #define STUDENT_H Trang 214 5: 6: #include "person.h" 7: 8: class SinhVien : public Nguoi 9: { 10: protected: 11: float DiemTB; 12: public: 13: SinhVien(char *HT,float DTB); 14: virtual int DuocKhenThuong() const; 15: virtual void Xuat() const; 16: }; 17: 18: #endif File STUDENT.CPP 1: //STUDENT.CPP 2: //Định nghĩa hàm thành viên cho lớp SinhVien 3: #include "student.h" 4: 5: SinhVien::SinhVien(char *HT,float DTB):Nguoi(HT) 6: { 7: DiemTB=DTB; 8: } 9: 10: int SinhVien::DuocKhenThuong() const 11: { 12: return DiemTB>9.0; Trang 215 13: } 14: 15: void SinhVien::Xuat() const 16: { 17: cout

Ngày đăng: 11/08/2022, 11:11

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

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

Tài liệu liên quan