Giáo Trình Lập Trình Hướng Đối Tượng Với C++ – GS. Phạm Văn Ất

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

Giáo trình Lập Trình Hướng Đối Tượng Với C++ do Giáo sư Phạm Văn Ất biên soạn, với sự cộng tác 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 và học tập học phần Lập trình hướng đối tượng (Object-Oriented Programming - OOP). Môn học này giữ vị trí trọng tâm trong chương trình đào tạo khối ngành Công nghệ Thông tin, Khoa học Máy tính và Tin học ứng dụng tại các trường đại học và cao đẳng. Giáo trình đó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 (thông qua các ngôn ngữ như C, Pascal, Foxpro) sang mô hình lập trình hướng đối tượng trên ngôn ngữ C++.

Mục tiêu học tập của giáo trình là trang bị cho sinh viên hệ thống khái niệm chuẩn mực về lập trình hướng đối tượng; hiểu rõ bản chất của việc đóng gói dữ liệu và phương thức xử lý trong một đơn vị lớp (class); làm chủ các cơ chế kế thừa (inheritance), tính tương ứng bội (polymorphism) và phương thức ảo (virtual method). Đồng thời, giáo trình rèn luyện kỹ năng cài đặt chương trình hoàn chỉnh trên C++ thông qua các kỹ thuật mở rộng như quản lý bộ nhớ động, nạp chồng toán tử, xử lý dòng tin và quản trị lỗi hệ thống.

Về mặt cấu trúc, tài liệu được tổ chức thành 10 chương chuyên đề cùng 6 phụ lục tra cứu kỹ thuật, đi kèm gần 100 chương trình mã nguồn minh họa chi tiết. Giáo trình tiếp cận kiến thức bằng phương pháp so sánh đối chiếu: phân tích các hạn chế của lập trình thủ tục truyền thống trong C, chỉ ra các mở rộng cú pháp và cơ chế mới của C++, từ đó xây dựng tư duy phân tích và thiết kế phần mềm theo định hướng đối tượng.

Điểm đặc sắc của tài liệu là việc phân tích sâu cơ chế ngôn ngữ lai của C++ – ngôn ngữ cho phép tích hợp linh hoạt cả cấu trúc hàm truyền thống lẫn mô hình lớp đối tượng. Các kiến thức lý thuyết trừu tượng đều được gắn liền với sơ đồ tổ chức bộ nhớ máy tính và mã nguồn thực thi cụ thể trên môi trường Borland 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

Cấu trúc 10 chương của giáo trình được tổ chức theo tiến trình logic chặt chẽ:

  • Chương 1: C++ và lập trình hướng đối tượng: Giới thiệu môi trường làm việc TC++ 3.0 (cấu trúc các thư mục BIN, INCLUDE, LIB, BGI); phân biệt quy cách đặt tên tệp .C và .CPP; các yêu cầu nghiêm ngặt về khai báo nguyên mẫu hàm (prototype) với chỉ thị #include. Trình bày các mở rộng cơ bản: cách chú thích dòng (//), vị trí khai báo biến linh hoạt, 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, truy xuất mảng hai chiều, cấu trúc struct, union không tên, kiểu liệt kê enum, cùng cặp toán tử cấp phát và giải phóng bộ nhớ new / delete kết hợp cơ chế bẫy lỗi con trỏ hàm _new_handler.
  • Chương 2: Hàm trong C++: Đi sâu vào các năng lực mới của hàm: cơ chế biến tham chiếu (&), hằng tham chiếu (const &) nhằm tối ưu hóa việc truyền dữ liệu không qua bản sao; hàm trả về tham chiếu; xây dựng đối số có giá trị mặc định (default arguments); hàm trực tuyến (inline) thay thế macro tiền xử lý; kỹ thuật định nghĩa chồng hàm (function overloading) và định nghĩa chồng toán tử (operator overloading) cho các cấu trúc dữ liệu tự định nghĩa.
  • Chương 3 & Chương 4: Lớp, đối tượng và quản lý vòng đời đối tượng: Trình bày khái niệm trung tâm về lớp (class), thuộc tính dữ liệu và phương thức (hàm thành viên); con trỏ this; phạm vi truy cập; xây dựng hàm tạo (constructor), hàm tạo sao chép (copy constructor), hàm hủy (destructor); cơ chế cấp phát bộ nhớ động bên trong đối tượng; toán tử gán; cùng cơ chế chia sẻ quyền truy cập thông qua hàm bạn (friend function) và lớp bạn (friend class).
  • Chương 5: Khả năng thừa kế của các lớp: Phân tích cơ chế tái sử dụng và mở rộng mã nguồn; xây dựng lớp cơ sở (base class) và lớp dẫn xuất (derived class); các hình thức thừa kế đơn và đa thừa kế trong C++.
  • Chương 6: Tính tương ứng bội và phương thức ảo: Trình bày nguyên lý đa hình (polymorphism); xây dựng phương thức ảo (virtual) nhằm xử lý các đối tượng thuộc các lớp dẫn xuất khác nhau theo một giao diện điều khiển thống nhất.
  • Chương 7 & Chương 8: Tổ chức vào - ra (Streams) và đồ họa: Khái niệm dòng tin (stream) độc lập thiết bị (iostream.h, iomanip.h); định dạng xuất dữ liệu bằng setw, setprecision, setiosflags; định nghĩa chồng toán tử << và >>; hệ thống các hàm đồ họa căn bản (thư viện graphics.h) để thiết lập đối tượng trực quan.
  • Chương 9 & Chương 10: Truy xuất bộ nhớ và chương trình ứng dụng hoàn chỉnh: Hướng dẫn các hàm truy xuất trực tiếp bộ nhớ máy tính và bộ nhớ màn hình để thiết kế hệ thống cửa sổ, menu; tổng hợp toàn bộ kỹ thuật đã học vào 5 chương trình thực nghiệm hoàn chỉnh ở Chương 10.

