[Buổi 25][Đóng gói][HW] Bài 1: Safe Score
Safe Score
Bối cảnh
Một Score object phải luôn giữ value trong [0,10]. Field được đặt private để code bên ngoài không thể gán trực tiếp một giá trị sai; mọi update đi qua set(x) và chỉ thành công khi x hợp lệ. Bài Easy tập trung invariant: command FAIL không được làm thay đổi state trước đó. Cuối cùng get() chỉ đọc giá trị hiện tại.
Vì đây là phần encapsulation, mọi field tạo nên invariant cần được đặt sau một interface kiểm soát. Một command thất bại phải là thao tác atomic: state trước và sau phải giống nhau hoàn toàn. Khi có nhiều field liên quan, nên viết rõ điều kiện hợp lệ trước rồi mới thực hiện bất kỳ phép gán nào.
Yêu cầu
- Private
value. - Method
set(x)nhận 0..10. - Method
get()đọc giá trị. - Khởi tạo 0; xử lý q lệnh set và in OK/FAIL; cuối in value.
Input
Dòng 1 q; q dòng số x.
Output
Mỗi lệnh OK/FAIL; cuối VALUE x.
Ràng buộc
1≤q≤1000.
Ví dụ 1
Input
4
5
10
11
-1
Output
OK
OK
FAIL
FAIL
VALUE 10
Giải thích
set5 và set10 đều hợp lệ nên state lần lượt5 rồi10. 11 và -1 fail, state giữ10. Output OK,OK,FAIL,FAIL rồi VALUE 10.
Ví dụ này còn kiểm tra nguyên tắc atomic của interface: khi một điều kiện không đạt, object không được giữ lại thay đổi dở dang. Các dòng output vì vậy không chỉ phản ánh OK/FAIL mà còn xác nhận state sau mỗi command vẫn thỏa invariant của class.
Ví dụ 2
Input
1
7
Output
OK
VALUE 7
Giải thích
Chỉ có set7 và hợp lệ, nên OK; state cuối7, output VALUE 7.
Ví dụ này còn kiểm tra nguyên tắc atomic của interface: khi một điều kiện không đạt, object không được giữ lại thay đổi dở dang. Các dòng output vì vậy không chỉ phản ánh OK/FAIL mà còn xác nhận state sau mỗi command vẫn thỏa invariant của class.
Thông tin học tập
- Module: M07
- Buổi: B25
- Loại bài: HOMEWORK
- Độ khó: Easy
- Concepts: encapsulation, validation, private data, getter
- Giới hạn kiến thức: B01-B25
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments