Thiết kế hệ thống HBH

Một phần của tài liệu giáo trình ngôn ngữ hóa thống nhất uml (Trang 137 - 143)

- 17

6.3 Thiết kế hệ thống HBH

TrongphầnnàychúngtahãyápdụngGRASPđểgántráchnhiệmchocáclớpvà tạo ra cácbiểu đồ cộng tác. Chúng ta thựchiện mẫu đối với ca sửdụng “Mua Hàng

bằng tiền mặt” (Buy Items with Cash) và “Khởi động” (Start Up), sau đó thực hiện

tươngtựđốivớinhữngcasửdụngkhác.

Khithiếtkếbiểuđồ cộngtác,chúng tahãythựchiệntheonhữnghướngdẫnsau: 1. Vớimỗithaotác(hoạtđộngchính)đãđượcmôtảtrongcác hợp đồng củahệ

thốngnêntạoramộtbiểuđồriêng.

2. Nếubiểuđồnàyphứctạpthìcóthểchianóthànhnhữngbiểuđồđơngiảnhơn. 3. Sử dụng các hợp đồng trách nhiệm, trong đó dựa vào những điều kiện cần thoảmãn saukhihoànthành(post-condition)vàcácmô tảcasửdụngđểxác định tráchnhiệmcủacácđốitượngtronghệ thốngtheomẫugántráchnhiệm nhưđãnêutrên.

Đểthựchiệncasửdụng“Mua Hàng bằng tiền mặt”(Buy Items with Cash)và“Khởi động”(Start Up),hệthốngphảithựchiện: enterItems()(nhậpcácmặthàng), endSale()(kết thúc một phiên bán hàng), makePayment() (thanhToan) và startUp() (khoiDong). Theo hướngdẫntrên,chúngtathiếtkếcácbiểuđồcộngtácchonhữngthaotácđó.

Chúngtabắtđầutừbốnbiểuđồnhưhình6-19. enterItems() endSale() makePayment() startUp() :HBH 1:????() :HBH 1:????() :HBH 1:????() :HBH 1:????() HBH enterItems() endSale() makePayment() startUp() - 120 -

Hình6-19 Cácthaotáccủahệthống

Biểuđồcộngtáccho enterItems()

Trướchếtchúngtaxem lại hợp đồngthựchiệnenterItems() để biếthệthốngphải làmnhữnggì.

1. Hiển thị thông tin mô tả và giá bán của mặt hàng được nhập vào.

Nói chung, các đối tượng củahệ thống không có tráchnhiệm hiển thị các thôngtin. Nhữngcôngviệcnàycóthểđượccácđốitượnggiaodiện(Interface Object)đảmnhiệmbằng cáchtruynhậpvàoCSDLvềcácmặthàngvàgửicácthôngđiệpchứanhữngthôngtintương ứngchocácđốitượngđanghoạtđộng.

2. Tạo lập phiên bán hàng mới.

Như trong hợp đồng đã nêu rõ: khi nhập vào mặt hàng đầu tiên của mỗi phiên bánhàngthìphảitạolập phienBanHangmới. TráchnhiệmnàyđượcgánchoHBHvà nócónhiệmvụlàphảighilạicácphiênbánhàngnhưthế.

Hơnnữa, mỗikhi phienBanHangđượctạomớithìnólàtập rỗngvàsauđó được bổsungthêmcác dongBanHangmỗikhinhậpxongmộtmặthàng.

Áp dụng cácmẫugán tráchnhiệm nêu trên,gán việctạolập dongBanHangmới choPhienBanHanglàhợplý.

3. Xác định các thông tin mô tả và giá bán.

Sau khi các dongBanHang được tạo lập thì phải được đưa bổ sung vào

phienBanHangđanghoạtđộng,dođónócầngửithôngđiệp add()(bổsungvào)chonhững

dongBanHangđangđược nhập vào. Những dongBanHang đượcđưa vào phienBanHang

phảiđượcxácđịnhtừDanhMucMatHangvàsauđólàMoTaMatHang.Vậyđểcóđược nhữngthông tintrên thìHBH phảigửithôngđiệp specification(upc), xácđịnhmô tảmặt hàng có mã là upc cho :DanhMucMatHang, đối tượng này lại gửi tiếp đi thông điệp

find(upc),đểtìmtrongtậpcácmôtảmặthàngcómã upc.

Dựavàonhữngthảoluậnnhưtrên,biểuđồcộngtácsẽđượcxâydựngnhưsau: enterItems(upc, n) ↓ 2: mt := specification(up c) : HBH 1: [new] create() 3: makeLineItem(mt, n) 1.1: create () : PhienBanHang 3.1: create(mt,n)

:DanhMucMatHang 3.2: add(sLi) sLi: DongBanHang

2.1: mt := find(upc)

: MoTaMatHang

: DongBanHang

Hình6-20Biểuđồcộngtáccho enterItems()

Tầmnhìncủa cáclớp

Như đã khẳng định nhiều lần,các đối tượng trong hệ thống tương tác với nhau bằng cách traođổi cácthông điệp,cụ thểhơn như trongcác biểuđồ tương táclà trao đổi thôngqua các lờigọi hàm.Trongbiểu đồ ởhình 6-20, khi hệ thống cần xácđịnh những thông tin vềmặt hàng có mã upc cho trước, như giá bánchẳng hạn thìnó gửi tới cho :DanhMucMatHang lời gọi hàm specification(upc),đối tượng nàylại gửi cho :MoTaMatHang lờigọihàm find(upc).

Một đối tượng muốn có được những thông tin từnhững đối tượngkhác thìđối tượng đó phải có khảnăng nhìn thấyđược những gìmà nó cần thiết. Một cách hình thứchơn,

Để đối tượng :A có thể gửi một thông điệp cho đối tượng :B thì lớp A phải được liên kết với lớp B.

Trong thiết kếhướng đốitượng, sự liênkết có liên quan chặtchẽ với khái niệm

khả năng nhìn thấy được của các đối tượng.

 Nếu :A có thể nhìn thấy:B thì phải có một liên kết giữa hai đối tượng đó, nghĩalàgiữahailớptươngứngcóquanhệkếthợp.

 Nếu giữahaiđối tượng :Avà :Bhiện thờicóliên kếtvớinhau thìmột trong haiđốitượngđócómộtđốitượngnhìn thấyđối tượngkia.

Vềsựtraođổithôngđiệpgiữacácđốitượngcóthểphátbiểuchínhxácnhưsau:

Để đối tượng :A gửi được thông điệp cho đối tượng :B thì hiện

thời đối tượng :A phải nhìn thấy được đối tượng :B.

Cóbốncáchđểđốitượng A nhìnthấyđượcđốitượng:B.

1. Tầm nhìn thuộc tính::B làthuộctínhcủa:A.

2. Tầm nhìn tham số::Blàthamsốcủamộthàmnàođócủa:A.

3. Tầm nhìn khai báo cục bộ: :B được khaibáolà đốitượng cụcbộ trongđịnh

nghĩahàmcủa:B.

4. Tầm nhìn toàn cục::B làtoàncục.

Dựa vào phạm vi quan sát của cácđối tượng trong các biểu đồ đểkhai báo các đặctính private, protected, public cho các thuộc tính và hàm thành phân trong các lớp

đối tượng.

Biểuđồcộngtáccho endSale

CóthểchọnHBHđểđiềukhiểnthaotácnàycủahệthống.Hợpđồngcủathaotácnàyyê ucầu:

PhienBanHang.isCompleteđượcgántrị truekhikếtthúcnhậpdữliệu.

Nhưvậy, hệ HBH có thể gửithông điệp becomeComplete() cho PhienBanHang đểđặtthuộctính isComplelet nhận giá trị true.

endSale() becomeCompelete()

:HBH :PhienBanHang

becomeComplete(){ isComplete = true; }

Hình6-21 Biểuđồcộngtácthểhiện Kết thúc nhập dữ liệu endSale()

BiểuđồcộngtácchomakePayment

Một lần nữa nhắc lại, chúng ta sẽ xem HBH như là bộ điều khiển. Trong phần thảo luận về mẫu gán trách nhiệm để đảm bảo mức độ móc nối giữa các lớp yêu, nhưng độ cố kết lại cao, chúng ta đã gán trách nhiệm tạo lập đối tượng ThanhToan cho lớp PhienBanHang,chứ không gán cholớp HBH (hình 6-16).Biểu đồ cộng tác môtảthaotác makePayment() đượcvẽlạinhưsau:

makePayment(soTien) 1: makePayment(soTien)

:HBH :PhienBanHang

1.1:create(soTien) Qua bộ điều khiển

:ThanhToan Theo mẫu móc nối yếu

và cố kết cao

Hình6-22 Biểuđồcộngtáccho makePayment() Biểuđồnàyđápứngnhữngđiềukiện sau:

 MộtđốitượngcủalớpThanhToanđểthanhtoán,

ThanhToanđượckếthợpvớiPhienBanHang

ThanhToan.soluong = soTien.

-123-

Mỗi khi kết thúcmột phiên bán hàng, theo yêu cầu trong hoạtđộng kinh doanh của Công ty, hệ thống phải ghi lại ký sự của những phiên bán hàng đó. Theo kinh nghiệm của chuyên gia, ta có thể gán trách nhiệm này, trách nhiệm addSale() cho

CuaHangsaukhiđãgán tráchnhiệm makePayment()choPhienBanHang.Biểuđồở hình6-22đượcbổsungthành: makePayment(soTien) 1: makePayment(soTien) :HBH 2:addSale(s) :CuaHang 2.1:add(s) s:PhienBanHang 1.1:create(soTien) :ThanhToan daBan:PhienBanHang

