Hình 6. Chuyển quan hệ nhị phân với lượng từ[3]
Vế trái của hình vẽ trên biểu diễn liên kết nhị phân giữa 2 lớp với lượng từ tham gia. Vế phải là biểu diễn nhị phân của 2 lớp, nhưng lúc này ta không quan tâm tới lượng tử tham gia của 2 lớp trong mối liên hệ.
Giải thích viết tắt cho hình 6.
ra : Tên vai trò của Class B với Class A, ra : B -> set A rb : Tên vai trò của Class A với Class B, rb : A->set B
la..ha : Với một đối tượng là thể hiện của Class B thì số lượng đối tượng của Class A liên hệ với nó trong đoạn từ la đến ha tương tự như vậy với lb..hb.
Cả ra, rb đều được gọi với thuật ngữ chung là mút liên kết -association end .
Biểu diễn ràng buộc bằng OCL
Như đã thấy trong Hình 8 để vế trái và vế phải tương đương nhau thì ta phải thêm vào vế phải ràng buộc OCL[5]. Ràng buộc được đưa ra nhằm biểu diễn ràng buộc về số lượng la..ha và lb..hb thành các ràng buộc OCL[5].
Ràng buộc OCL được thêm vào Ràng buộc tương đương trong Alloy
A->forAll(a | a.rb->size >= lb and a.rb- >size <= hb) and B->forAll(b | b.rb- >size>=la and b.rb->size <= ha)[4]
all a : A | #a.rb >=lb and #a.rb <=hb all b: B | #b.ra >=la and #b.ra <=ha
Các ràng buộc sẽ được đặt trong các sự kiện trong Alloy[2], điều đó đảm bảo các ràng buộc sẽ luôn luôn được tham chiếu trong suốt quá trình thực thi chương trình.
Ví dụ
24 Hình 7. Ví dụ chuyển quan hệ nhị phân với lượng từ
Sau khi chuyển thì lúc này chúng ta không cần quan tâm tới lượng từ tham gia liên kết của 2 lớp nữa.
Dưới đây chúng ta sẽ chuyển vế phải của Hình 9 sang biểu diễn Alloy[2]. Ở đây mỗi một lớp chuyển thành một ký hiệu trong Alloy[2], các ràng buộc OCL[5] chuyển tương ứng thành các biểu thức logic Alloy[2].
Bảng 4. Chuyển đặc tả OCL của lớp Student sang Alloy
UML[1] và đặc tả OCL Biểu diễn Alloy
class Student sig Student
class Teacher sig Teacher
Student->forAll(s | s.study->size >=5 and s.study->size <=10) and
Teacher->forAll(t | t.teach->size >=25 and t.teach->size <=50)
all s : Student | #s.study >=5 and #s.study <=10
all t : Teacher | #t.teach >=25 and t.teach <=50
study : Student -> set Teacher chuyển thành một trường trong sig Student
teach : Teacher -> set Student chuyển thành một trường trong sig Teacher
25
Biểu diễn đặc tả Alloy
Hình 8. Đặc tả Alloy lớp Student