[Buổi 31][Củng cố OOP nâng cao][HW] Bài 2: Generic Safe Queue
Generic Safe Queue
Bối cảnh
Xây SafeQueue<T> hỗ trợ PUSH x, FRONT, POP, SIZE, SUM. FRONT và POP khi rỗng phải ném out_of_range. SUM chỉ được dùng cho kiểu số trong input bài (I hoặc D) và trả tổng hiện tại; chương trình có thể cài cùng class template và helper generic.
Bài Medium tích hợp class template và exception recovery. Sau một lỗi empty, queue phải tiếp tục hoạt động bình thường và state không bị thay đổi.
B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.
B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.
Yêu cầu
- SafeQueue<T> generic.
- FRONT/POP throw khi empty.
- Support I/D.
- SUM generic.
- Tiếp tục sau ERROR.
Input
Dòng 1 type q; q command.
Output
Mỗi query/POP một dòng; PUSH không output.
Ràng buộc
q≤5000.
Ví dụ 1
Input
I 9
PUSH 1
PUSH 2
FRONT
SUM
POP
FRONT
POP
POP
SIZE
Output
1
3
1
2
2
ERROR
0
Giải thích
Queue [1,2]: FRONT1, SUM3, POP1, FRONT2, POP2. POP tiếp theo trên empty gây ERROR nhưng không đổi state; SIZE cuối0. Output thể hiện FIFO và exception-safe empty handling.
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
D 7
FRONT
PUSH 1.5
PUSH 2.5
SUM
POP
SUM
SIZE
Output
ERROR
4.00
1.50
2.50
1
Giải thích
FRONT đầu ERROR. Sau PUSH1.5,2.5, SUM4.00; POP trả1.50, SUM còn2.50, SIZE1. Queue vẫn sử dụng được sau exception đầu.
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: HOMEWORK
- Độ khó: Medium
- Concepts: class template, queue state, exceptions, command simulation
- Giới hạn kiến thức: B01-B31
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments