Tổng quan về giáo trình

Giáo trình C++ & Lập trình hướng đối tượng do GS. Phạm Văn Ất (chủ biên) và Lê Trường Thông biên soạn, được Nhà xuất bản Bách Khoa Hà Nội ấn hành phối hợp cùng Công ty Cổ phần Văn hóa Huy Hoàng (xuất bản năm 2020, dung lượng 487 trang, khổ 24cm, ISBN: 9786049931215). Trong chương trình đào tạo đại học và cao đẳng khối ngành Công nghệ thông tin, Điện tử viễn thông và Tin học ứng dụng, môn học này đóng vai trò cầu nối nền tảng, đưa người học chuyển tiếp từ mô hình lập trình cấu trúc thủ tục sang tư duy hướng đối tượng hiện đại.

Mục tiêu học tập của giáo trình tập trung vào việc trang bị cho sinh viên hệ thống khái niệm cốt lõi của phương pháp hướng đối tượng, bao gồm lớp, đối tượng, tính đóng gói, sự thừa kế và tính tương ứng bội. Đồng thời, tài liệu rèn luyện kỹ năng hiện thực hóa các giải thuật trên ngôn ngữ C++ – một ngôn ngữ lai kết hợp giữa hàm và lớp, có nguồn gốc từ ngôn ngữ C do Dennis Ritchie phát triển năm 1973 và được Bjarne Stroustrup bổ sung các đặc tính hướng đối tượng vào năm 1980 tại phòng thí nghiệm Bell Labs.

