Một số công cụ hỗ trợ xây dựng DSML

Một phần của tài liệu Mô hình hóa chuyên biệt miền cho ứng dụng web (Trang 31 - 43)

2.2.3.1. Công cụ MetaEdit+

MetaEdit+ là môi trường tạo ra và sử dụng giải pháp DSM để sản xuất phần mềm. Nó cho phép cải thiện triệt để năng suất và chất lượng phát triển phần mềm bằng cách tạo ra mã đầy đủ từ các mô hình.

Đầu tiên, nhà phát triển sẽ thiết kế các ngôn ngữ mô hình hóa với MetaEdit+ Workbench, sau đó phát triển mô hình với một ngôn ngữ lập trình cụ thể bằng MetaEdit+ Modeler [1].

MetaEdit+ Workbench MetaEdit+ Modeler Thiết kế ngôn ngữ mô hình Sử dụng ngôn ngữ mô hình

Hình 2.2: MetaEdit+Workbench và MetaEdit+ Modeler.

* MetaEdit+ Workbench: Cho phép xây dựng các ngôn ngữ mô hình cụ

thể mà không cần phải viết một dòng mã nào. Nó cung cấp một ngôn ngữ metamodeling đơn giản nhưng mạnh mẽ và một bộ công cụ cho việc thiết kế ngôn ngữ mô hình. Sử dụng những công cụ này, chúng ta có thể xác định các khái niệm ngôn ngữ, các qui tắc liên quan, các biểu tượng, máy sinh mã [1]. Định nghĩa ngôn ngữ được lưu trữ như một metamodel trong kho MetaEdit+.

MetaEdit+ Workbench cho phép định nghĩa và biểu diễn các khái niệm trong miền cụ thể như: đối tượng (Object), quan hệ (Relationship), vai trò (Role) bằng những hình ảnh trực quan. MetaEdit+ sử dụng khuôn khổ metamodeling GOPPRR (Graph-Object-Property-Port-Role-Relationship) để thể hiện ngôn ngữ

mô hình DSL. Máy sinh mã (Generator) được tạo ra bằng ngôn ngữ MetaEdit Reporting Language (MERL) [1].

Hình 2.3: Các thành phần của GOPPRR.

MetaEdit+ Workbench cung cấp hai công cụ khá mạnh để tạo máy sinh mã. Đó là Generator Editor và Generator Debugger.

Generator Editor là một môi trường phát triển để tạo, chỉnh sửa và quản lý máy sinh mã. Nó cho phép xem, chỉnh sửa và chạy máy sinh mã có sẵn và tạo ra một máy sinh mã mới. Một Generator Editor được thể hiện trong hình 2.4.

(1) Danh sách các máy sinh mã.

(2) Những thành phần để xem ở hộp (3) như: biểu đồ, đối tượng, cổng, vai trò, mối quan hệ của ngôn ngữ mô hình, hoặc các cú pháp của ngôn ngữ MERL. (3) Thông tin những gì chúng ta lựa chọn ở (2).

(4) Chi tiết máy sinh mã, nơi chúng ta có thể chỉnh sửa và tạo máy sinh mã mới. (5) Các lỗi của máy sinh mã.

Generator Debugger là công cụ để phát triển máy sinh mã bằng cách cung cấp phương tiện để theo dõi, kiểm soát và kiểm tra việc thực hiện của một máy sinh mã. Hình 2.5 miêu tả một Generator Debugger.

(1) Danh sách máy sinh mã. (2) Chi tiết máy sinh mã.

(3) Yếu tố đang được máy sinh mã truy cập. (4) Đầu ra của máy sinh mã như màn hình, file… (5) Mã đầu ra của máy sinh mã.

(6) Danh sách biến và giá trị của nó.

Hình 2.5: Generator Debugger.

* MetaEdit+ Modeler: Sau khi định nghĩa ngôn ngữ mô hình, MetaEdit+

tự động cung cấp một công cụ mô hình với đầy đủ các chức năng: biên tập sơ đồ, trình duyệt, máy tạo mã, hỗ trợ nhiều người dùng…[1]. Chúng ta có thể sử dụng nó để tạo các mẫu thiết kế trong ngôn ngữ mô hình hóa cụ thể, hoặc tạo ra mã đầy đủ cho các sản phẩm…

