Nhóm 2 BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ -ĐHQGHN
KHOA :CNTT
BÁO CÁO
Môn học các vấn đề hiện đại của CNPM
Đề Bài: Tìm hiểu hỗ trợ của USE về định nghĩa các
metamodel và các ràng buộc OCL để đảm bảo tính đúng
đắn (wellformedness) của các mô hình
Giáo viên:
o Ts Đặng Đức Hạnh
o Ts Vũ Diệu Hương
Nhóm thực hiện: nhóm 2:
o Nghiêm Ngọc Quyết
o Nguyễn Minh Tiến
Nhóm 2
Phân công công việc:
Nghiêm Ngọc Quyết tìm hiểu về Metamodel và hỗ trợ của USE về
metamodel.
Nguyễn Minh tiến tìm hiểu các ràng buộc OCL để đảm bảo tính đúng đắn
của mô hình
Nhóm 2
đúng đắn của một mô hình UML. Sau đây chúng e xin trình bày chủ đề :“Hỗ trợ của USE
về định nghĩa các metamodel và các ràng buộc để đảm bảo tính đúng đắn
(wellformedness) của các mô hình”. Cụ thể trong bài này chúng em sẽ làm về UML
metamodel(UMLcore1.3).
B, NỘI DUNG
Chương 1: Tổng Quan về Metamodel và OCL
1.1Tổng quan về Metamodel:
1.1.1, Mô hình metamodeling 4 tầng:
Mô hình metamodeling dựa trên nguyên lý sử dụng các ngôn ngữ mô hình hóa để
mô tả một hệ thống ở các cấp độ khác nhau. Nó gồm có 4 tầng:
Tầng metametamodel(M3).
Tầng metamodel (M2).
Tầng model(M1).
Tầng instance(M0).
Nhóm 2
Hình 1. Mô hình Modeling
Trên đỉnh của kiến trúc metamodeling là meta-metamodel .Nó là một framework
và ngôn ngữ tự định nghĩa, trừu tượng để đặc tả, xây dựng và quản lý các metamodel
trung lập với kỹ thuật. Nó là nền tảng để xác định bất kỳ một ngôn ngữ mô hình hóa nào
như UML hoặc thậm chí là bản thân chính nó Mục tiêu chính của cấu trúc bốn tầng với
một meta-metamodel chung là nhằm hỗ trợ nhiều metamodel và model, nhằm cho phép
khả năng mở rộng, tích hợp và quản lý model và metamodel chung.
Mọi metamodel, tiêu chuẩn hoặc tùy chỉnh (do người sử dụng định nghĩa), được
xác định bởi metametamodel đều được đặt trên tầng M2. Một trong số đó là UML, một
ngôn ngữ mô hình đồ họa cho việc đặc tả các hệ thống phần mềm. Với các UML profile,
các khái niệm UML cơ bản (Class, Association, v.v.) có thể được mở rộng với những khái
Hình 3. Định nghĩa Meta Model [Jean Bézivin, Introduction to Model Engineering]
Nhóm 2
Hình 4. Metamodel UML Ví dụ về một UML model và UML metamodel tương ứng:
Hình 5.UML model.
Nhóm 2
Hình 6.UML metamodel.
1.2, Tổng quan về OCL- Object Constraint Language:
1.2.1 OCL là gì:
Trong quá trình phát triển phần mềm người ta nhận ra rằng, chỉ với hệ thống ký
hiệu trực quan trong UML không thể hiện được hết các khía cạnh của hệ thống phần
mềm. Chính vì thế, OCL được xây dựng và phát triển với mục đích bổ sung cho các đặc
tả UML trở nên rõ ràng và chính xác hơn. Và OCL trở thành chuẩn ngôn ngữ đặc tả cho
các biểu đồ trong UML trong thực tế.
OCL được sử dụng để:
Mô tả sự bất biến trong các lớp và bên trong mô hình lớp.
Mô tả tiều điều kiện và hậu điều kiện cho các phương thức.
biến:
Khai báo một bất biến bắt đầu với từ khóa inv, tiếp đến là tên của bất biến.
Ví dụ : context Company khai báo ngữ cảnh có tên là Company
inv : seft. numberOfEmployees > 50 Khai báo một bất biến.
Ý nghĩa : Mọi thể hiện của đối tượng Company phải thỏa mãn ràng buộc
numberOfEmployees > 50 tại mọi thời điểm.
Từ khóa seft tham chiếu tới thể hiện của đối tượng Company, sử dụng toán tử “.” để chỉ
tới thuộc tính numberOfEmployees của đối tượng Company.
Tiền điều kiện và hậu điều kiện – pre & post condition:
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 (trả về kết quả 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.Mục đích của hậu điều
kiện là chỉ rõ điều kiện phải có sau khi 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 (trả về kết quả 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.
Cú pháp:
context Typename::operationName(para1 : Type1, para2 : Type2, )Return Type
pre: Khai báo các tiền điều kiện
post: Khai báo các hậu điều kiện
hoặc:
context Typename::operationName(para1 : Type1, para2 : Type2, )Return Type
pre preconditionName : Khai báo tiền điều kiện
post postconditionName: Khai báo hậu điều kiện
Ví dụ :
Nhóm 2
Phép toán
Giá trị trả về
Ý nghĩa
=(c: Collection(T))
Boolean
Trả về true nếu 2 tập hợp cùng kiểu và cùng có
số lượng phần tử, thứ tự phần tử.
<>(c:Collection(T))
Boolean
Trả về true nếu 2 tập hợp không bằng nhau
c->size()
Interger
Số lượng phần tử có trong tập hợp
c->includes(object :
T)
Boolean
2. Nếu tên trùng với các từ khóa trong USE thì thêm gạch dưới
3. Thêm () khi gọi một phương thức không có tham số.
4. Thay thế tất cả các lần xuất hiện tiềm ẩn của collect bằng lời gọi rõ ràng
5. Thay thế tất cả các lần xuất hiện tiềm ẩn của collection flattening bằng cách sử
dụng operation flatten.
6. Thay thế lần xuất hiện boolen enumeration với kiểu Boolean OCL.
2.1 UML metamodel:
UMLCore bao gồm các thành tố cốt lõi và được mô tả bởi bốn mô hình là sườn
(Backbone), quan hệ (Relationships), phụ thuộc (Dependencies)và Classifiers . Core giới
thiệu cú pháp cho mô hình hóa tĩnh, không quan tâm đến quá trình vận động và tương tác
giữa các đối tượng trong thế giới thực.
2.1.1 Mô hình Backbone (sườn) : Nhóm 2
Page 13 Backbone chủ yếu định nghĩa thành tố Classifier. Classifier là thành tố trừu tượng đóng
vai trò tổng quát hóa trực tiếp của phần lớn các thành tố cụ thể khác. Ngoài ra, các thành
tố cụ thể cơ bản của UML được định nghĩa trong Core bao gồm thuộc tính (attribute),
phương thức (operation) và cách thực hiện phương thức (method), tham số (parameter)
StructuralFeature: được thừa kế từ Fearture, StructuralFeature mô tả đặc tính về
mặt cấu trúc của một Classifier, mô tả cấu trúc này có thể thay đổi hay cố định qua
thuộc tính changeability của StructuralFeature. StructualFeature có một đặc biệt
hóa là thuộc tính (Attribute).
BehavioralFeature: Được kế thừa từ Feature và biểu diễn các đặc tính về mặt
hành vi của một Classifier đồng thời mô tả đặc tính hành vi này có ảnh hưởng lên
trạng thái của Classifier hay không qua thuộc tính isQuery. BehavioralFeature
gồm hai đặc biệt hóa là phương thức (Operation) và Method. Attribute (thuộc tính)
: Attribute mô tả các giá trị mà một Classifier có thể sử dụng để thể hiện trạng thái.
Operation (phương thức) : Operation là phương thức có thể được yêu cầu từ một
Classifier chứa Operation để tác động lên Classifier này. Operation có quan hệ kết
hợp (association) với tham số (parameter) nghĩa là Operation sử dụng một tập
tham số để khởi đầu cho việc thi hành. Một Operation có thể được kế thừa từ các
Operation khác.
Method (mô tả phương thức) : Method có quan hệ kết hợp với phương thức
(Operation) mô tả cụ thể cách thức thực hiện một phương thức bao gồm các quy
trình và các thuật toán. Method có tác động đến kết quả của phương thức.
Parameter (tham số) : Parameter là tham số có thể thay đổi, gởi và nhận. Một
Parameter có thể bao gồm tên, kiểu dữ liệu và quan hệ với các thành tố khác giao
tiếp với nó. Parameter được sử dụng trong mô tả phương thức (Operation), mẫu
(Templates)
Nhóm 2 gọi là thành tố con (child) và thành tố tổng quát hơn là thành tố cha (parent).
Thành tố con tham gia vào quan hệ tổng quát hóa. Thành tố cha tham gia vào
quan hệ tổng quát hóa.
Association: quan hệ kết hợp của các Classifier với nhau.
AssociationEnd: vai trò của từng Classifier trong một mối quan hệ.
AssociationClass: là lớp kế thừa Class, được sinh ra để làm rõ ý nghĩa của quan hệ
kết hợp.
2.1.3. Mô hình Classifiers (các đặc biệt hóa của classifiers) :
Mô hình Classifiers mô tả các đặc biệt hóa của Classifier bao gồm các thành tố
lớp (Class), giao diện (Interface), kiều dữ liệu (DataType), nút (Node) và thành phần
(Component) Component bao gồm nhiều thành ModelElement.
Class: là tập hợp các đối tượng có cùng các thuộc tính, hành động và ngữ nghĩa.
Interface: là tập các phương thức (operation) của một Classifier. Mỗi Interface
cung cấp một dịch vụ của Classifier bao gồm một nhóm các operation có quan hệ
với Interface đó. Mỗi Classifier có thể cung cấp nhiều dịch vụ khác nhau qua các
Interface khác nhau.
DataType: mô tả kiểu dữ liệu của người sử dụng.
Nhóm 2
Page 18
Permisson: cung cấp quyền hạn cho một thành tố ngoài không gian các thành tố
(Namespace) tham chiếu các thành tố khác trong Namespace. Thành tố nhận là
một ModelElement thành tố cho bắt buộc là một Namespace. Usage là quan hệ
giữa một thành tố ModelElement có sử dụng phương thức của một thành tố
ModelElement khác.
2.2 các ràng buộc OCL:
Ngữ cảnh Association:
Vai trò của từng Classifier(AssociationEnd) phải có tên duy nhất trong từng quan
hệ liên kết(Association).
Nhiều nhất có thể có 1 AssociationEnd là tập hợp.
Nếu quan hệ liên kết(Association) có 3 hay nhiều hơn các AssociationEnd thì sẽ
không có AssociationEnd nào là tập hợp hoặc thành phần.
Các Classifier ứng với từng AssociationEnd tham gia kết nối phải nằm trong
không gian tên của quan hệ liên kết(Association).
Ngữ cảnh AssociationClass:
Tên của AssociationEnds và không được trùng nhau.
AssociationClass không thể được định nghĩa giữa chính nó và một cái khác.
Ngữ cảnh AssociationEnd:
Classifier tương ứng với AssociationEnd không thể là một Interface hoặc
Constraints, Dependencies, Collaborations, DataTypes, and Interfaces như một
không gian tên.
Ngữ cảnh Classifier:
Không có BehavioralFeature cùng loại nào được giống nhau về chữ kí trong cùng
một Classifier.
Không có một thuộc tính nào được có tên giống nhau trong cùng một Classifier.
Không có một AssociationEnd nào được có tên giống nhau trong cùng một
Classifier.
Tên của một thuộc tính không thể giống như tên của một AssociationEnd hoặc tên
của một ModelElement trong cùng một Classifier.
Với mỗi Operation được đặc tả thực hiện trong một Classifier, thì Classifier phải
có một hoạt động phù hợp.
All of the generalizations in the range of a powertype have the same discriminator.
Phân biệt tên phải khác tên thuộc tính và tên AssociationEnd đối diện.
Ngữ cảnh Component:
Một thành phần chỉ có thể chứa các thành phần khác
Một thành phần chỉ có thể chứa DataTypes, Interfaces, Classes,Associations,
Dependencies, Constraints, Signals, DataValues and Objects.
Ngữ cảnh Constraint
Không thể áp dụng Constraint cho chính nó
Ngữ cảnh DataType:
Nhóm 2
Nếu một yếu tố không phải là một Association hoặc Generalization thì tên của nó
phải là duy nhất trong không gian tên.
Tất cả các Association phải có sự kết hợp giữa tên của nó và Classifier tương ứng
trong không gian tên.
Ngữ cảnh StructuralFeature:
Các loại kết nối bao gồm không gian tên của chủ sở hữu.
Nhóm 2
Page 21
Các loại của một StructuralFeature phải là một Class, DataType or Interface.
2.3 Một số ví dụ về các ràng buộc OCL trong Metamodel:
Các loại lỗi thường gặp của mô hình UML:
Lỗi cú pháp :sai chính tả của các từ khóa và tên hoạt động tiêu chuẩn.
Không nhất quán:không có tối đa hoạt động được xác định trên đa dạng.
Gỡ lỗi kiểm tra: union các bộ với các loại phần tử không tương thích.
2.3.1Một số ràng buộc trong Association:
Hình 10: Association
Các Association phải có một tên duy nhất
Hình 11 : UML metaclass
Như trong hình 1 root là gốc rễ của metaclass này, nó không có lớp cha trong hệ
thống phân cấp của các phần tử UML. Đây là lớp cha cho tất cả metaclass trong
kết cấu hạ tầng của UML
o Cú pháp ràng buộc OCL :
inv GeneralizableElement1:
self.isRoot implies self.generalization->isEmpty
Nhóm 2
Page 23
Ràng buộc không một Genaralizations nào có thể có một Genaralization cha nào
đến một phần tử chỉ là một lá
o Cú pháp ràng buộc OCL :
inv GeneralizableElement2:
self.parent()->forAll(s | not s.isLeaf)
Không được phép thừa kế theo vòng tròn
Giải sử ta có 3 lớp A,B,C không thể xảy ra trường hợp lớp A kế thừa lớp B, Lớp B
kế thừa lớp C và lớp C lại kế thừa lớp A được
o Cú pháp OCL :
inv GeneralizableElement3:
not self.allParents()->includes(self)
2.3.3 Một số ràng buộc trong Interface:
Một Interface chỉ chứa các operation
}
o Cú pháp ràng buộc OCL :
inv Interface2:
self.allContents()->isEmpty
Tất cả các Features được định nghĩa trong interface đều phải ở dạng public
Ví dụ trong hình 2 : Tất cả các Operation đều ở dạng public
o Cú pháp ràng buộc OCL :
inv Interface3:
self.allFeatures()->forAll ( f | f.visibility = #public )
2.3.4 Một số ràng buộc trong DataType:
Nhóm 2
Page 25 Hình 14 : DataType
DataTypes định nghĩa các kiểu dữ liệu dùng riêng trong UML metamodel, nghĩa là thuộc
tính của các thành tố trong UML metamodel có các kiểu dữ liệu trong DataTypes.
DataTypes cần thiết cho sự tham khảo sâu hơn về các thuộc tính và ý nghĩa mỗi thuộc
tính của một thành tố trong UML metamodel và nó có một số ràng buộc như sau :
Một DataType không thể chứa bất kì một ModelElement nào khác