Với mỗi lớp được tạo ra trong biểu đồ lớp như hình 4-10, chúng ta mong muốn tìm được những thuộc tính sao cho:
Đầy đủ: chứa đựng tất cả các thông tin vềđối tượng của lớp,
Tách biệt hoàn toàn: mỗi thuộc tính thể hiện được một đặc tính khác nhau của
đối tượng,
Độc lập với nhau: đố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ộc tính có thể được suy dẫn từ những thuộc tính khá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ớp phải được xác định trên cơ sở các yêu cầu thực hiện công việc hoặc cần để
tổ chức, lưu trữ, trao đổi các thông tin vềđối tượng.
Trong mô hình hoá các khái niệm, có thể có những nhầm lẫn giống nhau. Nhiều khi ta sử dụng nhữ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 chúng.
Sau đây chúng ta xét một số lưu ý nhằm xác định chính xác các thuộc tính cho lớp nhằm đáp ứng các nguyên tắc cơ bản và tránh được những sai sót trên.
Đảm bảo các thuộc tính đơn giả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ý:
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ỷ: Boolean, Number, String (Text), Time, v.v.
Một số các kiểu phổ dụng bao gồ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 quan hệ 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án hàng đang sử dụng hệ thống bán
hàng nào đó. Bởi vì hệ thống HBH là lớp, nên nó là kiểu phức tạp. Do vậy, cách làm như thế không phải là tốt (hình 4-12 (a)). Để thể hiện được mối quan hệ này, ta có thể
sử dụng mối quan hệ kết hợp như hình 4-12 (b).
Hình 4-12 (a) Trường hợp thiết kế lớp không tốt
Hình 4-12 (b) Tốt hơn là chuyển thuộc tính phức thành quan hệ kết hợp Qui tắc hướng dẫn đầu tiên là:
Sử dụng giá trị dữ liệu thuần tuý
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 duy nhất không có nhiều ý nghĩa trong ngữ
cảnh của mô hình hệ thống. Ví dụ, đối với những kiểu dữ liệu nguyên thuỷ thì: + Không cần tách biệt các giá trị số giống nhau,
+ Không cần tách biệt các thể hiện của SoDienThoai mà chúng có thể có cùng số, + Không cần tách biệt hai địa chỉ vì chúng có thể giống nhau, v.v.
Song, đối với các đối tượng thì việc phân biệt chúng (thông qua định danh) 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 trong hệ thống phải được xác định riêng biệt bằng định danh.
Qui tắc hướng dẫn thứ hai là:
NguoiBan ten: String heThongHienThoi: HBH HBH soHieu: Int NguoiBan ten: String 1 Sử-dụng 1 Sử dụng thuộc tính phức hợp
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.
2. Phần tử của kiểu dữ liệu thuần tuý có thể được xác định 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ông sử dụng thuộc tính như 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 đó. Trong thiết kế mô hình CSDL quan hệ thì nguyên lý này bị vi phạm vì, người ta thường sử dụng thuộc tính là khoá ngoại để 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ười bán hàng sử dụng hệ thống bán hàng có số hiệu xác định. Mặc dù thuộc tính này là thuộc tính đơn (không vi phạm hướng dẫn 1), nhưng nó là khoá ngoại vì thế vẫn không tốt và do đó, nên thay bằng quan hệ kết hợp như hình 4-13 (b).
Hình 4-13 (a) Trường hợp sử dụng khoá ngoại
Hình 4-13 (b) Tốt hơn là chuyển thuộc tính phức thành quan hệ kết hợp Từđó ta có qui tắc hướng dẫn thứ ba.
Tìm thuộc tính ởđâu và như thế nào?
Đọc kỹ các mô tả bài toán, nghiên cứu các hồ sơ các chức năng hệ thống, các
đặt tả ca sử dụng, các kịch bả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ác mục này thườ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ụ: khi xem xét
luồng các sự kiện: “Đối với mỗi mặt hàng, người bán nhập vào mã sản phẩm thông qua máy đọc thẻ và số lượng hàng mà khách hàng chọn mua”. Như vậy, trong lớp MatHang 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ẫn nêu trên để xác định chính xác các thuộc tính:
đặc tính xác định phạm vi quan sát, tên gọi, kiểu và giá trị khởi đầu (nếu có) của mỗi thuộc tí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 định lại những thuộc tính của từng lớp.
Gán các thuộc tính cho các lớp đối tượng trong biểu đồ lớp. NguoiBan ten: String soHieuHT: int HBH soHieu: int NguoiBan ten: String 1 Sử-dụng 1 Sử dụng thuộc tính đơn nhưng là dạng khoá ngoại
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 (khoá ngoại).