- 17
5.2.5 Các hợp đồng về hoạt động của hệ thống
Nhưđãthấyởtrên,biểuđồtrìnhtựmớichỉchochúngtabiếttêncủanhữngnhiệmvụ màmỗiđốitượngcầnphảithựchiệnkhinhậnđượcmộtthôngđiệp,nhưngchưamôtảcách thựchiệnnhữngcôngviệcđónhưthếnào.Đểhiểurõ hơn vềnhữnghànhvicủacácđối tượng vàđểhỗtrợchothiếtkếvàcàiđặtcáclớp saunày,chúngtacần xâydựngcác hợp
đồng (Contract)hay các đặc tảchonhữnghoạtđộng(thaotác,hàm)đãxácđịnhđược. Hợp
đồng cho các hoạt động của hệ thống mô tả về sự thay đổi trạng thái mà khi bắt đầu thì
- 93 -
thoả tiền điều kiện (pre-conditions) và sau đó, khi kết thúc sẽ thoả mãn hậu điều kiện (post- conditions).
Pre-conditions: lànhữngđiềukiện màtrạngtháicủahệ thốngđược giảthiết
làthoảmãntrướckhithựchiệnmộtthaotác,mộthàm.
Post-conditions:lànhữngđiềukiệnmàtrạngtháicủahệthốngphảithoảmãn
saukhithựchiệnxongmộtthaotác,mộthàm.
Mộtcáchhìnhthức,hợpđồngchohoạtđộng Op()cóthểviếttheobộbacủa Hoare:
{Pre-conditions} Op() {Post-conditions}
Thểhiệnrằng:Nếuhoạtđộng Op()bắtđầutừtrạngtháithoảmãn Pre-conditions thìsaukhikếtthúcthựchiệnhệthốngsẽởtrạngtháithoảmãn Post-conditions.
Pre-condition và Post-conditionlànhữngmệnhđề boolean (mệnh đề điều kiện logic).
Ví dụ:hãyxétthaotác enterItems()(upc: UPC, soHang: Int)củalớpHBH.
Pre-conditions:HệmãchuẩncácsảnphẩmtoàncầuUPCđượcbiếttrướcđốivớihệ
thống.
Post-conditions:baogồmnhữngđiềukiệnsau:
+Nếumặthàngnhậpvàolàđầutiênthìphảitạoramộtđốitượngmớilà
phienBanHangcủalớpPhienBanHang vàkếthợpnóvàohệthốngHBH,
+Tạoramộtđốitượng dongBanHangcủalớpDongBanHangchomặthàng vừanhậpvàovàgán dongBanHang.soLuong = soHang (đốisốcủahàm),
+ dongBanHangđượcliênkếtvới MoTaMatHangdựavàomã upc.
Ngoài Pre-conditionsvà Post-coditions,chúngcóthểbổsung thêm mô tả tóm tắt
về trách nhiệm, kiểu, lớp nào, tham chiếu tới những chức năng nào, chú thích, những
ngoại lệ và kết quả, v.v.
Chúng tacóthểxâydựngcáchợpđồng nhưsau:
1. Từ các biểu đồ trình tự, xác định các thao tác, hàm, hoạt động của các lớp tronghệthống,
2. Vớimỗithaotáctrênhãyxâydựngmộthợpđồng,
3. Mô tả tóm tắt những trách nhiệm chính mà hệ thống phải thựchiện khi thực thithaotácnày.
kếtthúcthaotác.
5. Đểmôtả Post-conditions,hãycăncứvào: +Việctạolập,huỷbỏcácđốitượng
+Nhữngthayđổicủacácthuộctính +Thiếtlậphayhuỷbỏcácmốiliênkết.
Đặctảcácthaotác(hàmthành phần)củalớpHBH
1. Hợp đồng để nhập các thông tin về các mặt hàng
-94-
Têngọi: enterItems()(upc:UPC, soLuong:Int)
Tráchnhiệm: Nhậplần lượtcácthông tin về nhữngmặt hàngmàkháchđã
chọn mua và đưa chúng vào phiên bán hàng. Hiển thị các thôngtinmôtảvàgiábáncủatừngmặthàng.
Kiểu/Lớp: System(Hệthống)
Thamchiếutới: R1.1,R1.3,R1.9 vàcasửdụngBánhàng
Chúý: SửdụngphươngpháptruynhậpnhanhvàoCSDL
Ngoạilệ: Nếuupckhônghợplệthìcólỗi
Kếtquả(Output):
Pre-conditions: UPCđượcbiếttrước
Post-conditions: + Nếumặt hàngnhập vào làđầu tiên thìphảitạo ramột
đốitượng phienBanHangcủa lớpPhienBanHang vàkết hợpnóvàohệthốngHBH,
+ Tạo ra một đối tượng dongBanHang của lớp
DongBanHang cho mặt hàng vừa nhập vào và gán
dongBanHang.soLuong = soHang (đốisốcủahàm),
+ dongBanHang được liên kết với MoTaMatHang dựa vàomã upc.
Têngọi: endSale()()
Tráchnhiệm: Ghinhậnnhữngmặthàngđã
bánhàng.
Kiểu/Lớp: System(Hệthống)
Thamchiếutới: R1.2,vàcasửdụngBánhàng
Chúý:
Ngoạilệ: Nếuphiênbánhàng khôngthực
Kếtquả(Output):
Pre-conditions: UPCđượcbiếttrước
-95-
Têngọi: makePayment(soTien: DVT), trong đó DVT là lớp các l oại
Tráchnhiệm: Ghinhậncácthôngtinliênquanđếnviệc thanhtoán,tính
số
Hợp đồng 2. Hợp đồng về việc kết thúc nhập hàngHợp đồng
Kiểu/Lớp: System(Hệthống)
Thamchiếutới: R2.1,vàcasửdụngBánhàng
Chúý:
Ngoạilệ: Nếuphiênbánhàngkhôngkếtthúcthìcólỗi
NếusoTiennhỏhơntongSoTien thìcũngcólỗi
Kếtquả(Output):
Pre-conditions:
Post-conditions: +Mộtđốitượng thanhToanđượctạolập,
+sốtiềndưlà soTien - ThanhToan.tongSoTien
+ thanhToan được liên kết với phienBanHang đã được tạo lập ởhợp đồng 1.để thực hiện việc cập nhật những mặthàngđãbán,tổngsốtiền,v.v.
Lưu ý: Lớp PhienBanHang từ hình 4-14 sẽ được bổ sung thêm thuộc tính
ketThuc khiphân tíchca sửdụng“Thu tiền”.Thuộc tínhnàycókiểu logicvàsẽnhận
giátrị truekhikếtthúcviệcnhậpdữliệuvàbắtđầuthựchiệnthu tiềncủakháchhàng. 3. Hợp đồng thực hiện thu tiền mặt
Lưu ý:Đốivớinhữngca sửdụngcó nhiềuđốitượngtham giathìbiểuđồ trìnhtự
làkháphứctạp,dovậynó khôngthíchhợp.Muốnhiểurõhoạtđộngcủacácđốitượng thì tốt nhất lànên phân táchnhững ca sửdụng phứchợp thành cácca sử dụngtương đốiđơngiản,dễhiểuvàmôtảđượcbằngbiểuđồtrìnhtựmộtcáchđơngiản.
Hợp đồng