Professional Documents
Culture Documents
Bai5 N
Bai5 N
5.1 Mở đầu
Bài giảng đề cập đến mối quan hệ rất quan trọng giữa các lớp – quan hệ liên kết. Quan hệ liên kết là phương tiện hữu
ích trong công nghệ phần mềm từ nhiều năm nay. Phương pháp hướng đối tượng phát triển đã đưa vào nhiều khái niệm
mới như vai trò (role), tổng hợp (composition), lớp liên kết, quan hệ liên kết phân loại. Chúng ta sẽ thấy quan hệ
liên kết và các khái niệm liên quan cho phép định nghĩa và mô tả một cách ngắn gọn nhiều tính chất của miền vấn đề.
Mối kết nối có tên tương ứng với mối quan hệ giữa các thực thể. Đối với kết nối đôi (binary), tên được đặt trên đường
thẳng nối hai đối tượng và nó nằm cách đều hai đối tượng đó. Nhìn từ khía cạnh lập trình, mối kết nối được thực hiện
bằng que chỉ (pointer) bắt đầu từ một đối tượng chỉ sang một đối tượng khác.
Nhóm các mối kết nối với cấu trúc chung và có chung ý nghĩa được mô hình ở bằng quan hệ liên kết (association), gọi
tắt là mối liên kết , cũng giống như nhóm đối tượng với cấu trúc chung và cùng ý nghĩa được mô hình bằng lớp; tên
của quan hệ liên kết được đặt tương ứng với mối kết nối. Bằng cách đó mối kết nối đó là sự xuất hiện của quan hệ liên
kết . Hình 1 cho thấy mối kết nối làm việc trong sơ đồ đối tượng (sơ đồ (a)) và tương ứng với nó là quan hệ liên kết
trong sơ đồ lớp (sơ đồ (b)).
: Person : Person : Person
name = ”Kasia” name = ”Ewa” name = ”Jasio”
(a)
works for works for works for
: Firm : Firm
Person
name
works for
(b)
Firm
kind
Trong ngôn ngữ UML ký hiệu hình tam giác đen được sử dụng để dánh dấu chiều khi đọc tên mối kết nối đôi. Ký hiệu
đó không bắt buộc – nếu nó không được sử dụng, chúng ta sẽ đọc theo quy ước „từ trái sang phải” i từ trên xuống
dưới. Trên Hình 2 tam giác được sử dụng gây nên sự thay đổi hướng khi đọc tên mối liên kết : nhân viên làm việc cho
hãng chứ không phải là ngược lại hãng làm việc cho nhân viên. Nguyên tắc đó cũng được sử dụng trong trường hợp
mối kết nối.
works for
Company Person
Hình 2. Xác định chiều khi đọc kết nối nhờ ký hiệu tam giác.
Tên của mối liên kết không bắt buộc trong trường hợp, khi giữa hai lớp chỉ có một mối liên kết và mối quan hệ này
được suy ra từ tên của các lớp nằm trong mối quan hệ .Ví dụ trên Hình 3 cho thấy tên của lớp gợi ý rằng nhân viên
được tuyển vào hãng. So sánh sơ đồ trên Hình 2 và 3 ta thấy rằng tên của mối liên kết được suy ra từ ý nghĩa thực. Vì
vậy chúng ta nên đặt tên cho các mối liên kết sao cho có thể hiểu ý nghĩa của nó một cách duy nhất.
1 1..*
Company Employee
Hình 3. Mối liên kết không tên nối hai lớp hãng và nhân viên.
Trong trường hợp giữa hai lớp có nhiều hơn một liên kết , đặt tên cho mối liên kết là bắt buộc (Hình 4).
* is a member *
Person Committee
1 is a chairman *
Hình 4. Hai mối liên kết nối lớp người và hội đồng.
Độ lớn của quan hệ liên kết
Ngoài tên gọi, thông tin cơ bản về mối liên kết đó là độ lớn của nó. Đối với liên kết đôi nó xác định số đối tượng của
một lớp có thể kết nối với một đối tượng khác trong lớp đó hoặc trong lớp khác. Thông tin đó thường được ghi bằng
hai dãy ký tự đánh dấu sổ lượng nhiều nhất và ít nhất các đối tượng kiểu đó. Độ lớn được ghi sau mỗi mối liên kết .
Trên Hình 5 đối với mối quan hệ nối lớp A và B, độ lớn xác định”
• Số lượng lớn nhất và nhỏ nhất các đối tượng của lớp B có thể kết nối với một đối tượng của lớp A, ở đây được
ký hiệu bởi A –> B: min, max; hai giá trị này được ghi cạnh lớp B;
• Số lượng lớn nhất và nhỏ nhất các đối tượng của lớp A có thể kết nối với một đối tượng của lớp B, ở đây được
ký hiệu bởi B –> A: min, max; hai giá trị này được ghi cạnh lớp A;
(a)
A A A A A A
1,2
B B B
0..1
A B: min = 0, max = 1 B
B A: min = 1, max = 2
(b)
A A A A A A
2,3
B B B
1..3
A B: min = 1, max = 3 B
B A: min = 2, max = 3
Độ lớn ví dụ Ý nghĩa
trong UML
1 1
1..* 1, 2, 3, ...
2..* 2, 3, 4, ...
3..5 3, 4, 5
2, 4, 18 2, 4, 18
không có Số lượng không được xác định
0..1 hoặc nó bằng 1
0..* 0, 1
* 0, 1, 2, ...
0, 1, 2, ...
Bảng 1. Ký hiệu độ lớn mối liên kết trong ngôn ngữ UML
Chúng ta để ý rằng khi độ lớn không xác định, điều đó có nghĩa là giá trị của nó bằng 1 hoặc nó còn chưa được định
nghĩa, điều này được cho pháp trong giai đoạn đầu khi lạpp mô hình. Tuy vậy nói chung chúng ta nên sử dụng độ lớn
bằng 1 khi mà nó đã được xác định.
Bốn sơ đồ ví dụ mô tả độ lớn của mối liên kết được biểu diễn trên Hình 6:
• Sơ đồ (a) – mỗi nước chỉ có một thủ đô duy nhất; mỗi thủ đô chỉ là thủ đô của một nước;
• Sơ đồ (b) – hãng tuyển một số lượng tùy ý nhân viên; hoặc có thể không tuyển ai cả; nhân viên làm việc chỉ ở
một hãng;
• Sơ đồ (c) – người có thể nhưng không bắt buộc có địa chỉ; có thể có nhiều người có chung một địa chỉ;
• Sơ đồ (d) – trong hãng có ít nhất một nhân viên; mỗi nhân viên chỉ làm việc cho một hãng.
1 1
(a) Country Capital
1 *
(b) Company Employee
0..* 0..1
(c) Person Address
works for
(d) Company Person
1 1..*
* subordinate
* works for 1..*
Company Person
employer employee
0..1 boss
Performance rating
rating
File
*
accessible to access
*
{ access means:
User reading or
reading-writing }
Hình 10. Phân chia thuộc tính một cách không năng động.
Employment
salary
position
Hình 11. Phân chia thuộc tính một cách khác năng động hơn.
Order
order date Client
* 1 surname
is it paid
total amount address
send () reliability ()
close ()
1
Orders’ element
* 1
quantity Product
price
is it sent
Sơ đồ ví dụ các lớp
Hình 13 biểu diễn một sơ đồ ví dụ các lớp phù hợp với các yêu cầu sau đây của khách hàng:
• Hệ có nhiệm vụ lưu trữ thông tin về nhân viên (trong đó có giáo sư), sinh viên và các môn học.
• Môn học có thể nằm trước các môn học khác và bản thân nó có thể nằm sau các môn học khác.
• Mỗi môn học phải chứa ít nhất một bài giảng.
• Mõi bài giảng chỉ có thể là thành phần của một môn học.
• Cần phải lưu trữ thông tin, mỗi sinh viên tham gia vào các môn học nào. Một sinh viên có thể ghi tên học
nhiều môn (ít nhất một môn). Trên một môn học có thể có nhiều sinh viên ghi tên (ít nhất là một sinh viên)
• Mỗi môn học có một giáo sư hướng dẫn. Một giáo sư có thể dạy nhiều môn; cũng có thể không dạy môn nào
cả
Person
enlisted in
Student Employee
previous 1..*
0..1
* Course
next 1 Professor
includes prowadzacy 1
1..*
1..*
Lecture
*
K1
association
K1
K2 K3
association_1
association_2 K2 K3 K
K
(a) (b)
Paper
{abstract}
title
authors [1..*]
Session
name
0..1
Invited Regular presented at date
paper paper 1..* 0..1
1
mark
Paper/Session
hour
presented at
Paper/Session
hour
Hình 15. Mối liên kết được thuyết trình bởi nối lớp buổi thuyết trình với các lớp dưới
Paper/Session
hour
Paper
{abstract}
1..*
title
authors [1..*] presented at
0..1
Session
name
Invited Regular date
paper paper
mark
Hình 16. Mối liên kết thuyết trình nối lớp Buổi thuyết trình với lớp trên.
Session
name
Invited Regular date
paper paper
mark
Hình 17. Các giới hạn còn thiếu trong Hình 16 được định nghĩa thêm
Tình huống sẽ khác đi nếu như các mối liên kết không những chỉ có ý nghĩa và cấu trúc giống hệt nhau, mà còn có
cùng độ lớn. Ví dụ sơ đồ chứa các mối quan hệ này được biểu diễn trên Hình 18(a); sơ đồ tương đương được biểu diễn
trên hình 18(b). Dễ dàng có thể đế ý rằng, trong trường hợp này không cần phải định nghĩa giới hạn liên quan đến độ
lớn của mối quan hệ.
Vehicle Company
1
owns
Car Truck
Samochód
* *
purchase date
is owned by is owned by
*
Vehicle
1 1
Company
Firma Car Truck
(a) (b)
Hình 18. Ví dụ thừa kế mối liên kết trong trường hợp độ lớn của mối quan hệ bằng nhau
Mối liên kết dẫn xuất (derivative asociation)
Liên kết dẫn xuất đó là mối liên kết , mà sự tồn tại của nó được suy ra từ các mối liên kết khác. Chúng ta để ý rằng
phù hợp với định nghĩa này, lien kết dẫn xuất không đem lại một thông tin mới nào cả. Vì vậy để làm đơn giản hóa sơ
đồ chúng ta không nên đánh dấu các mối liên kết loại này, trừ khi sự đánh dấu nó trên sơ đồ có ích lợi gì đó, ví dụ rút
ngắn đường tìm kiếm. trong trường hợp đó yêu cầu mối liên kết phải được đánh dấu rõ ràng là liên kết dẫn xuất, sử
dụng dấu gạch chéo trước tên mối liên kết .
Vấn đề nêu trên được biểu diễn trên Hình 19: nếu một người được mô hình hóa bởi lớp Người, sống ở thành phố mà
người đó làm việc, thì một trong hai mối liên kết : sống ở (sơ đồ (a)) hoặc làm việc ở (sơ đồ (b)) là liên kết dẫn xuất.
Tình huống này sẽ thay đổi, khi người đó không làm việc, có nghĩa là độ lớn của vai trò người giao việc của lớp Hãng
sẽ là 0..1, không phải đúng là 1.
1..* /lives in 1
Person City
1..* 1
1 employer
is in
Company
1..*
1..* lives in 1
Person City
1..* 1
works for
(b)
1 employer
/is in
Company
1..*
(a) (b)
Hình 20. Cách bỏ qua lớp liên kết (thay thế bằng lớp thông thường)
Phương pháp trình bày ở trên được biểu diễn trong HìnhHình 21. Chúng ta để ý rằng, do độ lớn của mối liên kết giữa
lớp Người và Hãng bằng 1 nên tồn tại một mối liên kết gián tiếp, vai trò dẫn xuất của người giao việc và mối liên kết
nối hai lớp này.
Person Company
1..* *
Employment
position
salary
1
Person position Company
1 * 1..*
salary
1 *
K1 r1 r2
K2
a
:K2
incorrect :K1
diagram
(a) :K2
a
correct
diagram :K1 a
:K2
* a 1..2
(b) K1 K2
{ordered}
works for
* 0..1
works for
is a company manager
Hình 24. Ví dụ hai mối liên kết / kết nối nối các lớp/đối tượng giống nhau
Từ khía cạnh thực hiện vai trò nhiều giá trị tương ứng với tập hợp nối với một đối tượng của lớp nằm ở cuối mối liên
kết .
(a) Employment
employment date
dissmisal date
position
salary
: Employment
01.01.1990
15.12.1995
X : Person ”programmer”
Y : Company
2000
(b)
: Employment
01.01.1998
NULL
”analyst”
5000
(a) Employment
employment date
dissmisal date
position
salary
: Employment
01.01.1990
15.12.1995
(b) ”programmer” : Company
: Person
2000
: Employment
01.01.1998
NULL
”analyst”
5000
Employment
1 * employment date 1..* 1
(a) Osoba dissmisal date Firma
position
salary
: Employment
01.01.1990
15.12.1995
”programmer”
2000
: Employment
01.01.1998
NULL
”analyst”
5000
Hinh 27. Ứng lớp trung gian thay thế {bag} và «history»
Kết tập (Aggregation)
Kết tập là một loại liên kết đặc biệt, được sử dụng để mô hình hóa mối quan hệ một phần-tổng thể. Ví dụ của Kết tập là
mối quan hệ giữa động cơ và ô tô, mà động cơ đó là thành phần. Tiếc rằng chưa có một định nghĩa nhất quán cho mối
liên kết này; trường hợp cụ thể, P. Coad đưa ra ví dụ mối liên hệ gộp giữa lớp Hãng và lớp nhân viên, trong khi đó J.
Rumbaugh cho rằng Hãng không phải là gộp các nhân viên. Trong nhiều trường hợp quan hệ kết tập là tất nhiên,
nhưng trong nhiều trường hợp khác mối quan hệ đó không có thể định nghĩa rõ ràng, ngay cả trong trường hợp động cơ
và ô tô, bởi vì động cơ có thể bán như một thứ hàng hóa không liên quan đến bất kỳ ô tô nào. Ngoài ra câu hỏi có thể
đặt ra: chúng ta nghiên cứu một chiếc ô tô và một động cơ cụ thể hay một loại ô tô và một loại động cơ? Các nghi vấn
xung quanh khái niệm Kết tập còn có nguyên nhân là nó được sử dụng để giải thích một số giới hạn trongmô hình dữ
liệu. Ví dụ, sự giải thích phổ biến hiện tượng thừa kế nhiều lần đó là có thể sủ dụng Kết tập để thay thế, điều này là vô
nghĩa nếu nhìn từ khía cạnh mô hình khái niệm, tương tự khẳng định „mối quan hệ liên kết là không cần thiết vì chúng
ta có thể thay thế nó bằng thuộc tính”.
Ví dụ kết tập được biểu diễn trên Hình 28 (hình thoi rỗng đánh dấu Kết tập được đặt ở phía đối tượng-tổng thể, được
gọi kết tập ): Thành phần của lớp có thể bao gồm từ một đến 15 sinh viên, sinh viên có thể là thành viên của một số
lượng các nhóm tuỳ ý; đối với mỗi sinh viên thông tin trong thời gian nào sinh viên thuộc nhóm nào được lưu trữ.
* 1..15
Group Student
Student/Group
assigned since
assigned to
o1 : K
1
(a) K o2 : K
1
o3 : K
0..1
(b) K
1
1
(c) K
0..1
Hình 30. Quan hệ kết tập với ít nhất một độ lớn bằng 1
Từ chứng minh trên suy ra sơ đồ trên Hình 31(b) và 31(c) cũng không đúng.
Sơ đồ lớp và đi cùng nó sơ đồ đối tượng trong trường hợp, khi mà độ lớn của vai trò ở phía thành phần là đa đối tượng,
được biểu diễn trên Hình 32(a) và 32(b). Cũng như trên, cả hai vai trò đều phải có số lượng kết nối không bắt buộc.
:K
0..1
K :K :K :K
*
:K :K :K
(a) (b)
Hình 31. Quan hệ kết tập với độ lớn 0..1 và đa đối tượng
Hai sơ đồ ví dụ cho vấn đề nói đến trong Hình 32(a) được biểu diễn trên Hình 33: sơ đồ (a) cho biết rằng một phần có
thể tạo nên từ những thành phần khác, còn sơ đồ (b) biểu diễn trường hợp, khi mà thành phần của mỗi phòng trong
hãng lại là các phòng khác của hãng đó.
Część
nazwa 0..1
1 0..1
*
materiał Firma Oddział
wymiary
*
*
(a) (b)
Hình 32. Sơ đồ lớp của vấn đề nói đến trong HìnhHình 31 (a)
Hình 33 (a) minh họa trường hợp khi độ lớn của quan hệ kết tập là đa đối tượng. Trong trường hợp này mỗi đối tượng
của lớp K được tạo nên từ một số lượng tùy ý các đối tượng khác của lớp K và bản thân nó cũng có thể là thành phần
của một số lượng tùy ý các đối tượng khác của lớp K (Hình 34(b)).
:K
*
K
:K :K :K
*
:K :K :K
(a) (b)
Hình 33. Quan hệ kết tập rekursive với hai độ lớn đa đối tượng
Hình 34 biểu diễn ví dụ phức tạp hơn, sử dụng mối quan hệ kết tập rekursive. Sơ đồ (a) là mô hình chương trình máy
tính, nó bao gồm các khối chương trình, đó là các lệnh đơn giản hoặc các lệnh phức là tổng hợp các khối chương trình.
Sơ đồ (b) biểu diễn sơ đồ các biểu thức đại số, đó là: hằng số, biến đơn hoặc nó là liên kết của hằng số và biến nối với
nhau bởi phép toán. Chúng ta để ý rằng, trong ví dụ này độ lớn của quan hệ kết tập ở phía thành phần không cho phép
số lượng tùy ý – đó không phải là lỗi, bởi vì lớp biểu diễn thành phần có ít nhất một lớp con, mà nó không tham gia vào
quan hệ gộp.
Program
1
*
1..*
Blok
(a)
Instrukcja Instrukcja
złożona prosta
0..1
2-gi operand
1
1-szy operand 1
Człon
(b) *
Wyrażenie Zmienna Stała
operator binarny nazwa wartość
*
0..1
Pracownik Ubezpieczenie
dotyczy
3..*
Punkt
{ordered}
Wielobok
* Styl
1
kolor
czy wypełniony
Chúng ta hãy phân tích ví dụ trên Hình 38, ở đây tập xếp (stack) được thực hiện nhờ định nghĩa danh sách (list). Trên
sơ đồ (a) lớp Stack là lớp con của lớp List, vì vậy nó thừa kế mọi tính chất của lớp List. Tuy thế tình huống này xảy ra
ngoài ý muốn, bởi vì Stack chỉ nên cho phép sử dụng các phép toán liên quan đến cấu trúc này, ví dụ push, pop, top,
v.v...chứ không nên cho phép sử dụng các phép toán của list. Lời giải khác được trình bày trên sơ đồ (b), ở đây lớp
Stack chứa thuộc tính nội dung dạng List – bằng cách đó đối tượng lớp Stack chứa đối tượng con thuộc lớp List, kết quả
là các hành động phục vụ đối tượng Stack một phần được chuyển sang đối tượng của lớp List. Nhìn từ góc độ thực
hiện, cách giải quyết này tương đương với việc sử dụng trong phương pháp push, pop i top các phương pháp của lớp
List. Tuy vậy đối tượng lớp Stack không có quyền sử dụng trực tiếp các phương pháp của lớp List (sơ đồ (a)).
Lista
...
ustaw na pierwszy
ustaw na następny
Stos
ustaw na ostatni zawartość
dodaj
pobierz top
usuń push
pop «instanceOf»
Lista
...
Stos ustaw na pierwszy
ustaw na następny
zawartość
ustaw na ostatni
top dodaj
push pobierz
pop usuń
(a) (b)
Ở mỗi đầu của mối liên kết có thể định nghĩa yếu tố phân loại, đó là tập các thuộc tính (ít nhất một phần tử), nhiệm vụ
của nó để nhận dạng các đối tượng của lớp đặt ở đầu thứ hai của mối quan hệ này. Mối liên kết , mà có xác định các
yếu tố phân loại, gọi là mối liên kết phân loại. Yếu tố phân loại được đặt trong hình chữ nhật nằm cạnh ký hiệu lớp.
Hình 39 cho thấy ví dụ sử dụng mối liên kết phân loại. Sơ đồ (a) biểu diễn hai lớp Thư mục và Tệp, nối với nhau bằng
quan hệ liên kết . Giả sử rằng, đối với lớp Tệp chúng ta định nghĩa giới hạn cho thuộc tính tên tệp, theo giới hạn này tên
các tệp trong cùng một thư mục phải phác nhau. Sơ đồ tương đương sử dụng mối liên kết phân loại được biểu diễn trên
hình (b), ở đây thông tin: mỗi tên xác định một cách duy nhất một tệp, được biểu diễn bằng:
• Yếu tố phân loại tên tệp ở phía Thư mục;
• Độ lớn 0..1 ở phía Tệp. Giới hạn dưới của độ lớn (0) có nghĩa lá cho phép giá trị của yếu tố phân loại, mà
không xác định một đói tượng nào.
1 * Plik
(a) Katalog
nazwa pliku
1 0..1
(b) Katalog nazwa pliku Plik
Hình 39 cho thấy ví dụ yếu tố phân loại, mà thành phần của nó chứa nhiều hơn một thuộc tính. Yếu tố phân loại này là
tập hai thuộc tính {hàng, cột}, nó cho phép xác định một cách duy nhất hình vuông trong bảng được xây dựng từ 100
hình vuông.
1 100 Kwadrat
(a) Tablica
rząd
kolumna
Hình 39. Ví dụ yếu tố phân loại tạo nên bởi hai thuộc tính
Mối kêt hợp phân loại, cũng như mối liên kết khác, có thể có thuộc tính. Ví dụ, đối với mối liên kết trên Hình 41 và 42
chúng ta định nghĩa lớp Tài khoản lưu trữ thông tin về tài khoản. Để ý rằng, tên tài khoản xác định một cách duy nhất
chủ nhân của nó (Hình 40) hoặc các chủ nhân của nó (theo HìnhHình 41 tài khoản có thể có 3 chủ nhân), vì vậy thuộc
tính số tài khoản có thể coi là yếu tố phân loại. Yếu tố phân loại không bắt buộc ở phía Người có nghĩa là Ngân hàng có
thể có các số tài khoản tự do.
Bank Osoba
* *
(a) imię
nazwa nazwisko
Konto
nr konta
data założ.
{ do konta jest przypisana
dokładnie 1 osoba }
Bank Osoba
* 0..1
(b) nr konta imię
nazwa nazwisko
Konto
data założ.
Hình 40. Mối liên kết phân loại với độ lớn 0..1
Bank Osoba
* *
imię
(a) nazwa nazwisko
Konto
nr konta
data założ.
{ do konta są przypisane
co najwyżej 3 osoby }
Bank Osoba
* 0..3
(b) nr konta imię
nazwa nazwisko
Konto
data założ.
Liên kết n-ngôi đó là mối liên kết , mà sự xuất hiện của nó nối n đối tượng nằm nhiều nhất trong n lớp khác nhau:
Liên kết 3 ngôi nối 3 đối tượng, liên kết 4 ngôi nối 4 đối tượng. Liên kết n – ngôi được biểu diễn ở dạng hình thoi, từ
đó có các đường liền nối với các lớp, ngoài ra còn có các đường ngắt quãng nối với các lớp liên kết . Tên của mối liên
kết được đặt ở gần hình thoi. Tương tự như trong trường liên kết đôi, tên có thể bỏ qua, nếu tên có thể suy ra từ ngữ
cảnh, có nghĩa là suy ra từ tên của lớp và từ tính chất của lớpliên kết . Nếu lớp tham gia vào quan hệ liên kết nhiều
hơn một lần, có nghĩa là nó có thể xuất hiện nhiều hơn 1 vị trí trong mối liên kết , ví dụ lớp K1 trên Hình 43, lúc đó đối
với lớp này cần phải định nghĩa vai trò.
rola2
K1 rola1
K3
K2
mecz * sędzia
*
Zespół * Osoba
zawodnik
Zapis
data
stadion
gole gospodarzy
gole gości
Hình 43. Ví dụ liên kết 3 – ngôi cùng độ lớn và lớp liên kết
A K2
K1 K3
K1 A K3
a1
KA a2
a1 m1
a2
m1
Hình 44. Sơ đồ thay thế liên kết nhiều ngôi bằng liên kết đôi
Osoba
{abstract} «interface»
IPracownik
imię
nazwisko
data urodzenia
+ zmień pensję
policz wiek
Firma
Pracownik
pensja
stanowisko
zmień pensję
Firma
Pracownik
Osoba