Ràng buộc miền bằng ngôn ngữ OCL

Một phần của tài liệu Mô hình hóa chuyên biệt miền cho ứng dụng web (Trang 27 - 31)

Một mô hình đồ họa không đủ để đặc tả chính xác và rõ ràng các ký pháp đồ họa, cần thêm vào các ràng buộc trên các đối tượng, để ràng buộc các đối tượng chúng ta sẽ sử dụng ngôn ngữ OCL (Object Constraint Language) cho phép ràng buộc trên các đối tượng mô hình. Ngôn ngữ OCL là một trong các ngôn ngữ cho phép ràng buộc trên các đối tượng.

OCL không phải là một ngôn ngữ lập trình, không thể viết chương trình logic hoặc luồng điều khiển trong OCL. OCL là một ngôn ngữ biểu thức, và các

biểu thức OCL không tạo ra hiệu ứng nghĩa là không làm thay đổi trạng thái của các đối tượng. OCL là một ngôn ngữ kiểu mỗi một biểu thức OCL có một kiểu, kiểu trả về của biểu thức OCL có thể là bất kỳ kiểu nào.

OCL được sử dụng cho nhiều mục đích khác nhau như: Ngôn ngữ truy vấn; xác định tính bất biến trên các lớp và các kiểu trong mô hình lớp; xác định tính bất biến cho Stereotypes; mô tả tiền điều kiện và hậu điều kiện cho các hoạt động và phương thức; mô tả Guards; xác định các ràng buộc cho hoạt động [14]. Ví dụ như lớp HOCVIEN, chúng ta muốn ràng buộc thuộc tính Noisinh của học viên ở Hà Nội, khi đó mô hình đồ họa không đủ để diễn tả, chúng ta có thể sử dụng biểu thức OCL để ràng buộc như sau:

Context HOCVIEN inv: Self. Noisinh= “Hà Nội”

Đặc tả OCL trên biểu đồ: Biểu diễn các biểu thức đặc tả OCL ngay trên biểu đồ hoặc bằng tài liệu, người xem có thể tham chiếu từ các biểu đồ đến tài liệu này [15].

2.2.2.1. Khai báo ngữ cảnh

Khai báo ngữ cảnh bắt đầu bằng từ khóa context và tiếp đến là tên ngữ cảnh. Ví dụ: Khai báo ngữ cảnh có tên là Bank: context Bank

2.2.2.2. Khai báo một bất biến

Khai báo bất biến là một ràng buộc được liên kết tới một lớp cụ thể trong một ngữ cảnh cụ thể. Mục đích của một ràng buộc bất biến là chỉ rõ sự bất biến tại môt khía cạnh nào đó của lớp. Một ràng buộc bất biến chứa một biểu thức OCL. Biểu thức này phải đúng cho mọi thể hiện của phân loại lớp tại mọi thời điểm.

Ví dụ: context NHANVIEN

inv: seft. Hesoluong >=3. 33

2.2.2.3. Tiền điều kiện và hậu điều kiện

Tiền điều kiện và hậu điều kiện là các ràng buộc liên kết tới phương thức của một phân loại lớp. Mục đích của tiền điều kiện là chỉ rõ điều kiện phải có trước khi phương thức thực thi. Tiền điều kiện chứa một biểu thức OCL (kết quả trả về là kiểu Boolean). Biểu thức OCL này phải được đánh giá là đúng bất cứ

khi nào phương thức bắt đầu thực thi, nhưng việc đánh giá này chỉ áp dụng cho thể hiện thực thi phương thức.

Hậu điều kiện cũng được biểu diễn bằng một biểu thức OCL (kết quả trả về là kiểu Boolean). Việc đánh giá biểu thức OCL tại thời điểm kết thúc thực thi phương thức. Bên trong ràng buộc tiền điều kiện không sử dụng toán tử @pre nhưng bên trong ràng buộc hậu điều kiện có thể sử dụng @pre để tham chiếu tới giá trị của tiền điều kiện.

Ví dụ: context Person::income(d:Date) Return integer

pre preOK: d > 0

post postOK: result > 5000

2.2.2.4. Ngữ cảnh gói

Một mô hình thường có các mô hình con, do vậy OCL cung cấp cho chúng ta cặp từ khóa package và endpackage để làm tăng sự rõ ràng khi nhóm lại các khai báo bất biến, tiền điều kiện, hậu điều kiện,… thuộc về cùng một ngữ cảnh nào đó trong cụm từ khóa package và endpackage.

Ví dụ:

package Package::SubPackage

context X inv

context X::operationName (para1: Type1, para2: Type2,. . ) Return Type

pre preconditionName

post postconditionName

endpackage

2.2.2.5. Biểu thức Body

Biểu thức Body là một biểu thức liên kết tới một phương thức phân loại lớp. Nó được đánh dấu tới phương thức truy vấn. Hành vi của một biểu thức OCL như một Body phương thức phải thỏa mãn kiểu kết quả trả về của phương thức. Biểu thức Body có thể sử dụng lẫn với các biểu thức trong ràng buộc tiền điều kiện và hậu điều kiện.

Ví dụ: (adsbygoogle = window.adsbygoogle || []).push({});

context Person::getCurrentSponse():Person

pre: selt. isMarried = true

2.2.2.6. Giá trị khởi tạo và giá trị dẫn xuất

Một biểu thức khởi tạo giá trị là một biểu thức được liên kết tới một thuộc tính của một phân loại lớp hoặc một mút liên kết - association. Giá trị khởi tạo thuộc tính bởi biểu thức phải phù hợp với kiểu của thuộc tính được định nghĩa trước đó trong phân loại lớp. Tương tự, giá trị khởi tạo của một liên kết phải phù hợp với loại mút liên kết.

Một biểu thức dẫn xuất cũng là một biểu thức liên kết tới một thuộc tính của một phân loại lớp hoặc là một liên kết cuối. Giá trị thuộc tính dẫn xuất tạo bởi biểu thức OCL cũng phải phù hợp với kiểu của thuộc tính được định nghĩa trước đó. Giá trị thuộc tính, hoặc giá trị liên kết cuối luôn bằng giá trị được đánh giá trong biểu thức dẫn xuất.

Ví dụ:

context Person::income: Integer

Person

init: parent. income  sum()*1%

derived : if underAge

then parents. income> sum()*1%

2.2.2.7. Biểu thức let

Một biến hoặc một chức năng được định nghĩa bởi biểu thức let có thể được sử dụng đồng nhất giống như thuộc tính, phương thức của một lớp. Và biểu thức let chỉ được sử dụng trong một biểu thức OCL, điều này gần giống như việc khai báo biến, phương thức của một lớp là kiểu private. Các biến trong biểu thức let phải được định kiểu và khởi tạo giá trị trước khi sử dụng trong biểu thức OCL.

Ví dụ: Context Person inv:

let income: Integer = selt. job. sarlary  sum() in

2.2.2.8. Biểu thức def

Một ràng buộc được định nghĩa trong biểu thức def được liên kết tới một lớp. Trong biểu thức def có thể chứa các biểu thức let. Việc khai báo biểu thức def cũng tương ứng như việc khai báo một biến, phương thức có dạng public trong lập trình hướng đối tượng. Và khi biểu thức dạng def được sử dụng bởi các biểu thức OCL khác nhau.

Ví dụ: Context Person inv:

def: hasTitle(t:String):Boolean = set. job 

exists (title = t)

Một phần của tài liệu Mô hình hóa chuyên biệt miền cho ứng dụng web (Trang 27 - 31)