Hệ thống 6 phụ lục cung cấp tài liệu tra cứu: Phụ lục 1 (Bảng thứ tự ưu tiên các phép toán C++); Phụ lục 2 (Danh sách từ khóa); Phụ lục 3 (Bảng mã ASCII và mã quét); Phụ lục 4 (Kỹ thuật dùng con trỏ void xây dựng hàm có số đối biến đổi như printf, scanf); Phụ lục 5 (Tóm tắt hơn 200 hàm thư viện chuẩn C); Phụ lục 6 (Tổng quan phương pháp phân tích, thiết kế và lập trình hướng đối tượng).

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:

  1. Lý thuyết trừu tượng hóa và đóng gói: Kết hợp trường dữ liệu và thao tác xử lý vào một cấu trúc thống nhất, che giấu chi tiết cài đặt và kiểm soát quyền truy xuất.
  2. Cơ chế liên kết và phân giải thực thi: Phân biệt cơ chế liên kết tĩnh (early binding) trong nạp chồng hàm/toán tử tại thời điểm biên dịch và liên kết động (late binding) thông qua bảng phương thức ảo tại thời điểm chạy chương trình.
  3. Mô hình quản trị tài nguyên bộ nhớ: Quản lý vòng đời dữ liệu trên bộ nhớ heap thông qua new và delete, kiểm soát lỗi tràn bộ nhớ bằng set_new_handler, và kỹ thuật giải phóng tài nguyên tự động thông qua hàm hủy.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Viết mã nguồn C++ chuẩn xác cú pháp; tổ chức mã nguồn thành các lớp đối tượng; cài đặt nạp chồng toán tử tính toán đại số và toán tử dòng nhập/xuất; cấu hình môi trường biên dịch và liên kết thư viện.
  • 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ể độc lập; xác định đúng mối quan hệ kế thừa hoặc bao hàm giữa các lớp; đánh giá chi phí bộ nhớ và hiệu năng giữa truyền tham chiếu so với truyền tham trị, giữa hàm inline so với hàm thông thường.
  • Kỹ năng thực hành (Practical competencies): Xây dựng các ứng dụng có cấu trúc menu điều khiển, quản lý danh sách dữ liệu động (như xử lý thí sinh, ma trận, phân số), và thao tác trực tiếp với các dòng tin dữ liệu.

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

Phương pháp sư phạm (Pedagogical approach)

Giáo trình triển khai phương pháp giảng dạy quy nạp kết hợp so sánh trực quan:

  • Bắt đầu từ một bài toán cụ thể (ví dụ: bài toán tìm cặp điểm có khoảng cách lớn nhất trong một tập hợp điểm).
  • Trình bày cách giải quyết bằng lập trình cấu trúc truyền thống trong C (sử dụng mảng toàn cục và các hàm rời rạc).
  • Chỉ rõ các điểm bất cập trong việc quản lý dữ liệu phân tán.
  • Chuyển đổi bài toán sang thiết kế hướng đối tượng với lớp daydiem, bao gồm dữ liệu tọa độ x, y và các phương thức nhapsl(), do_dai().

Bài tập và chương trình thực nghiệm

Giáo trình tích hợp gần 100 chương trình hoàn chỉnh, có thể biên dịch và chạy trực tiếp. Các ví dụ bao quát nhiều chủ đề kỹ thuật:

  • Xử lý đại số và hình học: Cài đặt lớp phân số PS với đầy đủ các toán tử +, -, *, /, tối giản bằng ước số chung lớn nhất; tính tích phân xác định bằng con trỏ hàm; tính toán nhân ma trận cấp $m \times n$.
  • Quản lý dữ liệu thực tế: Quản lý danh sách cấu trúc thí sinh TS (họ tên, điểm toán, lý, hóa, tổng điểm), sắp xếp danh sách và lọc thí sinh trúng tuyển theo điểm chuẩn.
  • Đồ họa và giao diện: Khởi tạo chế độ đồ họa màn hình với initgraph, vẽ các điểm màu bằng cấu trúc hằng DIEM và hàm putpixel.

Hướng dẫn tự học và đánh giá

Người học cần tuân thủ quy trình thực nghiệm:

  1. Đọc hiểu phần lý thuyết cú pháp và quy tắc biên dịch.
  2. Tự nhập và chạy mã nguồn mẫu trên môi trường TC++ 3.0 để quan sát hành vi của bộ nhớ và màn hình kết quả.
  3. Chủ động thử nghiệm các trường hợp vi phạm quy tắc (ví dụ: gán lại giá trị cho hằng const, khai báo sai thứ tự đối số mặc định, thiếu nguyên mẫu hàm) để nhận diện các thông báo lỗi cụ thể từ trình biên dịch.
  4. Vận dụng tra cứu Phụ lục 5 (hơn 200 hàm chuẩn) và Phụ lục 1 (thứ tự ưu tiên phép toán) khi giải quyết các bài toán độc lập.

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

  • Bối cảnh lịch sử và tính chính xác về mặt tiến hóa ngôn ngữ: Giáo trình nêu rõ nguồn gốc ngôn ngữ C ra đời năm 1973 phục vụ viết hệ điều hành Unix trên máy PDP, tiếp đó là mốc năm 1980 khi B. Stroustrup phát triển "C có lớp" và chính thức đặt tên là C++ vào năm 1983. Tài liệu phản ánh chính xác giai đoạn C++ trở thành ngôn ngữ hướng đối tượng chủ đạo trong thập niên 1990.
  • Làm rõ tính chất ngôn ngữ lai: Giáo trình phân biệt ranh giới giữa C++ (hỗ trợ song song cả lớp và hàm) với các ngôn ngữ thuần hướng đối tượng (như Smalltalk). Điều này giúp người học hiểu rõ lý do C++ kế thừa toàn bộ thư viện và cú pháp của C nhưng bổ sung hệ thống kiểm tra kiểu chặt chẽ hơn.
  • Trình bày các kỹ thuật can thiệp hệ thống chuyên sâu:
    • Kỹ thuật sử dụng union không tên để tiết kiệm vùng nhớ và bóc tách trực tiếp từng byte trong kiểu số nguyên dài unsigned long.
    • Sử dụng con trỏ hàm _new_handler và hàm set_new_handler() để xử lý biến cố thiếu bộ nhớ khi gọi new.
    • Ứng dụng con trỏ void để tự xây dựng các hàm nhận số lượng đối số không cố định (Phụ lục 4).
    • Các hàm truy xuất trực tiếp bộ nhớ máy tính để điều khiển phần cứng màn hình (Chương 9).

