[Buổi 27][Củng cố OOP cơ bản][Lab] Bài 1: OOP Bug Clinic
OOP Bug Clinic
Bối cảnh
Một Wallet starter code có public balance và cho phép giao dịch sai.
Hãy refactor về class hợp lệ trong phạm vi OOP Basic.
Yêu cầu
- Class Wallet private balance.
- Constructor nhận initial, nếu initial<0 thì dùng 0.
- deposit/pay validate.
- Đọc commands, in OK/FAIL và balance cuối.
Yêu cầu tổ chức code
Giảng viên review: phải có private state và constructor giữ invariant.
Online Judge chấm output. Giảng viên có thể review thêm cấu trúc code để xác nhận học viên luyện đúng kỹ năng OOP của buổi.
Input
Dòng 1 initial q; q dòng D/P.
Output
Mỗi command một dòng; cuối BALANCE x.
Ràng buộc
|initial|≤1e12.
Ví dụ 1
Input
-10 3
D 5
P 3
P 5
Output
OK
OK
FAIL
BALANCE 2
Giải thích
Initial -10 bị constructor chuẩn hóa về0. Deposit5 thành công →5; pay3 thành công →2; pay5 fail vì vượt balance2. State cuối là2, nên output OK, OK, FAIL, BALANCE 2.
Ví dụ này cũng kiểm tra trách nhiệm giữa manager và object domain: lookup/điều phối được thực hiện ở lớp quản lý, còn object tự quyết định mutation hợp lệ của state riêng. Vì vậy sau mỗi lệnh, các query tiếp theo phản ánh một trạng thái nhất quán thay vì các field bị sửa rời rạc.
Ví dụ 2
Input
100 2
P 50
D 10
Output
OK
OK
BALANCE 60
Giải thích
Wallet bắt đầu100. Pay50 còn50; deposit10 lên60. Cả hai command hợp lệ nên hai dòng OK và cuối BALANCE 60.
Ví dụ này cũng kiểm tra trách nhiệm giữa manager và object domain: lookup/điều phối được thực hiện ở lớp quản lý, còn object tự quyết định mutation hợp lệ của state riêng. Vì vậy sau mỗi lệnh, các query tiếp theo phản ánh một trạng thái nhất quán thay vì các field bị sửa rời rạc.
Thông tin học tập
- Module: M07
- Buổi: B27
- Loại bài: LAB
- Độ khó: Medium
- Concepts: oop review, encapsulation, validation, constructors, refactoring
- Giới hạn kiến thức: B01-B27
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments