Giao diện
Phụ lục D
Đối chiếu với tám tuần lý thuyết
Phụ lục này để bạn biết chính xác chỗ nào của sách dựa vào bài giảng nào, chỗ nào sách phải dạy thêm, và chỗ nào bài giảng có mà sách bỏ qua. Dùng nó khi ôn thi: gặp phần khó thì mở lại đúng tuần lý thuyết tương ứng.
D.1 Bài giảng dạy gì, sách dùng ở đâu
| Tuần | Nội dung bài giảng | Sách |
|---|---|---|
| 1 | Giới thiệu OOP; procedural vs hướng đối tượng; robustness / adaptability / reusability; tam giác P.I.E; link cài VS Code + MinGW | 0.6, 1.1, 6.5 |
| 2 | Hello world; tool-chain; ba loại lỗi syntax / runtime / logic; bốn lỗi thường gặp | 1.2, 1.6 |
| 3 | bool, if, switch; hàm: prototype, nạp chồng, tham số mặc định, inline, phạm vi, static cục bộ; tham chiếu và truyền tham chiếu; tham chiếu hằng | 1.3, 2.3 |
| 4 | Lớp và đối tượng; sơ đồ UML và ký hiệu; struct; constructor và danh sách khởi tạo; toán tử chấm; tách .h / .cpp với #ifndef; mảng đối tượng | 1.3, 1.4, 2.2, 2.3, 2.5 |
| 5 | Đóng gói; getter/setter; public / protected / private; tiền và hậu điều kiện; this; hàm thành viên static | 3.1 – 3.4 |
| 6 | Kế thừa; quan hệ is-a; điều khiển truy cập khi kế thừa; thứ tự constructor và destructor; truyền tham số cho constructor lớp cha; redefining; các kiểu cấu trúc kế thừa; friend | 4.1 – 4.6 |
| 7 | Đa hình; liên kết tĩnh và liên kết động; virtual; hàm thuần ảo; mảng con trỏ lớp cha; destructor ảo; truyền lớp cha theo giá trị (slicing) | 5.1 – 5.5 |
| 8 | Lớp trừu tượng; ngoại lệ: throw / try / catch, thứ tự nhánh catch, std::exception và what(), ném lại, bảo đảm an toàn ngoại lệ | 6.1 – 6.2, 7.1 – 7.6 |
| phụ | Bộ slide Pointer: con trỏ cơ bản, mảng và con trỏ, truyền con trỏ vào hàm, trả về con trỏ | 3.5, 5.3 |
D.2 Ba chỗ đề thi đòi mà bài giảng chưa dạy
Đây là kết quả của việc rà lại toàn bộ tám tuần slide cộng hai bộ slide Pointer. Ba mục dưới đây không xuất hiện trong bất kỳ slide nào, nhưng đều cần để làm được đề thi:
| Thứ còn thiếu | Bằng chứng | Sách dạy ở |
|---|---|---|
new / delete | Không slide nào có. Tuần 7 chỉ nhắc chữ “delete operator” khi giải thích destructor ảo. | Mục 3.5 |
std::vector | Xuất hiện 0 lần trong 8 tuần slide. Đề thi ghi rõ “Tạo vector chứa Vehicle*”. | Mục 5.4 |
| Lỗi liên kết | Tuần 2 chia lỗi thành 3 loại, không có loại này. Nó chỉ xuất hiện khi tách nhiều file, tức là từ tuần 4. | Mục 1.6 |
Gợi ý cho người dạy
Ba chỗ trên đáng được bổ sung vào bài giảng, dù chỉ vài slide. Chúng nằm đúng trên đường đi tới điểm “chương trình chạy đúng” (3 điểm) — phần mà trung bình lớp đang hụt nhiều nhất.
Nếu không kịp bổ sung vào slide, ít nhất nên nhắc sinh viên đọc trước mục 3.5 và 5.4 của sách này trước buổi thực hành tuần 5.
D.3 Bài giảng có, sách không dùng
Không mục nào dưới đây xuất hiện trong thang điểm của 12 đề thi gần nhất, nên sách bỏ qua để tập trung thời gian. Chúng vẫn đáng học khi đã qua môn:
- Hàm thành viên static (tuần 5) — biến dùng chung cho mọi đối tượng của lớp.
- Tiền và hậu điều kiện (tuần 5) — cách viết hợp đồng của một phương thức.
- friend class (tuần 6). Sách chỉ dùng
friendđúng một lần cho hàmoperator<<ở mục 5.6 — đó là ứng dụng phổ biến nhất của từ khoá này. - Kế thừa phân cấp, đa kế thừa dữ liệu, kế thừa lai (tuần 6). Sách dùng kế thừa đơn, kế thừa nhiều tầng và đa kế thừa giao diện — đúng ba kiểu mà đề thi hỏi.
- Ném lại ngoại lệ và bảo đảm an toàn ngoại lệ (tuần 8) — mức nâng cao, đề thi chỉ yêu cầu bắt và xử lý.
- Hàm inline, tham số mặc định, static cục bộ (tuần 3).
D.4 Thuật ngữ dùng thống nhất
Sách cố ý dùng lại đúng từ của bài giảng để bạn không phải nhớ hai bộ từ vựng:
| Bài giảng | Sách | Ở mục |
|---|---|---|
| static binding / dynamic binding | liên kết tĩnh / liên kết động | 5.1 |
| redefining | định nghĩa lại (phân biệt với nạp chồng) | 4.6 |
| pure virtual function | hàm thuần ảo | 6.2 |
| abstract class | lớp trừu tượng | 6.2 |
| getter / accessor, setter / mutator | getter, setter | 3.3 |
| UML: dấu −, +, #; kiểu ghi sau tên; {virtual}, {abstract} | giữ nguyên ký hiệu đó | 2.5 |
| syntax / runtime / logic error | lỗi cú pháp / lúc chạy / logic (thêm: lỗi liên kết) | 1.6 |