[Buổi 27][Củng cố OOP cơ bản][WS] Bài 1: Mini Project OOP Basic 1.0
Mini Project OOP Basic 1.0
Bối cảnh
Mini Project 1.0: hệ thống thư viện nhỏ với Book và Library.
Core tập trung class responsibility, private state, constructor hợp lệ và command flow.
Yêu cầu
- Book: id,title,available private; borrow/returnBook.
- Library: vector<Book>, addBook, borrowById, returnById, countAvailable.
- Command ADD/BORROW/RETURN/COUNT.
- ADD id title; BORROW/RETURN in OK/FAIL; COUNT in số sách available.
Yêu cầu tổ chức code
Phải tách ít nhất Book và Library; không dùng inheritance/polymorphism.
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 q; q command.
Output
Mỗi BORROW/RETURN/COUNT một dòng.
Ràng buộc
1≤q≤2000, ADD id duy nhất.
Ví dụ 1
Input
8
ADD B1 CPP
ADD B2 OOP
COUNT
BORROW B1
COUNT
BORROW B1
RETURN B1
COUNT
Output
2
OK
1
FAIL
OK
2
Giải thích
ADD B1 và B2 tạo hai sách available, nên COUNT=2. BORROW B1 thành công làm available false, COUNT=1. BORROW B1 lần nữa fail vì đã mượn. RETURN B1 thành công khôi phục available, COUNT cuối=2. Output theo đúng state transition của Book và Library.
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
3
COUNT
BORROW X
RETURN X
Output
0
FAIL
FAIL
Giải thích
Library rỗng nên COUNT=0. BORROW X và RETURN X đều không tìm thấy book, vì vậy cả hai trả FAIL và không làm thay đổi state.
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: WORKSHOP
- Độ khó: Medium
- Concepts: oop basic integration, classes, encapsulation, constructors, vector, commands
- Giới hạn kiến thức: B01-B27
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments