[Buổi 25][Đóng gói][Lab] Bài 2: Encapsulation Refactor


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Encapsulation Refactor

Bối cảnh

Một Product cần giữ invariant: price>=0 và stock>=0.

Hãy refactor theo interface thay vì cho main sửa field trực tiếp.

Yêu cầu

  1. Class Product có private price, stock.
  2. Method setPrice(x) chỉ nhận x>=0.
  3. Method restock(x) chỉ nhận x>0.
  4. Method sell(x) chỉ thành công nếu x>0 và x<=stock.
  5. In kết quả từng command và state cuối price stock.

Yêu cầu tổ chức code

Data member pricestock phải private.

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 price stock q; q dòng PRICE x, ADD x, SELL x.

Output

Mỗi command in OK/FAIL; cuối cùng in state.

Ràng buộc

0≤price,stock≤1e12.

Ví dụ 1

Input

100 5 4
SELL 2
ADD 3
PRICE 90
SELL 10

Output

OK
OK
OK
FAIL
90 6

Giải thích

Product bắt đầu price100, stock5. SELL2 còn stock3; ADD3 lên6; PRICE90 đổi giá. SELL10 fail vì stock chỉ6 nên state không đổi. Kết quả command là OK/OK/OK/FAIL và state cuối 90 6.

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

0 0 3
ADD 1
SELL 1
PRICE -1

Output

OK
OK
FAIL
0 0

Giải thích

Product bắt đầu0,0. ADD1 hợp lệ; SELL1 đưa stock về0; PRICE -1 bị từ chối nên price vẫn0. Output OK OK FAIL rồi 0 0, cho thấy invariant price,stock không âm luôn được giữ.

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: LAB
  • Độ khó: Medium
  • Concepts: encapsulation, invariant, interface design, validation
  • Giới hạn kiến thức: B01-B25
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo