[Buổi 31][Củng cố OOP nâng cao][WS] Bài 1: Extensible Checkout Engine
Extensible Checkout Engine
Bối cảnh
Workshop tích hợp có kiểm soát: PaymentMethod là polymorphic interface; template helper tính tổng; invalid amount ném exception.
Chỉ dùng kỹ thuật nâng cao khi giải quyết một nhu cầu rõ.
Yêu cầu
- Template
sumValuestính tổng vector<long long> item prices. - PaymentMethod abstract
fee(amount). - Cash fee=0; Card fee=2% làm tròn xuống integer; EWallet fee=1%.
- Nếu item price <0 throw và in ERROR.
- Ngược lại in
SUBTOTAL x,FEE y,TOTAL z.
Yêu cầu tổ chức code
Phải có ít nhất một template function, abstract PaymentMethod và try/catch.
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
Dòng 1 type n; dòng 2 n price. type C/D/E.
Output
Ba dòng hoặc ERROR.
Ràng buộc
1≤n≤2000, price trong long long.
Ví dụ 1
Input
C 3
100 200 300
Output
SUBTOTAL 600
FEE 0
TOTAL 600
Giải thích
Checkout type C dùng implementation không thu fee. Subtotal 100+200+300=600; fee0; total600. Ba dòng output phản ánh pipeline subtotal → strategy fee → final total.
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 2
1000 1000
Output
SUBTOTAL 2000
FEE 40
TOTAL 2040
Giải thích
Checkout type D có hai item1000 nên subtotal2000. Strategy D tính fee40 theo contract, total thành2040. Cùng engine nhưng strategy/runtime type khác làm thay đổi fee mà không đổi code tổng quát.
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: WORKSHOP
- Độ khó: Hard
- Concepts: abstract class, polymorphism, templates, exceptions, integration
- Giới hạn kiến thức: B01-B31
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments