Sử dụng ngôn ngữ chuyển đổi mô hình chuyên dụng

Một phần của tài liệu Thao tác mô hình trong phát triển hướng mô hình (Trang 38)

Đối với việc sinh mã hƣớng mô hình, thì trong những năm gần đây dạng ngôn ngữ dùng cho chuyển đổi mô hình sang văn bản, đƣợc sử dụng nhiều bởi các hãng hay các dự án mã nguồn mở, có thể hoặc là biến thể của ngôn ngữ định kiểu, hoặc ngôn ngữ chuyên biệt miền. Tuy nhiên chƣa có một chuẩn chung nào đƣợc sử dụng cho tất cả các dự án, mà mỗi dự án tự sáng tạo và áp dụng theo mục đích riêng của mình, nhƣng nhìn chung thì những dạng ngôn ngữ này đều đƣợc sử dụng với phƣơng pháp chuyển

27

đổi dựa theo khuôn mẫu hƣớng mô hình đã đề cập ở các phần trƣớc. Một số loại ngôn ngữ chuyển đổi từ mô hình sang văn bản đang đƣợc áp dụng đƣợc trình bày nhƣ dƣới đây.

3.4.3.1 JET (Java Emitter Templates)

JET là công cụ mã nguồn mở. Nó cung cấp một khung làm việc (framework) và các tiện ích cho việc sinh mã. Các file khuôn mẫu dạng JSP đƣợc sử dụng và những ngƣời mà đã quen thuộc với công nghệ JSP dễ dàng học và sử dụng. Nó cũng dễ mở rộng với các thẻ (tag) tuỳ biến giống nhƣ với JSP.

JET cũng đƣợc hỗ trợ mạnh bởi các công cụ đƣợc tích hợp trong Eclipse. Một dự án chuyển đổi cụ thể có thể đƣợc tạo trong Eclipse IDE và cung cấp các file cần thiết. Ngoài ra, một trình soạn thảo riêng cho JET và cấu hình triển khai để bắt đầu chuyển đổi cũng đƣợc cung cấp.

Mặc định JET yêu cầu file XML là đầu vào, file XML này không nhất thiết là một dạng XML cụ thể nào, và không liên quan đến mô hình hoá phần mềm. Xpath là ngôn ngữ đƣợc sử dụng để truy cập các nốt (nodes) khác nhau trong file nguồn XML, và điều hƣớng chúng giữa các thành phần. Xpath cũng là một ngôn ngữ phạm vi rộng đƣợc biết đến bởi rất nhiều lập trình viên (xem Hình 3.8).

Hình 3.8 JET Engine

Khi mà khuôn mẫu JET (*.jet) đƣợc phát triển và đƣợc lƣu trong trình soạn thảo JET (Editor, Designer) thì một lớp Java (*.class) đƣợc sinh ra bên ngoài nó (xem Hình 3.9). Lớp khuôn mẫu (*.class) này có thể đƣợc gọi trực tiếp bởi mã nguồn Java khác (main() program). Vì vậy có thể lập trình một bộ phân tích cú pháp (parser) chuẩn bị cho mô hình nguồn đƣợc chuyển đổi bởi lớp khuôn mẫu JET.

Sự chuyển đổi có thể đƣợc xem nhƣ là kế hoạch chi tiết đƣợc áp dụng cho mô hình nguồn. Mô hình nguồn đôi khi chỉ đƣợc gọi qua một tập các tham số, bởi vì nó định nghĩa giá trị đƣợc sử dụng khi mà kế hoạch chi tiết đƣợc áp dụng. Một sự chuyển đổi JET có thể đƣợc minh hoạ nhƣ sau: Tham số + Kế hoạch = Các yếu tố mong muốn.

28

Hình 3.9 Quy trình chuyển đổi của JET

Nhƣ đã phân tích ở trên thì chúng ta có thể thấy rằng JET là một bộ sinh (engine) dựa trên nền tảng công nghệ sẵn có, nó dễ dàng đƣợc học bởi các lập trình viên đã quen với các công nghệ nhƣ JSP. Một dự án chuyển đổi cũng dễ dàng đƣợc thiết lập trong thời gian ngắn.