Đối tượng sử dụng giáo trình

  • Sinh viên đại học và cao đẳng: 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, Khoa học Máy tính, Hệ thống Thông tin và Điện tử Viễn thông cần tài liệu học tập chính thức cho học phần Lập trình Hướng đối tượng.
  • Điều kiện tiên quyết: Người học bắt buộc phải nắm vững kiến thức căn bản về ngôn ngữ lập trình C, bao gồm cú pháp câu lệnh điều khiển, hàm, mảng, con trỏ và kiểu cấu trúc struct.
  • Giảng viên: Sử dụng giáo trình làm khung tham chiếu chuẩn để soạn giáo án bài giảng, thiết kế bài tập thực hành phòng máy và xây dựng ngân hàng câu hỏi kiểm tra đánh giá.
  • Lập trình viên và người tự học: Các kỹ sư phần mềm muốn củng cố nền tảng bản chất về cơ chế vận hành của C++, quản trị bộ nhớ cấp thấp, nạp chồng toán tử và tra cứu các hàm thư viện chuẩn.

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

1. Giáo trình này phù hợp với đối tượng nào?

Giáo trình được biên soạn phục vụ sinh viên khối ngành Tin học bậc đại học, cao đẳng, các kỹ sư cần nghiên cứu phương pháp lập trình hướng đối tượng trên nền C++, và giảng viên xây dựng đề cương môn học OOP.

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 bắt buộc phải sử dụng tương đối thành thạo ngôn ngữ lập trình C (các kiểu dữ liệu chuẩn, cấu trúc rẽ nhánh, vòng lặp, con trỏ, mảng và cấu trúc dữ liệu bản ghi). C++ kế thừa và mở rộng toàn bộ các thành phần này của 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 khác là gì?

Tài liệu tập trung phân tích sâu cơ chế ngôn ngữ lai của C++, chỉ rõ cách chuyển đổi tư duy từ hàm sang lớp thông qua các ví dụ song đối. Ngoài ra, sách cung cấp các kỹ thuật chuyên sâu ít tài liệu đề cập như quản lý ngắt cấp phát bộ nhớ bằng _new_handler, kỹ thuật union không tên, con trỏ void cho hàm biến đối và hệ thống 6 phụ lục tra cứu hoàn chỉnh.

4. Làm sao để tự học hiệu quả với tài liệu này?

Người học nên cài đặt môi trường TC++ 3.0, trực tiếp gõ và thực thi gần 100 chương trình mẫu trong sách; quan sát thông báo lỗi của trình biên dịch khi cố tình viết sai quy tắc (như vi phạm đối mặc định hoặc gán giá trị cho hằng const); đọc kỹ phần tổng quan thiết kế hướng đối tượng ở Phụ lục 6.

5. Có tài liệu bổ trợ nào kèm theo trong sách?

Sách tích hợp 6 phụ lục chi tiết: bảng thứ tự ưu tiên toán tử, danh sách từ khóa C++, bảng mã ASCII và mã quét ký tự, kỹ thuật hàm với số đối bất định (dùng con trỏ void), bảng tra cứu tóm tắt hơn 200 hàm chuẩn C, và tóm lược phương pháp phân tích thiết kế hướng đối tượng tổng quát.


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 là công trình học thuật cung cấp hệ thống kiến thức toàn diện, chuẩn xác về phương pháp lập trình hướng đối tượng và kỹ thuật cài đặt trên C++. Giá trị cốt lõi của tài liệu nằm ở tính sư phạm mẫu mực, cấu trúc chương mục tường minh và sự kết hợp chặt chẽ giữa lý thuyết nền tảng với gần 100 chương trình thực nghiệm.

Lộ trình học tập khuyến nghị:

  1. Giai đoạn 1: Làm chủ các mở rộng cú pháp, quản lý bộ nhớ động và cơ chế hàm (Chương 1 - 2).
  2. Giai đoạn 2: Nắm vững bản chất hướng đối tượng gồm Lớp, Hàm tạo/Hàm hủy, Kế thừa và Đa hình (Chương 3 - 6).
  3. Giai đoạn 3: Hoàn thiện kỹ thuật dòng tin, đồ họa, truy xuất bộ nhớ và triển khai 5 chương trình tổng hợp (Chương 7 - 10).
  4. Giai đoạn 4: Tra cứu và nâng cao kỹ năng thông qua hệ thống 6 phụ lục chuyên sâu.