- Diagram Editor: Là công cụ dùng để tạo, quản lý và duy trì thông tin thiết kế với các tính năng tiên tiến như tái sử dụng các yếu tố trong nhiều sơ đồ, sao chép, dán với các tùy chọn và cấu trúc lại mô hình. Nó hỗ trợ các mô hình một cách trực quan, liên kết các đồ thị khác nhau. Chúng ta có thể sử dụng lại thiết kế ở các giai đoạn và mức độ khác nhau, thông tin có thể được xuất sang các công cụ khác như trình duyệt web, hình ảnh, văn bản [1].

Hình 2.6: Diagram Editor.

- Matrix Editor: Xử lý các thông tin thiết kế ma trận, hiển thị mối quan hệ của các đối tượng, cung cấp các phương thức thao tác trên ma trận như: phân loại, phân hủy hệ thống con, tùy chọn xem các đối tượng theo các kiểu khác nhau.

Hình 2.7: Matrix Editor.

Matrix Editor hỗ trợ các hoạt động thiết kế tương tự như với Diagram Editor và một số chức năng khác như: định dạng ma trận tự động, hiển thị và ẩn các thông số trong ma trận, xuất ma trận ra định dạng html [1].

- Table Editor: Là một công cụ để cung cấp một bảng thông tin dựa trên quan điểm về thông tin thiết kế. Nó cung cấp một cái nhìn dễ dàng để xem các đối tượng.

Hình 2.8: Table Editor.

Table Editor hỗ trợ một loạt các hoạt động thiết kế như: các thành phần có thể được duyệt, lựa chọn và sử dụng lại;các đối tượng được liệt kê trong một bảng có thể được sắp xếp theo các tùy chọn khác nhau; tất cả các thông tin thiết kế có thể được truy cập bằng một cái click chuột; mô hình có thể được kiểm tra với báo cáo…[1].

- Browsers: MetaEdit+ cung cấp một số trình duyệt để xem và chỉnh sửa các nội dung kho lưu trữ. Đồ thị trình duyệt cung cấp một cái nhìn hệ thống phân cấp dựa trên đồ thị. Các trình duyệt metamodel cung cấp cái nhìn phân cấp về cấu trúc ngôn ngữ [1].

Hình 2.9: Browers.

Sử dụng trình duyệt chúng ta có thể: tạo và quản lý dự án, xem thiết kế hoặc thông tin của ngôn ngữ từ các dự án khác nhau, duyệt đồ thị, mở đồ thị, kiểm tra và di chuyển đồ thị…

* MetaEdit+ API: MetaEdit+ là một môi trường mở và cung cấp nhiều

cách để tích hợp với các công cụ khác. Ý tưởng chính của một API là cung cấp cho người dùng một cách để truy cập đến dữ liệu của MetaEdit+ từ bên trong các ứng dụng của họ.

Sau đây chúng ta sẽ tìm hiểu ví dụ về việc tích hợp MetaEdit+ vào hai môi trường lập trình (IDE) Eclipse và Visual Studio: Eclipse plugin dùng để tích hợp MetaEdit+ và Eclipse. Plugin cung cấp các chức năng: mở dự án từ MetaEdit+; duyệt và mở hệ thống phân cấp mô hình; chỉnh sửa đồ thị, tạo đồ thị mới; chạy máy sinh mã để tạo một dự án (project) trong Eclipse.

Hình 2.10: Eclipse plugin tích hợp MetaEdit+ và Eclipse.

Visual Studio extension tích hợp MetaEdit+ và Visual Studio. Extension cung cấp các tính năng: mở dự án từ MetaEdit+, duyệt và mở hệ thống phân cấp mô hình, chỉnh sửa đồ thị, tạo đồ thị mới, chạy máy sinh mã để tạo một dự án (project) trong Visual Studio.

Hình 2.11: Visual Studio extension tích hợp MetaEdit+ và Visual Studio.

2.2.3.2. Công cụ Eclipse FrameWork

a) Các dự án cho mô hình hóa của Eclipse

Eclipse là một hệ nền khả mở cho các tool tích hợp. Các tool được viết Plug- ins. Eclipse plug-ins được viết bằng ngôn ngữ java. Eclipse cũng là dự án mã nguồn mở.

EMF là trung tâm cung cấp các khả năng phát triển cú pháp trừu tượng. Xung quanh các thành phần phát triển cú pháp trừu tượng là các công nghệ chuyển đổi mô hình gồm có: model to text và model to model (M2T và M2M).

Bên ngoài là phát triển các cú pháp cụ thể: GMF sử dụng để trình diễn các mô hình. Cuối cùng một vài dự án xung quanh và các thành phần trình diễn mô hình có thể khởi đầu từ dự án mô hình hóa [5].

* Định nghĩa cú pháp trừu tượng (abstract syntax).

Nhân của một DSML là cú pháp trừu tượng, nó được sử dụng để phát triển hầu hết các đối tượng gồm có graphical concrete syntax, model to model transformations, và model to text transformations.

Elipse cung cấp Eclipse Modeling Framework (EMF) để xây dựng cú pháp trừu tượng. EMF Project được dùng để xây dựng metamodel và biểu diễn cú pháp trừu tượng cho DSML, chúng ta có thể điều chỉnh cấu trúc và ngữ nghĩa của metamodel bằng cách sử dụng ngôn ngữ ràng buộc đối tượng OCL, validation [4].

* Định nghĩa cú pháp cụ thể (Concrete Syntax).

Eclipse có cung cấp dự án Graphical Modeling Framework (GMF) cho phép phát triển cú pháp cụ thể đồ họa, sau đó các ký pháp đồ họa sẽ được ánh xạ sang cú pháp trừu tượng được phát triển với dự án EMF trong Eclipse [4].

* Thao tác trên mô hình

Để tạo môi trường soạn thảo đồ họa hoặc văn bản cho phép tùy chỉnh. Chúng ta thường muốn cung cấp một vài đầu ra từ thể hiện mô hình, khi đấy chúng ta sẽ thực hiện một số thao tác trong mô hình như chuyển từ mô hình sang mã nguồn triển khai, hay chuyển từ mô hình sang một mô hình khác.

Trong Eclipse có cung cấp hai thành phần chuyển mô hình: Model to Model(M2M) và Model to Text (M2T) cho phép phát triển các thao tác trên mô hình cho DSML. M2M là một khía cạnh quan trọng của phát triển hướng mô hình. M2T là dự án sử dụng để chuyển mô hình sang text.

b) Phát triển dự án DSML bằng Eclipse

Để xây dựng một DSL Toolkit chúng ta cần định nghĩa mô hình miền (metamodel), biểu đồ, cú pháp văn bản, các chuyển mô hình sang mô hình và mô hình sang text. Dự án mô hình hóa của Eclipse cung cấp các FrameWorks tương ứng sau: Eclipse Modeling Framework (EMF), Graphical Modeling

Framework (GMF), Model to Model Transformation (M2M), Model to Text Transformation (M2T).

Hình dưới cũng cho chúng ta biết domain model là cơ sở cho tất cả các artifact khác [5].

Hình 2.13: DSL Toolkit artifacts – abstract [5]

Một Toolkit DSL bao gồm các công cụ cần thiết cho phát triển tất cả các khía cạnh khác nhau của một ngôn ngữ chuyên biệt miền bao gồm cả chuyển mô hình và sinh code. Luồng công việc để phát triển một DSL Toolkit với Eclipse được thể hiện trong hình dưới đây:

Hình 2.14: Luồng công việc phát triển DSL Toolkit [4]

Để có đầy đủ các dự án hỗ trợ cho phát triển DSML với bản phát hành Juno chúng ta cần cài đặt thêm các dự án cần thiết phục vụ cho phát triển DSML1.

1

- Xây dựng cú pháp trừu tượng cho DSML với dự án EMF:

EMF là một trong các dự án của Eclipse, nó là một Framework tích hợp mô hình hóa và dữ liệu là nền tảng để lưu trữ metadata và metamodel.EMF cũng là một Framewwork sinh mã nguồn, cho phép xây dựng Eclipse editors là Plug- ins của Eclipse.

