Tổng quan về giáo trình
Giáo trình Lập trình C++ (tên ấn phẩm đầy đủ: Giáo trình C++ & Lập trình hướng đối tượng) do GS. Phạm Văn Ất chủ biên cùng tác giả Lê Trường Thông biên soạn, được xuất bản bởi Nhà xuất bản Bách Khoa Hà Nội. Trong khung chương trình đào tạo bậc đại học và cao đẳng khối ngành Công nghệ thông tin, Khoa học máy tính và Kỹ thuật, giáo trình giữ vai trò là tài liệu giảng dạy cho học phần Lập trình hướng đối tượng (Object-Oriented Programming - OOP) và ngôn ngữ lập trình C++. Môn học này đóng vai trò bản lề, tạo bước chuyển tiếp cho người học từ phương pháp lập trình cấu trúc sang phương pháp lập trình hướng đối tượng.
Mục tiêu học tập của giáo trình hướng đến việc trang bị cho sinh viên hệ thống khái niệm chuẩn xác về mô hình hướng đối tượng, bao gồm: đóng gói dữ liệu và phương thức trong lớp (class), khởi tạo và quản lý đối tượng (object), cơ chế thừa kế (inheritance), tính tương ứng bội (polymorphism) và phương thức ảo (virtual function). Đồng thời, giáo trình rèn luyện kỹ năng cài đặt chương trình bằng ngôn ngữ C++ thông qua các công cụ mở rộng như biến tham chiếu, hàm trực tuyến (inline), định nghĩa chồng hàm và toán tử, cấp phát bộ nhớ động và luồng nhập/xuất độc lập thiết bị.
Giáo trình được cấu trúc thành 13 chương chính và 5 phụ lục chuyên đề, kèm theo gần 100 chương trình minh họa có mã nguồn hoàn chỉnh. Cách tiếp cận của tài liệu là phân tích C++ dưới góc độ một "ngôn ngữ lai" (hybrid language), cho phép kết hợp linh hoạt giữa hàm (lập trình cấu trúc) và lớp (lập trình hướng đối tượng). Điểm đặc sắc về mặt học thuật của giáo trình là sự đối sánh trực tiếp giữa C và C++, chỉ rõ nguyên nhân kỹ thuật dẫn đến sự thay đổi cú pháp, giúp người học hiểu rõ bản chất vận hành ở tầng biên dịch và bộ nhớ máy tính.
Nội dung kiến thức cốt lõi
Các chương/chủ đề chính
Cấu trúc nội dung 13 chương và 5 phụ lục được sắp xếp theo logic lũy tiến từ cú pháp cơ bản đến cấu trúc hướng đối tượng nâng cao:
- Chương mở đầu: Giới thiệu môi trường viết mã nguồn Code::Blocks (phiên bản 13.12) chạy trên hệ điều hành Windows 7, Windows 8 để thay thế môi trường truyền thống Turbo C++ 3.0; tóm lược lịch sử phát triển của ngôn ngữ C (Dennis Ritchie, 1973, Bell Labs) và C++ (Bjarne Stroustrup, 1980 với tên "C có lớp", 1983 chính thức mang tên C++).
- Chương 1 (C++ và Lập trình hướng đối tượng): Trình bày sự mở rộng của C++ so với C: cách khai báo nguyên mẫu hàm bắt buộc qua lệnh
#include, ghi chú đơn dòng (//), khai báo biến linh hoạt trong thân hàm, cú pháp ép kiểu dạng hàm kiểu(biểu thức), hằng có kiểu (const), kích thước hằng ký tự sizeof('A'), kỹ thuật lấy địa chỉ mảng thực 2 chiều, luồng vào/ra qua iostream.h (cout, cin, cin.get, cin.ignore), định dạng in với iomanip.h (setw, setprecision, setiosflags), định nghĩa kiểu cấu trúc (struct), kiểu hợp (union có tên và không tên), kiểu liệt kê (enum), cùng cơ chế cấp phát bộ nhớ động (new, delete, con trỏ hàm _new_handler, set_new_handler).
- Chương 2 (Hàm trong C++): Trình bày kỹ thuật xây dựng hàm mở rộng gồm biến tham chiếu (
&), hằng tham chiếu (const &), phương pháp truyền tham số theo tham chiếu, hàm trả về kiểu tham chiếu, đối có giá trị mặc định, hàm trực tuyến (inline), định nghĩa chồng hàm (overloading) và định nghĩa chồng toán tử.
- Chương 3 đến Chương 6: Trình bày các khái niệm cốt lõi của lập trình hướng đối tượng:
- Lớp và đối tượng: Khai báo lớp, biến/mảng đối tượng, phương thức, con trỏ
this, phạm vi truy xuất thành phần (public, private), phương thức toán tử.
- Quản lý vòng đời đối tượng: Hàm tạo (constructor), hàm tạo sao chép (copy constructor), hàm hủy (destructor), toán tử gán, cấp phát động cho đối tượng, hàm bạn (
friend function), lớp bạn (friend class).
- Thừa kế: Khả năng mở rộng phần mềm qua lớp cơ sở (base class) và lớp dẫn xuất (derived class).
- Tương ứng bội và phương thức ảo: Sử dụng phương thức ảo (
virtual) để thiết lập lược đồ xử lý thống nhất cho các đối tượng khác nhau.
- Chương 7 đến Chương 10: Kỹ thuật xử lý tệp dữ liệu (tạo tệp, đọc/ghi tệp bộ nhớ), cấu trúc dòng tin vào/ra (Stream) có tính độc lập thiết bị, các hàm đồ họa (
graphics.h, BGI) để xây dựng đối tượng đồ họa, và các hàm truy xuất trực tiếp bộ nhớ (bộ nhớ màn hình để tạo menu và cửa sổ).
- Chương 11 đến Chương 13: Cung cấp hệ thống các chương trình hướng đối tượng hoàn chỉnh có mức độ phức tạp cao, tích hợp đầy đủ các công cụ của C++.
- 5 Phụ lục: Bảng phép toán và thứ tự ưu tiên; danh sách từ khóa chuẩn C++; bảng mã ASCII và mã quét bàn phím; phương pháp phân tích, thiết kế và lập trình hướng đối tượng tổng quát; chương trình minh họa thuật toán đệ quy quay lui và quy hoạch động kinh điển.
Kiến thức nền tảng được xây dựng
Giáo trình xây dựng ba khối kiến thức nền tảng:
- Lý thuyết hướng đối tượng nền tảng: Cơ chế đóng gói (encapsulation) gom dữ liệu và phương thức xử lý thành một đơn vị thực thể; quan hệ thừa kế (inheritance) phục vụ tái sử dụng và mở rộng mã nguồn; tính đa hình (polymorphism) cho phép thực thi các hành vi tương ứng thông qua phương thức ảo.
- Nguyên lý tổ chức bộ nhớ: Phân biệt biến giá trị, biến con trỏ và biến tham chiếu (bí danh không cấp phát ô nhớ riêng); cơ chế cấp phát động qua toán tử
new/delete; xử lý ngắt và kiểm soát tràn bộ nhớ bằng con trỏ hàm quản lý lỗi _new_handler.
- Mô hình luồng dữ liệu độc lập thiết bị (Stream I/O): Cơ chế trao đổi dữ liệu trung gian giữa bộ nhớ và các dòng nhập/xuất (
cin/cout), tách biệt hoàn toàn thao tác lập trình khỏi đặc tính phần cứng cụ thể.
Kỹ năng phát triển
Thông qua nội dung giáo trình, người học được rèn luyện các nhóm kỹ năng cụ thể:
- Kỹ năng kỹ thuật (Technical skills): Khai báo và cài đặt lớp, viết hàm tạo/hàm hủy, nạp chồng toán tử, sử dụng hàm inline tối ưu tốc độ thực thi, quản lý luồng dữ liệu định dạng (
setw, setprecision), và làm việc trực tiếp với tệp/đồ họa máy tính.
- Kỹ năng phân tích (Analytical skills): Phân tích bài toán thực tế thành các thực thể đối tượng có thuộc tính và phương thức tương ứng (như xây dựng lớp
daydiem, cấu trúc TS quản lý thí sinh, mô hình điểm đồ họa DIEM).
- Kỹ năng thực hành (Practical competencies): Sử dụng thành thạo môi trường Code::Blocks và Turbo C++ 3.0, thực hiện biên dịch (
Build and run, F9), đọc hiểu các thông báo lỗi của trình biên dịch (như Reference variable must be initialized, Cannot modify a const object, Function should have a prototype) và xử lý xung đột bộ đệm bàn phím bằng cin.ignore().
Phương pháp giảng dạy và học tập
Giáo trình áp dụng phương pháp sư phạm tiếp cận so sánh và thực nghiệm logic. Tác giả liên tục đặt cấu trúc cú pháp của C++ cạnh ngôn ngữ lập trình C để làm nổi bật sự tiến hóa: chỉ ra các điểm C++ kế thừa nguyên vẹn từ C, các điểm C++ mở rộng mang tính tiện ích (như khai báo biến tự do, hằng const, ép kiểu float(i)), và các điểm C++ thay đổi hoàn toàn tư duy (khái niệm lớp thay thế cho cấu trúc struct thuần túy).
Hệ thống ví dụ minh họa và bài tập tình huống (case studies) được xây dựng xuyên suốt theo hướng phát triển dần từ đơn giản đến phức tạp:
- Bài toán hình học: Bài toán tìm đoạn thẳng lớn nhất nối 2 điểm trong một tập hợp điểm được giải quyết bằng phương pháp lập trình cấu trúc (dùng 2 mảng toàn cục
x, y và các hàm nhapsl, do_dai), sau đó được tái cấu trúc hoàn toàn sang mô hình hướng đối tượng với class daydiem đóng gói thuộc tính số điểm n, con trỏ tọa độ *x, *y và các phương thức tương ứng.
- Bài toán quản lý dữ liệu: Bài toán xử lý danh sách thí sinh dự thi (cấu trúc
TS gồm họ tên ht, số báo danh sobd, điểm các môn toán, lý, hóa, tổng điểm td) được sử dụng lặp lại để minh họa cho nhiều kỹ thuật khác nhau: định dạng luồng xuất iostream, sắp xếp mảng động cấp phát bằng new, truyền tham số bằng tham chiếu hằng const TS &ts, và hàm trả về kiểu tham chiếu TS &f().
- Bài toán ma trận và tính toán: Nhập xuất ma trận thực $m \times n$, tìm phần tử lớn nhất/nhỏ nhất từng hàng, tính tổng chuỗi phân số $S = \frac{2}{1} + \frac{3}{2} + \dots + \frac{n+1}{n}$, và các hàm tính chu vi/diện tích hình chữ nhật
dtcvhcn.
Phương pháp đánh giá và tự học được thiết lập thông qua việc tự kiểm tra trên mã nguồn. Sinh viên viết mã, biên dịch và đối chiếu trực tiếp với các lỗi biên dịch mẫu được liệt kê trong sách. Tài liệu cung cấp quy trình thao tác chi tiết: khởi động Code::Blocks, tạo tệp mới bằng Ctrl + Shift + N, biên dịch và chạy bằng F9, mở tệp bằng Ctrl + O, giúp người học tự thực hành mà không bắt buộc phải có sự can thiệp trực tiếp của giảng viên.
Điểm nổi bật và cập nhật
Giáo trình sở hữu các cập nhật kỹ thuật phục vụ việc chuyển đổi môi trường học tập hiện đại:
- Tích hợp môi trường Code::Blocks 13.12: Bên cạnh việc duy trì hướng dẫn trên môi trường kinh điển Turbo C++ 3.0 (vốn chạy trong môi trường DOS/màn hình xanh), sách bổ sung toàn bộ hướng dẫn cài đặt và sử dụng IDE mã nguồn mở Code::Blocks phiên bản 13.12. Môi trường này tương thích trực tiếp với các hệ điều hành Windows 7 và Windows 8, có dung lượng nhỏ gọn hơn Microsoft Visual Studio và tích hợp sẵn trình biên dịch GNU GCC.
- Xử lý khác biệt giữa các trình biên dịch: Giáo trình chỉ rõ những điểm khác biệt khi biên dịch mã nguồn giữa Turbo C++ 3.0 và Code::Blocks. Cụ thể, lệnh xóa màn hình
clrscr() trong thư viện conio.h hoạt động trong Turbo C++ nhưng không khả dụng trên Code::Blocks, đồng thời hướng dẫn người học cách chú thích hoặc loại bỏ dòng lệnh này để mã nguồn chạy bình thường.
- Hệ thống mã nguồn số hóa: Gần 100 chương trình hoàn chỉnh trong sách được số hóa và phát hành đồng bộ. Người học có thể tải toàn bộ tệp mã nguồn (.CPP) thông qua website chính thức của Nhà sách Huy Hoàng (
huyhoangbook.vn tại địa chỉ https://www.vn/products/- giao-trinh-c-lap-trinh-huong-doi-tuong) hoặc quét mã QR in trên sách.
- Bổ sung các thuật toán chuyên sâu: Phần phụ lục tích hợp các thuật toán kinh điển như đệ quy quay lui (backtracking) và quy hoạch động (dynamic programming), mở rộng phạm vi ứng dụng của C++ từ cài đặt cấu trúc dữ liệu sang giải quyết các bài toán tối ưu hóa phức tạp.
Đối tượng sử dụng giáo trình
Giáo trình được biên soạn phục vụ các nhóm đối tượng cụ thể trong hệ thống giáo dục đại học và kỹ thuật:
- Sinh viên đại học và cao đẳng: Sinh viên năm thứ nhất hoặc năm thứ hai thuộc các ngành Công nghệ thông tin, Kỹ thuật phần mềm, Hệ thống thông tin, Khoa học máy tính, Điện tử viễn thông, Toán - Tin ứng dụng và Tự động hóa.
- Yêu cầu kiến thức tiên quyết (Prerequisites): Người học bắt buộc phải có kiến thức nền tảng và kỹ năng sử dụng tương đối thành thạo ngôn ngữ lập trình C (hiểu về cấu trúc lệnh, kiểu dữ liệu cơ bản, mảng, con trỏ, hàm và cấu trúc bản ghi
struct).
- Giảng viên các trường kỹ thuật: Sử dụng tài liệu làm khung đề cương chi tiết, giáo trình giảng dạy chính khóa hoặc tài liệu tham khảo cho các môn học: "Lập trình C++", "Lập trình hướng đối tượng", "Kỹ thuật lập trình".
- Kỹ sư và người tự học: Lập trình viên đang làm việc với ngôn ngữ lập trình cấu trúc muốn chuyển dịch tư duy sang lập trình hướng đối tượng, làm nền tảng trước khi tiếp cận các công cụ phát triển phần mềm trên Windows như Visual C++ hoặc Microsoft Access.
Câu hỏi thường gặp
1. Giáo trình này phù hợp với đối tượng người học nào?
Tài liệu được thiết kế cho sinh viên ngành Công nghệ thông tin và Kỹ thuật tại các trường đại học, cao đẳng, cùng các kỹ sư phần mềm cần hệ thống hóa kiến thức về C++ và phương pháp 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 giáo trình này?
Người học bắt buộc phải nắm vững ngôn ngữ lập trình cấu trúc C, bao gồm các cấu trúc điều khiển, kiểu dữ liệu chuẩn, kỹ thuật con trỏ và cách xây dựng hàm, do C++ kế thừa và mở rộng trực tiếp từ cú pháp C.
3. Điểm khác biệt về mặt học thuật của giáo trình so với các tài liệu khác là gì?
Giáo trình phân tích C++ dưới mô hình "ngôn ngữ lai", kết hợp song song giữa hàm và lớp; so sánh chi tiết từng cú pháp giữa C và C++; giải thích cặn kẽ bản chất bộ nhớ của tham chiếu, toán tử new/delete và cung cấp gần 100 chương trình mã nguồn hoàn chỉnh đã được thử nghiệm thực tế.
4. Người học có thể tự học và thực hành trên hệ điều hành Windows hiện đại bằng cách nào?
Người học cài đặt phần mềm Code::Blocks (phiên bản 13.12 hoặc mới hơn) theo chỉ dẫn trong Chương mở đầu, sử dụng phím tắt Ctrl + Shift + N để tạo tệp, F9 để biên dịch/chạy chương trình, và bỏ qua các hàm phụ thuộc môi trường DOS cũ như clrscr().
5. Giáo trình có tài liệu bổ trợ hoặc mã nguồn đi kèm không?
Có. Toàn bộ mã nguồn của các chương trình trong sách được lưu trữ trực tuyến. Độc giả có thể tải tệp mã nguồn hoàn chỉnh qua website huyhoangbook.vn hoặc quét mã QR được in ở phần đầu của giáo trình, đồng thời sử dụng 5 phụ lục tra cứu từ khóa, toán tử và thuật toán nâng cao.
Kết luận
Giáo trình Lập trình C++ của GS. Phạm Văn Ất và Lê Trường Thông cung cấp hệ thống kiến thức hoàn chỉnh về ngôn ngữ C++ và tư tưởng lập trình hướng đối tượng thông qua 13 chương lý thuyết và 5 phụ lục chuyên sâu. Tài liệu thiết lập lộ trình học tập logic từ việc làm quen môi trường IDE (Code::Blocks, Turbo C++ 3.0), tiếp cận các cú pháp mở rộng của C++, làm chủ các kỹ thuật lớp, thừa kế, tương ứng bội, đến xử lý dòng tin và tệp dữ liệu.
Toàn bộ gần 100 mã nguồn minh họa cùng hệ thống bài tập thực hành được cung cấp trực tiếp qua cổng thông tin trực tuyến của Nhà sách Huy Hoàng (huyhoangbook.vn), tạo thành nguồn học liệu tra cứu và thực hành tiêu chuẩn cho giảng viên, sinh viên và người nghiên cứu tin học.