Xây dựng giải thuật sinh code tự động

Một phần của tài liệu Luận án tiến sĩ các kỹ thuật chuyển đổi mô hình và sinh mã trong phát triển ứng dụng web hướng mô hình (Trang 98 - 102)

CHƯƠNG 1 : PHÁT TRIỂN PHẦN MỀM HƯỚNG MÔ HÌNH

3.2. Sinh mã dựa trên thuật toán theo kiến trúc MVC

3.2.2. Xây dựng giải thuật sinh code tự động

Các giải thuật sinh code được xây dựng trên cơ sở phân tích mơ hình UWE và các quy tắc chuyển đổi tương ứng:

- Gii thut CM2M: Từ mơ hình nội dung (mức PIM) được chuyển đổi sang

JavaModel (mức PSM), là một thể hiện của Java metamodel, sau đó chuyển đổi sang mã nguồn Java.

- Giải thuật NPROM2C: Từmơ hình điều hướng và xửlý được chuyển đổi sang JavaModel, sau đó được chuyển đổi sang mã nguồn Java, tương ứng thành phần Controller..

- Gii thut PRES2V: Từ mơ hình trình bày được chuyển đổi sang JSPModel, là

một thể hiện của JSP metamodel, sau đó chuyển đổi sang mã JSP, tương ứng thành phần View..

a) Giải thuật CM2M

Giải thuật CM2M sinh mã thành phần Model từ mơ hình nội dung, Giải thuật SM2M được mô tảqua 2 bước, cụ thểnhư sau:

Bước 1: Đọc mơ hình, lấy ra biểu đồ nội dung, tạo danh sách chứa các lớp có trong biểu đồ.

Bước 2: Duyệt danh sách và thực hiện các chuyển đổi đối với từng lớp, từng thành phần sử dụng các quy tắc đã được trình bày ở trên.

Giải thuật CM2M

Input : contentModel // UWE Model

Output: listFiles // a list of Java Source Code files

/* Lấy danh sách các lớp có trong mơ hình nội dung */ 1 listClasses contentModel.getListClass() 2 foreach c in listClasses do 3 jc UWEClass2JavaClass(c) 4 listProperties c.getListProperties() 5 foreach p in listProperties do 6 j f , jg, js UWEProperty2JavaClassMember(p) 7 jc.members.add( j f , jg, js) 8 end 9 listOperations c.getListOperations() 10 foreach o in listOperations do 11 jm UWEOperation2JavaMethod(o) 12 jc.members.add( jm) 13 end 14 sourceCode jc.toCode()

15 Save sourceCode into the f ile

16 listFiles.add( f ile)

17 end

18 return listFiles b) Mô tả giải thuật PRES2V

Giải thuật PRES2V sinh mã thành phần View từ mơ hình trình bày Giải thuật SM2M được mô tảqua 2 bước, cụ thểnhư sau:

Bước 1: Đọc mơ hình, lấy ra biểu đồ trình bày, tạo danh sách chứa các lớp có trong

biểu đồ.

Bước 2: Duyệt danh sách bắt đầu từ lớp có khn mẫu "presentationPage", xác định các lớp con, đồng thời kết hợp với điều kiện bổ sung từ mơ hình điều hướng, thực hiện các chuyển đổi sử dụng các quy tắc đã được trình bày ở trên.

Giải thuật PRES2V

Input : presentationModel // UWE Model Output: listFiles // a list of JSP files

/* Lấy danh sách các lớp trong mơ hình trình bày*/ 1 listClasses presentationModel.getListClass()

2 foreach c in listClasses do

3 if c.getStereotype() = presentationPage then

4 documentName ← c.getName() + “. jsp” 5 jspRoot ← newJSPRoot(documentName)

6 htmlEl newJSPElement(name html”) 7 headEl newJSPElement(name head”) 8 bodyEl newJSPElement(name “body”)

9 titleEl newJSPElement(name “title”)

10 titleText newJSPTextNode(value c.getName())

11 titleEl.children titleText

12 bodyEl ← PreClass2JSP(bodyEl, c) 13 htmlEl.children ← {bodyEl, headEl}

14 jspRoot.children ← htmlEl

15 end

16 Create a f ile

17 f ile.name = jspRoot.documentName

18 sourceCode jspRoot.toCode()

19 Save sourceCode into the f ile

20 listFiles.add( f ile)

21 end

22 return listFiles

c) Giải thuật NPROM2C

Giải thuật NPROM2C sinh mã thành phần Controller từmơ hình điều hướng và xử lý (Navigation and Processing Model to Controller Code Generation). Giải thuật NPROM2C gồm 2 giải thuật nhỏhơn: NM2C sinh mã thành phần Controller từ mơ hình điều hướng, PROM2C sinh mã nguồn từ mơ hình xử lý.

Gii thut NM2C

Giải thuật NM2C

Input : navigationModel // UWE Model Output: file // a Java class

1 Create a f ile: f ile.name = navigationModel.getName()

2 uweClass ← navigationModel.getHomeClass()

3 jc ← Navi2JavaClass(uweClass)

4 naviNode ← newArrayList < NaviNode > 5 visit newMap < String, Boolean >

6 visit(uweClass.getQuali f iedName) true

7 queue newQueue < NaviNode >

8 queue.push(newNaviNode(e uweClass, linkNode ← “/

9 while queue.isEmpty() = f alse do 10 node queue.pop()

11 stereoType node.getStereotype

12 if stereoType = “processClass” or stereoType = “query” then

13 naviNode.add(node)

14 end

15 lstElements ← node.getAssociateElement

16 foreach c in lstElements do

17 if visit[c.getQuali f iedName] = f alse then 18 visit[c.getQuali f iedName] = true

19 e uweClass 20 linkNode ← “/” + c.getName() 21 queue.push(newNaviNode(e, linkNode) 22 end 23 end 24 end

25 foreach node in naviNode do

26 jm ← NaviNode2JavaMethod(uweClass, node)

27 jc.members ← jm

28 end

29 sourceCode jc.toCode()

30 Save sourceCode into f ile

Gii thut PROM2C

Giải thuật PROM2C

Input : processModel // UWE Model

Output: listFiles // a list of Java classes 1 listClasses ← processModel.getListClasses() 2 foreach c in listClasses do 3 jc UWEClass2JavaClass(c) 4 listProperties c.getListProperties() 5 foreach p in listProperties do 6 j f , jg, js UWEProperty2JavaClassMember(p) 7 jc.members.add( j f , jg, js) 8 end 9 listOperations c.getListOperations() 10 foreach o in listOperations do 11 jm ← UWEOperation2JavaMethod(o) 12 jc.members.add( jm) 13 end 14 sourceCode ← jc.toCode()

15 Create a f ile: f ile.name = jc.getName()

16 Save sourceCode into f ile

17 listFiles.add( f ile)

18 end

19 return listFiles

Luận án đã xây dựng 03 giải thuật CM2M, PRES2V và NPROM2C(NM2C, PROM2C) để sinh code từcác mơ hình UWE. Trong đó, giải thuật CM2M Sinh code từ mơ hình nội dung; Giải thuật PRES2V sinh code từ mơ hình trình bày; Giải thuật NPROM2C sinh code từ mơ hình điều hướng và mơ hình xử lý.

Một phần của tài liệu Luận án tiến sĩ các kỹ thuật chuyển đổi mô hình và sinh mã trong phát triển ứng dụng web hướng mô hình (Trang 98 - 102)

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

(145 trang)