kết xuất ra Java
Cùng với JaMoPP, các công cụ mô hình hóa dựa trên Ecore có thể xử lý các
tệp Java giống như xử lý các mô hình. Thêm vào đó, những công cụ tương tự có
thể áp dụng Java metamodel vào trong nó.
Hiện nay có một số lượng lớn các công cụ hoạt động trên các chương trình Java, có nghĩa là hoạt động trên thể hiện của các metamodel Java dù là minh
bạch hay ngầm định. Tuy nhiên bản thân đặc tả của Java (JLS) [6] không cung
cấp một metamodel hình thức của Java. Các trình phân tích Java (ví dụ: javac
hay Eclipse Java Development Tools (JDT)) cũng có những metamodel nội bộ
được viết bằng Java. Một cài đặt mà gần với giải pháp được chuẩn hóa là Java 5 của hệ thống Stratego/XT. Tuy nhiên không cài đặt nào ở trên tích hợp được với
các công cụ metamodeling chuẩn.
Ngoài ra, Java metamodel cung cấp bởi tổ chức OMG, dự án MoDisco hay
dự án SPOON dựa trên ngôn ngữ metamodeling chuẩn hóa (cụ thể là Ecore), tuy
nhiên không metamodel nào cung cấp một cách đầy đủ. Do đó, nhóm nghiên
cứu JaMoPP tiến hành so sánh các metamodel hiện có, trích xuất ra các điểm
chung và mở rộng để hỗ trợ JLS đầy đủ. Metamodel hoàn chỉnh có thể tìm hiểu
tại website JaMoPP. Trong JaMoPP, Java metamodel được định nghĩa trong 80
lớp trừu tượng và 153 lớp cụ thể và phân chia thành 18 gói. Metamodel này chứa tất cả các thành phần của ngôn ngữ Java (ví dụ: classifiers, imports, types, modifiers, members, statements, variables, expressions và literals).
Hình 2.5- Metalmodel cho ngôn ngữ Java [6]
Khi Java được biểu diễn trên metamodel thì bản thân nó trở thành một ngôn
ngữ mô hình hóa. Do đó việc chuyển đổi mô hình sang mô hình Java là hoàn
toàn có thể thực hiện được bằng các kỹ thuật chuyển đổi mô hình. Khi có được
mô hình Java thì mã nguồn Java có thể được kết xuất ra từ đó nhờ bộ công cụ
JaMoPP.
2.2.2 Chức năng JaMoPP
Để Java metamodel trên sử dụng được trong thực tế thì phải có một đặc tả cú pháp văn bản để các công cụ có thể được tạo ra. Bước tạo ra này sử dụng các
quy tắc cú pháp văn bản được đinh nghĩa trong ngôn ngữ đặc tả CS của
EMFText như là một đầu vào (mỗi một quy tắc cú pháp được định nghĩa cho
một metaclass). Kết quả và cài đặt các thành phần của công cụ (ví dụ: parser, printer và tập các reference resolvers) như sau:
Parsing: dựa trên Context-free Grammar (CFG) được sinh ra từ đặc tả
CS và được cài đặt sử dụng chiến lược phân tích giảm dần đệ quy mô tả.
Mặc dù Java không hoàn toàn là context-free.
Reference Resolving: tương ứng với phân tích ngữ nghĩa tĩnh trong mô
hình Java. EMFText tạo ra reference resolvers cho các tham chiếu
(references) không bị giới hạn (non-containment) bằng cách thay các tên
tượng trưng trong mô hình phân tích cấu trúc cây bằng các liên kết rõ ràng đến phần tử tương ứng. Bởi vì sự phân mảnh cao của các mô hình Java trong các tệp khác nhau, cho nên sẽ có rât nhiều các tham chiếu không bị giới hạn (non-containment). JaMoPP sử dụng global registry (tương ứng với Java classpath) để quản lý tài nguyên và vị trí vật lý.
Registry được sử dụng để tìm các tài nguyên mô hình liên kết chéo theo
yêu cầu và cho phép tham chiếu được giải quyết trong nhiều tệp. Thêm
vào đó, các tham chiếu có thể trỏ đến lớp trong thư viện mà ở dạng mã nhị phân. Để giải quyết vấn đề này, JaMoPP sử dụng bộ phân tích BCEL (Byte Code Engineering Library) và dịch đầu ra thành thể hiện của JaMoPP metamodel.
Printing Java Source Files: là đảo ngược của tiến trình phân tích.
EMFText tạo ra một printer từ đặc tả CS mà chứa phương thức print riêng cho từng metaclass. Theo từng quy tắc CS thuộc về một class, printer sinh ra từ khóa cho các phần tử của model, giá trị thuộc tính của phần tử và gọi đệ quy các phương thức để in ra các thành phần.
Tool Integration: công cụ tích hợp với ngôn ngữ mô hình hóa dựa trên
Ecore và công cụ được tích hợp vào nền tảng Eclipse bằng Eclips Modelling Framework (EMF) [11]. Các ngôn ngữ mới có thể tích hợp trong suốt vào nền tảng này bằng cách phát triển giao diện EMF
Resource. Do đó, JaMoPP cung cấp JavaResource cho các tệp *.java và
nguồn nhị phân để nạp và chứa các mô hình Java. Do đó, mặc dù là cú pháp văn bản, nhưng Java models có thể được xử lý bằng các công cụ
dựa trên EMF như bắt kỳ mô hình khác.
2.3 Ngôn ngữ chuyển mô hình ATL
Để phục vụ cho việc chuyển đổi mô hình trong MDA thì cần phải có các công cụ hỗ trợ quá trình chuyển đổi. Phần này chúng ta sẽ tìm hiểu về ATL, một trong những ngôn ngữ hỗ trợ chuyển đổi mô hình phổ biến nhất hiện nay.
2.3.1 Giới thiệu ATL
ATL [12] là bản cài đặt phù hợp với chuẩn OMG MOF/QVT RFP do nhóm
nghiên cứu AtlanMod thực hiện. ATL là ngôn ngữ chuyển đổi mô hình được đặc tả bằng cả metamodel và cú pháp cụ thể văn bản. Trong lĩnh vực (MDE), ATL cung cấp cho các nhà phát triển một con đường để tạo ra một tập các mô hình
đích từ một tập các mô hình nguồn. ATL là ngôn ngữ lai tạo giữa ngôn ngữ khai
báo và bắt buộc (declarative and imperative programming). Thông thường khi
viết các luật chuyển đổi thì ATL sử dụng kiểu khai báo: nó cho phép đơn giản
hóa việc thể hiện ánh xạ giữa mô hình nguồn và mô hình đích. Tuy nhiên ATL
cũng cung cấp cấu trúc bắt buộc (imperative constructs) để dễ dàng đặc tả ánh xạ khó thể hiện khi dùng kiểu khai báo.
Một chương trình chuyển đổi ATL bao gồm các luật xác định cách thức các phần tử mô hình nguồn được kết hợp và chuyển hướng đển các phần tử của mô hình đích. Bên cạnh chuyển đổi mô hình cơ bản, ATL định nghĩa một cơ sở truy
vấn mô hình cho phép xác định các yêu cầu đầu của vào mô hình.
Phát triển trên nền tảng Eclipse, môi trường phát triển tích hợp ATL cung
cấp một số công cụ phát triển tiêu chuẩn (đánh dấu cú pháp, sửa lỗi...) nhằm mục đích dễ dàng thiết kế các chuyển đổi ATL. Môi trường phát triển ATL còn cung cấp một số công cụ bổ xung dành riêng cho việc xử lý các mô hình và siêu mô hình. Những tính năng này bao gồm một hệ thống ký hiệu văn bản đơn giản dành riêng cho đặc tả siêu mô hình, nhưng cũng có một số cầu nối tiêu chuẩn giữa cú pháp văn bản thông thường và biểu diễn mô hình tương ứng.
Hình dưới đây cung cấp tổng quan quá trình chuyển đổi ATL
(Author2Person) sinh ra mô hình Person từ mô hình nguồn Author.
Hình 2.6- Tổng quan chuyển đổi mô hình trong ATL72.3.2 Cú pháp và ngữ nghĩa ATL