一、概念

Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,同时加上对10种编程语言的正反向工程,项目管理,文档生成,数据建模等方面。可以让系统开发中各个角色都获得最好的开发效率。

二、下载&安装

链接:https://pan.baidu.com/s/1xQ2q-_cSt_DTI3zIDvxkFw 
提取码:wq83 ```


### 三、使用教程


#### 构建类图


打开EA,点击左上角的图标新建项目。


![image](https://i-blog.csdnimg.cn/blog_migrate/219fba9db72dbc1a82f2960e26c60343.png)


起一个项目名称,我这里就叫test2好了。


![image](https://i-blog.csdnimg.cn/blog_migrate/5b9d336ddfe4bcc2201054d0f906a3da.png)


新建好后的页面应该和我现在的差不多,可能会有个欢迎页面,不过差不多。


![image](https://i-blog.csdnimg.cn/blog_migrate/599009fee6446d9d199b9c69fd043447.png)


先要在工程下新建一个包,点击Browser下的文件夹图标:


![image](https://i-blog.csdnimg.cn/blog_migrate/d9560437a72364e52639d898f595e09c.png)


起一个名字后点击ok,然后会出现一个窗口:


![image](https://i-blog.csdnimg.cn/blog_migrate/7f126bcc66ca7af10d4af31c41ce97e4.png)


我理解这个窗口是预设模板,可以快速构建一些特定的类图啥的,我们这里直接关闭这个窗口就行了。


![image](https://i-blog.csdnimg.cn/blog_migrate/048351c35f0f860fe5662b7ab94767aa.png)


现在我们的包建好了,需要在包里添加视图,我们的类图和活动图等都是创建在视图上的。点击包右边的小图标添加视图:


![image](https://i-blog.csdnimg.cn/blog_migrate/f934436350a58f92d6af03aedc16e95b.png)


我这里构建的是类图,这样选择视图类型:


![image](https://i-blog.csdnimg.cn/blog_migrate/7ac1dfe4650b24a75b4c82732fa9c4c7.png)


好了,我们的类图创建好了。
![image](https://i-blog.csdnimg.cn/blog_migrate/44b34e61f91ed5d8a6a183b433305896.png)


我们现在需要做的就是添加类等类图组件,这一步我折腾了半天,硬是找不到组件工具栏,后来发现的时候相当无语。居然是在类图标签左边的小图标`>>`,点击一下即可展开组件工具栏。


![image](https://i-blog.csdnimg.cn/blog_migrate/37e8be8778648555e5733adc791419e4.png)


通过拖拽,我们可以简单添加类


![image](https://i-blog.csdnimg.cn/blog_migrate/a4a43eb682507bd8f6ea348a6243aec7.png)


我们现在要加上继承关系,选择子类,点击右上角小箭头,进行拖拽到父类:


![image](https://i-blog.csdnimg.cn/blog_migrate/2794b29f924a28ed2c8f32b754a63b94.png)


在弹出的菜单中选择Generalization:


![image](https://i-blog.csdnimg.cn/blog_migrate/25fe6f3fb28b8056c5cd334a12ce416f.png)



+ Generalization在UML中准确的讲是表示泛化关系,但在类图中就是表示继承关系。+ 更详细的UML介绍可以看[这里](https://www.w3cschool.cn/uml_tutorial/uml_tutorial-46u228pf.html)。注意,这个是个山寨w3school网站,真身是没有UML相关教程的。



我们用同样的方法还可以把类关联到接口上,当然这时候选择关系为Realization(实现)。


![image](https://i-blog.csdnimg.cn/blog_migrate/66364389b4eb1c26618b2b092a3f06a6.png)


与之类似的,我们可以给接口和抽象类Carrier加上聚合关系,此时我们可以通过`TakeoffMode`拖拽箭头到`Carrier`,然后选择`Composition to whuole`,即组合到整体。


Aggregation是聚合,Composition是组合,这两者很容易傻傻分不清,我在某个地方看到的例子非常好,大雁和雁群是聚合关系,翅膀和大雁是组合关系。



![image](https://i-blog.csdnimg.cn/blog_migrate/cdf96569e38e33975e7ff4a4f303e119.png)


我们还可以在关系上添加数目,即1对1关系,双击关系,在弹出的窗口中选择Role,并填入1:


![image](https://i-blog.csdnimg.cn/blog_migrate/10cfedc55c93982ccccd9786ab763707.png)


现在该给类加入属性和方法了,选定一个类,在右侧Properties窗口的小图标下拉菜单中选择`Attributes`。


![image](https://i-blog.csdnimg.cn/blog_migrate/412b73f982cdb7059d4e9a9a0e325df6.png)


视图下方会打开一个管理属性的窗口,我们可以在这里快速添加属性:


![image](https://i-blog.csdnimg.cn/blog_migrate/2d4e2b463a43b302a471f5d3fef80fd0.png)


可以用同样的方式添加方法:


![image](https://i-blog.csdnimg.cn/blog_migrate/609ec5db58f94ac0736175b8d31a97d7.png)


经过一番设置后,我们可以完成一个简单的类图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2KqRiNF1-1617263331076)(https://i.loli.net/2021/04/01/EztO1JnLajlmCSI.png)]

最后我们再修改一下类的层级:


![image](https://i-blog.csdnimg.cn/blog_migrate/4a42b9f7d378b87921e9d9bd7d68c06c.png)


我们现在有了类图,可以尝试导出代码了。

### 导出代码


先修改相关设置:


![image](https://i-blog.csdnimg.cn/blog_migrate/510f4f2754d267d5c9f31f3b58aa0825.png)


我们把项目默认语言改为自己常用的语言:


![image](https://i-blog.csdnimg.cn/blog_migrate/fc5066a5fb4db097e34b4c0dbe76ffe6.png)


还需要修改我们项目的源码类型,在包上右键选择properties>properties:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hwp9kG5-1617263331086)(https://i.loli.net/2021/04/01/rTZ6sdcqMwuVtN2.png)]

在打开的窗口右侧选择源码语言为你的目标语言:


![image](https://i-blog.csdnimg.cn/blog_migrate/05f9d3cca14134fb0f29e09be955ea36.png)


导出源码的功能我同样找了好半天,以前老版本是直接在包上右键菜单就有,新版难找的一B:


![image](https://i-blog.csdnimg.cn/blog_migrate/822693b2e97344488fdd5e81ba4ce12c.png)


在打开的窗口中选择如下设置后点击生成:


![image](https://i-blog.csdnimg.cn/blog_migrate/523f91b1e4e47cbdbd624c0f9ce0093c.png)


大功告成。可以用VSCode打开项目看一下:


![image](https://i-blog.csdnimg.cn/blog_migrate/43d6bfc092098780ed7364d6a1910654.png)


这里要特别说明一下,如果你遇到和我一样,不管怎么设置,导出代码都是原本默认的Java代码的话,那你要检查一下项目所有类的property中的language:


![image](https://i-blog.csdnimg.cn/blog_migrate/7e706022a656553db82e914152937830.png)


这里有个大坑,如果是在类图创建好后再改项目语言,只有你改的那个包的语言会变,包下面的子包和类以及视图的语言都是不会变的,你需要手动一个个把那些都改成Python,这样你导出的程序才是Python,否则不管你怎么弄都是Java。这个设定无比坑爹!

所以使用EA的时候最好一开始就设定好语言。