Tuy nhiên JET cũng có những hạn chế, đó là với MDSD nó không hỗ trợ việc phân tích miền cụ thể, đơn cử là không thể kiểm tra đƣợc khuôn mẫu khi mà khuôn mẫu đƣợc lƣu bởi trình soạn thảo JET, điều này không đƣợc nhƣ trình soạn thảo Xpand. Vì vậy mà đối với những dự án lớn đòi hỏi việc xử lý nhiều mô hình phức tạp thì sẽ trở nên khó khăn cho JET khi mà không có công cụ hỗ trợ mở rộng cho miền cụ thể.

Xây dựng chuyển đổi dựa theo JET trong Eclipse liên quan đến nhiều kiến thức khác mà lập trình viên phải thực sự hiểu nhƣ Eclipse Resource và UI API, đây cũng là một hạn chế cho việc tạo chuyển đổi. Mặt khác, JET cũng chỉ hỗ trợ sinh mã Java, hạn chế mở rộng cho các nền tảng khác.

3.4.3.2 Xpand

Ngôn ngữ Xpand [24] đƣợc phát triển nhƣ là một phần của dự án openArchitecture-Ware (oAW) dùng cho việc chuyển đổi gồm cả từ mô hình sang mô hình và mô hình sang văn bản. Xpand là một dạng của ngôn ngữ chuyên biệt miền. Các khuôn mẫu xây dựng trên ngôn ngữ này đƣợc sử dụng bởi bộ sinh mã là một phần của luồng phát triển của nền tảng oAW (xem Hình 3.10). Xpand là độc lập với các dạng mô hình. Các mô hình nguồn khác nhau đƣợc xử lý bởi một bộ phân tích cú pháp (parser) mà đƣợc liên kết tới luồng xử lý của oAW. Bộ phân tích cú pháp có thể đƣợc viết cho bất kỳ mô hình nguồn nào và nền tảng oAW có thể cung cấp bộ phân tích cú pháp ngoài luồng cho các mô hình đầu vào đƣợc xây dựng bởi nhiều nền tảng khác nhau.

29

Hình 3.10 Quy trình chuyển đổi trong oAW [5]

Một trong những lợi ích lớn nhất của nền tảng oAW thế hệ thứ 4 đó là việc hỗ trợ công cụ mở rộng, vì nó đƣợc tích hợp ở phạm vi rộng với nền tảng mô hình hoá EMF của Eclipse. Điều này là rất cần thiết cho việc mở rộng phạm vi thiết kế phụ thuộc vào các yêu cầu thay đổi thƣờng xuyên.

Ngoài ra, ngôn ngữ Xpand cũng rất dễ học vì nó có bộ từ vựng nhỏ nhƣng rất hữu hiệu cho việc viết các khuôn mẫu. Ví dụ dƣới đây mô tả một khuôn mẫu đƣợc viết bằng Xpand:

3.4.3.3 MOFM2T

MOFM2T [18] là một chuẩn của OMG tuân thủ theo kiến trúc hƣớng mô hình (MDA). Ngôn ngữ này quy định cú pháp và thực thi chuyển đổi từ mô hình sang dạng văn bản: Mã nguồn, báo cáo, tài liệu… Cách tiếp cận của MOFM2T là sử dụng template, template quy định tập các ánh xạ giữa mô hình nguồn và mô hình đích (mã nguồn). Cụ thể hơn, một template đặc tả một template dạng văn bản, với các vị trí (placeholder) cho dữ liệu đƣợc lấy từ các mô hình. Các vị trí này cơ bản là các biểu thức biểu diễn cụ thể qua các thực thể meta-model, với các truy vấn là các cơ chế chủ yếu cho việc lựa chọn và khai thác giá trị từ các mô hình. Các giá trị này sau đó đƣợc chuyển đổi sang các đoạn văn bản sử dụng ngôn ngữ biểu thức (expression language) đƣợc tham số với thƣ viện thao tác dạng chuỗi. Template có thể đƣợc soạn để biểu diễn các yêu cầu chuyển đổi phức tạp. Các chuyển đổi lớn có thể đƣợc cấu trúc trong các mô đun (modules) mà có các thành phần công khai (public) và riêng tƣ (private).

30

Về mặt cú pháp, thì MOFM2T đơn giản nhƣ là Xpand. Template đƣợc tổ chức nhƣ các mô đun với các không gian tên (namespaces) khác nhau. Nó cũng có nhiều thành phần ngôn ngữ cơ bản nhƣ Module, Template, Query, Import, For, và If. Các thành phần này đƣợc xử lý theo cách tƣơng tự nhƣ Xpand.

Về mặt template, thì MOFM2T mô tả một module có thể mở rộng sang những module khác. Khi việc này đƣợc sử dụng, một template có thể ghi đè lên các template khác. Tính đa hình (polymorphism) này cũng giống nhƣ ở Xpand. Bên cạnh đó, đặc tả của MOFM2T cũng gồm việc xử lý mở rộng cho việc thu thập tham số. Nếu định nghĩa khuôn mẫu yêu cầu một tham số kiểu chuỗi (string) và đƣợc tham chiếu với một tập các chuỗi, nó sẽ đƣợc thực thi một lần cho mỗi chuỗi của tập này. Đây là cách đơn giản làm cho việc lập trình các vòng lặp là không cần thiết. Nhƣ vậy sẽ có nhƣợc điểm vì điều này có thể dẫn tới kết quả không mong muốn. Cụ thể, nếu tham số đầu vào yêu cầu là một tập các đối tƣợng và khuôn mẫu đƣợc gọi với một tập của các tập đối tƣợng đó, thì nó sẽ không xác định dù khuôn mẫu đƣợc thực thi một lần tất cả hoặc một lần với mỗi tập con.

Về mặt xử lý ký tự trắng, thì Xpand chỉ cung cấp cách trực quan để gây ảnh hƣởng tới việc xử lý khoảng trắng (white space) một cách thủ công. Còn MOFM2T thì không thực hiện theo cách đó, mà sẽ dùng các luật rõ ràng đƣợc định nghĩa để tạo khoảng trắng và các dòng mới phụ thuộc vào các chỉ thị (directive) ngôn ngữ xử lý.

Về mặt truy vấn, đặc tả MOFM2T thực thi chỉ thị để truy vấn tới các mô hình cần đƣợc xử lý. Điều này làm cho nó có thể thu thập các thành phần mà không ở cùng một chỗ trong mô hình. Trong khi đó Xpand chỉ có khả năng truy cập một tập đối tƣợng theo một đƣờng. Các phần việc phức tạp hơn thì đƣợc xử lý bởi chức năng của Xtend. Xtend là ngôn ngữ dùng cho việc chuyển đổi từ mô hình sang mô hình, nó không đƣợc đề cập chi tiết ở đây.

Về mặt vùng bảo vệ, đặc tả MOFM2T cung cấp vùng này cho việc bổ sung một cách thủ công các yếu tố văn bản vào các yếu tố đã đƣợc sinh ra mà sẽ không bị ghi đè khi chuyển đổi đƣợc xử lý lại. Các vùng này phải đƣợc đánh dấu và có thể không đƣợc mô tả trong khuôn mẫu, và đặc tả chỉ ra rằng việc này phải đƣợc xử lý bởi công cụ thực thi chuyển đổi. Với cùng một mục đích, Xpand cũng nhƣ vậy, nó bảo vệ các vùng mà có khả năng để mô tả các dấu hiệu đƣợc sử dụng trong văn bản đƣợc sinh ra.

Về kết quả đầu ra, thì kết quả của MOFM2T giống nhƣ của Xpand. Khác biệt chính là tuỳ chọn để thêm văn bản mới đƣợc sinh ra vào tệp đích nếu nó đã có. Đặc tả MOFM2T cũng đề cập đến việc sinh các file log.

MOFM2T đƣợc sử dụng rất hữu ích và rất thành công trong công cụ Acceleo M2T, đƣợc phát triển bởi OBEO, sẽ đƣợc đề cập trong [CHƢƠNG 4] của luận văn. (adsbygoogle = window.adsbygoogle || []).push({});

31

CHƢƠNG 4 CÔNG CỤ CHUYỂN ĐỔI MÔ HÌNH ACCELEO M2T

Acceleo là một mã nguồn mở đƣợc phát triển bởi nhóm nghiên cứu của công ty OBEO tại Pháp từ những năm 2006. Acceleo tiếp cận theo phƣơng pháp MDA để phát triển các ứng dụng phần mềm. Trong chƣơng này, Luận văn nghiên cứu và trình bày các kiến thức tổng quan về Acceleo. Cụ thể, Luận văn nghiên cứu Acceleo JavaEE Generator, công cụ này thực hiện việc chuyển đổi mô hình sang dạng văn bản nhằm sinh ra ứng dụng trên nền tảng JavaEE.

Một phần của tài liệu Thao tác mô hình trong phát triển hướng mô hình (Trang 38)