Về cấu trúc, công trình bao gồm 13 chương lý thuyết - thực hành cùng 5 phụ lục chuyên đề, đi kèm gần 100 chương trình mã nguồn mẫu. Cách tiếp cận của tài liệu là phân tích đối chiếu trực tiếp giữa cú pháp C truyền thống và C++, chỉ rõ các cải tiến về quản lý bộ nhớ, tham chiếu và cơ chế vào/ra. Điểm đặc sắc về mặt kỹ thuật là việc giáo trình hướng dẫn thực hành song song trên hai môi trường biên dịch: môi trường kinh điển Turbo C++ 3.0 và môi trường mã nguồn mở hiện đại Code::Blocks (phiên bản 13.12) tương thích trên hệ điều hành Windows 7 và Windows 8.


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Nội dung 13 chương và 5 phụ lục trong giáo trình được sắp xếp theo quy luật tiến trình logic chặt chẽ, từ thao tác công cụ, cú pháp mở rộng, kỹ thuật hướng đối tượng đến các thao tác hệ thống:

  • Chương mở đầu: Cài đặt và sử dụng môi trường Code::Blocks 13.12 kết hợp trình biên dịch đa nền tảng, so sánh với môi trường màn hình xanh của Turbo C++ 3.0; lưu ý các khác biệt thực thi như sự không khả dụng của hàm clrscr().
  • Chương 1 (C++ & Lập trình hướng đối tượng): Tổng quan phương pháp lập trình cấu trúc và lập trình hướng đối tượng; các mở rộng cơ bản của C++ so với C như ghi chú một dòng (//), khai báo biến linh hoạt trước vị trí sử dụng, toán tử é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') = 1 thay vì sizeof(int) = 2 như trong C); cơ chế nhập xuất luồng cin, cout thuộc thư viện <iostream.h>, định dạng dữ liệu qua <iomanip.h> (setw, setprecision, setiosflags); quản lý bộ nhớ động bằng toán tử new, delete và kỹ thuật bẫy lỗi cấp phát với con trỏ hàm _new_handler (set_new_handler).
  • Chương 2 (Hàm trong C++): Cơ chế biến tham chiếu (&), hằng tham chiếu (const &), kỹ thuật truyền tham số và hàm trả về tham chiếu; xây dựng đối số có giá trị mặc định (nguyên tắc gán từ phải sang trái); hàm trực tuyến (inline) thay thế macro #define; kỹ thuật nạp chồng tên hàm và nạp chồng toán tử.
  • Các chương chuyên sâu về lớp và đối tượng (Chương 3 đến Chương 6): Định nghĩa lớp (class), phạm vi truy xuất (public, private), con trỏ this, mảng và đối tượng; vòng đời đối tượng gồm 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 đối tượng; cơ chế giao tiếp qua hàm bạn (friend function) và lớp bạn (friend class).
  • Các chương về tính thừa kế và đa hình (Chương 7 đến Chương 8): Xây dựng lớp cơ sở và lớp dẫn xuất; cơ chế thừa kế đơn và đa thừa kế; xử lý tính tương ứng bội (polymorphism) thông qua phương thức ảo (virtual function) và bảng phương thức ảo.
  • Các chương về dòng tin, tệp tin và hệ thống (Chương 9 đến Chương 13): Tổ chức vào/ra dữ liệu độc lập thiết bị qua các dòng tin (stream); thao tác đọc/ghi tệp dữ liệu; lập trình đồ họa giao diện bằng thư viện BGI; kỹ thuật truy xuất trực tiếp bộ nhớ máy tính và bộ nhớ màn hình để xây dựng các lớp menu, cửa sổ; phân tích một số chương trình ứng dụng hoàn chỉnh.
  • Hệ thống 5 phụ lục: Trình bày bảng phép toán và thứ tự ưu tiên; danh sách từ khóa C++; bảng mã ASCII và mã quét phím; phương pháp phân tích, thiết kế hướng đối tượng tổng quát; cài đặt giải thuật đệ 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 định hình tư duy lập trình thông qua các hệ thống lý thuyết và nguyên lý kỹ thuật:

  • Bốn nguyên lý hướng đối tượng: Đóng gói (encapsulation) dữ liệu và phương thức vào đơn vị class; che giấu thông tin qua phạm vi truy cập; tái sử dụng mã nguồn qua cơ chế kế thừa (inheritance); quản lý tập hợp các thực thể không đồng nhất theo cùng một giao diện qua tính tương ứng bội (polymorphism).
  • Nguyên lý quản lý tài nguyên bộ nhớ: Cơ chế cấp phát động trên vùng nhớ Heap bằng toán tử new và giải phóng chủ động qua delete, phân biệt rõ việc truyền tham trị (pass-by-value) tốn tài nguyên sao chép với truyền tham chiếu (pass-by-reference) tối ưu không gian lưu trữ.
  • Mô hình luồng dữ liệu độc lập thiết bị: Nguyên lý trừu tượng hóa các thao tác ngoại vi (bàn phím, màn hình, tệp tin) thành các dòng dữ liệu (stream) thống nhất.

Kỹ năng phát triển

Qua việc nghiên cứu và thực hành theo giáo trình, người học tích lũy các năng lực:

  • Kỹ năng kỹ thuật: Khởi tạo project, biên dịch, gỡ lỗi trên hai môi trường Turbo C++ 3.0 và Code::Blocks; viết mã tối ưu hóa tốc độ thực thi với hàm inline; định nghĩa nạp chồng các toán tử số học và xuất nhập luồng.
  • Kỹ năng phân tích: Phân tích thực thể thế giới thực thành các thành phần dữ liệu và hành vi (như mô hình lớp daydiem, cấu trúc thí sinh TS lưu trữ họ tên, số báo danh, tổng điểm); thiết lập cấu trúc phân cấp lớp chính xác.
  • Kỹ năng thực tiễn: Xây dựng thuật toán sắp xếp, lọc danh sách; thao tác trực tiếp bộ nhớ để tạo giao diện menu điều khiển; vận dụng cấu trúc mảng động giải quyết bài toán ma trận và hình học tính toán.

Phương pháp giảng dạy và học tập

Giáo trình triển khai phương pháp sư phạm đối sánh thực nghiệm. Tác giả liên tục đặt cấu trúc cú pháp của C++ cạnh ngôn ngữ C và Pascal để người học nhận diện rõ nguyên nhân hình thành của các cải tiến. Điển hình, sách chỉ ra rằng trong C, thao tác hoán vị hai biến buộc phải sử dụng con trỏ phức tạp, trong khi C++ xử lý tường minh thông qua đối số kiểu tham chiếu (void hv(double &x, double &y)).

Hệ thống bài tập và case studies trong sách được xây dựng dựa trên gần 100 chương trình mã nguồn hoàn chỉnh, không sử dụng các đoạn mã giả. Các bài toán mẫu xuyên suốt bao gồm:

  • Bài toán tính diện tích tam giác theo công thức Heron, minh họa quy tắc bắt buộc khai báo nguyên mẫu hàm trong C++ (tệp tiêu đề <math.h>).
  • Bài toán tìm khoảng cách lớn nhất giữa hai điểm trong một tập hợp: tác giả trình bày hai cách giải độc lập gồm giải pháp lập trình cấu trúc dùng mảng song song x[], y[] kết hợp các hàm con rời rạc (nhapsl, do_dai), đối chiếu trực tiếp với giải pháp hướng đối tượng đóng gói toàn bộ dữ liệu tọa độ và phương thức tính toán vào trong lớp daydiem.
  • Bài toán quản lý danh sách thí sinh: ứng dụng cấu trúc TS, cấp phát bộ nhớ động bằng new TS[n+1], kiểm tra dung lượng thông qua con trỏ hàm _new_handler và thực hiện sắp xếp mảng cấu trúc theo tổng điểm giảm dần.
  • Bài toán ma trận thực hai chiều: minh họa thao tác lấy trực tiếp địa chỉ phần tử mảng trong C++ để đưa vào hàm nhập liệu scanf hoặc luồng cin.

Về phương pháp đánh giá, sách cung cấp các tiêu chí đối chuẩn thông qua việc phân tích lỗi biên dịch. Các cảnh báo và lỗi kinh điển được trích xuất trực tiếp như: lỗi Reference variable must be initialized khi biến tham chiếu không được gán biến gốc, lỗi Cannot modify a const object khi cố tình thay đổi giá trị của hằng, hoặc các lỗi sai quy tắc khi đặt đối số mặc định không nằm ở vị trí tận cùng bên phải danh sách tham số.

Để tự học hiệu quả, giáo trình định hướng người đọc nhập toàn bộ mã nguồn vào IDE, tự dịch thử, cố tình tạo ra các trường hợp vi phạm cú pháp đã nêu để quan sát phản hồi của trình biên dịch, sau đó tải mã nguồn gốc từ cổng phân phối sách để đối soát kết quả.


Điểm nổi bật và cập nhật

So với các ấn bản cũ thuần túy dựa trên hệ điều hành DOS và phần mềm Borland Turbo C++ 3.0 truyền thống, phiên bản 2020 của giáo trình bổ sung các cập nhật kỹ thuật:

  • Tích hợp môi trường lập trình Code::Blocks 13.12: Giáo trình hướng dẫn từng bước từ tải bộ cài đặt mã nguồn mở, tiến trình nhấn chọn (Next > I Agree > Install > Finish) đến việc tạo tệp mã nguồn mới (Ctrl + Shift + N) và phím tắt biên dịch/thực thi (F9). Điều này giúp sinh viên vận hành bài tập trực tiếp trên các hệ điều hành phổ biến như Windows 7 và Windows 8 mà không phải dùng phần mềm giả lập DOSBox.
  • Ghi chú dị biệt giữa các trình biên dịch: Tài liệu phân tích rõ những điểm khác biệt khi thực thi mã nguồn giữa các thế hệ công cụ. Ví dụ, câu lệnh xóa màn hình clrscr() hoạt động bình thường trên Turbo C++ (nhờ <conio.h>) nhưng sẽ báo lỗi không khả dụng trong Code::Blocks, hướng dẫn người học cách ghi chú hoặc loại bỏ dòng lệnh để chương trình biên dịch thành công.
  • Gắn kết thực tiễn phát triển phần mềm: Tác giả phân tích nguồn gốc tư tưởng lập trình hướng đối tượng đang được tích hợp sâu rộng trong các hệ quản trị và ngôn ngữ phát triển ứng dụng Windows như Microsoft Access, Visual Basic và Visual C++, giúp người học nhận thức rõ tính kế thừa của kiến thức nền tảng trong hệ sinh thái công nghệ phần mềm thực tế.

Đố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à tự học chuyên nghiệp:

  • Sinh viên đại học và cao đẳng: Phù hợp cho sinh viên năm thứ nhất và năm thứ hai các ngành Công nghệ thông tin, Khoa học máy tính, Kỹ thuật phần mềm, Hệ thống thông tin và Toán - Tin ứng dụng khi tiếp cận học phần Lập trình hướng đối tượng, Kỹ thuật lập trình hoặc Ngôn ngữ C++.
  • Điều kiện tiên quyết (Prerequisites): Để tiếp thu giáo trình một cách thuận lợi, người học bắt buộc phải nắm vững các kiến thức cơ bản về ngôn ngữ lập trình C hoặc cấu trúc dữ liệu cơ bản (kiểu dữ liệu nguyên thủy, cấu trúc rẽ nhánh if/switch, vòng lặp for/while, mảng, bản ghi struct và kỹ thuật thao tác con trỏ).
  • Giảng viên chuyên ngành: Có thể sử dụng toàn bộ tài liệu làm giáo trình chính khóa, khai thác hệ thống bài toán phân tích mẫu (như lớp tọa độ, lớp danh sách sinh viên, ma trận) để xây dựng bài giảng lý thuyết và ngân hàng bài tập thực hành trên phòng máy.
  • Người tự học và lập trình viên: Đóng vai trò là tài liệu tham khảo kỹ thuật cho những ai muốn chuyển đổi tư duy từ lập trình tuần tự sang mô hình hướng đối tượng, hoặc cần củng cố kiến thức về quản trị bộ nhớ cấp thấp, nạp chồng toán tử và giải thuật đồ họa trong C++.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với ai?

Tài liệu được thiết kế cho sinh viên ngành Công nghệ thông tin tại các trường đại học, cao đẳng, các kỹ sư phần mềm muốn hệ thống hóa kiến thức C++ nền tảng và người tự học muốn chuyển đổi từ lập trình thủ tục sang lập trình hướng đối tượng.

2. Cần chuẩn bị kiến thức nền nào trước khi đọc giáo trình?

Người học bắt buộc phải sử dụng tương đối thành thạo ngôn ngữ C, nắm vững các khái niệm về hàm, con trỏ, cấu trúc mảng và luồng điều khiển logic, do C++ kế thừa và mở rộng toàn bộ các thành phần cú pháp này.

3. Điểm khác biệt cơ bản giữa giáo trình này và các tài liệu C++ khác là gì?

Giáo trình phân tích chuyên sâu bản chất "ngôn ngữ lai" của C++, so sánh song song tư duy giải quyết vấn đề giữa hàm cấu trúc và lớp đối tượng qua mã nguồn thực thi cụ thể; đồng thời hỗ trợ song song hai môi trường thực hành Turbo C++ 3.0 và Code::Blocks 13.12.

4. Phương pháp tự học giáo trình đạt hiệu quả cao nhất?

Người học nên kết hợp đọc lý thuyết với việc gõ trực tiếp gần 100 chương trình mẫu vào môi trường biên dịch, quan sát các trường hợp bắt lỗi biên dịch được tác giả phân tích và giải quyết các bài toán thuật toán ở phần phụ lục.

5. Giáo trình có cung cấp tài liệu bổ trợ hay mã nguồn kèm theo không?

Mã nguồn của các chương trình minh họa trong giáo trình được tác giả cung cấp chính thức qua liên kết tải về trên hệ thống trang web của đơn vị liên kết xuất bản (Nhà sách Huy Hoàng tại địa chỉ huyhoangbook.vn).


Kết luận

Giáo trình C++ & Lập trình hướng đối tượng của GS. Phạm Văn Ất và Lê Trường Thông cung cấp hệ thống kiến thức học thuật hoàn chỉnh về mô hình lập trình hướng đối tượng trên nền tảng ngôn ngữ C++. Giá trị cốt lõi của công trình nằm ở tính chuẩn mực về mặt cú pháp, sự gắn kết chặt chẽ giữa lý thuyết lớp/đối tượng với kỹ thuật quản lý bộ nhớ máy tính, cùng hệ thống minh họa mã nguồn cụ thể, có thể biên dịch trực tiếp.

Lộ trình học tập đề xuất theo giáo trình gồm 4 giai đoạn: làm chủ môi trường biên dịch (Code::Blocks / Turbo C++); làm chủ các mở rộng cú pháp hàm và biến tham chiếu; làm chủ 4 đặc trưng hướng đối tượng (đóng gói, hàm tạo/hủy, thừa kế, đa hình); và ứng dụng phát triển module nâng cao thông qua xử lý luồng vào/ra, đồ họa và phân tích thiết kế hệ thống tại 5 phụ lục tra cứu.