Java Metamodel

Một phần của tài liệu Tìm hiểu và vận dụng ngôn ngữ chuyển đổi mô hình trong phát triển phần mềm (Trang 31)

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ô

Hình 2.4- Minh họa chuyển đổi Java Class sang EMF Object Model và 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ó. (adsbygoogle = window.adsbygoogle || []).push({});

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.

Một phần của tài liệu Tìm hiểu và vận dụng ngôn ngữ chuyển đổi mô hình trong phát triển phần mềm (Trang 31)