Hình6-23 Biểuđồcộngtáccho makePayment()vàghinhậnthôngtinđãbán

BiểuđồcộngtácchocasửdụngStartUp

Phần lớn các hệ thống (nhưng không phải tất cả) đều có ca sử dụng Khởi động

(StartUp)vàmộtsố thaotácliên quanđếnviệc khởitạocácgiá trịchomột ứngdụng

khi bắt đầu thực thi. Mặc dù thao tác này thường là thao tác đầu tiên hệ thống phải thực hiện,nhưng chúng tađể lại thiếtkế sau đểđảm bảo mọi thông tin liênquan đến cáchoạtđộngsaunàycủahệthốngđềuđãđượcpháthiện.

Biểu đồ cộng tác của StartUp chỉ ra những gì có thể xảy ra khi đối tượng của miền ứngdụng đượctạo ra(created). Nghĩalàtronghệthốngbánhàngphảigántrách nhiệm create()chonhữnglớpchính,đólàHBHhoặcCuaHang.

Chúng tachọn CuaHang bởi vìHBH đãđược chọn làmbộ điềukhiển cho các hoạtđộngcủacảhệthống.

Căn cứ vào hợp đồng của StartUp và nhữngthảo luận ở trên, ta có thể thiết kế

biểuđồcộngtáccho StartUpnhưsau:

1. Bắtđầugửithôngđiệp create()choCuaHang,

2. ĐểtạorađốitượngthuộclớpHBHvàchophépnhữngđốitượngđógửiđược các thông điệp cho DanhMucMatHang đểyêu cầucác thông tin về các mặt hàng (xem biểu đồ cộng táccủa enterItems) thì trướctiên nó cần phải tạo ra các đốitượng DanhMucMatHang.Nghĩa lànógửi thôngđiệp create() trước choDanhMucMatHang,sauđómớigửichoHBHthôngđiệptươngtự. 3. Khimột đối tượngDanhMucMatHang đãđượctạo lập thìnó sẽyêu cầutạo

lập MoTaMatHang và sau đó bổ sung vào danh sách các mô tả mặt hàng, đồngthờibảnthânnótựnạpnhữngthôngtinmôtảnhữngmặthàngtiếptheo.

- 124 -

Biểuđồnàyđượcvẽnhưhình6-24.

create() 2: create(pc) : CuaHang : HBH 1:create() pc: DanhMucMatHang 1.1: create() 1.2.2:*add(p s) ↓ :MoTaMatHang 1.2: loadProdSpec()

1.2.1: *create(upc, price, descrip) ↓

DanhMucMatHang:: loadProdSpec(){ ↓ ps:MoTaMatHang do{

ps = new DanhMucMatHang(upc, price, descrip); Collection(MoTaMatHang).add(ps);

}while NotFinished; }

Hình6-24 Biểuđồ cộngtácchoStartUp

Sựchênhlệchgiữaphântíchvàthiếtkế

Trongbiểuđồ cộngtácchoStartUpmớichỉthểhiệnviệctạora một đối tượngđại diệnchomộtđiểmbánhàngđầucuối.Trongkhiởmôhìnhkháiniệmởphaphân tích, nó được xâydựngđểmô hình cho nhữngcửa hàng thựctế có thể có nhiều điểm bán hàng đầu cuối, nghĩa là khi hệ thống hoạt động thì sẽ có nhiều đối tượng của HBH

đượctạora.

Từđócóthểthấycómộtsốđiểnchênhlệchgiữakếtquảphântíchvàthiếtkế: 1. Đối tượng :CuaHangtrongcácbiểuđồkhôngphảilàcửahàngthực,nólàđối

tượngmềm,

2. Đối tượng:HBH trongcácbiểuđồkhôngphảilàđiểmbánhàngđầucuốicụ thể,nólàđốitượngmềm,

3. Biểu đồ cộng tác thể hiện mối quan hệ tương tác giữa một đối tượng :CuaHang và:HBH.

4. Tổng quát hoá từ một đối tượng của HBH sang nhiều đối tượng đòi hỏi

CuaHang phải tạo ra nhiều thể hiện. Và những sự tương tác giữa các đối tượngHBHvớinhiềuđốitượngkháccầnphảiđượcđồngbộhoáđểđảmbảo sựtoànvẹntrongviệcchiasẻcác thôngtintronghệthống. Điềunàydẫnđến

tính toán đa luồng (multi-thread computation) hoặc tính toán tương tranh

- 125 -

(concurrent computation), vấnđề nàyvượt ra ngoàiphạm vi củađề tài đang thảoluậnởđây.

Một phần của tài liệu giáo trình ngôn ngữ hóa thống nhất uml (Trang 137 - 143)

Tải bản đầy đủ (DOCX)

(195 trang)
w