CHƯƠNG 1 : PHÁT TRIỂN PHẦN MỀM HƯỚNG MÔ HÌNH
2.2. Chuyển đổi mô hình trong UWE
2.2.1. Chuyển đổi từ mơ hình uc ầu sang mơ hình nội dung
Mục tiêu của mơ hình nội dung là xác định các khía cạnh cấu trúc và hành vi của ứng dụng Web. Ngồi các tính năng cấu trúc tĩnh (các thuộc tính và các liên kết) được tham chiếu trong các mơ hình điều hướng, mơ hình nội dungcũng bao gồm các tính năng hành vi động (hoạt động) được tham chiếu trong các mơ hình xử lý.
Theo [1] mơ hình nội dung được tự động lấy từ các mơ hình yêu cầu bằng cách áp dụng các Requirements2Content (Hình 2.6). Kết quả của mơ hình nội dung sau đó được tinh chế bởi nhà phát triển bằng cách thêm vào các lớp, các thuộc tính, liên kết..
Chuyển đổi Requirements2Content tự động sinh ra mơ hình nội dung từ mơ hình u cầu. Dựa trên hai quy tắcsẽ trình bày dưới đây.
Quy tắc ContentClass2ContentClassWithOperations
Quy tắc này ánh xạ mỗi lớp nội dung tới một lớp nội dung cùng với việc thêm operation được tạo bởi quy tắc thứ hai SimpleProcess2Operation. Ở đây, chú ý tới biểu thức ATL:
thisModule.resolveTemp( sp, ‘op’ ) [5]
Biểuthức này cần thiết cho tham chiếu tới một thành phần đặc biệt đích op của quy tắc SimpleProcess2Operation để nối các thành phần nguồn sp. Quy tắc này được biểu diễn thơng qua Hình 2.7.
Mơ tả các quy tắc để thêm các hoạt động
rule ContentClass2ContentClassWithOperations {
from c : UWE!Class ( c.oclIsTypeOf( UWE!Class ) ) to tc : UWE!Class
(
ownedOperation <- c.ownedOperation->union(
c.useCase->select( uc | uc.o clIsKindOf( UWE!SimpleProcess ) )-> collect( sp | thisModule.resolveTemp( sp, ‘op’ ) ) ),
… ) }
Quy tắc SimpleProcess2Operation
Đối với mỗi xử lý đơn giản trong các mơ hình u cầu một operation được sinh ra. Tên của các operation được tính tốn bằng cách loại bỏ các dấu cách từ tên của các xử lý đơn giản và chuyển đổi ký tự đầu tiên chữ in thường. Các hàm regexReplaceAll (thay thế các chuỗi con bằng việc sử dụng các biểu thức thường) và firstToLower được cung cấp bởi ATL. Một quy tắc type2Return-Parameter được sử dụng để tạo ra giá trị đối số trả về của operation.
rule SimpleProcess2Operation {
from sp : UWE!SimpleProcess
to tsp : UWE!SimpleProcess ( … ), -- target for copying source element op : UWE!Operation
(
name <- sp.name.regexReplaceAll( ' ', '' ).firstToLower(), type <- sp.target,
ownedParameter <- if sp.target.oclIsUndefined() then Sequence {} else Sequence { thisModule.Type2ReturnParameter( sp.target ) endif )
}