2.2 Mô hình JaMoPP biểu diễn Java
Chúng ta sẽ xem xét cụ thể Java metamodel và các chức năng của JoMoPP
trong phần dưới đây.
2.2.1 Java Metamodel
Như mô tả ở trên, hầu hết các chuyển đổi trong một tiến trình MDSD làm
giảm cấu trúc và kiểu của dữ liệu, thậm chí ở cấp độ mô hình hệ thống trừu
tượng (ví dụ: mô hình hóa Use Case). Tuy nhiên, việc chuyển đổi cuối cùng, từ
các mô hình tới mã nguồn thường được thực hiện một cách có cấu trúc yếu và không định kiểu sử dụng engine mẫu xử lý chuỗi. Đây là một nghịch lý từ kiểm tra kiểu và lỗi là quan trọng nhất khi tạo ra các mã nguồn biên dịch được.
Ngoài ra, nhiều nhà mô hình đặc biệt là những người tham gia vào công
đoạn cuối của một tiến trình MDSD cũng là lập trình viên. Thực tiễn phổ biến hiện nay, chẳng hạn như chú thích các mô hình với (định lại kiểu) mã nguồn
Java, cho thấy sự tích hợp chặt chẽ hơn giữa mô hình và ngôn ngữ lập trình
thường được mong muốn.
Có một khoảng cách giữa mô hình hóa và ngôn ngữ lập trình cần phải thu
hẹp để giải quyết nhiều vấn đề ngày nay trong những bước cuối cùng của tiến
trình MDSD. Khoảng cách là do thực tế là mô hình hóa và ngôn ngữ lập trình
thường được coi là những thứ khác nhau. Nếu một ngôn ngữ lập trình như Java có thể xử lý như một ngôn ngữ mô hình khác, các vấn đề thảo luận ở trên có thể được giải quyết như sau: các công cụ mô hình hiện nay có thể xử lý các chương
trình Java như xử lý các mô hình khác - cấu trúc và kiểu - thay vì xử lý chúng
như văn bản. Bằng cách sử dụng các công cụ metamodeling để mở rộng và tái sử dụng các đặc tả ngôn ngữ, Java (hoặc các thành phần của Java) có thể được sử dụng như bất kỳ ngôn ngữ mô hình khác. Kết quả là Java có thể được sử
dụng như bất kỳ ngôn ngữ mô hình khác.
Để thu hẹp khoảng cách cho ngôn ngữ lập trình Java và ngôn ngữ mô hình
hóa, nhóm nghiên cứu tại đại học Dresde, Đức đề xuất bộ công cụ JaMoPP [6]. Bộ công cụ này sử dụng Java như một ngôn ngữ mô hình bằng cách như sau:
JaMoPP định nghĩa metamodel hoàn chỉnh bao phủ toàn bộ ngôn ngữ
Java. Các metamodel được định nghĩa trong ngôn ngữ metamodelling
thường được sử dụng eCore cho phép nó được xử lý bởi công cụ
metamodelling để sửa đổi, mở rộng hoặc tái sử dụng.
JaMoPP định nghĩa cú pháp văn bản phù hợp với đặc tả của ngôn ngữ
Java và từ đó một parser tạo một thể hiện của metamodel từ mã nguồn Java và printer dùng để kết xuất mã nguồn Java từ Java metamodel.
Tương tự như metamodel, cú pháp văn bản cũng là một model và có thể
thay đổi, mở rộng, tái sử dụng và các công cụ (ví dụ: paser và printer) có thể được tạo lại.
Metamodel Java của JaMoPP phản ánh ngữ nghĩa tĩnh của Java thông qua tham chiếu chéo giữa các phần tử mô hình. Những tham chiếu đó
được thiết lập sau khi phân tích bằng một cơ chế phân tích mà triển khai cụ thể ngữ nghĩa tĩnh của Java. Cơ chế này được cài đặt trong một mô