- 17
6.4 Thiết kế chi tiết các biểu đồ lớp
Khi tạo ra cácbiểuđồ cộng tác,chúng ta đãghinhận những phương thức(hàm) tươngứngvàđượcgánvàochocáclớp(nhưhình6-22,6-23,6-24,v.v.).
Các lớp cùng vớicác hàm đã xác định là những lớp phần mềm (software class)
biểudiễnchonhững lớp kháiniệm trongmôhình kháiniệm.Dựavàonhữnglớpphần mềm vàdựavàocác biểuđồkhái niệm,biểuđồ cộngtác, chúngta xâydựng cácthiết kếchitiếtbiểuđồ lớpđểthểhiệnđượcnhữngthôngtinsau:
Cáclớp,cácthuộctínhvàcácmốiquanhệ kếthợp,
Cáchàmthànhphần,
Cáckiểucủacácthuộctính,
Tìnhtrạngcóthểđiềukhiểnđược,
Sựphụthuộcgiữacáclớp.
Cácbướcthựchiệnđểthiếtkếbiểuđồlớp
1. Xác định tất cả các lớp có các đối tượng tương tác với nhau. Điều nàythực hiệnđượcthôngquaphântích cácbiểuđồtươngtác.
2. Vẽchúngtrongmộtbiểuđồlớp.
3. Xác địnhthuộc tính củachúng (saochép từ cáckháiniệm trongbiểuđồ khái niệm)vàbổsungchođầyđủ.
4. Phântíchcácbiểuđồcộngtácđểxácđịnhcáchàmvàbổsungchocáclớp. 5. Xácđịnhcáckiểucủacácthuộctínhvàcácgiátrịtrảlạicủaphéptoán.
6. Bổ sung những mối liên kết cần thiết để quản lý các quyền truy nhập (khả năngnhìnthấy)củacácthuộctính.
7. Bổsungcácquanhệphụthuộcdữliệu.
8. Xácđịnhmốiquanhệtổngquát hoá/chitiếthoá vàbổsung quanhệkếthừa vàobiểuđồlớp.
Trướckhibắt taythiết kế biểuđồlớp, chúngta cầnphânbiệtmô hìnhkhái niệm (biểulớpphântích)vớibiểuđồlớpthiếtkế.
Trongmôhìnhkháiniệm,vídụ: HBH EnterItems() EndSale() MakePayment() 1 ghi-Nhận 1 PhienBanHang ngayBan:Date gioBan: Time iscomplete: Boolean
beco meComplete() make LineItem() total() - 126 -
Hình6-25 Hailớptrongmôhình kháiniệm Cáclớp:PhienBanHangvàHBHởđâylàcáckháiniệmtrừutượng. Trongphathiếtkế, cáclớptrênlàcácthànhphần củahệthống.
Các bước thiết kế lớp từ 1. đến 5. hầu như đã được thực hiện dần từ giai đoạn phân tíchvàkháđơn giản..Ởđâychủ yếu tậptrunggiớithiệu cáchthựchiệnbabước cuốicùngđểhoànthiệnthiếtkếbiểuđồlớp.
6. Bổsungcácmốiquanhệkếthợpvàkhảnăngđiềukhiểnđược
Như chúng ta đã phân tích, giữa hai lớp trong hệ thống thường có những mối quan hệ xác định, trong đó phổ biến là quan hệ kết hợp (association). Mỗi đầu của quan hệkết hợp có vai trò (role)nhất định. Trongthiết kế biểuđồ lớp, vai tròcó thể đượcgánvới mũitênchỉhướngđiềukhiển. Khả năng điều khiển(Navigability)làđặc tính của vai trò và chỉ ra rằng nócó thể điều khiển một chiều thôngqua quan hệ kết hợp từđốitượngcủalớpnguồntớiđốitượngcủalớpđích. Ví dụ:biểuđồlớpởhình6- 25đượcbổsungthêmchiềuđiềukhiểnnhưhình6-26.
HBH EnterItems() EndSale() MakePayment() 1 ghi-Nhận 1 PhienBanHang ngayBan:Date gioBan: Time iscomplete: Boolean becomeComplete() makeLineItem() total()
Hình6-26Chỉrõhướngđiềukhiểncủavaitròtrongbiểuđồlớp
Khả năng điều khiển được trong biểu đồ lớp thường được thể hiện như là khả năng nhìn thấyđược của cácthuộctính củalớpđích từlớpnguồn. Trong càiđặtbằng ngôn ngữ lập trình, nó được thực hiện bằng cách xây dựng lớp nguồn có những thể hiện làcácđối tượngcủalớpđích.Vídụ: khicàiđặtcáclớpởhình6-26,lớpHBHsẽ cóthuộctínhthamchiếutớiđốitượngcủalớpPhienBanHang.
Khả năng điều khiển và quan hệ kết hợp giữa các lớp đã được chỉ ra trong các biểuđồcộngtác.Chúngtacăncứvàocáctìnhhuốnggợiýđểxácđịnhmốikếthợp và khảnăngđiềukhiểntừAtớiB:
:A gửimột thôngđiệptớicho :BthìAkếthợpvớiBtheochiềutừAtớiB.
A tạoramộtđốitượngcủaBthìAkếthợp vớiBtheochiềutừAtớiB.
AcóquanhệkếtnốivớiB thôngquathuộctínhcó giátrịthuộckiểuB, thìA
kếthợpvớiBtheochiềutừAtớiB.
:A nhận được một thông điệp trong đó có đối tượng của B đóng vai trò là thamsốthìAkếthợp vớiB theochiềutừAtớiB.
quanhệkếthợpvàchiềuđiềukhiểnnhưhình6-27.
- 127 -
7. Bổsungcácquanhệphụthuộcdữliệu
Ngoàikhảnăngnhìnthấyđượccủacácthuộctínhcòncóbakhảnăngkhác,gồm: tầmnhìntham số, tầmnhìnkhaibáocụcbộvàtầmnhìntoàn cục.Trongthiếtkế,khả năng nhìn thấygiữa các lớpđược thể hiệnbằng quanhệ phụ thuộc,đượcmô tảbằng đườngđứtnétcómũitênchỉrõ lớpnguồnphụthuộcvàolớpđích.Vídụ:
1. Đối tượng của HBH nhận được thông tin mô tả mặt hàng (MoTaMatHang)saukhinó gửi thôngđiệpđếncho DanhMucMatHang.
Do vậy, MoTaMatHang phảiđược khai báo cục bộ trong HBH,nghĩa là
HBHphụ thuộcvàoMoTaMatHang.
2. Tương tự, PhienBanHang nhận được MoTaMatHang như là tham số trong hàm makeLineItem(), nghĩa là MoTaMatHang nằm trong tầm nhìn
thamsốcủaPhienBanHang.Vậy, PhienBanHangcũngphụthuộcvàoMoTaMatHan g.
Từđóchúngtacóbiểuđồlớpcùngquanhệphụthuộcnhưhình6-28.
1 diaChi: AddressCuaHang tenGoi: String 1 Sử-dụng 1 1 Chứa 1 MoTaMatHang maSanPham: UPC giaBan: Number addSale() DanhMucMatHang moTa: Text
1 1 Có HBH Sử-dụng 1 1 specification() loadProdSpecs() PhienBanHang 1 Được-mô-tả-bởi * DongBanHang soLuong: Int subtotal() enterItems() endSale() makePayment() Ghi-Nhận 1 * ngayBan: Date gioBan: Time becomeComplete() makeLineItem() makePayment() 1 Chứa 1..* ThanhToan tongsoTien: Number total() Quản-lý * 1 Được-trả-bởi 1 Hình6-27 Thiếtkếbiểuđồlớpđượcbổsungquanhệkếthợp
-128-
1 diaChi: AddressCuaHang tenGoi: String 1 Sử-dụng 1 1 Chứa 1 MoTaMatHang maSanPham: UPC giaBan: Number addSale() DanhMucMatHang moTa: Text
1 1 Có HBH Sử-dụng 1 1 specification() loadProdSpecs() PhienBanHang 1 Được-mô-tả-bởi * DongBanHang soLuong: Int subtotal() enterItems() endSale() makePayment() Ghi-Nhận 1 * ngayBan: Date gioBan: Time becomeComplete() makeLineItem() makePayment() 1 Chứa 1..* ThanhToan tongsoTien: Number total() Quản-lý * 1 Được-trả-bởi 1
Hình6-28 Thiếtkếbiểuđồlớpđượcbổsungquanhệphụthuộc
8. Xácđịnhlớptổngquátvàbổsungcácquanhệkếthừa
Nhưởphaphântích đãnêu,casửdụng “Thu tiền” (Thanh toán) cóthểchianhỏ thành các ca sử dụng con: “Thu bằng thẻ tín dụng“ (makeCreditPayment), “Thu tiền
mặt” (makeCashPayment), và“Thu bằng Check” (makeCheckPayment)tuỳthuộc vào phươngthứcthanhtoáncủakhách.
Thutiền Thutiềnmặt Thubằng
Check
Thubằngthẻ tíndụng
Trongcácphần trướcchúngtađãphân tíchcasửdụng“Thu tiền mặt” vàđãxác địnhđượccáclớpđốitượngđểthựchiệncasửdụngnày.Bằngcáchlàmtươngtựnhư trên, chúng ta tiếp tục phân tích hai ca sử dụng còn lạiđể xác định những lớp tương ứng.Cóthểcăncứvàocáckịchbảnmôtảcasửdụngđểtìmcáclớpđốitượng.
-129-
Cáctácnhân Hệthống
1. Ca sử dụng này được bắt đầu thực hiện khi khách được thông báo tổng số tiền phải trả và họ chọn phương thứcthanhtoánbằngCredit.
2.KháchhàngđưathẻCredit vàthẻđưa đọcquađầuđọc.
3. Hệ thống phát sinh yêu c Creditvàgửitớibộphậnd
thẻCreditAuthorizationService
modemđượcgắn với HBH. trảlời.
4.Khinhận được kết quảtrả pháp của thẻ từ CAS, hệ quảtrảlời.
5.Nếu thẻCredit hợp lệ thì
bộphậntàivụ,Accountsố
đisốtiềnphảitrả. 6.Hiểnthịkếtquả.
Cáctácnhân Hệthống
1. Casửdụngnàyđượcbắtđầuthựchiệnkhi kháchhàngđượcthôngbáosốtiềnphảitrảvà chọnphươngphápthanhtoántrảséc(Check). 2. Khách hàng viết Check, đưa Check và
xuất trình drivers license (giấy phép sử dụngcheck)chongườibánhàng.
3. Người bán kiểm tra drivers license và
Check và nhấn nút: CheckAuthorization
đểyêucầukiểmtra.
4.Hệthốngphátsinhyêu nó cho bộ phận kiểm Servicequamodemgắn 5.Nhậnđượckếtquảkiểm
lạicácthôngtintrênCheck. 6.Hiểnthị kếtquả xửlý
Môtảchitiếtcáccasửdụngtrên:
- 130 -
Thu bằng Check Thu bằng thẻ tín dụng
Do vậy,ngoàinhữnglớp đãphân tíchthiết kếởtrên, chúngta cầnbổ sungthêm cáclớp cókiênquan:
ThanhToanTienM (CashPayment)ThanhToanThe (CreditPayment), ThanhToanCheck
(CheckPayment).LiênquanđếnnhữnglớpnàylàTheCredit(CreditCard)vàCheck.Ngoài r a
còn cần những lớp phục vụ cho việc kiểm duyệt thẻ Credit và Check là
CreditAutorizationServicevàCheckAutorizationService.
ChúngtadễnhậnthấycáclớpThanhToanTienM,ThanhToanThevàThanhToanCheck
làkhágiốngnhauvềtínhchấtvàhànhvi.Dovậy,cóthểxemchúngnhưlàkiểucon(subtype) kế
thừatừlớpThanhToan.Mặtkhác,đểthựchiệnđượcthanhtoánbằngthểphảisửdụngTheCre dit
vàđểtrảbằngCheckthìphảicóTheCheck.MỗiTheCreditcóthểmuahàngđượcnhiềulần,c òn
mỗitờTheCheckchỉmuađượcmộtlần.Cácmốiquanhệtrêncủachúngđượcthểhiệntrong biểu đồnhưsau: ThanhToan ThanhToanTienM ThanhToanCheck Trả-bằng * 1 Trả-bằng 1 1 TheCredit TheCheck Hình6-30 CáclớpkếthừacủaThanhToan
Mộtsốlưuý vềlớptổngquát(lớpcơsở)vàcáclớpcon
Trongmốiquanhệkế thừagiữacác lớpluôn yêucầu phảithoảmãnhai quitắc sau:
1. Luật thành viên(Is-a Rule):
Tất cả các thành viên của lớp con (lớp kế thừa) cũng là thành viên của lớp
cha (lớp tổng quát hơn). 2. Luật phù hợp 100%:
Tất cả các đối tượng của lớp (kiểu) con đều phải phù hợp 100% về: + Các thuộc tính,
+ Các mối quan hệ với các đối tượng của lớp cha.
-131-
Ví dụ:
ThanhToan Trả-cho
+tongSoTien PhienBanHang
ThanhToanTienM ThanhToanThe ThanhToanCheck Trả-bằng *
1 Trả-bằng 1 1 TheCredit Check
Hình6-31 Cáclớpkếthừavàluậtthànhviên,luật100%
Theo hai luật trên thì mọi đối tượng của các lớp con ThanhToanTienM, ThanhToanThevàThanhToanCheck đềucóthuộctính tongSoTiennhưởlớpchavàchúngđề u
cóquanhệkếthợp Trả-cho vớilớpPhienBanHang.
Trongthiếtkế hướngđối tượng, mộtvấn đề rấtquan trọnglàphải thiếtlậpđược cáclớptổngquátvàkếthừađểtạoramộtcấutrúcphâncấpgiữacáclớp nhiềunhấtcó thể. Quan hệ kế thừa sẽ hỗ trợ để sử dụng lạinhững thuộc tính, hàm thành phần của lớpchatrongthiếtkếvàcàiđặtcáclớpcon.
Thườngchúngtacóhai cáchthựchiệncôngviệctrên. 1. Phântáchmộtlớpthànhnhiềulớpcon.
2. Gộpmộtsốlớpconthànhlớptổngquáthơn.
Câuhỏi đặt ralàvớinhững điều kiệnnào thìthựchiện phân tách vànhững điều kiệnnàocóthểgộpcáclớplạiđược?
Nguyênnhâncầnphân chiamộtlớpthànhmột sốlớp con
Khixétmộtlớp,ngoàinhữngthuộctínhvàhànhvichung, cácđốitượng còncó: 1. Một sốthuộctínhkhácnhaucầnđượcbổsungvàođểtạothànhnhữnglớp
con cho đốitượng đểcó thêm nhữngđặc tính khácngoài những đặc tính chungcủalớpcha.
2. Một sốquanhệđượcbổsungvàkhácvớilớpđangxét. 3. Cần xửlý,thaotáckhácnhauởnhữnglớpcon.
Ví dụ:hãyphân tíchvà thiết kếcác lớpphụcvụ chohệ thống tínhtiềnlương trả chonhân viêncủa mộtcơ quan.Trướctiênhãyxétlớp NhanVien.Lớpnàycó những thuộc tính chung như họ và tên (hoTen), tuổi (tuoi). Các nhân viên củacơ quanđược tổchứcthànhcácbộphậnnhư:cánbộquản lý,bộ phận marketing,bộphậnbánhàng. Cáchtínhlươngđượcthựchiệnnhưsau:
-132-
+Cánbộquảnlýtínhlươngtheochứcvụhaynhiệmvụđượcgiao, +Nhânviên marketingđượctínhlươngtheogiờlàmviệctrongtháng,
+Cácnhânviênbánhàng đượctrảlươngtheo% hoahồngsốtiềnbánđượchàng. Như vậy, cácbộ phận trên, ngoàinhững thuộc tính chung củaNhanVien còn có thêm những thuộc tính khác nhau, lớp QuanLy có thêm thuộc tính chucVu, lớp
Marketing có thêm gioLaoDong và lớpBanHang có thêm soTienBanDuoc để môtả đượcđúng cácnhânviên trongtừngbộ phận.Nghĩalàtacóthểchia NhanVienthành
QuanLy,MarketingvàBanHangnhưsau: NhanVien +hoTen +tuoi QuanLy chucVu Marketing gioLaoDong BanHang soTienBanDuoc
Hình6-32 ChialớpNhanVienthànhcáclớpcon
Trongquá trình thiết kế, chúng ta thườngthựchiện hoặc gộp một số lớp có một số điểm chung thànhlớp tồng quát,hoặc ngượclại chia nhỏ vàbổ sung thêm một số tính chất đểtạo ranhững lớp con kếthừa lớpđãđược xâydựngtrước. Cách làmnày làm tăng khảnăng sửdụng lại và đảm bảo tính mởcao cũngnhư tính tin cậycủa hệ thống.
Nguyênnhâncầngộplạithànhlớptổngquát
Khimộtsố lớp(gọilàlớpcon)cónhữngtínhchấtsauthìcó thểgộpchúnglạivà tạoramộtlớptổngquát:
1.Cáclớpconcùngthểhiệncácphiênbảncủamộtkháiniệm tươngtự. 2.Cáclớpconđềuthoảhailuật: luật100%vàluậtthànhviên.
3.Cáclớpconcómộtsốthuộctínhgiốngnhauđểcóthểnhómlạithànhlớptổng quáthơn.
4.Cáclớpconđócómộtsốliênkếtchungđểcóthểđưachúngvàolớpcha.
Ví dụ:cáclớpThanhToanTienM,ThanhToanThevàThanhToanCheckcónhiệmvụ
giống nhau là cùng thanh toán cho một phiên bán hàng, nên có thể gộp chúng thành lớpThanhToan nhưhình6-30,6-31.
Tương tự, hai lớp CreditAutorizationServicevàCheckAutorizationServicecóhànhvi giống nhau là cùng làm nhiệm vụ kiểm duyệt và có cùng quan hệ với CuaHang,do vậycóthểgộpchúngthành lớptổngquátlàAutorizationService.Biểuđồmôtảnhữngquan hệđónhưtronghình6-33.
- 133 - AuthorizationService +diaChi Phục-vụ * * CuaHang CreditAuthorizationService CheckAuthorizationService Hình6-33 Lớptổngquáthoá
Đối vớinhững lớp mới, chúng ta lại tìm cách xácđịnh các thuộc tính, các hàm thành phầnvàbổsungnhữngquanhệ cầnthiếtđểhoàn thiệnthiếtkếbiểu đồlớpnhư hình6-28,6-29chotấtcảcáclớp tronghệthống.