Tổng quan về giáo trình
Giáo trình "Lập Trình Hướng Đối Tượng Với C++: Hướng Dẫn Chi Tiết" do GS. Phạm Văn Ất biên soạn, với sự hỗ trợ hiệu đính và biên tập của cử nhân Nguyễn Văn Phác, là tài liệu giảng dạy chuyên sâu về phương pháp lập trình hướng đối tượng (Object-Oriented Programming - OOP) và ngôn ngữ C++ trong chương trình đào tạo ngành Tin học/Khoa học Máy tính ở bậc đại học và sau đại học. Tài liệu đóng vai trò cầu nối chuyển tiếp người học từ mô hình lập trình cấu trúc truyền thống (trên các ngôn ngữ như C, Pascal, FoxPro) sang mô hình lập trình hướng đối tượng trên các môi trường phần mềm hiện đại.
Mục tiêu học tập của giáo trình bao gồm:
- Trang bị hệ thống lý thuyết về phương pháp phân tích, thiết kế và lập trình hướng đối tượng;
- Cung cấp kiến thức toàn diện về cú pháp mở rộng và các cơ chế nâng cao của C++ so với ngôn ngữ C chuẩn;
- Rèn luyện kỹ năng xây dựng, quản lý lớp (class), tổ chức dữ liệu, cấp phát bộ nhớ động, nạp chồng toán tử, kế thừa và tính tương ứng bội (đa hình);
- Phát triển năng lực xây dựng các chương trình ứng dụng hoàn chỉnh tích hợp đồ họa, quản lý luồng dữ liệu (stream) và truy xuất bộ nhớ hệ thống.
Về mặt cấu trúc, tài liệu được tổ chức thành 10 chương nội dung chuyên đề và 6 phụ lục tra cứu kỹ thuật. Cách tiếp cận của giáo trình đi từ việc phân tích sự khác biệt cơ bản giữa cấu trúc hàm/thủ tục và lớp đối tượng, mở rộng các tính năng của hàm và biến trong C++, sau đó phát triển tuần tự qua các cấp độ kiến thức OOP cốt lõi. Điểm đặc thù của tài liệu là toàn bộ nội dung lý thuyết đều được cài đặt và minh họa trực tiếp thông qua gần 100 chương trình mã nguồn hoàn chỉnh, được thử nghiệm trực tiếp trên môi trường trình biên dịch Turbo C++ 3.0 (TC++ 3.0).
Nội dung kiến thức cốt lõi
Các chương/chủ đề chính
- Chương 1: C++ và lập trình hướng đối tượng: Giới thiệu môi trường TC++ 3.0 (cấu trúc thư mục
BIN, INCLUDE, LIB, BGI), quy chuẩn chuyển đổi mã nguồn C sang C++ (bắt buộc khai báo nguyên mẫu hàm qua chỉ thị #include), và các mở rộng cú pháp cơ bản như ghi chú dòng đôi //, vị trí khai báo biến linh hoạt, cú pháp ép kiểu Kiểu(biểu thức), hằng có kiểu const, cấu trúc union không tên, kiểu liệt kê enum, cùng toán tử cấp phát bộ nhớ new/delete và cơ chế xử lý lỗi qua con trỏ hàm _new_handler (set_new_handler).
- Chương 2: Hàm trong C++: Phân tích cơ chế biến tham chiếu (
&r = u) và hằng tham chiếu (const), nguyên lý truyền dữ liệu cho hàm theo tham chiếu, hàm trả về tham chiếu, cơ chế đối có giá trị mặc định, hàm trực tuyến (inline), kỹ thuật định nghĩa chồng hàm (function overloading) và định nghĩa chồng toán tử (operator overloading) áp dụng cho các cấu trúc dữ liệu tự định nghĩa như phân số (PS) hay ma trận (MT).
- Chương 3: Lớp (Class): Định nghĩa lớp, thuộc tính dữ liệu và phương thức thành viên (member function), phạm vi truy xuất, biến con trỏ đối tượng
this, mảng đối tượng và phương thức toán tử.
- Chương 4: Tạo dựng, sao chép, hủy bỏ đối tượng: Nguyên lý hoạt động và cài đặt 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 bộ nhớ động trong lớp, hàm bạn (friend function) và lớp bạn (friend class).
- Chương 5: Sự thừa kế của các lớp (Inheritance): Thiết lập quan hệ phân cấp giữa lớp cơ sở (base class) và lớp dẫn xuất (derived class), cơ chế chia sẻ và tái sử dụng mã nguồn trong phát triển phần mềm.
- Chương 6: Tính tương ứng bội và phương thức ảo (Polymorphism & Virtual Methods): Xây dựng phương thức ảo (
virtual), liên kết động, cho phép tổ chức chương trình quản lý thống nhất các nhóm đối tượng không đồng nhất thông qua cùng một giao diện điều khiển.
- Chương 7: Tổ chức vào - ra trong C++: Cơ chế dòng tin (Stream I/O qua thư viện
iostream.h và iomanip.h), các lớp istream, ostream, các toán tử xuất nhập <<, >>, các thao tác định dạng hiển thị (setw, setprecision, setiosflags(ios::showpoint)), đảm bảo tính độc lập thiết bị.
- Chương 8, 9 & 10: Đồ họa, truy xuất bộ nhớ và chương trình ứng dụng: Cài đặt các hàm đồ họa BGI, kỹ thuật truy xuất trực tiếp bộ nhớ máy tính và bộ nhớ màn hình, từ đó xây dựng 5 chương trình hoàn chỉnh minh họa các lớp giao diện menu và cửa sổ.
Kiến thức nền tảng được xây dựng
Giáo trình phân định rõ ràng cơ sở lý thuyết giữa hai mô hình:
- Lập trình cấu trúc: Chương trình được phân rã thành các hàm và thủ tục độc lập để xử lý dữ liệu, tách rời cấu trúc dữ liệu khỏi thuật toán xử lý.
- Lập trình hướng đối tượng: Đóng gói (encapsulation) dữ liệu và phương thức xử lý thành một đơn vị thống nhất là lớp (class), mô tả sát thực thể thế giới thực.
Về mặt nguồn gốc ngôn ngữ, giáo trình nêu rõ tiến trình phát triển: Ngôn ngữ C ra đời năm 1973 (phục vụ hệ điều hành Unix trên máy PDP). Đến năm 1980, Bjarne Stroustrup phát triển ngôn ngữ "C có lớp", và chính thức đổi tên thành C++ vào năm 1983. C++ được xác định là ngôn ngữ lai (hybrid language), vừa duy trì đầy đủ tính năng của hàm và cấu trúc trong C, vừa tích hợp đầy đủ công cụ của lập trình hướng đối tượng.
Kỹ năng phát triển
- Kỹ năng kỹ thuật: Viết mã nguồn C++ tuân thủ tiêu chuẩn biên dịch; xử lý bộ nhớ động và giải phóng vùng nhớ với
new/delete; cài đặt nạp chồng toán tử nhập/xuất <<, >> và toán tử số học; thiết kế các hệ thống lớp có tính kế thừa và đa hình.
- Kỹ năng phân tích: Trừu tượng hóa các thực thể bài toán (ví dụ: thực thể dãy điểm
daydiem, danh sách thí sinh TS, ma trận MT) thành các thuộc tính và phương thức xử lý tương ứng.
- Kỹ năng thực hành: Biên dịch, liên kết và kiểm soát lỗi nguyên mẫu hàm trên môi trường TC++ 3.0; xử lý định dạng luồng dữ liệu; lập trình tương tác phần cứng và đồ họa.
Phương pháp giảng dạy và học tập
Phương pháp tiếp cận sư phạm
Giáo trình triển khai phương pháp giảng dạy mang tính so sánh - đối chiếu trực tiếp:
- Đặt cạnh nhau cùng một bài toán giải bằng ngôn ngữ C cấu trúc và giải bằng C++ hướng đối tượng (ví dụ: bài toán tìm cặp điểm cách xa nhau nhất trong một dãy điểm để so sánh cách tổ chức dữ liệu mảng toàn cục/hàm trong C với việc định nghĩa lớp
daydiem chứa con trỏ tọa độ và phương thức nhapsl(), do_dai() trong C++).
- Trình bày trực tiếp cơ chế biên dịch: giải thích nguyên nhân lỗi phát sinh (ví dụ: lỗi gọi hàm
sqrt, getch thiếu #include, lỗi gán biến hằng const, lỗi thiếu khởi tạo biến tham chiếu double &x).
Bài tập và hệ thống ví dụ
Hệ thống mã nguồn mẫu được tích hợp xuyên suốt, gắn liền với các cấu trúc dữ liệu thực tế:
- Quản lý danh sách cấu trúc thí sinh
TS (họ tên, số báo danh, điểm toán, lý, hóa, tổng điểm) kết hợp sắp xếp và định dạng bảng in.
- Cài đặt cấu trúc điểm đồ họa
DIEM sử dụng từ khóa const.
- Tính toán ma trận hai chiều
MT và phân số PS thông qua nạp chồng các toán tử +, -, *, /.
- Tính tích phân xác định sử dụng con trỏ hàm kết hợp đối có giá trị mặc định.
Hướng dẫn tự học và phương pháp đánh giá
- Người học thực hành biên dịch trực tiếp từng chương trình trên môi trường TC++ 3.0 theo từng bài học cụ thể.
- Tự kiểm tra các trường hợp biên dịch sai bằng cách đối chiếu với các đoạn mã nguồn lỗi được chỉ ra trong sách (ví dụ: đặt sai vị trí từ khóa
inline, gọi hàm có đối mặc định sai quy tắc, gán trực tiếp giá trị số nguyên cho kiểu enum không qua ép kiểu).
- Kết hợp tra cứu 6 phụ lục ở cuối sách để kiểm tra cú pháp, bảng mã ASCII, từ khóa và danh mục hơn 200 hàm thư viện C/C++.
Điểm nổi bật và cập nhật kỹ thuật
Tài liệu ghi nhận chi tiết các điểm cải tiến kỹ thuật của C++ so với C thuần túy:
| Đặc tính kỹ thuật |
Ngôn ngữ C chuẩn |
Mở rộng trong C++ theo giáo trình |
| Vị trí khai báo biến |
Bắt buộc đặt ở đầu khối lệnh |
Khai báo linh hoạt tại bất kỳ vị trí nào trước khi sử dụng |
| Kích thước hằng ký tự |
sizeof('A') = sizeof(int) = 2 byte |
sizeof('A') = sizeof(char) = 1 byte |
| Cú pháp ép kiểu |
(Kiểu)biểu thức |
Bổ sung cú pháp hướng hàm: Kiểu(biểu thức) |
| Khai báo kiểu struct / union / enum |
Bắt buộc lặp lại từ khóa (struct Tên_kiểu biến;) |
Tên struct/union/enum được xem trực tiếp là tên kiểu (Tên_kiểu biến;) |
| Cấp phát bộ nhớ động |
Sử dụng hàm thư viện malloc(), free() |
Sử dụng toán tử tích hợp new, delete; hỗ trợ bẫy lỗi qua _new_handler |
| Cơ chế truyền tham số |
Chỉ truyền theo giá trị (sử dụng con trỏ khi cần thay đổi) |
Bổ sung biến tham chiếu (&) và hằng tham chiếu (const &) |
| Tối ưu hóa hàm |
Dùng chỉ thị tiền xử lý #define (Macro) |
Dùng hàm trực tuyến inline đảm bảo kiểm tra kiểu an toàn |
| Tên hàm & Toán tử |
Mỗi hàm phải có một tên duy nhất |
Hỗ trợ nạp chồng hàm (overloading) và nạp chồng toán tử (operator overloading) |
| Xuất / Nhập dữ liệu |
Hàm định dạng printf(), scanf() |
Luồng dữ liệu cin, cout, cin.get(), cin.ignore() qua iostream.h |
Các mở rộng này tập trung tối ưu hóa hiệu năng tính toán, giảm thiểu việc sao chép vùng nhớ không cần thiết (thông qua truyền tham chiếu) và nâng cao tính cấu trúc của mã nguồn phần mềm.
Đối tượng sử dụng giáo trình
- Sinh viên đại học và học viên cao học: Thuộc các ngành Công nghệ Thông tin, Khoa học Máy tính, Kỹ thuật Phần mềm và Tin học ứng dụng đang học học phần Lập trình hướng đối tượng hoặc Lập trình C++ nâng cao.
- Điều kiện tiên quyết (Prerequisites): Người học bắt buộc phải nắm vững kiến thức nền tảng và sử dụng tương đối thành thạo ngôn ngữ lập trình C (kiểu dữ liệu chuẩn, cấu trúc rẽ nhánh, vòng lặp, mảng, con trỏ, cấu trúc bản ghi và hàm).
- Giảng viên: Sử dụng làm giáo trình giảng dạy chính thức, tham khảo khung cấu trúc 10 chương và khai thác kho gần 100 bài toán mẫu để xây dựng bài giảng lý thuyết và bài tập thực hành phòng máy.
- Lập trình viên và người tự học: Sử dụng để chuyển đổi tư duy lập trình từ hướng thủ tục sang hướng đối tượng, tra cứu các quy tắc cú pháp và phương pháp thiết kế phần mềm tổng quát.
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?
Giáo trình được biên soạn phục vụ sinh viên, giảng viên chuyên ngành Tin học ở bậc đại học/cao học, và những người đã có nền tảng lập trình muốn tiếp cận bài bản phương pháp hướng đối tượng trên ngôn ngữ C++.
2. Cần trang bị những kiến thức nền tảng nào trước khi học?
Người học bắt buộc phải sử dụng thành thạo ngôn ngữ C cơ bản. Các khái niệm về cú pháp lệnh, biểu thức, cấu trúc điều khiển, mảng, con trỏ và hàm trong C là điều kiện tiên quyết để hiểu các nội dung mở rộng của C++.
3. Điểm khác biệt kỹ thuật cơ bản nhất giữa C và C++ được nêu trong sách là gì?
C là ngôn ngữ lập trình cấu trúc chia chương trình thành các hàm/thủ tục xử lý tách rời dữ liệu. C++ là ngôn ngữ lai mở rộng từ C, đưa vào khái niệm lớp (class) để đóng gói dữ liệu cùng các phương thức xử lý, đồng thời bổ sung các cơ chế quản lý bộ nhớ mới (new/delete), tham chiếu (&), nạp chồng hàm/toán tử, kế thừa và phương thức ảo (virtual).
4. Người học cần môi trường phần mềm nào để thực hành các ví dụ trong giáo trình?
Các chương trình minh họa trong sách được viết và kiểm thử trên môi trường Turbo C++ 3.0 (TC++ 3.0) chạy trên hệ điều hành DOS/Windows, sử dụng cấu trúc thư mục chứa các tệp tiêu đề (.h), thư viện đồ họa (BGI), và trình biên dịch TC.EXE.
5. Giáo trình có tài liệu bổ trợ nào kèm theo để hỗ trợ tra cứu?
Cuối giáo trình cung cấp 6 phụ lục chuyên sâu:
- Phụ lục 1: Danh mục các phép toán trong C++ và thứ tự ưu tiên;
- Phụ lục 2: Danh sách các từ khóa chuẩn của C++;
- Phụ lục 3: Bảng mã ASCII và mã quét bàn phím;
- Phụ lục 4: Kỹ thuật sử dụng con trỏ
void xây dựng hàm có số đối bất định;
- Phụ lục 5: Tóm tắt hơn 200 hàm thư viện chuẩn C/C++;
- Phụ lục 6: Khái quát phương pháp phân tích, thiết kế và lập trình hướng đối tượng.
Kết luận
Giáo trình "Lập Trình Hướng Đối Tượng Với C++" của GS. Phạm Văn Ất cung cấp một hệ thống lý thuyết hoàn chỉnh về phương pháp luận hướng đối tượng kết hợp với các chỉ dẫn kỹ thuật chi tiết của ngôn ngữ C++. Nội dung tài liệu được tổ chức theo lộ trình rõ ràng: đi từ các mở rộng cú pháp cơ sở, kỹ thuật nâng cao về hàm, xây dựng lớp và quản lý vòng đời đối tượng, đến các kỹ thuật kế thừa, tính tương ứng bội, xử lý dòng tin và tương tác bộ nhớ hệ thống. Hệ thống gần 100 chương trình thực nghiệm cùng 6 phụ lục tra cứu chuyên đề đóng vai trò nguồn tư liệu học thuật phục vụ cho công tác đào tạo và nghiên cứu kỹ thuật lập trình C++.