(Luận văn thạc sĩ) ngôn ngữ chuyển mô hình RTL (restricted graph transformations language)

68 9 0
(Luận văn thạc sĩ) ngôn ngữ chuyển mô hình RTL (restricted graph transformations language)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỤC LỤC TÓM TẮT ii BẢNG KÝ HIỆU VÀ CÁC CHỮ VIẾT TẮT iii DANH SÁCH HÌNH VẼ iv MỞ ĐẦU Chương I Cơ sở lý thuyết cho chuyển mơ hình 1.1 Phát triển hướng mơ hình 1.1.1 Khái niệm mơ hình 1.1.2 Các chuẩn hướng tiếp cận MDD 1.1.3 Kiến trúc MDA 1.2 Tổng quan chuyển mơ hình 1.2.1 Các thuật ngữ chuyển mơ hình 1.2.2 Một số giải pháp sử dụng ngôn ngữ chuyển 1.3 Tổng kết chương 10 Chương II Ngơn ngữ chuyển mơ hình RTL 11 2.1 Cơ sở hình thức cho RTL 11 2.1.1 Kiến thức sở văn phạm đồ thị ba 12 2.1.2 Luật chuyển TGGs ràng buộc OCL 14 2.2 Cú pháp RTL 22 2.3 Thực thi chuyển 23 2.4 USE hỗ trợ RTL 24 Chương III Thực nghiệm chuyển mơ hình với RTL 26 3.1 Bài toán chuyển UML sang CSP 26 3.1.1 Metamodel biểu đồ hoạt động UML 26 3.1.2 Metamodel CSP 28 3.2 Phương thức chuyển 29 3.3 Kết chuyển UML2CSP 31 3.3.1 Xây dựng luật: 31 3.3.2 Áp dụng luật chuyển cho ví dụ cụ thể 37 3.4 Tổng kết chương 38 KẾT LUẬN 40 TÀI LIỆU THAM KHẢO 41 PHỤ LỤC 42 A XÂY DỰNG MƠ HÌNH VÀ LUẬT CHUYỂN ĐỔI 42 B MÃ SINH CỦA LUẬT 49 i BẢNG KÝ HIỆU VÀ CÁC CHỮ VIẾT TẮT Từ viết tắt Từ chuẩn Diễn giải MDA Model Driven Architecture Kiến trúc hướng mơ hình MDD Model-Driven Development Phát triển hướng mơ hình MOF Meta-Object Facility Một chuẩn OMG OMG Object Management Group Tổ chức quản lý đối tượng OCL Object Constraint Language Ngôn ngữ ràng buộc đối tượng UML Unified Modeling Language Ngơn ngữ mơ hình hóa thống RTL Restricted graph Ngơn ngữ chuyển mơ hình giới transformations language hạn TGG Triple graph grammar Văn phạm đồ thị ba CSP Communicating sequential Tiến trình giao tiếp processes iii DANH SÁCH HÌNH VẼ Hình 1.1: Ví dụ hệ thống phân cấp metamodel bốn lớp UML[3] Hình 1.2 Mơ hình mối quan hệ mức metamodel Hình 2.1 Luật chuyển đồ thị ba bước chuyển với luật chuyển tiến 14 Hình 2.2 : Mơ hình khái niệm bên trái tương ứng với mơ hình thiết kế bên phải 15 Hình 2.3: Chuyển đổi dạng biểu đồ metamodel 15 Hình 2.4: Luật chuyển ba addAssociation tích hợp OCL 17 Hình 2.5: Ví dụ điều kiện áp dụng OCL 18 Hình 2.6: Ví dụ việc áp dụng điều kiện OCL cho luật ba 19 Hình 2.7 : Luật chuyển ba dẫn xuất luật chuyển ba 21 Hình 3.1 Metamodel biểu đồ hoạt động UML [5] 27 Hình 3.2: Ví dụ biểu đồ hoạt động 27 Hình 3.3: Biểu đồ hoạt động UML biểu diễn USE 28 Hình 3.4: Metamodel CSP[5] 29 Hình 3.5: Luật trafoInitialNode 31 Hình 3.6 Luật trafoFinalNode 32 Hình 3.7 Luật trafoActionNode 33 Hình 3.8 Luật trafoDecisionNode 34 Hình 3.9 Luật trafoForkNode 35 Hình 3.10 Luật trafoMergeNode 36 Hình 3.11 Luật trafoJoinNode 37 Hình 3.12 Ví dụ chuyển mơ hình từ biểu đồ hoạt động UML sang CSP 39 iv MỞ ĐẦU Các hệ thống phần mềm ứng dụng phát triển nhanh ngày phức tạp địi hỏi phải có phương pháp để cải thiện tốc độ phát triển chất lượng ứng dụng Một hướng tiếp cận quan tâm phát triển phần mềm phát triển hướng mơ hình(MDD) Đã có nhiều phương pháp phát triển dựa hướng tiếp cận AGG, ATL, QVT[10] Mỗi phương pháp đưa đề xuất xây dựng ứng dụng dựa góc nhìn khác hệ thống dạng mơ hình Để xây dựng ứng dụng cách nhanh chóng xác áp dụng phương pháp MDD, điều quan trọng cần phải có kiểm tra tính hợp lệ mơ hình Những mơ hình xác, chặt chẽ điều kiện cần cho bước xây dựng ứng dụng theo hướng mơ hình hóa Vì vậy, xây dựng mơ hình cần có chế kiểm tra ràng buộc mà mơ hình phải tn theo Những ràng buộc biểu diễn ngôn ngữ ràng buộc đối tượng OCL Trong phạm vi luận văn, chúng tơi nghiên cứu trình bày phương pháp phát triển cụ thể văn phạm đồ thị ba(TGG), nghiên cứu ngơn ngữ chuyển mơ hình RTL [3], [4] Sau đưa nghiên cứu RTL xây dựng luật chuyển toán chuyển từ biểu đồ hoạt động UML sang đại số tiến trình CSP dựa công cụ USE Trên sở luật chuyển xây dựng áp dụng luật chuyển cho ví dụ cụ thể để chuyển đổi mơ hình biểu đồ hoạt động UML sang CSP[5] USE sử dụng làm công cụ kiểm chứng mô hình chuyển đổi Cấu trúc luận văn tổ chức sau: - Chương 1: Cơ sở lý thuyết cho chuyển mơ hình Chương giới thiệu chung phát triển hướng mơ hình tổng quan chuyển mơ hình - Chương 2: Ngơn ngữ chuyển mơ hình RTL Trong tập chung vào nghiên cứu sở hình thức cho RTL gồm: kiến thức sở văn phạm đồ thị ba, luật chuyển TGG ràng buộc OCL Từ nghiên cứu cú pháp RTL công cụ USE hỗ trợ RTL - Chương 3: Thực nghiệm chuyển mơ hình với RTL Trên sở nghiên cứu ngôn ngữ RTL, xây dựng toán chuyển từ biểu đồ hoạt động UML sang đại số tiến trình CSP việc xây dựng luật chuyển áp dụng vào ví dụ cụ thể Chương I Cơ sở lý thuyết cho chuyển mơ hình Chương giới thiệu mơ hình, ưu điểm việc phát triển hướng mơ hình lý thuyết cho chuyển mơ hình Giới thiệu số ngơn ngữ chuyển mơ hình phần mềm 1.1 Phát triển hướng mơ hình Phát triển hướng mơ hình (MDD) hướng tiếp cận xem xét việc xây dựng chương trình hoạt động chuyển đổi từ mơ hình sang mơ hình khác Ở hướng tiếp cận đối tượng, tất quy đối tượng Còn hướng tiếp cận MDD tất quy mơ hình Một số ưu điểm phát triển hướng mơ hình [10]: - Phát triển phần mềm nhanh hơn: Trong MDD mơ hình ứng dụng phần mềm xác định mức độ trừu tượng cao so với ngơn ngữ lập trình truyền thống Mơ hình tự động chuyển đổi thành ứng dụng phần mềm làm việc cách tạo mã biên dịch /thực thi mơ hình Khi mơ hình sử dụng mức độ trừu tượng cao nhanh nhiều so với mơ hình thể mã Nói cách khác: phần tử mơ hình đại diện cho nhiều dịng mã Do đó, xây dựng nhiều chức thời gian - Chi phí-hiệu hơn: MDD có chi phí hiệu Lý MDD thực nhanh đưa thị trường nhanh Lý thứ hai làm với chi phí thấp Điều tất nhiên phụ thuộc vào chi phí học phương pháp tiếp cận MDD chi phí để phát triển mua cơng cụ Nó phụ thuộc vào mơ hình kinh doanh Thay đổi trì ứng dụng xây dựng cách sử dụng cách tiếp cận MDD hiệu chi phí Nó dễ dàng để hiểu hành vi ứng dụng cách đọc mô hình cao cấp Ngồi nhanh để thêm chức thay đổi chức có cách sử dụng ngôn ngữ cấp cao - Tăng chất lượng phần mềm: Một phần mềm ứng dụng quy định cụ thể mơ hình cấp cao thực cấu chuyển đổi thành mã, chất lượng (kỹ thuật) ứng dụng phụ thuộc vào cấu trúc sinh Do đó, chất lượng tăng lên nhiều phát triển người tốt Hơn nữa, tất thực hành tốt tìm hiểu áp dụng cho dự án xây dựng cách sử dụng công cụ MDD Trong trường hợp mua cơng cụ MDD, chứa thực thi tốt xây dựng dựa kiến thức tất dự án xây dựng công cụ MDD khứ - Ít bị lỗi hơn: Việc kiểm thử phần mềm tốn nhiều thời gian chuyên mơn MDD đảm bảo bạn tập trung vào kiểm tra chức ứng dụng, tức chấp nhận thử nghiệm Vấn đề kỹ thuật đảm bảo cách thử nghiệm công cụ MDD, ví dụ vấn đề sở hạ tầng có liên quan lỗ hổng bảo mật cơng nghệ - Kiểm chứng có ý nghĩa: Ngay chức bị lỗi sử dụng cách tiếp cận MDD, kiểm chứng thực có ý nghĩa thực mơ hình cao cấp Khi sử dụng ngơn ngữ lập trình truyền thống, bạn có số cú pháp kiểm tra IDE bạn chí phân tích số mã tĩnh Tuy nhiên, tính phổ qt ngơn ngữ lập trình khơng thực giúp bạn tránh lỗi chức Khi sử dụng cách tiếp cận MDD xác nhận tên miền cụ thể thực thời điểm thiết kế - Biểu diễn hệ thống tri thức miền : MDD thi hành tách biệt mối quan tâm kỹ Chuyên gia miền tập trung vào việc mơ hình hóa miền, chun viên kỹ thuật tập trung vào xây dựng công cụ cần thiết cho MDD Xây dựng ứng dụng phức tạp khơng cho lập trình tốt MDD giới thiệu ký hiệu thích hợp (ví dụ văn bản, đồ họa, bảng) để trao quyền cho chuyên gia tên miền - Lập trình tiên tiến cho phép tập trung công cụ cứng: với MDD, nhà phát triển tiên tiến làm công việc lặp lặp lại Họ tập trung vào khía cạnh sáng tạo cơng việc họ Ví dụ, họ tập trung vào việc xây dựng cơng cụ MDD Họ cố vấn nhà phát triển sở chuyên gia tên miền, họ chọn phần cứng xây dựng ứng dụng - Cầu nối khoảng cách công nghệ công nghệ thông tin(CNTT): Liên kết kinh doanh-IT vấn đề nói xây dựng phần mềm MDD mang lại cho kinh doanh CNTT gần cách sau: thứ nhất, chuyên gia miền (hoặc nhà phân tích kinh doanh) trực tiếp tham gia trình phát triển Thứ hai, CNTT (một ứng dụng phần mềm) xác định mức độ cao nhiều Các mơ hình nhiều khai báo định nghĩa khái niệm miền Thứ ba, MDD phát triển nhanh phần mềm xây dựng lần lặp lại ngắn có phù hợp cho mục đích (do thơng tin phản hồi nhanh chóng doanh nghiệp, người dùng cuối cùng) Thứ tư, việc xác định biến đổi rõ ràng mơ hình tổ chức mơ hình hệ thống CNTT - Dễ thích ứng với thay đổi yêu cầu nghiệp vụ Một vấn đề phát triển phần mềm yêu cầu kinh doanh thường xuyên thay đổi nhanh so với hệ thống phần mềm hỗ trợ Tuy nhiên, MDD cung cấp giải pháp làm cho phát triển phần mềm nhanh , dẫn đến dễ dàng để thay đổi ứng dụng - Dễ thích ứng với thay đổi công nghệ Thay đổi công nghệ theo nhanh nhanh Hãy suy nghĩ điều Java EE, SOA / soba, webservices, REST, SCA, OSGi, gần hạn chế công nghệ ứng dụng điện tốn đám mây (ví dụ cấu trúc sở liệu ) MDD đảm bảo bạn thay đổi mơ hình ứng dụng bạn bạn muốn di chuyển ứng dụng bạn với công nghệ khác Điều mà cần phải thay đổi tạo (hoặc thông dịch) Sau thay đổi mã tạo (hoặc thêm tùy chọn mã bổ sung ) tất mơ hình ứng dụng trực tiếp chuyển đổi thành mã cho công nghệ - Thực thực thi kiến trúc: Các công ty thường xác định nguyên tắc kiến trúc Ứng dụng phần mềm phải tuân thủ nguyên tắc này, làm để kiểm tra thi hành tuân thủ tất mã tạo tay? Khi sử dụng MDD ứng dụng phần mềm đảm bảo thực với kiến trúc lựa chọn Bạn thực chuẩn hóa IT bạn ngun tắc kiến trúc thực thi công cụ MDD 1.1.1 Khái niệm mơ hình Để hiểu rõ MDD, sau đưa số khái niệm MDD [3], [10]: - Model: mơ hình cách biểu diễn hệ thống đơn giản giúp hiểu hệ thống Mơ hình thường diễn đạt ngôn ngữ đặc tả miền cụ thể hay ngơn ngữ mơ hình hóa chung UML Mơ hình biểu diễn ký hiệu đồ họa - Metamodel: Một metamodel mơ hình X miêu tả cấu trúc mơ hình X theo kiểu hợp lệ Một metamodel so sánh với cú pháp thiết kế ngơn ngữ Metamodel đinh nghĩa xác điều kiện tiên cho chuyển mơ hình Hình 1.1: Ví dụ hệ thống phân cấp metamodel bốn lớp UML[3] - Metametamodel: metametamodel mô hình X metamodel sử dụng để miêu tả metamodel model X Nó so sánh với ngữ pháp ngôn ngữ, mà sử dụng để miêu tả ngữ pháp ngôn ngữ X Nền tảng thiết lập tốt tiêu chuẩn cho việc metametamodel tồn MOF hay Ecore MOF chuẩn OMG cho việc định nghĩa metamodel MOF có hai phiên bản: Complete MOF(CMOF) Essential MOF (EMOF) Một cài đặt EMOF sử dụng phổ biến Ecore, định nghĩa Eclipse Modeling Framework (EMF) Ví dụ hình 1.1 có cấp độ model Mức M0 cấp độ liệu người dung, M1 mơ hình liệu cấp độ M0 Cấp M2 mơ hình cấp M1, thường gọi metamodel Cấp M3 tổ chức mơ hình thơng tin M2 thường gọi metametamodel 1.1.2 Các chuẩn hướng tiếp cận MDD Hướng tiếp cận MDD phát triển sử dụng rộng rãi ngành cơng nghiệp phần mềm Hiện có nhiều tổ chức tham gia nghiên cứu để thành lập chuẩn riêng như: MDA (Model Driven Architecture) tổ chức OMG, MIC (Model Intergrated Computing) nhóm ISIS đại học Vanderbilt, SF (Software Factories) công ty Microsoft, số chuẩn khác Trong chuẩn đó, MDA OMG công bố rộng rãi, phát triển mạnh giới nghiên cứu Hơn ứng dụng để tạo nhiều công cụ hỗ trợ trình xây dựng phần mềm, cơng cụ phát triển nhanh môi trường Eclipse [10] 1.1.3 Kiến trúc MDA MDA tổ chức OMG đề xuất năm 2000 MDA hướng tiếp cận xem việc xây dựng phần mềm việc chuyển đổi từ mô hình sang mơ hình khác MDA đề xuất bắt nguồn từ nhu cầu tồn lâu là: làm rõ đặc tả tác vụ hệ thống, phụ thuộc vào tảng, không phụ thuộc tảng, đồng thời chia mức độ phụ thuộc vào tảng MDA cung cấp tập nguyên tắc dẫn việc xây dựng, đặc tả cấu trúc hệ thống biểu diễn mơ hình Các mơ hình sau sinh bán tự động từ mã nguồn có khả thực thi máy chuyển mơ hình MDA dựa cách sử dụng có hệ thống mơ tác tử kỹ nghệ sơ cấp Các mơ hình xem lớp thực thể, thay mã nguồn Mã nguồn sinh từ mô hình, từ khung phát triển tới sản phẩm hồn thiện triển khai Khi đó, người phát triển tập trung tới vấn đề (tức mơ hình) mà khơng cần quan tâm tới tảng cài đặt cụ thể Ở tảng ngôn ngữ cài đặt Java, PHP… công nghệ JSF, Spring… áp dụng Sự phức tạp tảng lý cho thấy phát triển hướng mơ hình hiệu quả, có tính mềm dẻo, khả khả chuyển cao Cũng lí đó, MDA phát triển mạnh mẽ giới nghiên cứu nhiều công cụ hỗ trợ trình xây dựng phần mềm[10] Hướng tiếp cận MDA định hướng công cụ hỗ trợ xây dựng phải đạt được: Thứ nhất, xác định phần độc lập hệ thống tảng; thứ hai, xác định phần phụ thuộc tảng; thứ ba, chọn tảng chuyên biệt mà hệ thống phù hợp; thứ tư, chuyển hệ thống từ đặc tả tảng sang đặc tả tảng khác Trong kiến trúc hướng mơ hình MDA, loại mơ hình sau sử dụng: Mơ hình độc lập tính tốn(CIM), mơ hình độc lập (Platform Independent Model), mơ hình phụ thuộc (Platform Specific Model) Ba mơ hình biểu diễn cách nhìn hệ thống từ khía cạnh khác hệ thống mức độ trừu tượng tương ứng với giai đoạn phân tích, thiết kế triển khai kỹ nghệ phần mềm - Mơ hình độc lập tính tốn (CIM): u cầu hệ thống mơ hình hóa mơ hình độc lập tính tốn, CIM miêu tả ngữ cảnh mà hệ thống sử dụng Nó ẩn nhiều tất thông tin việc làm liệu xử lý hệ thống Có thể gọi mơ hình độc lập tính tốn mơ hình phân tích, mơ hình miền mơ hình nghiệp vụ, phụ thuộc vào ngữ cảnh mà sử dụng cho phù hợp CIM mơ hình hệ thống để thể vị trí, vai trị hệ thống mơi trường triển khai Nó giúp biểu diễn xác mà hi vọng hệ thống thực Điều thật hữu ích, khơng nhằm hiểu vấn đề chung hệ thống mà giúp có thêm nguồn thơng tin cho việc xây dựng mơ hình khác hệ thống cách đắn CIM đóng vai trị quan trọng việc lấp khoảng trống chuyên gia phân tích miền cụ thể, chuyên gia thiết kế, triển khai hay bảo trì Giúp xây dựng ứng dụng đáp ứng yêu cầu miền cụ thể - Mơ hình độc lập (PIM): mơ hình độc lập với đặc điểm tảng Nó miêu tả hệ thống mà khơng nêu rõ sử dụng cho tảng Một mơ hình độc lập phù hợp cho kiểu kiến trúc đặc biệt PIM sử dụng cho công nghệ máy ảo, loại tảng chung hay tảng trừu tượng - Mô hình phụ thuộc (PSM): xây dựng cho tảng cụ thể Nó có nguồn gốc từ mơ hình độc lập tảng cộng thêm số thơng tin liên quan Do kết hợp đặc điểm kỹ thuật tảng độc lập với chi tiết tảng cụ thể Tuy theo mục đích sử dụng PSM cung cấp hay nhiều thông tin chi tiết cần thiết cho việc tự động sinh thành phần triển khai hệ thống từ mơ hình mơ hình phụ thuộc tảng triển khai 1.2 Tổng quan chuyển mơ hình Trong phát triển hướng mơ hình chuỗi mơ hình tạo trì Mơ hình biểu diễn giai đoạn khác tiến trình phát triển Thêm nữa, mơ hình thể khung nhìn khác hệ thống biểu diễn cấp trừu tượng khác hệ thống Chuyển mơ hình khái niệm trọng tâm lĩnh vực phát triển hướng mơ hình Chuyển mơ hình cung cấp chế cho việc tự động tạo !assign _ae2p2 := create AE2P !assign _ac2e := create AC2E !insert(_ae2p2,_theActivityEdgeB) into L_ActivityEdge_AE2P !insert(_ae2p2,_theProcessB) into R_Process_AE2P !insert(_ac2e,_action) into L_Action_AC2E !insert(_ac2e,_theEvent) into R_Event_AC2E Update the mapped attributes correspondence links !set _ae2p2.ae.name:=_ae2p2.p.name !set _ac2e.act.name:=_ac2e.event.name -!opexit uml2csp_trafoDecision2Node_coEvol.cmd uml2csp_trafoDecision2Node_coEvol.cmd matchSL:Tuple(theActivityEdgeA:ActivityEdge) matchTL:Tuple(theProcessA:Process) matchCL:Tuple(ae2p1:AE2P) !openter rc trafoDecision2Node_coEvol(matchSL,matchTL,matchCL) -matchSL:Tuple(theActivityEdgeA:ActivityEdge) !let _theActivityEdgeA = matchSL.theActivityEdgeA -matchTL:Tuple(theProcessA:Process) !let _theProcessA = matchTL.theProcessA -matchCL:Tuple(ae2p1:AE2P) !let _ae2p1 = matchCL.ae2p1 Create for matchS !assign _theActivityEdgeB := create ActivityEdge !assign _theActivityEdgeC := create ActivityEdge !assign _theActivityEdgeD := create ActivityEdge !assign _decisionNode := create DecisionNode !insert(_theActivityEdgeA,_decisionNode) into ConnectsTo !insert(_theActivityEdgeB,_decisionNode) into ConnectsFrom !insert(_theActivityEdgeC,_decisionNode) into ConnectsFrom !insert(_theActivityEdgeD,_decisionNode) into ConnectsFrom !set _theActivityEdgeD.guard := 'else' Create for matchT !assign _theProcessB := create Process !assign _theProcessC := create Process !assign _theProcessD := create Process !assign _assignment := create ProcessAssignment !assign _condition1 := create Condition !assign _condition2 := create Condition !insert(_assignment,_theProcessA) into AssignsLeft !insert(_assignment,_condition1) into AssignsRight !insert(_condition1,_theProcessB) into CombinesLeft 51 by !insert(_condition1,_condition2) into CombinesRight !insert(_condition2,_theProcessC) into CombinesLeft !insert(_condition2,_theProcessD) into CombinesRight Create for matchC !assign _ae2p2 := create AE2P !assign _ae2p3 := create AE2P !assign _ae2p4 := create AE2P !assign _ae2con1 := create AE2CON !assign _ae2con2 := create AE2CON !insert(_ae2p2,_theActivityEdgeB) into L_ActivityEdge_AE2P !insert(_ae2p2,_theProcessB) into R_Process_AE2P !insert(_ae2p3,_theActivityEdgeC) into L_ActivityEdge_AE2P !insert(_ae2p3,_theProcessC) into R_Process_AE2P !insert(_ae2p4,_theActivityEdgeD) into L_ActivityEdge_AE2P !insert(_ae2p4,_theProcessD) into R_Process_AE2P !insert(_ae2con1,_theActivityEdgeB) into L_ActivityEdge_AE2CON !insert(_ae2con1,_condition1) into R_Condition_AE2CON !insert(_ae2con2,_theActivityEdgeC) into L_ActivityEdge_AE2CON !insert(_ae2con2,_condition2) into R_Condition_AE2CON Delete for matchC -Delete for matchS -Delete for matchT -Update the mapped attributes by correspondence links !set _ae2p2.ae.name:=_ae2p2.p.name !set _ae2p3.ae.name:=_ae2p3.p.name !set _ae2p4.ae.name:=_ae2p4.p.name !set _ae2con1.ae.guard:=_ae2con1.con.expression !set _ae2con2.ae.guard:=_ae2con2.con.expression -!opexit uml2csp_trafoDecision2Node_forwTrafo.cmd uml2csp_trafoDecision2Node_forwTrafo.cmd -matchSR:Tuple(theActivityEdgeB:ActivityEdge,theActivityEdgeC:Activity Edge,theActivityEdgeD:ActivityEdge,decisionNode:DecisionNode,theActiv ityEdgeA:ActivityEdge) matchTL:Tuple(theProcessA:Process) matchCL:Tuple(ae2p1:AE2P) !openter rc trafoDecision2Node_forwTrafo(matchSR,matchTL,matchCL) matchSL:Tuple(theActivityEdgeA:ActivityEdge) matchTL:Tuple(theProcessA:Process) matchCL:Tuple(ae2p1:AE2P) !openter rc trafoDecision2Node_forwTrafo(matchSR,matchTL,matchCL) 52 matchSR:Tuple(theActivityEdgeB:ActivityEdge,theActivityEdgeC:Activity Edge,theActivityEdgeD:ActivityEdge,decisionNode:DecisionNode,theActiv ityEdgeA:ActivityEdge) !let _theActivityEdgeB = matchSR.theActivityEdgeB !let _theActivityEdgeC = matchSR.theActivityEdgeC !let _theActivityEdgeD = matchSR.theActivityEdgeD !let _decisionNode = matchSR.decisionNode !let _theActivityEdgeA = matchSR.theActivityEdgeA -matchTL:Tuple(theProcessA:Process) !let _theProcessA = matchTL.theProcessA -matchCL:Tuple(ae2p1:AE2P) !let _ae2p1 = matchCL.ae2p1 Create for matchT !assign _theProcessB := create Process !assign _theProcessC := create Process !assign _theProcessD := create Process !assign _assignment := create ProcessAssignment !assign _condition1 := create Condition !assign _condition2 := create Condition !insert(_assignment,_theProcessA) into AssignsLeft !insert(_assignment,_condition1) into AssignsRight !insert(_condition1,_theProcessB) into CombinesLeft !insert(_condition1,_condition2) into CombinesRight !insert(_condition2,_theProcessC) into CombinesLeft !insert(_condition2,_theProcessD) into CombinesRight Create for matchC !assign _ae2p2 := create AE2P !assign _ae2p3 := create AE2P !assign _ae2p4 := create AE2P !assign _ae2con1 := create AE2CON !assign _ae2con2 := create AE2CON !insert(_ae2p2,_theActivityEdgeB) into L_ActivityEdge_AE2P !insert(_ae2p2,_theProcessB) into R_Process_AE2P !insert(_ae2p3,_theActivityEdgeC) into L_ActivityEdge_AE2P !insert(_ae2p3,_theProcessC) into R_Process_AE2P !insert(_ae2p4,_theActivityEdgeD) into L_ActivityEdge_AE2P !insert(_ae2p4,_theProcessD) into R_Process_AE2P !insert(_ae2con1,_theActivityEdgeB) into L_ActivityEdge_AE2CON !insert(_ae2con1,_condition1) into R_Condition_AE2CON !insert(_ae2con2,_theActivityEdgeC) into L_ActivityEdge_AE2CON !insert(_ae2con2,_condition2) into R_Condition_AE2CON Update the mapped attributes by correspondence links !set _ae2p2.ae.name:=_ae2p2.p.name 53 !set _ae2p3.ae.name:=_ae2p3.p.name !set _ae2p4.ae.name:=_ae2p4.p.name !set _ae2con1.ae.guard:=_ae2con1.con.expression !set _ae2con2.ae.guard:=_ae2con2.con.expression -!opexit uml2csp_trafoFinalNode_coEvol.cmd uml2csp_trafoFinalNode_coEvol.cmd matchSL:Tuple(theActivityEdgeA:ActivityEdge) matchTL:Tuple(theProcessA:Process) matchCL:Tuple(ae2p:AE2P) !openter rc trafoFinalNode_coEvol(matchSL,matchTL,matchCL) -matchSL:Tuple(theActivityEdgeA:ActivityEdge) !let _theActivityEdgeA = matchSL.theActivityEdgeA -matchTL:Tuple(theProcessA:Process) !let _theProcessA = matchTL.theProcessA -matchCL:Tuple(ae2p:AE2P) !let _ae2p = matchCL.ae2p Create for matchS !assign _finalNode := create FinalNode !insert(_theActivityEdgeA,_finalNode) into ConnectsTo Create for matchT !assign _assignment := create ProcessAssignment !assign _SKIP := create Process !insert(_assignment,_SKIP) into AssignsRight !insert(_assignment,_theProcessA) into AssignsLeft !set _SKIP.name := '_SKIP' Create for matchC !assign _f2p := create F2P !insert(_f2p,_finalNode) into L_FinalNode_F2P !insert(_f2p,_SKIP) into R_Process_F2P Delete for matchC -Delete for matchS -Delete for matchT !opexit uml2csp_trafoFinalNode_forwTrafo.cmd uml2csp_trafoFinalNode_forwTrafo.cmd matchSR:Tuple(finalNode:FinalNode,theActivityEdgeA:ActivityEdge) matchTL:Tuple(theProcessA:Process) matchCL:Tuple(ae2p:AE2P) 54 !openter rc trafoFinalNode_forwTrafo(matchSR,matchTL,matchCL) matchSL:Tuple(theActivityEdgeA:ActivityEdge) matchTL:Tuple(theProcessA:Process) matchCL:Tuple(ae2p:AE2P) !openter rc trafoFinalNode_forwTrafo(matchSR,matchTL,matchCL) -matchSR:Tuple(finalNode:FinalNode,theActivityEdgeA:ActivityEdge) !let _finalNode = matchSR.finalNode !let _theActivityEdgeA = matchSR.theActivityEdgeA -matchTL:Tuple(theProcessA:Process) !let _theProcessA = matchTL.theProcessA -matchCL:Tuple(ae2p:AE2P) !let _ae2p = matchCL.ae2p Create for matchT !assign _assignment := create ProcessAssignment !assign _SKIP := create Process !insert(_assignment,_SKIP) into AssignsRight !insert(_assignment,_theProcessA) into AssignsLeft !set _SKIP.name := '_SKIP' Create for matchC !assign _f2p := create F2P !insert(_f2p,_finalNode) into L_FinalNode_F2P !insert(_f2p,_SKIP) into R_Process_F2P -!opexit uml2csp_trafoForkNode_coEvol.cmd uml2csp_trafoForkNode_coEvol.cmd matchSL:Tuple(theActivityEdgeA:ActivityEdge) matchTL:Tuple(theProcessA:Process) matchCL:Tuple(ae2p1:AE2P) !openter rc trafoForkNode_coEvol(matchSL,matchTL,matchCL) -matchSL:Tuple(theActivityEdgeA:ActivityEdge) !let _theActivityEdgeA = matchSL.theActivityEdgeA -matchTL:Tuple(theProcessA:Process) !let _theProcessA = matchTL.theProcessA -matchCL:Tuple(ae2p1:AE2P) !let _ae2p1 = matchCL.ae2p1 Create for matchS !assign _theActivityEdgeB := create ActivityEdge 55 !assign _theActivityEdgeC := create ActivityEdge !assign _theActivityEdgeD := create ActivityEdge !assign _forkNode := create ForkNode !insert(_theActivityEdgeA,_forkNode) into ConnectsTo !insert(_theActivityEdgeB,_forkNode) into ConnectsFrom !insert(_theActivityEdgeC,_forkNode) into ConnectsFrom !insert(_theActivityEdgeD,_forkNode) into ConnectsFrom Create for matchT !assign _theProcessB := create Process !assign _theProcessC := create Process !assign _theProcessD := create Process !assign _assignment := create ProcessAssignment !assign _concurrency1 := create Concurrency !assign _concurrency2 := create Concurrency !insert(_assignment,_theProcessA) into AssignsLeft !insert(_assignment,_concurrency1) into AssignsRight !insert(_concurrency1,_theProcessB) into CombinesLeft !insert(_concurrency1,_concurrency2) into CombinesRight !insert(_concurrency2,_theProcessC) into CombinesLeft !insert(_concurrency2,_theProcessD) into CombinesRight Create for matchC !assign _ae2p2 := create AE2P !assign _ae2p3 := create AE2P !assign _ae2p4 := create AE2P !insert(_ae2p2,_theActivityEdgeB) into L_ActivityEdge_AE2P !insert(_ae2p2,_theProcessB) into R_Process_AE2P !insert(_ae2p3,_theActivityEdgeC) into L_ActivityEdge_AE2P !insert(_ae2p3,_theProcessC) into R_Process_AE2P !insert(_ae2p4,_theActivityEdgeD) into L_ActivityEdge_AE2P !insert(_ae2p4,_theProcessD) into R_Process_AE2P Delete for matchC -Delete for matchS -Delete for matchT -Update the mapped attributes by correspondence links !set _ae2p2.ae.name:=_ae2p2.p.name !set _ae2p3.ae.name:=_ae2p3.p.name !set _ae2p4.ae.name:=_ae2p4.p.name -!opexit uml2csp_trafoForkNode_forwTrafo.cmd uml2csp_trafoForkNode_forwTrafo.cmd -matchSR:Tuple(theActivityEdgeB:ActivityEdge,theActivityEdgeC:Activity Edge,theActivityEdgeD:ActivityEdge,forkNode:ForkNode,theActivityEdgeA :ActivityEdge) 56 matchTL:Tuple(theProcessA:Process) matchCL:Tuple(ae2p1:AE2P) !openter rc trafoForkNode_forwTrafo(matchSR,matchTL,matchCL) matchSL:Tuple(theActivityEdgeA:ActivityEdge) matchTL:Tuple(theProcessA:Process) matchCL:Tuple(ae2p1:AE2P) !openter rc trafoForkNode_forwTrafo(matchSR,matchTL,matchCL) matchSR:Tuple(theActivityEdgeB:ActivityEdge,theActivityEdgeC:Activity Edge,theActivityEdgeD:ActivityEdge,forkNode:ForkNode,theActivityEdgeA :ActivityEdge) !let _theActivityEdgeB = matchSR.theActivityEdgeB !let _theActivityEdgeC = matchSR.theActivityEdgeC !let _theActivityEdgeD = matchSR.theActivityEdgeD !let _forkNode = matchSR.forkNode !let _theActivityEdgeA = matchSR.theActivityEdgeA -matchTL:Tuple(theProcessA:Process) !let _theProcessA = matchTL.theProcessA -matchCL:Tuple(ae2p1:AE2P) !let _ae2p1 = matchCL.ae2p1 Create for matchT !assign _theProcessB := create Process !assign _theProcessC := create Process !assign _theProcessD := create Process !assign _assignment := create ProcessAssignment !assign _concurrency1 := create Concurrency !assign _concurrency2 := create Concurrency !insert(_assignment,_theProcessA) into AssignsLeft !insert(_assignment,_concurrency1) into AssignsRight !insert(_concurrency1,_theProcessB) into CombinesLeft !insert(_concurrency1,_concurrency2) into CombinesRight !insert(_concurrency2,_theProcessC) into CombinesLeft !insert(_concurrency2,_theProcessD) into CombinesRight Create for matchC !assign _ae2p2 := create AE2P !assign _ae2p3 := create AE2P !assign _ae2p4 := create AE2P !insert(_ae2p2,_theActivityEdgeB) into L_ActivityEdge_AE2P !insert(_ae2p2,_theProcessB) into R_Process_AE2P !insert(_ae2p3,_theActivityEdgeC) into L_ActivityEdge_AE2P !insert(_ae2p3,_theProcessC) into R_Process_AE2P !insert(_ae2p4,_theActivityEdgeD) into L_ActivityEdge_AE2P !insert(_ae2p4,_theProcessD) into R_Process_AE2P 57 Update the mapped attributes correspondence links !set _ae2p2.ae.name:=_ae2p2.p.name !set _ae2p3.ae.name:=_ae2p3.p.name !set _ae2p4.ae.name:=_ae2p4.p.name -!opexit uml2csp_trafoInitialNode_coEvol.cmd uml2csp_trafoInitialNode_coEvol.cmd by !openter rc trafoInitialNode_coEvol() Create for matchS !assign _theActivityEdgeA := create ActivityEdge !assign _init := create InitialNode !insert(_theActivityEdgeA,_init) into ConnectsFrom Create for matchT !assign _theProcessA := create Process Create for matchC !assign _ae2p := create AE2P !insert(_ae2p,_theActivityEdgeA) into L_ActivityEdge_AE2P !insert(_ae2p,_theProcessA) into R_Process_AE2P Delete for matchC -Delete for matchS -Delete for matchT -Update the mapped attributes correspondence links !set _ae2p.ae.name:=_ae2p.p.name -!opexit 10 uml2csp_trafoInitialNode_forwTrafo.cmd uml2csp_trafoInitialNode_forwTrafo.cmd matchSR:Tuple(theActivityEdgeA:ActivityEdge,init:InitialNode) !openter rc trafoInitialNode_forwTrafo(matchSR,matchTL,matchCL) !openter rc trafoInitialNode_forwTrafo() -matchSR:Tuple(theActivityEdgeA:ActivityEdge,init:InitialNode) !let _theActivityEdgeA = matchSR.theActivityEdgeA !let _init = matchSR.init Create for matchT !assign _theProcessA := create Process Create for matchC !assign _ae2p := create AE2P 58 by !insert(_ae2p,_theActivityEdgeA) into L_ActivityEdge_AE2P !insert(_ae2p,_theProcessA) into R_Process_AE2P Update the mapped attributes by correspondence links !set _ae2p.ae.name:=_ae2p.p.name -!opexit 11 uml2csp_trafoJoinNode_coEvol.cmd uml2csp_trafoJoinNode_coEvol.cmd -matchSL:Tuple(theActivityEdgeA:ActivityEdge,theActivityEdgeB:Activity Edge,theActivityEdgeC:ActivityEdge) -matchTL:Tuple(theProcessA:Process,theProcessB:Process,theProcessC:Pro cess) matchCL:Tuple(ae2p1:AE2P,ae2p2:AE2P,ae2p3:AE2P) !openter rc trafoJoinNode_coEvol(matchSL,matchTL,matchCL) matchSL:Tuple(theActivityEdgeA:ActivityEdge,theActivityEdgeB:Activity Edge,theActivityEdgeC:ActivityEdge) !let _theActivityEdgeA = matchSL.theActivityEdgeA !let _theActivityEdgeB = matchSL.theActivityEdgeB !let _theActivityEdgeC = matchSL.theActivityEdgeC matchTL:Tuple(theProcessA:Process,theProcessB:Process,theProcessC:Pro cess) !let _theProcessA = matchTL.theProcessA !let _theProcessB = matchTL.theProcessB !let _theProcessC = matchTL.theProcessC -matchCL:Tuple(ae2p1:AE2P,ae2p2:AE2P,ae2p3:AE2P) !let _ae2p1 = matchCL.ae2p1 !let _ae2p2 = matchCL.ae2p2 !let _ae2p3 = matchCL.ae2p3 Create for matchS !assign _theActivityEdgeD := create ActivityEdge !assign _joinNode := create JoinNode !insert(_theActivityEdgeA,_joinNode) into ConnectsTo !insert(_theActivityEdgeB,_joinNode) into ConnectsTo !insert(_theActivityEdgeC,_joinNode) into ConnectsTo !insert(_theActivityEdgeD,_joinNode) into ConnectsFrom Create for matchT !assign _processJoin := create Event !assign _SKIP := create Process !assign _theProcessD := create Process 59 !assign _assignment1 := create ProcessAssignment !assign _assignment2 := create ProcessAssignment !assign _assignment3 := create ProcessAssignment !assign _prefix1 := create Prefix !assign _prefix2 := create Prefix !assign _prefix3 := create Prefix !insert(_assignment1,_theProcessA) into AssignsLeft !insert(_assignment1,_prefix1) into AssignsRight !insert(_assignment2,_theProcessB) into AssignsLeft !insert(_assignment2,_prefix2) into AssignsRight !insert(_assignment3,_theProcessC) into AssignsLeft !insert(_assignment3,_prefix3) into AssignsRight !insert(_prefix1,_processJoin) into Performs !insert(_prefix1,_theProcessD) into Becomes !insert(_prefix2,_processJoin) into Performs !insert(_prefix2,_SKIP) into Becomes !insert(_prefix3,_processJoin) into Performs !insert(_prefix3,_SKIP) into Becomes !set _SKIP.name := '_SKIP' !set _processJoin.name := '_processJoin' Create for matchC !assign _ae2p4 := create AE2P !insert(_ae2p4,_theActivityEdgeD) into L_ActivityEdge_AE2P !insert(_ae2p4,_theProcessD) into R_Process_AE2P Delete for matchC -Delete for matchS -Delete for matchT -Update the mapped attributes by correspondence links !set _ae2p4.ae.name:=_ae2p4.p.name -!opexit 12 uml2csp_trafoJoinNode_forwTrafo.cmd uml2csp_trafoJoinNode_forwTrafo.cmd -matchSR:Tuple(theActivityEdgeD:ActivityEdge,joinNode:JoinNode,theActi vityEdgeA:ActivityEdge,theActivityEdgeB:ActivityEdge,theActivityEdgeC :ActivityEdge) -matchTL:Tuple(theProcessA:Process,theProcessB:Process,theProcessC:Pro cess) matchCL:Tuple(ae2p1:AE2P,ae2p2:AE2P,ae2p3:AE2P) !openter rc trafoJoinNode_forwTrafo(matchSR,matchTL,matchCL) 60 -matchSL:Tuple(theActivityEdgeA:ActivityEdge,theActivityEdgeB:Activity Edge,theActivityEdgeC:ActivityEdge) -matchTL:Tuple(theProcessA:Process,theProcessB:Process,theProcessC:Pro cess) matchCL:Tuple(ae2p1:AE2P,ae2p2:AE2P,ae2p3:AE2P) !openter rc trafoJoinNode_forwTrafo(matchSR,matchTL,matchCL) matchSR:Tuple(theActivityEdgeD:ActivityEdge,joinNode:JoinNode,theActi vityEdgeA:ActivityEdge,theActivityEdgeB:ActivityEdge,theActivityEdgeC :ActivityEdge) !let _theActivityEdgeD = matchSR.theActivityEdgeD !let _joinNode = matchSR.joinNode !let _theActivityEdgeA = matchSR.theActivityEdgeA !let _theActivityEdgeB = matchSR.theActivityEdgeB !let _theActivityEdgeC = matchSR.theActivityEdgeC matchTL:Tuple(theProcessA:Process,theProcessB:Process,theProcessC:Pro cess) !let _theProcessA = matchTL.theProcessA !let _theProcessB = matchTL.theProcessB !let _theProcessC = matchTL.theProcessC -matchCL:Tuple(ae2p1:AE2P,ae2p2:AE2P,ae2p3:AE2P) !let _ae2p1 = matchCL.ae2p1 !let _ae2p2 = matchCL.ae2p2 !let _ae2p3 = matchCL.ae2p3 Create for matchT !assign _processJoin := create Event !assign _SKIP := create Process !assign _theProcessD := create Process !assign _assignment1 := create ProcessAssignment !assign _assignment2 := create ProcessAssignment !assign _assignment3 := create ProcessAssignment !assign _prefix1 := create Prefix !assign _prefix2 := create Prefix !assign _prefix3 := create Prefix !insert(_assignment1,_theProcessA) into AssignsLeft !insert(_assignment1,_prefix1) into AssignsRight !insert(_assignment2,_theProcessB) into AssignsLeft !insert(_assignment2,_prefix2) into AssignsRight !insert(_assignment3,_theProcessC) into AssignsLeft !insert(_assignment3,_prefix3) into AssignsRight !insert(_prefix1,_processJoin) into Performs 61 !insert(_prefix1,_theProcessD) into Becomes !insert(_prefix2,_processJoin) into Performs !insert(_prefix2,_SKIP) into Becomes !insert(_prefix3,_processJoin) into Performs !insert(_prefix3,_SKIP) into Becomes !set _SKIP.name := '_SKIP' !set _processJoin.name := '_processJoin' Create for matchC !assign _ae2p4 := create AE2P !insert(_ae2p4,_theActivityEdgeD) into L_ActivityEdge_AE2P !insert(_ae2p4,_theProcessD) into R_Process_AE2P Update the mapped attributes by correspondence links !set _ae2p4.ae.name:=_ae2p4.p.name -!opexit 13 uml2csp_trafoMergeNode_coEvol.cmd uml2csp_trafoMergeNode_coEvol.cmd -matchSL:Tuple(theActivityEdgeA:ActivityEdge,theActivityEdgeB:Activity Edge) matchTL:Tuple(theProcessA:Process,theProcessB:Process) matchCL:Tuple(ae2p1:AE2P,ae2p2:AE2P) !openter rc trafoMergeNode_coEvol(matchSL,matchTL,matchCL) matchSL:Tuple(theActivityEdgeA:ActivityEdge,theActivityEdgeB:Activity Edge) !let _theActivityEdgeA = matchSL.theActivityEdgeA !let _theActivityEdgeB = matchSL.theActivityEdgeB -matchTL:Tuple(theProcessA:Process,theProcessB:Process) !let _theProcessA = matchTL.theProcessA !let _theProcessB = matchTL.theProcessB -matchCL:Tuple(ae2p1:AE2P,ae2p2:AE2P) !let _ae2p1 = matchCL.ae2p1 !let _ae2p2 = matchCL.ae2p2 Create for matchS !assign _theActivityEdgeC := create ActivityEdge !assign _mergeNode := create MergeNode !insert(_theActivityEdgeA,_mergeNode) into ConnectsTo !insert(_theActivityEdgeB,_mergeNode) into ConnectsTo !insert(_theActivityEdgeC,_mergeNode) into ConnectsFrom Create for matchT !assign _theProcessC := create Process !assign _assignment1 := create ProcessAssignment 62 !assign _assignment2 := create ProcessAssignment !insert(_assignment1,_theProcessA) into AssignsLeft !insert(_assignment1,_theProcessC) into AssignsRight !insert(_assignment2,_theProcessB) into AssignsLeft !insert(_assignment2,_theProcessC) into AssignsRight Create for matchC !assign _ae2p3 := create AE2P !insert(_ae2p3,_theActivityEdgeC) into L_ActivityEdge_AE2P !insert(_ae2p3,_theProcessC) into R_Process_AE2P Delete for matchC -Delete for matchS -Delete for matchT -Update the mapped attributes by correspondence links !set _ae2p3.ae.name:=_ae2p3.p.name -!opexit 14 uml2csp_trafoMergeNode_forwTrafo.cmd uml2csp_trafoMergeNode_forwTrafo.cmd -matchSR:Tuple(theActivityEdgeC:ActivityEdge,mergeNode:MergeNode,theAc tivityEdgeA:ActivityEdge,theActivityEdgeB:ActivityEdge) matchTL:Tuple(theProcessA:Process,theProcessB:Process) matchCL:Tuple(ae2p1:AE2P,ae2p2:AE2P) !openter rc trafoMergeNode_forwTrafo(matchSR,matchTL,matchCL) -matchSL:Tuple(theActivityEdgeA:ActivityEdge,theActivityEdgeB:Activity Edge) matchTL:Tuple(theProcessA:Process,theProcessB:Process) matchCL:Tuple(ae2p1:AE2P,ae2p2:AE2P) !openter rc trafoMergeNode_forwTrafo(matchSR,matchTL,matchCL) matchSR:Tuple(theActivityEdgeC:ActivityEdge,mergeNode:MergeNode,theAc tivityEdgeA:ActivityEdge,theActivityEdgeB:ActivityEdge) !let _theActivityEdgeC = matchSR.theActivityEdgeC !let _mergeNode = matchSR.mergeNode !let _theActivityEdgeA = matchSR.theActivityEdgeA !let _theActivityEdgeB = matchSR.theActivityEdgeB -matchTL:Tuple(theProcessA:Process,theProcessB:Process) !let _theProcessA = matchTL.theProcessA !let _theProcessB = matchTL.theProcessB 63 -matchCL:Tuple(ae2p1:AE2P,ae2p2:AE2P) !let _ae2p1 = matchCL.ae2p1 !let _ae2p2 = matchCL.ae2p2 Create for matchT !assign _theProcessC := create Process !assign _assignment1 := create ProcessAssignment !assign _assignment2 := create ProcessAssignment !insert(_assignment1,_theProcessA) into AssignsLeft !insert(_assignment1,_theProcessC) into AssignsRight !insert(_assignment2,_theProcessB) into AssignsLeft !insert(_assignment2,_theProcessC) into AssignsRight Create for matchC !assign _ae2p3 := create AE2P !insert(_ae2p3,_theActivityEdgeC) into L_ActivityEdge_AE2P !insert(_ae2p3,_theProcessC) into R_Process_AE2P Update the mapped attributes correspondence links !set _ae2p3.ae.name:=_ae2p3.p.name -!opexit 64 by Thank you for evaluating AnyBizSoft PDF Merger! To remove this page, please register your program! Go to Purchase Now>> AnyBizSoft PDF Merger  Merge multiple PDF files into one  Select page range of PDF to merge  Select specific page(s) to merge  Extract page(s) from different PDF files and merge into one ... thuật ngữ chuyển mơ hình [10]: - Ngơn ngữ chuyển mơ hình: tập từ vựng ngữ pháp định nghĩa ngữ nghĩa tốt cho khả chuyển mô hình - Luật chuyển mơ hình: Một luật chuyển mơ hình mơ tả thực thể nhỏ chuyển. .. công nghệ chuyển mô hình chế, chẳng hạn đặc thù ngơn ngữ chuyển mơ hình Có kiểu chuyển: Chuyển từ mơ hình sang text (M2T) chuyển mơ hình sang mơ hình (M2M) 1.2.1 Các thuật ngữ chuyển mơ hình Sau... Transformation Language)[ 7] ATL ngôn ngữ chuyển mô hình tới mơ hình ATL hỗ trợ phép chuyển mơ hình theo hướng Một chương trình chuyển ATL bao gồm luật chuyển mô tả cách tạo phần tử mơ hình đích Ngơn ngữ

Ngày đăng: 05/12/2020, 11:44

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan