Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 269 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
269
Dung lượng
2,99 MB
Nội dung
IT T BÀI GIẢNG P NGƠN NGỮ LẬP TRÌNH C++ Biên soạn: TS Nguyễn Mạnh Hùng Hiệu chỉnh: Th.S Nguyễn Mạnh Sơn IT T P GIỚI THIỆU C++ ngôn ngữ lập trình hướng đối tượng mở rộng từ ngơn ngữ C Do vậy, C++ có ưu điểm ngơn ngữ C uyển chuyển, tương thích với thiết bị phần cứng đồng thời lập trình hướng đối tượng Hiện nay, C++ ngôn ngữ lập trình phổ biến, hầu hết trường đại học chọn làm giáo trình giảng dạy kỹ thuật lập trình lẫn lập trình hướng đối tượng Đặc biệt trường kỹ thuật Tài liệu đời nhằm giới thiệu C++ ngôn ngữ lập trình, mà cịn có tham vọng trình bày phương pháp lập trình hướng đối tượng với C++ Nội dung tài liệu bao gồm hai phần chính: Phần thứ lập trình nâng cao với C++, bao gồm lập trình C++ với trỏ mảng, với kiểu liệu có cấu trúc, với thao tác vào tệp Phần thứ hai lập trình hướng đối tượng với C++, bao gồm định nghĩa thao tác lớp đối tượng, tính kế thừa tương ứng bội C++, cách sử dụng số lớp thư viện C++ IT Nội dung tài liệu tổ chức thành chương: T Chương 1: Giới thiệu tổng quan khác phương pháp lập trình Trình bày phương pháp lập trình tuyến tính, lập trình cấu trúc đặc biệt, làm quen với khái niệm lập trình hướng đối tượng P Chương 2: Con trỏ mảng Trình bày cách khai báo sử dụng kiểu trỏ mảng ngôn ngữ C++ Chương 3: Kiểu liệu có cấu trúc Trình bày cách biểu diễn cài đặt số kiểu cấu trúc liệu trừu tượng C++ Sau đó, trình bày cách áp dụng kiểu liệu ứng dụng cụ thể Chương 4: Vào tệp Trình bày thao tác đọc, ghi liệu tệp tin khác nhau: tệp tin văn tệp tin nhị phân Trình bày cách truy nhập tệp tin trực tiếp Chương 5: Lớp đối tượng Trình bày khái niệm mở đầu cho lập trình hướng đối tượng C++, bao gồm cách khai báo sử dụng lớp, thuộc tính lớp; cách khởi tạo huỷ bỏ đối tượng, quy tắc truy nhập đến thành phần lớp Chương 6: Tính kế thừa tương ứng bội Trình bày cách thức kế thừa lớp C++, nguyên tắc truy nhập kế thừa, định nghĩa nạp chồng phương thức tính đa hình lập trình hướng đối tương với C++ Chương 7: Một số lớp quan trọng Trình bày cách sử dụng số lớp có sẵn thư viện chuẩn C++, bao gồm lớp làm vật chứa: lớp tập hợp, lớp chuỗi, lớp ngăn xếp, lớp hàng đợi lớp danh sách liên kết Chương 8: Thư viện STL áp dụng Trình bày thư viện STL C++, lớp chính, hàm cách sử dụng Trong chương cịn có số tập áp dụng mà sử dụng STL có hiệu lập trình tốt Để đọc sách này, yêu cầu độc giả phải có kỹ quen biết khái niệm lập trình, biết lập trình ngơn ngữ C C++ Cuốn sách dùng tham khảo cho độc giả muốn tìm hiểu kỹ thuật lập trình nâng cao lập trình hướng đối tượng C++ Cuốn sách có kèm theo đĩa chương trình, chứa tồn chương trình lấy làm minh hoạ tập sách P T IT Mặc dù tác giả có nhiều cố gắng việc biên soạn tài liệu này, song tránh khỏi thiếu sót Rất mong nhận phản hồi từ sinh viên bạn đồng nghiệp CHƯƠNG GIỚI THIỆU VỀ CÁC PHƯƠNG PHÁP LẬP TRÌNH Nội dung chương tập trung trình bày phương pháp lập trình: Phương pháp lập trình tuyến tính Phương pháp lập trình hướng cấu trúc Phương pháp lập trình hướng đối tượng 1.1 LẬP TRÌNH TUYẾN TÍNH Đặc trưng lập trình tuyến tính tư theo lối Chương trình thực từ đầu đến cuối, lệnh lệnh kết thúc chương trình Đặc trưng IT Lập trình tuyến tính có hai đặc trưng: Đơn giản: chương trình tiến hành đơn giản theo lối tuần tự, không phức tạp Đơn luồng: có luồng cơng việc nhất, cơng việc thực luồng Tính chất T Ưu điểm: Do tính đơn giản, lập trình tuyến tính có ưu điểm chương trình đơn giản, dễ hiểu Lập trình tuyến tính ứng dụng cho chương trình đơn giản Nhược điểm: Với ứng dụng phức tạp, người ta dùng lập trình tuyến tính để giải P Ngày nay, lập trình tuyến tính tồn phạm vi modul nhỏ phương pháp lập trình khác Ví dụ chương trình lập trình cấu trúc, lệnh thực theo từ đầu đến cuối chương trình 1.2 LẬP TRÌNH HƯỚNG CẤU TRÚC 1.2.1 Đặc trưng lập trình hướng cấu trúc Trong lập trình hướng cấu trúc, chương trình chia nhỏ thành chương trình chương trình thực cơng việc xác định Chương trình gọi đến chương trình theo giải thuật, cấu trúc xác định chương trình Các ngơn ngữ lập trình cấu trúc phổ biến Pascal, C C++ Riêng C++ ngồi việc có đặc trưng lập trình cấu trúc kế thừa từ C, cịn có đặc trưng lập trình hướng đối tượng Cho nên C++ cịn gọi ngơn ngữ lập trình nửa cấu trúc, nửa hướng đối tượng Đặc trưng Đặc trưng lập trình cấu trúc thể mối quan hệ: Chương trình = Cấu trúc liệu + Giải thuật Trong đó: Cấu trúc liệu cách tổ chức liệu, cách mơ tả tốn dạng ngơn ngữ lập trình Giải thuật quy trình để thực cơng việc xác định Trong chương trình, giải thuật có quan hệ phụ thuộc vào cấu trúc liệu: Một cấu trúc liệu phù hợp với số hạn chế giải thuật Nếu thay đổi cấu trúc liệu phải thay đổi giải thuật cho phù hợp Một giải thuật thường phải kèm với cấu trúc liệu định Tính chất Mỗi chương trình gọi thực nhiều lần chương trình Các chương trình gọi đến để thực theo thứ tự bất kì, tuỳ thuộc vào giải thuật chương trình mà khơng phụ thuộc vào thứ tự khai báo chương trình Các ngơn ngữ lập trình cấu trúc cung cấp số cấu trúc lệnh điều khiển chương trình Ưu điểm T IT Chương trình sáng sủa, dễ hiểu, dễ theo dõi Tư giải thuật rõ ràng Nhược điểm P Lập trình cấu trúc không hỗ trợ việc sử dụng lại mã nguồn: Giải thuật phụ thuộc chặt chẽ vào cấu trúc liệu, đó, thay đổi cấu trúc liệu, phải thay đổi giải thuật, nghĩa phải viết lại chương trình Khơng phù hợp với phần mềm lớn: tư cấu trúc với giải thuật phù hợp với toán nhỏ, nằm phạm vi modul chương trình Với dự án phần mềm lớn, lập trình cấu trúc tỏ khơng hiệu việc giải mối quan hệ vĩ mô modul phần mềm Vấn đề Vấn đề lập trình cấu trúc cách để phân chia chương trình thành chương trình cho phù hợp với yêu cầu, chức mục đích tốn Thơng thường, để phân rã tốn lập trình cấu trúc, người ta sử dụng phương pháp thiết kế xuống (top-down) 1.2.2 Phương pháp thiết kế xuống (top-down) Phương pháp thiết kế top-down tiếp cận toán theo hướng từ xuống dưới, từ tổng quan đến chi tiết Theo đó, tốn chia thành toán nhỏ Mỗi toán lại chia nhỏ tiếp, có thể, thành tốn nhỏ Q trình cịn gọi trình làm mịn dần Quá trình làm mịn dần dừng lại toán không cần chia nhỏ thêm Nghĩa tốn giải chương trình với giải thuật đơn giản Ví dụ, sử dụng phương pháp top-down để giải tốn xây nhà Khi đó, ta phân rã tốn theo bước sau: Ở mức thứ nhất, chia toán xây nhà thành tốn nhỏ như: làm móng, đổ cột, đổ trần, xây tường, lợp mái Ở mức thứ hai, phân rã công việc mức thứ nhất: việc làm móng nhà phân rã tiếp thành cơng việc: đào móng, gia cố nền, làm khung sắt, đổ bê tông Công việc đổ cột phần rã thành … Ở mức thứ ba, phân rã công việc mức thứ hai: việc đào móng phân chia tiếp thành cơng việc: đo đạc, cắm mốc, dây, đào kiểm tra móng Việc gia cố phân rã thành … IT Q trình phân rã dừng mức này, cơng việc thu là: đo đạc, cắm mốc, dây, đào… thực ngay, không cần chia nhỏ thêm Cùng sử dụng phương pháp top-down với tốn, cho nhiều kết khác Nguyên nhân khác tiêu chí để phân rã tốn thành tốn P T Lưu ý: Ví dụ, áp dụng phương pháp top-down để giải toán xây nhà, sử dụng cách khác để phân chia tốn, ta thu kết khác biệt so với phương pháp ban đầu: Ở mức thứ nhất, chia toán xây nhà thành toán nhỏ như: làm phần gỗ, làm phần sắt, làm phần bê tông làm phần gạch Ở mức thứ hai, phân rã công việc mức thứ nhất: việc làm gỗ chia thành công việc như: xẻ gỗ, gia công gỗ, tạo khung, lắp vào nhà Việc làm sắt chia nhỏ thành… Rõ ràng, với cách làm mịn này, ta thu kết khác hẳn với cách thức thực phần 1.3 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 1.3.1 Lập trình hướng đối tượng Trong lập trình hướng đối tượng: Người ta coi thực thể chương trình đối tượng sau đó, người ta trừu tượng hố đối tượng thành lớp đối tượng Dữ liệu tổ chức thành thuộc tính lớp Nguời ta ngăn chặn việc thay đổi tuỳ tiện liệu chương trình cách giới hạn truy nhập, cho phép truy nhập liệu thông qua đối tượng, thông qua phương thức mà đối tượng cung cấp Quan hệ đối tượng quan hệ ngang hàng quan hệ kế thừa: Nếu lớp B kế thừa từ lớp A A gọi lớp sở B gọi lớp dẫn xuất Ngơn ngữ lập trình hướng đối tượng phổ biến Java C++ Tuy nhiên, C++ có đặc trưng lập trình hướng đối tượng khơng phải ngơn ngữ lập trình hướng đối tượng Đặc trưng Lập trình hướng đối tượng có hai đặc trưng bản: Đóng gói liệu: liệu ln tổ chức thành thuộc tính lớp đối tượng Việc truy nhập đến liệu phải thông qua phương thức đối tượng lớp Sử dụng lại mã nguồn: việc sử dụng lại mã nguồn thể thông qua chế kế thừa Cơ chế cho phép lớp đối tượng kế thừa từ lớp đối tượng khác Khi đó, lớp dẫn xuất, sử dụng phương thức (mã nguồn) lớp sở mà không cần phải định nghĩa lại IT T Ưu điểm Lập trình hướng đối tượng có số ưu điểm bật: Khơng cịn nguy liệu bị thay đổi tự chương trình Vì liệu đóng gói vào đối tượng Nếu muốn truy nhập vào liệu phải thông qua phương thức cho phép đối tượng Khi thay đổi cấu trúc liệu đối tượng, không cần thay đổi mã nguồn đối tượng khác, mà cần thay đổi số thành phần đối tượng dẫn xuất Điều hạn chế ảnh hưởng xấu việc thay đổi liệu đến đối tượng khác chương trình Có thể sử dụng lại mã nguồn, tiết kiệm tài ngun, chi phí thời gian Vì nguyên tắc kế thừa cho phép lớp dẫn xuất sử dụng phương thức từ lớp sở phương thức nó, mà khơng cần thiết phải định nghĩa lại Phù hợp với dự án phần mềm lớn, phức tạp P 1.3.2 Một số khái niệm Trong mục này, làm quen với số khái niệm lập trình hướng đối tượng Bao gồm: Khái niệm đối tượng (object) Khái niệm đóng gói liệu (encapsulation) Khái niệm kế thừa (inheritance) Khái niệm đa hình (polymorphism) Đối tượng (Object) Trong lập trình hướng đối tượng, đối tượng coi đơn vị nhỏ Các diệu cách xử lí thành phần đối tượng mà không coi thực thể Một đối tượng chứa liệu riêng nó, đồng thời có phương thức (hành động) thao tác liệu đó: Đối tượng = liệu + phương thức Lớp (Class) Khi có nhiều đối tượng giống mặt liệu phương thức, chúng nhóm lại với gọi chung lớp: Lớp trừu tượng hoá đối tượng Đối tượng thể lớp Đóng gói liệu (Encapsulation) IT Các liệu đóng gói vào đối tượng Mỗi liệu có phạm vi truy nhập riêng Không thể truy nhập đến liệu cách tự lập trình cấu trúc Muốn truy nhập đến liệu, phải thông qua đối tượng, nghĩa phải sử dụng phương thức mà đối tượng cung cấp truy nhập đến liệu đối tượng P T Tuy nhiên, C++ ngơn ngữ lập trình nửa đối tượng, C++ cho phép định nghĩa biến liệu hàm tự do, kết kế thừa từ ngôn ngữ C, ngơn ngữ lập trình cấu trúc Kế thừa (Inheritance) Tính kế thừa lập trình hướng đối tượng cho phép lớp kế thừa từ số lớp tồn Khi đó, lớp sử dụng liệu phương thức lớp sở Ngồi ra, lớp dẫn xuất cịn bổ sung thêm số liệu phương thức Ưu điểm kế thừa thay đổi liệu lớp, cần thay đổi phương thức phạm vi lớpởc sở, mà không cần thay đổi lớp dẫn xuất Đa hình (Polymorphsim) Đa hình khái niệm ln kèm với kế thừa Do tính kế thừa, lớp sử dụng lại phương thức lớp khác Tuy nhiên, cần thiết, lớp dẫn xuất định nghĩa lại số phương thức lớp sở Đó nạp chồng phương thức kế thừa Nhờ nạp chồng phương thức này, ta cần gọi tên phương thức bị nạp chồng từ đối tượng mà khơng cần quan tâm đối tượng lớp Chương trình tự động kiểm tra xem đối tượng thuộc kiểu lớpởc sở hay thuộc lớp dẫn xuất, sau gọi phương thức tương ứng với lớp Đó tính đa hình 1.3.3 Lập trình hướng đối tượng C++ Vì C++ ngơn ngữ lập trình mở rộng từ ngơn ngữ lập trình cấu trúc C Cho nên, C++ xem ngơn ngữ lập trình nửa hướng đối tượng, nửa hướng cấu trúc Những đặc trưng hướng đối tượng C++ Cho phép định nghĩa lớp đối tượng Cho phép đóng gói liệu vào lớp đối tượng Cho phép định nghĩa phạm vi truy nhập liệu lớp từ khoá phạm vi: public, protected, private Cho phép kế thừa lớp với kiểu kế thừa khác tuỳ vào từ khoá dẫn xuất Cho phép lớp dẫn xuất sử dụng phương thức lớp sở (trong phạm vi quy định) Cho phép định nghĩa chồng phương thức lớp dẫn xuất Những hạn chế hướng đối tượng C++ IT Những hạn chế C++ phát triển từ ngôn ngữ lập trình cấu trúc C Cho phép định nghĩa sử dụng biến liệu tự Cho phép định nghĩa sử dụng hàm tự Ngay liệu đóng gói vào lớp, liệu truy nhập trực tiếp liệu tự hàm bạn, lớp bạn (friend) C++ P T TỔNG KẾT CHƯƠNG Chương trình bày tổng quan phương pháp lập trình Nội dung tập trung vào ba phương pháp lập trình có liên quan trực tiếp đến ngơn ngữ lập trình C++: Lập trình tuyến tính Lập trình hướng cấu trúc Lập trình hướng đối tượng C++ ngơn ngữ lập trình mở rộng từ ngơn ngữ lập trình cấu trúc C Do đó, C++ vừa có đặc trưng lập trình cấu trúc, vừa có đặc trưng lập trình hướng đối tượng 10 cin >> function; switch(function){ case ‘1’: // Thêm vào Car car = new Car(); cout mark; car.setMark(mark); float price; cout > price; IT car.setPrice(price); mySet.insert(car); break; case ‘2’: // Loại T Set::iterator index; cout > index; if(index >= mySet.begin())&&(index < mySet.end()) mySet.erase(mySet[index]); break; case ‘3’: // Duyệt cout