[Buổi 31][Củng cố OOP nâng cao][Lab] Bài 1: Polymorphism Bug Clinic
Polymorphism Bug Clinic
Bối cảnh
Một hierarchy Shape bị bug vì base method không virtual.
Hãy sửa để gọi đúng behavior derived qua base pointer.
Yêu cầu
- Shape có virtual
name()và virtual destructor. - Circle/Rectangle override.
- Đọc type và in name qua Shape*.
Yêu cầu tổ chức code
Phải dùng virtual và override.
Online Judge chấm output. Với bài nhạy về cấu trúc OOP, giảng viên review thêm source code để xác nhận học viên luyện đúng kỹ năng.
Input
C hoặc R.
Output
CIRCLE hoặc RECTANGLE.
Ràng buộc
Chỉ C/R.
Ví dụ 1
Input
C
Output
CIRCLE
Giải thích
Input C tạo runtime object Circle. Lời gọi qua base interface phải in CIRCLE; nếu quên virtual, code dễ gọi nhầm implementation base. Mẫu này chính là bug clinic kiểm tra dynamic dispatch đã được sửa đúng.
Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.
Ví dụ 2
Input
R
Output
RECTANGLE
Giải thích
Input R tạo Rectangle và cùng call-site polymorphic in RECTANGLE. Việc C và R cho hai output khác nhau chứng minh object không bị slicing và method virtual đang hoạt động đúng.
Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.
Thông tin học tập
- Module: M08
- Buổi: B31
- Loại bài: LAB
- Độ khó: Medium
- Concepts: polymorphism, virtual destructor, object slicing, override, debugging
- Giới hạn kiến thức: B01-B31
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments