- 17
4.5.1 Tìm kiếm các thuộc tính
Vớimỗilớpđược tạoratrongbiểuđồlớp nhưhình4-6,chúngtamongmuốntìm đượcnhữngthuộctínhsaocho:
Đầy đủ (Complete):chứađựngtấtcảcácthôngtinvềđốitượngcủalớp,
-77-
Tách biệt hoàn toàn (full factored):mỗithuộctínhthểhiệnđượcmộtđặctính
khácnhaucủađốitượng,
Độc lập với nhau (mutually independent):đối với mỗi đối tượng, các giá trị
của các thuộc tính là độc lập với đối tượng khác, tốt nhất là loại bỏ những thuộctínhcóthểđượcsuydẫntừnhữngthuộctínhkhác.
Liên quan đến các yêu cầu và các ca sử dụng: các thuộc tính được đưa vào
lớpphảiđượcxácđịnhtrêncơ sởcácyêucầuthựchiệncôngviệchoặccầnđể tổchức,lưutrữcácthôngtinvềđốitượng.
Trongmôhìnhhoácáckháiniệm có thể có những nhầm lẫn giống nhau là nhiều
khi ta sử dụng thuộc tính để biểu diễn cho những cái mà đáng lý ra phải sử dụng khái
niệm lớp hay các mối quan hệ liên kết để thể hiện nó.
Sau đây chúng ta xétmột số lưu ý nhằm xác định chính xác các thuộc tính cho lớpnhằmđápứngcácnguyên tắccơbảnvàtránhđượcnhữngsaisóttrên.
Đảmbảo cácthuộctínhđơngiản
Các thuộc tính trong mô hình lớp phải là những thuộc tính đơn giản hoặc là những kiểu dữ liệu thuần tuý (pure data type):
Một cách trực quan, thuộc tínhđơn giản nhất là những thuộc tính có giá trị kiểu dữ liệu nguyên thuỷ (primitive data type): Boolean, Number, String
(Text), Time, v.v.
Một sốcáckiểuphổdụngbaogồm: DiaChi (Address), MauSac (Color), HinhHoc
(Geometrics), SoDienThoai (PhoneNumber), SoBaoHiem (SocialSecurityNumber), MaSanPham (Universa ProductCode), các kiểu liệt kê (EnumeratedTypes), v.v.
Thông thường, nên cố tránh những thuộc tính phức tạp và nên thay vào đó là những quanhệ liên kết giữa các lớp. Ví dụ: hãy xét lớp NguoiBan,có thể đưa thuộc tính heThongHienThoi vàođể thểhiện làngười bánhàng đang sửdụng hệ thốngbán hàng nàođó.Bởi vìhệthốngHBH làlớp, nênnó làkiểu phức tạp. Do vậy, cách làm như thếkhôngphảilàtốt (hình4-12 (a)). Đểthểhiệnđượcmốiquanhệnày, tacóthể sửdụngmốiquanhệkếthợpnhưhình4-12(b).
NguoiBan Sử dụng thuộc tính phức hợp ten: String
heThongHienThoi: HBH
Hình4-12 (a)Trườnghợpthiếtkế lớpkhôngtốt
-78 -
NguoiBan ten: String
1 Sử-dụng 1 HBH soHieu: Int
Hình4-12(b)Tốthơnlàchuyểnthuộctínhphứcthànhquanhệkếthợp Quitắchướngdẫnđầutiênlà:
1. Liên kết các khái niệm với nhau bằng quan hệ kết hợp, không
bằng các thuộc tính phức hợp.
Sửdụnggiátrịdữliệuthuầntuý
Nói một cách tổng quát, các thuộc tính phải có giá trị dữ liệu thuần tuý hoặc
kiểu Data Type trong UML, trong đó việc xác định duynhất không có nhiềuý nghĩa
trong ngữ cảnhcủamô hìnhhệ thống. Ví dụ:đối vớinhữngkiểu dữliệu nguyên thuỷ thì:
+ Khôngcầntáchbiệtcácgiátrịsốgiốngnhau,
+ Khôngcầntáchbiệtcácthểhiệncủa SoDienThoaimàchúngcóthểcócùngsố, + Khôngcầntáchbiệthaiđịachỉvìchúngcóthểgiốngnhau,v.v.
Song,đốivớicácđốitượngthìviệcphânbiệtchúng(thôngquađịnhdanh)lại có
ý nghĩa và bắt buộc. Ví dụ: hai khách hàng có thể cùng tên “Nguyễn Lam”, nhưng
tronghệthốngphảiđượcxácđịnhriêngbiệtbằngđịnhdanh(Identity). Quitắchướngdẫnthứhailà:
2. Phần tử của kiểu dữ liệu thuần tuý có thể được biểu diễn trong
một thuộc tính của một lớp, mặc dù nó cũng có thể được sử dụng như
một khái niệm (lớp) tách biệt trong mô hình.
Khôngsửdụngthuộctínhnhưkhoángoại
Các thuộc tính không nên sử dụng để liên kết các khái niệm lại với nhau trong mô hình khái niệm, mà chỉ được sử dụng để lưu giữ các thông tin chính các đối tượng của
lớp có các thuộc tính đó.TrongthiếtkếmôhìnhCSDLquanhệthìnguyênlýnàybịvi
phạm vì, ngườita thường sử dụng thuộc tính là khoá ngoại (Foreign Key)để kết nối hai kiểu thực thể với nhau. Ví dụ: trong hình 4-13 (a), lớp NguoiBan có thuộc tính
soHieuHT được xem như là khoá ngoại để thể hiện một ngườibán hàng sửdụng hệ
thống bán hàngcó số hiệu xác định. Mặcdùthuộc tínhnàylà thuộc tínhđơn (không viphạmhướng dẫn1),nhưngnólàkhoángoạivìthếvẫn khôngtốtvàdođó,nênthay bằngquanhệkếthợpnhưhình4-13(b). NguoiBan ten: String soHieuHT:79 - Sử dụng thuộc tính đơn nhưng là dạng khoá ngoại
Hình4-13(a)Trườnghợpsửdụngkhoángoại
NguoiBan ten: String
1 Sử-dụng 1 HBH soHieu: Int
Hình4-13(b)Tốthơnlàchuyểnthuộctínhphứcthànhquanhệkếthợp Từđótacóquitắchướngdẫnthứba.
3. Nên kết nối các khái niệm với nhau bằng các quan hệ kết hợp, không sử dụng thuộc tính.
Tìmthuộctínhở đâuvànhưthếnào?
Đọckỹcácmô tảbàitoán, nghiêncứucáchồsơcácchứcnănghệ thống, các đặttảcasửdụng,cáckịchbảnđể tìm tất cả những thông tin, dữ liệu cần phải
lưu trữ, xử lý và cập nhật.Cácmụcnàythường làcác danh từ, hoặc mệnh đề
danh từ đơn, được xem như là đại biểu của các thuộc tính. Ví dụ:khixemxét
luồng cácsự kiện:“Đốivớimỗimặt hàng,ngườibán nhậpvào mã s ản phẩm thôngquamáyđọcthẻvàsốlượnghàngmàkháchhàngchọnmua”.Nhưvậy,
trong lớpMatHang tất nhiên phải có thuộc tính maSanPham, và qua nó có thể xác định được tên gọi, chủng loại, giá bán, v.v là những thuộc tính của
MoTaMatHang.
Sử dụng các qui tắc hướng dẫnnêutrênđểxácđịnhchínhxáccácthuộctính:
đặctính xácđịnh phạmvi quansát, tên gọi, kiểu vàgiá trịkhởiđầu (nếu có) củamỗithuộctính.
Đọc những giả thiết, sự phân loại hay những qui ước cần áp dụng cho hệ
thống hiện thờiđểkhẳngđịnhlạinhữngthuộctính củatừnglớp.
Gán các thuộc tính cho các lớp đối tượngtrongbiểuđồlớp.