Tổng quan về giáo trình
Giáo trình Ngôn ngữ lập trình C++ do PGS. Trần Đình Quế và KS. Nguyễn Mạnh Hùng biên soạn, được Học viện Công nghệ Bưu chính Viễn thông xuất bản năm 2006. Tài liệu được thiết kế chuyên biệt phục vụ cho sinh viên hệ đào tạo đại học từ xa, đồng thời được sử dụng làm tài liệu học tập trong chương trình đào tạo kỹ sư và cử nhân ngành Công nghệ thông tin và Điện tử viễn thông.
Về vị trí môn học, giáo trình đóng vai trò là học phần bản lề trong khối kiến thức cơ sở ngành. Môn học kết nối giữa học phần nhập môn lập trình cơ bản (sử dụng ngôn ngữ C) với các môn học chuyên sâu về sau như Cấu trúc dữ liệu và giải thuật, Thiết kế hướng đối tượng và Phát triển phần mềm ứng dụng.
Mục tiêu học tập của giáo trình tập trung vào hai kết quả đầu ra chính:
- Nắm vững các kỹ thuật lập trình nâng cao trong C++, bao gồm cơ chế quản lý bộ nhớ động, con trỏ hàm, dữ liệu cấu trúc và thao tác vào ra tệp tin.
- Hiểu rõ bản chất và áp dụng thuần thục tư tưởng của phương pháp lập trình hướng đối tượng (OOP) thông qua các cơ chế đóng gói, kế thừa và tương ứng bội (đa hình).
Về cấu trúc và cách tiếp cận, nội dung tài liệu được chia làm hai phần rõ rệt gồm 7 chương:
- Phần thứ nhất (Chương 1 đến Chương 4): Kỹ thuật lập trình nâng cao với C++.
- Phần thứ hai (Chương 5 đến Chương 7): Lập trình hướng đối tượng và khai thác thư viện chuẩn.
Điểm đặc sắc của giáo trình là sự phân định rõ ràng giữa đặc tính lập trình cấu trúc và lập trình hướng đối tượng trong cùng một ngôn ngữ C++. Tài liệu diễn giải chi tiết bản chất ô nhớ, quy trình cấp phát - giải phóng bộ nhớ heap và cung cấp mã nguồn minh họa chi tiết kèm đĩa chương trình phục vụ việc tự học.
Nội dung kiến thức cốt lõi
GIÁO TRÌNH C++ (7 CHƯƠNG)
PHẦN 1: LẬP TRÌNH NÂNG CAO (CHƯƠNG 1 - 4) PHẦN 2: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG (CHƯƠNG 5 - 7)
• C1: Tổng quan 3 phương pháp lập trình • C5: Lớp đối tượng & Đóng gói dữ liệu
• C2: Con trỏ, Mảng & Cấp phát động • C6: Tính kế thừa & Tương ứng bội (Đa hình)
• C3: Kiểu struct & Kiểu trừu tượng • C7: Các lớp trong thư viện chuẩn C++
• C4: Vào ra dữ liệu trên tệp tin
Các chương và chủ đề chính
-
Chương 1: Giới thiệu tổng quan về các phương pháp lập trình
Trình bày lịch sử tiến hóa của ba mô hình lập trình: lập trình tuyến tính (tuần tự, đơn luồng), lập trình cấu trúc (dựa trên nguyên lý Chương trình = Cấu trúc dữ liệu + Giải thuật, phương pháp thiết kế từ trên xuống Top-down và quá trình làm mịn dần) và lập trình hướng đối tượng. Tác giả chỉ rõ C++ là ngôn ngữ "nửa cấu trúc, nửa hướng đối tượng" do kế thừa các đặc tính từ C (như hàm tự do, biến tự do, hàm bạn/lớp bạn).
-
Chương 2: Con trỏ và mảng
Đi sâu vào bản chất địa chỉ và ô nhớ. Nội dung bao gồm: cú pháp khai báo con trỏ, toán tử địa chỉ & và toán tử lấy giá trị *; mối quan hệ giữa con trỏ và mảng một chiều (tên mảng là một con trỏ hằng); mảng nhiều chiều (int (*A)[3], int **A); con trỏ hàm (<Kiểu> (*<Tên>)(<Tham số>)); cơ chế cấp phát và giải phóng bộ nhớ động bằng toán tử new, delete, new[] và delete[].
-
Chương 3: Kiểu dữ liệu có cấu trúc
Trình bày cú pháp định nghĩa struct, cấu trúc lồng nhau, kỹ thuật sử dụng từ khóa typedef, con trỏ cấu trúc (truy cập qua toán tử mũi tên ->), và mảng cấu trúc. Điểm trọng tâm là việc ứng dụng con trỏ và cấp phát động để cài đặt các kiểu dữ liệu trừu tượng (ADT): Ngăn xếp (Stack với thao tác push/pop), Hàng đợi (Queue với thao tác insert/delete), và Danh sách liên kết (List).
-
Chương 4: Vào ra trên tệp
Hướng dẫn các thao tác mở, đóng, đọc và ghi dữ liệu trên hai định dạng tệp: tệp tin văn bản (text file) và tệp tin nhị phân (binary file), cùng phương pháp truy nhập tệp trực tiếp.
-
Chương 5: Lớp đối tượng
Giới thiệu các khái niệm nền tảng của OOP: khái niệm lớp (class) và đối tượng (object); nguyên lý đóng gói dữ liệu (encapsulation); các chỉ định phạm vi truy nhập private, protected, public; quy tắc khởi tạo thông qua hàm thiết lập (constructor) và hủy bỏ đối tượng qua hàm hủy (destructor).
-
Chương 6: Tính kế thừa và tương ứng bội
Trình bày cơ chế kế thừa đơn và đa kế thừa trong C++; quy tắc điều khiển truy nhập giữa lớp cơ sở (base class) và lớp dẫn xuất (derived class); kỹ thuật nạp chồng phương thức (method overloading), nạp chồng toán tử (operator overloading) và tính đa hình (polymorphism).
-
Chương 7: Một số lớp quan trọng
Khảo sát và hướng dẫn áp dụng các lớp dữ liệu dựng sẵn trong thư viện chuẩn của C++, bao gồm: lớp chuỗi (string), lớp tập hợp (set), lớp ngăn xếp (stack), lớp hàng đợi (queue) và lớp danh sách liên kết (list).
-
Progression logic (Logic phát triển nội dung):
Giáo trình đi từ nhận thức phương pháp luận (Chương 1) $\rightarrow$ Kiểm soát tài nguyên bộ nhớ và cấu trúc dữ liệu nền tảng ở tầng hệ thống (Chương 2, 3, 4) $\rightarrow$ Trừu tượng hóa mô hình thực thể bằng hướng đối tượng (Chương 5, 6) $\rightarrow$ Chuẩn hóa kỹ năng thông qua thư viện chuẩn C++ (Chương 7).
Kiến thức nền tảng được xây dựng
- Lý thuyết quản lý bộ nhớ: Phân biệt rõ vùng nhớ tĩnh, vùng nhớ tự động và vùng nhớ động (heap). Hiểu cơ chế hoạt động của địa chỉ con trỏ, phân biệt giữa phép dịch chuyển con trỏ (
pa++) và phép tăng giá trị phần tử (*pa++).
- Mối quan hệ dữ liệu - thuật toán: Minh định nguyên lý phụ thuộc giữa cấu trúc dữ liệu và giải thuật; phương pháp phân rã bài toán phức tạp thành các bài toán con qua mô hình Top-down.
- Mô hình lập trình hướng đối tượng: Nắm vững cấu trúc
Đối tượng = Dữ liệu + Phương thức, cơ chế bảo vệ dữ liệu nội tại và tái sử dụng mã nguồn thông qua kế thừa.
Kỹ năng phát triển
- Kỹ năng kỹ thuật (Technical skills): Cú pháp C++; quản lý bộ nhớ động tường minh, tránh lỗi rò rỉ bộ nhớ (memory leak); lập trình thao tác với tệp nhị phân/văn bản; tự cài đặt các cấu trúc dữ liệu ngăn xếp, hàng đợi động.
- Kỹ năng phân tích (Analytical skills): Phân tích và lựa chọn cấu trúc dữ liệu phù hợp với bài toán; trừu tượng hóa các thực thể đời thực thành các lớp đối tượng và sơ đồ kế thừa trong phần mềm.
- Kỹ năng thực hành (Practical competencies): Viết chương trình xử lý đa thức, cộng/nhân ma trận động kích thước $m \times n$, quản lý danh sách nhân viên (
Employee) và xử lý chuỗi ký tự bằng cấu trúc dữ liệu trừu tượng.
Phương pháp giảng dạy và học tập
[1. LÝ THUYẾT NỀN TẢNG] [2. CHƯƠNG TRÌNH MẪU] [3. TỰ LƯỢNG GIÁ]
- Khái niệm & Cú pháp - Minh họa từng dòng code - Trắc nghiệm cú pháp
- Sơ đồ biến & Ô nhớ - Kết quả biên dịch thực tế - Bài tập lập trình lớn
Phương pháp tiếp cận sư phạm
Giáo trình áp dụng phương pháp sư phạm tiếp cận theo từng bước (step-by-step), phù hợp cho mô hình đào tạo từ xa và tự học. Mỗi chương đều tuân thủ cấu trúc chuẩn mực:
- Đặt vấn đề và mục tiêu lý thuyết.
- Cung cấp cú pháp tường minh kèm các lưu ý về lỗi thường gặp.
- Cung cấp chương trình mẫu hoàn chỉnh có thể biên dịch trực tiếp.
- Tổng kết nội dung chương.
- Hệ thống câu hỏi trắc nghiệm và bài tập thực hành.
Bài tập và bài toán tình huống
Các bài tập tình huống trong giáo trình được xây dựng gắn liền với thực tế kỹ thuật và nghiệp vụ quản lý:
- Mô phỏng bài toán xây nhà: Dùng để giải thích trực quan phương pháp thiết kế cấu trúc từ trên xuống (Top-down) qua 3 cấp độ phân rã công việc.
- Quản lý nhân sự: Cài đặt cấu trúc
Employee lồng cấu trúc Date (ngày, tháng, năm sinh), thực hiện nhập xuất, tìm kiếm nhân viên có mức lương cao nhất (searchSalaryMax) và thấp nhất (searchSalaryMin).
- Cấu trúc dữ liệu: Bài toán đảo ngược chuỗi ký tự bằng cách áp dụng cấu trúc dữ liệu ngăn xếp (
Stack) tự cài đặt.
- Toán học ứng dụng: Xây dựng chương trình cộng ma trận động hai chiều $m \times n$ và chương trình tính toán các phép tính trên đa thức bằng mảng động.
Hướng dẫn tự học và phương pháp đánh giá
- Đánh giá kiến thức: Hệ thống câu hỏi trắc nghiệm ở cuối mỗi chương (ví dụ 13 câu hỏi trắc nghiệm kiểm tra chi tiết về con trỏ, phép gán địa chỉ, con trỏ hàm tại Chương 2) giúp sinh viên tự đánh giá mức độ hiểu sâu về mặt cú pháp và cơ chế thực thi của chương trình.
- Đánh giá kỹ năng lập trình: Các bài tập tự luận yêu cầu sinh viên tự viết mã nguồn hoàn chỉnh cho các thuật toán ma trận và đa thức, rèn luyện tư duy lập trình độc lập.
Điểm nổi bật và tính học thuật
- Làm rõ tính chất lai (hybrid) của C++: Giáo trình chỉ ra sự khác biệt giữa C++ và các ngôn ngữ thuần hướng đối tượng (như Java). Tài liệu phân tích rõ những điểm C++ kế thừa từ C khiến nó không thuần hướng đối tượng, chẳng hạn như cho phép khai báo biến tự do, hàm tự do và cơ chế hàm bạn/lớp bạn (
friend) có thể phá vỡ tính bao đóng.
- Trực quan hóa cấu trúc bộ nhớ: Tác giả sử dụng các bảng sơ đồ minh họa địa chỉ ô nhớ và giá trị biến qua từng dòng lệnh (ví dụ sơ đồ phân bổ con trỏ
px, py trỏ vào biến x trong Chương 2), giúp người học hình dung chính xác cách con trỏ thao tác trên ô nhớ.
- Tiến trình phát triển từ tĩnh sang động: Khi trình bày về Stack và Queue, giáo trình đưa ra định nghĩa mảng tĩnh (
SIZE 100) trước, chỉ ra nhược điểm lãng phí hoặc tràn bộ nhớ, sau đó hướng dẫn cải tiến sang cấu trúc động dùng int *nodes, rèn luyện tư duy tối ưu hóa tài nguyên phần mềm.
Đối tượng sử dụng giáo trình
- Sinh viên đại học: Giáo trình được biên soạn chuyên biệt cho sinh viên hệ đào tạo đại học từ xa của Học viện Công nghệ Bưu chính Viễn thông. Đồng thời, tài liệu hoàn toàn phù hợp với sinh viên năm thứ nhất và năm thứ hai các ngành Công nghệ thông tin, Kỹ thuật phần mềm, Hệ thống thông tin và Điện tử viễn thông tại các trường đại học kỹ thuật.
- Yêu cầu tiên quyết: Người học cần có kiến thức cơ bản về nhập môn tin học, hiểu các khái niệm thuật toán căn bản và có kỹ năng lập trình cơ sở với ngôn ngữ C hoặc C++ (cú pháp rẽ nhánh
if/else, vòng lặp for, while, hàm cơ bản).
- Giảng viên: Sử dụng làm tài liệu giảng dạy, xây dựng khung đề cương chi tiết cho môn học Ngôn ngữ lập trình C++, thiết kế ngân hàng câu hỏi trắc nghiệm và đề bài thực hành phòng máy.
- Tự học và tham khảo: Phù hợp cho lập trình viên muốn củng cố lại bản chất quản lý bộ nhớ ở tầng thấp, con trỏ hàm và các kỹ thuật hướng đối tượng nền tảng trong C++.
Câu hỏi thường gặp
1. Giáo trình này phù hợp nhất với những ai?
Giáo trình được thiết kế cho sinh viên hệ đại học từ xa và chính quy chuyên ngành Công nghệ thông tin, Điện tử viễn thông cần hoàn thành học phần Ngôn ngữ lập trình C++ hoặc muốn học nâng cao về lập trình hướng đối tượng.
2. Cần chuẩn bị kiến thức nền tảng nào trước khi học?
Người học cần nắm được các khái niệm lập trình căn bản (biến, kiểu dữ liệu nguyên thủy, cấu trúc điều khiển rẽ nhánh, vòng lặp) và đã từng tiếp xúc với cú pháp cơ bản của ngôn ngữ C hoặc C++.
3. Điểm khác biệt của giáo trình này so với các tài liệu C++ khác là gì?
Tài liệu phân định rành mạch giữa kỹ thuật lập trình cấu trúc nâng cao (xử lý con trỏ mảng, cấp phát heap, tệp) và kỹ thuật lập trình hướng đối tượng (class, kế thừa, đa hình), đồng thời trực quan hóa sự dịch chuyển ô nhớ một cách chi tiết.
4. Làm thế nào để tự học giáo trình này đạt hiệu quả cao?
Người học nên đọc kỹ lý thuyết, tự gõ lại và dịch thử các chương trình mẫu trong từng chương, sau đó tự làm toàn bộ câu hỏi trắc nghiệm và bài tập lập trình ở cuối chương trước khi đối chiếu kết quả.
5. Có tài liệu và tài nguyên bổ trợ nào đi kèm giáo trình không?
Giáo trình đi kèm một đĩa chương trình (CD-ROM) chứa toàn bộ các tập tin mã nguồn minh họa trong sách và mã nguồn chương trình cho các bài tập thực hành.
Kết luận
Giáo trình Ngôn ngữ lập trình C++ của PGS. Trần Đình Quế và KS. Nguyễn Mạnh Hùng là một tài liệu học thuật có cấu trúc sư phạm hoàn chỉnh, nội dung phân tầng chặt chẽ từ quản lý ô nhớ tầng thấp đến tư duy trừu tượng hóa hướng đối tượng mức cao.
Lộ trình học tập khuyến nghị:
$$\text{Chương 1 (Phương pháp luận)} \longrightarrow \text{Chương 2, 3, 4 (Kỹ thuật bộ nhớ & Dữ liệu)} \longrightarrow \text{Chương 5, 6 (Lập trình hướng đối tượng)} \longrightarrow \text{Chương 7 (Thư viện chuẩn)}$$
Người học nên kết hợp nghiên cứu lý thuyết trong văn bản với việc chạy thực nghiệm các mã nguồn mẫu có sẵn trong đĩa chương trình đính kèm trên các trình biên dịch C++ chuẩn để đạt hiệu quả học tập cao nhất.