[Buổi 31][Củng cố OOP nâng cao][HW] Bài 1: Chiến lược vận chuyển mở rộng
Chiến lược vận chuyển mở rộng
Bối cảnh
Một hệ thống giao hàng có abstract ShippingStrategy với fee(weight,distance). Ba chiến lược:
- STANDARD:
weight*2 + distance - EXPRESS:
weight*3 + distance*2 - PICKUP: 0
Order chứa baseAmount, weight, distance và chọn strategy theo type. Nếu weight<0, distance<0 hoặc baseAmount<0 thì ném invalid_argument và in ERROR cho order đó. Với order hợp lệ, total = baseAmount + fee. Hệ thống in total từng order, tổng doanh thu và strategy có tổng fee cao nhất; tie label tăng.
Bài Medium B31 tích hợp polymorphism B29 và exception B30 trong một workflow thực tế.
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
- ShippingStrategy abstract + 3 derived.
- Validate order bằng exception.
- In total từng order/ERROR.
- Summary REVENUE và TOPFEE.
Input
Dòng 1 n; n dòng type base weight distance.
Output
n dòng kết quả; 2 dòng summary.
Ràng buộc
1≤n≤5000.
Ví dụ 1
Input
4
S 100 10 5
E 100 10 5
P 50 100 100
S -1 1 1
Output
125
140
50
ERROR
REVENUE 315
TOPFEE EXPRESS 40
Giải thích
STANDARD fee=25 nên total125. EXPRESS fee=40 nên total140. PICKUP total50. Order cuối invalid base<0 nên ERROR và không cộng summary. Revenue315; fee theo strategy EXPRESS40, STANDARD25, PICKUP0 nên TOPFEE EXPRESS40.
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
3
P 10 1 1
P 20 2 2
P 30 3 3
Output
10
20
30
REVENUE 60
TOPFEE PICKUP 0
Giải thích
Ba order đều PICKUP nên fee0, totals10,20,30; revenue60. Strategy xuất hiện duy nhất là PICKUP với tổng fee0, nên TOPFEE PICKUP 0.
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: polymorphic strategy, exception validation, aggregate order, final integration
- Giới hạn kiến thức: B01-B31
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments