Phân tích & Thiết kế
Thực hành lập bảng trạng thái cho mượn sách
Biến mô tả nghiệp vụ thành bảng chuyển tiếp và ca thử từ chối.
Thích và đánh giá Bình luận và hỏi đáp1. Đề bài
Một cuốn sách có thể Sẵn sàng, Đã mượn hoặc Đang kiểm tra. Thao tác Mượn chuyển từ Sẵn sàng sang Đã mượn. Trả sách chuyển sang Đang kiểm tra. Xác nhận sách tốt đưa sách về Sẵn sàng.
2. Lập bảng chuyển tiếp
Mỗi hàng lưu trạng thái nguồn, sự kiện và trạng thái đích. Chọn hành vi từ chối cho các cặp không có trong bảng. Trường hợp Trả sách khi đang Sẵn sàng phải bị từ chối và không làm đổi trạng thái.
3. Đối chiếu lời giải
Mẫu Python đi hết một vòng mượn, trả, xác nhận. Nó cũng thử trả sách lần nữa sau khi sách đã sẵn sàng. Dùng bảng để vẽ sơ đồ trạng thái UML, gắn tên sự kiện vào đúng mũi tên.
Chạy ví dụ bằng python hoc_uml_trang_thai_muon_sach.py.
Môi trường thực hành. Python 3.10 trở lên. Ví dụ dùng thư viện chuẩn Python.
bang = {
("sẵn sàng", "mượn"): "đã mượn",
("đã mượn", "trả"): "kiểm tra",
("kiểm tra", "xác nhận"): "sẵn sàng",
}
def thuc_hien(hien_tai, thao_tac):
tiep = bang.get((hien_tai, thao_tac))
return (tiep, True) if tiep else (hien_tai, False)
hien_tai = "sẵn sàng"
for thao_tac in ("mượn", "trả", "xác nhận"):
hien_tai, hop_le = thuc_hien(hien_tai, thao_tac)
assert hop_le
assert hien_tai == "sẵn sàng"
assert thuc_hien(hien_tai, "trả") == ("sẵn sàng", False)
print("Hoàn thành vòng mượn và từ chối trả sai trạng thái.")4. Bài tập mở rộng
Thêm sự kiện phát hiện sách hỏng và trạng thái Cần sửa. Mô tả cách kết thúc sửa và ghi rõ khi nào được cho mượn lại. Viết chuỗi từ mượn đến khi sách trở về Sẵn sàng qua nhánh sửa.