EMF có thể được sử dụng để mô hình hóa mô hình miền. EMF có sự phân biệt giữa meta model và mô hình thực tế, meta model mô tả cấu trúc của mô hình.

EMF có khả năng tạo ra code và chúng ta có thể chỉnh sửa code này. Metamodel của EMF dựa trên hai mô hình: *.Ecore và *.Genmodel. Ecore metamodel bao gồm các thông tin về các classes được định nghĩa. Genmodel chứa thông tin bổ sung cho codegeneration và các tham số điều khiển làm thế nào để code được tạo ra2.

Hình dưới đây là thể hiện các thành phần của dự án EMF và sự phụ thuộc của chúng.

Hình 2.15: Các thành phần được xây dựng trong dự án EMF[11]

Để xây dựng meta model trong dự án EMF ta chỉ cần xây dựng mô hình Ecore, từ mô hình Ecore tạo ra mô hình Genmodel. Với bộ Generator của EMF Framework, có thể tạo ra code cho các thành phần EMF.model, EMF.edit, EMF.Editor. Mã nguồn sinh ra có thể chỉnh sửa được, khi đó kết quả chỉnh sửa được cập nhật trở lại cho metamodel của dự án EMF.

Dự án EMF có cung cấp rất nhiều cách khác nhau cho việc phát triển mô hình Ecore như XMI, java annotations, UML hoặc lược đồ XML, hoặc sử dụng Tool Ecore Diagram để xây dựng.

2

Trong luận văn chúng tôi có sử dụng Tool Ecore diagram để phát triển mô hình Ecore. Với mô hình Ecore cho phép định nghĩa các thành phần khác nhau:

- Eclass: Đại diện cho một lớp, có hoặc không có thuộc tính có hoặc không có tham chiếu.

- Eattribute: Đại diện cho một thuộc tính gồm có tên và kiểu thuộc tính. - EReference: Đại diện cho một liên kết cuối giữa hai lớp. Nó có một cờ để xác định nếu nó đại diện cho một ngăn chứa và một lớp tham chiếu mà nó chỉ.

- EdataType: Đại diện một kiểu của một thuộc tính ví dụ như int, float …

Hình 2.16: MetaModel đại diện cho tập tối thiểu các thuật ngữ với ecore [11]

- Xây dựng cú pháp cụ thể cho DSML với dự án GMF

Eclipse cung cấp FrameWork xây dựng cú pháp cụ thể cho DSML là dự án GMF. Hình dưới đây thể hiện các thành phần tạo ra trong dự án GMF.

Kết quả của dự án EMF là đầu vào cho dự án GMF vì vậy trước tiên chúng ta phải phát triển dự án EMF.

Trong dự án GMF chúng ta sẽ phải tạo ra thêm hai mô hình nữa là mô hình Graphical Definition và Tooling Definition. Kết hợp 3 mô hình này để tạo ra mô hình Mapping Model, từ đó tạo ra mô hình Generator Model và Plug-in cho dự án GMF.

Trong dự án GMF của Eclipse có cung cấp cửa sổ tiện ích GMF DrashBoard cho phép chúng ta phát triển dự án GMF một cách trực quan và dễ dàng.

Hình 2.18: Cửa sổ tiện ích GMF Dashboard [4] Các mô hình trong GMF:

- Mô hình “Graphical Definition - *.gmfgraph” để định nghĩa các node, link, các figure, chính là các ký hiệu thể hiện các thành phần trong ngôn ngữ.

- Mô hình “Tooling Definition - *.gmftool” để định nghĩa các thành phần giao diện.

- Mô hình “Mapping Model ” kết hợp ba mô hình là Domain Model, Graphical Definition, Tooling definition với nhau mục đích sẽ ánh xạ các cú pháp trừu tượng và các cú pháp cụ thể gắn với thể hiện công cụ trên giao diện thiết kế của ngôn ngữ mô hình hóa chuyên biệt miền.

Cuối cùng từ mô hình “Mapping model” tạo ra mô hình “Generator

Model” và cuối cùng tạo “Diagram Plug - in” từ “Generator Model”. Mô hình

Một phần của tài liệu Mô hình hóa chuyên biệt miền cho ứng dụng web (Trang 31 - 43)

Tải bản đầy đủ (PDF)

(66 trang)