ROSE生成的代码框架和MDA工具生成的代码有什么不同?

2024-02-27 02:32

本文主要是介绍ROSE生成的代码框架和MDA工具生成的代码有什么不同?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个问题的提问方式似乎有点问题。首先,ROSE是否是一种MDA工具还有待商榷。虽然Rose是出现在MDA概念出现之前的一种CASE工具,但是也不能主观的把它排除在MDA工具之外。所谓MDA(模型驱动架构),就是以模型为中心的开发方法的架构。其中的模型有4个层次的概念,MOF的四层模型结构详细描述这四层模型结构,但是目前应用最多,影响最大还是M1层模型,因为它可以直接转换为代码,极大的提高软件开发的速度和质量。而在M1层模型中,遵循UML规范的模型又是事实上的标准,因此OMG(对象管理组织,MDA的提出和倡导者)吸纳了UML作为MDA的核心部分,MOF也把UML元模型作为M2层的代表之作。因此,UML的领军开发环境RationalRose似乎可以归入MDA的工具之列了。
   
但是问题还是要讨论的,不过提问的方式可以改成“Rose生成的代码框架和如今流行的MDA工具生成的代码有什么不同?如今流行的MDA工具,除了ROSE之外(好像Rose给人们的印象根深蒂固了,就是CASE工具的代表之作,而不是MDA工具),还有ArcStylerOptimalJEMF(Eclipse Model Framework)以及ArgoMDA等等。这里我只接触过ArcStylerEMF,因此以它们为例来说一下。
   
首先还是先说说RoseRose可以从UML模型生成代码框架,不过只有类图可以生成代码,也就是说例如用况图(我是按国家标准使用用况这个词的啊,不信的人去查查,虽然一般都叫用例),时序图等等都不能生成代码。也就是说只有软件的结构特性可以直接生成代码,而软件的处理流程是不能生成代码的。而类图生成的代码也忠实的保持了类图中的信息,不多不少,也就是说它正好是UML类图的信息等价体。(这一点我也是按照我的经验说的,望有知着教我。)
   
而现在的MDA工具就是在两个方向突破,例如ArcStyler,它不止能够将软件的结构特性生成为代码框架,还可以将软件的部分处理流程生成代码。例如它的WebAccessor可以将Web应用的部分典型流程通过建模的方式表达出来,然后直接生成代码表现这些流程,不止如此,还可以自动生成编译和配置文件。关于ArcStylerWebAccessor的使用简介,可以到www.mdachina.net上面查找我曾经写过的文章。
    EMF
选择了另一个方向作为突破口,它也是只能将类图转换为代码框架,不过它生成的代码有了扩充的功能,也就是说,它的代码增加了许多不能在UML类图中表达的功能。我将这些功能总结如下:包括反射机制(不同于java的反射机制,而是ECORE模型的反射机制)、通告服务(当对象改变时会通告给监听者,这又叫做观察者/适配器模式?)、工厂模式(所有对象都使用对象工厂产生出来,保持接口和实现的分离)、存储机制(自动将对象存储为XMI文档,并可以从XMI中读取数据来构建对象)。还有为EclipseSWT界面库所生成的部分界面代码,利用此界面代码可以方便的生成本地UI界面控制生成的对象。
   
所以说,现在的MDA工具在代码生成部分(除了代码生成,应该还有元建模,模型转换等部分),向着两个方向努力,这些努力提供给开发者Rose的代码框架所不能提供的一些功能。遗憾的是,关于MDA并没有一个统一而可行的代码生成标准,因此每使用一个新的MDA工具都必须熟悉它的一套机制,否则也只能望代码而兴叹。路漫漫其修远兮~~
   
(最近正在使用EMF,因此忍不住说一句,EMF生成的代码实在是很帅,方便易用,它提供的几个额外功能都能极大的便利java程序的开发。而且,对于SWT兴趣很浓的我,它提供的几个界面Provider也实在可以方便的做出好看的界面,可以是插件界面,也可以是脱离Eclipsejava界面。)

这篇关于ROSE生成的代码框架和MDA工具生成的代码有什么不同?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/750956

相关文章

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L