Enterprise Architect 15 使用指南 II

昨天折腾了半天好不容易才把EA的代码框架生成过程跑通,就没心思继续折腾了,今天打开VSCode发现有一些细节还是有待继续折腾。

首先我们看到Carrier基类里:

出现了一个奇怪的1=TakeoffMode(),这无疑是因为我们类图里那个组合关系设置的1对1惹的祸,看来是不能那样设置的,与此同时,takeoffMode=null也存在问题,在Python中null是应该写作None,而且也不能这样定义对象属性。

首先我们在类图中的组合关系上删除错误的1对1表示:

然后在基类Carrier的属性中设置为抽象类:

我们现在还有类不能正确创建对象属性和构造函数的问题,这需要我们修改默认的代码生成模板。

关于代码生成模板的介绍,可以看这里,这个火龙果好像是一个专业的EA培训机构,缺点是要钱。

点击develop>Options>Edit Code Template:

第一个模板file用于在自动生成的代码前添加注释,我们可以按自己的需求修改:

不用担心修改后找不到原始模板内容,右下角有Get Default Temp...

  • 关于CTF(Code Template Framework)的官方介绍可以看这里
  • 需要注意的是每修改完一个模板,要ctrl+S保存才能生效。
  • 模板修改页面最下边的一条是会被windows任务栏遮住的,只有隐藏任务栏才能看到,不过这一条的按钮可有可无,用处不是很大,类似的小毛病EA比比皆是,大概专用软件都是这个样子吧,不鸟用户还能卖的死贵。

接下来我们要修改类,以符合Python的类定义:

这里主要是添加了一个构造函数,在构造函数内定义属性。

代码我贴出来吧:

    def __init__(self):
$attr=%list="Attribute" @separator="\n" @indent="        "%
%if $attr == ""%pass\n
%endIf%
$ops=%list="Operation" @separator="\n\n" @indent="    "%
$iclasses=%list="InnerClass" @separator="\n\n" @indent="    "%
%if $iclasses != ""%
$iclasses\n
%endIf%
$attr
$ops
%if $attr == "" and $ops == "" and $iclasses == ""%pass
%endIf%

类似的,还要修改属性声明:

这个简单,只是原本模板只考虑了private,没有考虑protected,照葫芦画瓢即可。

最后还要修改方法声明:

这里主要是在方法参数最前面加入self,真心觉得EA对Python的支持就是个半成品,还好模板支持自定义。

修改后的模板如下:

$dec=%REPLACE(opTag:"decorators","@","\n@")%
%TRIM($dec)%
%PI=" "%
$params = %list="Parameter" @separator=", "%
def
%PI=""%
%if opScope == "Private"%
__
%else if opScope == "Protected"%
_
%endIf%
%opName%
%if $params == ""%
(self):
%else%
(self, $params):
%endIf%

最后还发现只要有组合关系存在,EA在生成代码时候会给属性添加上一个m_takeoffMode=TakeoffMode(),这显然是不合适的,直接删除组合关系:

然后按前文中的步骤生成代码。

到这里用EA生成的Python框架代码已经能用了,但还谈不上完美,我这里尝试了一下加入抽象类和抽象方法的支持,先修改类声明的模板:

判断如果是抽象类,就自动引用abs模块,具体代码如下:

$classAbstract=%classAbstract%
%if $classAbstract == "T"%
from abc import ABCMeta, abstractmethod\n
%endIf%
$dec=%REPLACE(classTag:"decorators","@","\n@")%
%TRIM($dec)%
class %className%%ClassInherits%:

再修改类继承模板:

如果是抽象类,就在继承参数中加入metaclass=ABCMeta,具体模板代码如下:

%PI=""%
$bases=%list="ClassBase" @separator=", "%
$interfaces=%list="ClassInterface" @separator=", "%
$classAbstract=%classAbstract%
%if $classAbstract == "T"%
%if $bases != ""%
$bases="metaclass=ABCMeta"+$bases
%else%
$bases="metaclass=ABCMeta"
%endIf%
%endIf%
%if $bases != "" and $interfaces != ""%
($bases, $interfaces)
%elseIf $bases != ""%
($bases)
%elseIf $interfaces != ""%
($interfaces)
%endIf%

最后修改方法声明:

判断如果是抽象方法,就在方法上面加入抽象方法修饰器,具体模板代码如下:

$opAbstract=%opAbstract%
%if $opAbstract == "T"%
@abstractmethod
%endIf%
$dec=%REPLACE(opTag:"decorators","@","\n@")%
%TRIM($dec)%
%PI=" "%
$params = %list="Parameter" @separator=", "%
def
%PI=""%
%if opScope == "Private"%
__
%else if opScope == "Protected"%
_
%endIf%
%opName%
%if $params == ""%
(self):
%else%
(self, $params):
%endIf%

现在再运行生成代码步骤,可以看到抽象类和抽象方法都完美支持:

  • 还有个小瑕疵,构造函数内有属性赋值的时候,最后不会换行,不过应该无伤大雅。
  • 生成代码中的模块引用使用的是绝对路径,不知道能否改为相对路径,这里我不打算继续折腾了,如果有知道怎么改的可以留言告诉我一下,不胜感激。
  • 短期内我是不会再更EA15的使用指南了。写这部分是真心累,相关中文资料是真的少不说官方文档也是极为简略。

最后附上我的EA工程文件,想试一下用EA生成代码的可以用来做测试:

百度盘:

链接:https://pan.baidu.com/s/1IJZK3lZk5aKNt3uZCtZ4qg
提取码:0hao
复制这段内容后打开百度网盘手机App,操作更方便哦

Enterprise Architect 15 使用指南 II相关推荐

  1. 【UML建模】(X) UML建模之Enterprise Architect 15的使用

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦.

  2. 基于uml的系统分析的网上商城_UML建模工具Enterprise Architect最新版有哪些新功能呢?立即查看...

    Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering).EA不同于普通的UML画图工具(如V ...

  3. UML软件开发与建模工具Enterprise Architect发布最新版本v15.2

    Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering).EA不同于普通的UML画图工具(如V ...

  4. Enterprise Architect入门:如何利用BABOK指南进行建模

    Enterprise Architect是一个强大的生产力工具,可以帮助每一个商业分析师在他们的日常工作中变得更有效率和生产力.本教程将演示如何访问和利用BABOK指南v3的工具和技术,教你如何使用建 ...

  5. (转)Enterprise Architect 7.0入门教程

    一.           简介   生命周期软件设计方案--Enterprise Architect是以目标为导向的软件系统.它覆盖了系统开发的整个周期,除了开发类模型之外,还包括事务进程分析,使用案 ...

  6. Enterprise Architect 7.0入门教程(目前最详细的中文教程)

    http://blog.csdn.net/zfrong/article/details/4045459 生命周期软件设计方案--Enterprise Architect是以目标为导向的软件系统.它覆盖 ...

  7. Enterprise Architect 中文经典教程

    一.Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engine ...

  8. Enterprise Architect 7 入门教程 1

    一.  简介 生命周期软件设计方案--Enterprise Architect是以目标为导向的软件系统.它覆盖了系统开发的整个周期,除了开发类模型之外,还包括事务进程分析,使用案例需求,动态模型,组件 ...

  9. CASE软件Enterprise Architect简介和使用入门图解

    一 Enterprise Architect 生命周期软件设计方案--Enterprise Architect是以目标为导向的软件系统. 目录 1 介绍 2 作用 ▪ 提供建模工具 ▪ 特性丰富系统设 ...

  10. Enterprise Architect 8.0 注册码及其使用教程

    注册码:{67SC0O95-SZPS-LIG2-YQ8Q-8D2N-KWTD-0W6R-TWDD-KT6RB-1J} 一.Enterprise Architect简介 Enterprise Archi ...

最新文章

  1. Android 6.0 Changes
  2. Python应用实战-在Python中进行数据处理操作的几种方法
  3. 【译】Advanced Blockchain Concepts for Beginners
  4. 俄罗斯方块剖析之一总体计划
  5. 抽象工厂设计模式解释
  6. Linux串口阻塞与非阻塞
  7. python快递代取系统_代取快递的变现方式,校园跑腿的经营范围有多大?
  8. 租号平台正在把“未成年”变成“大人”
  9. C语言 输入的注意事项 EOF的应用
  10. 计算机技能比赛范文,计算机技能大赛策划书范文.doc
  11. leetcode之二叉树的中序遍历
  12. React源码分析 - 组件初次渲染
  13. 都是热敏电阻,PTC和NTC的区别你真的知道吗?
  14. 计算机要重启电脑才能检测出u盘启动,电脑使用U盘需要重启才能识别分析及解决措施...
  15. 微信发红包测试点整理
  16. javaweb基于SSM框架的书籍小说在线阅读下载网站
  17. CASS3D2.0.3旗靓版更新了,更稳定【下载地址文末】
  18. 程序员拒绝春节带电脑回家被开除;小米国行不再支持安装Google框架;Excel具备图灵完备性,成第一大编程语言 | 架构视点...
  19. Professional SharePoint 2007 Web Content Management Development: Building Publishing Sites with Offi
  20. JetBrains Fleet 初体验

热门文章

  1. Java第一天笔记01——jdk8的安装与环境变量的配置
  2. Word默认打开方式不对,图标空白的修复方法
  3. 计算机无法连接到wifi但手机可以使用,电脑连不上wifi但是手机可以连得上怎么解决...
  4. pug 编译html,pug之HTML模板引擎安装编译教程
  5. 充气娃娃也好玩——在ESXi上安装Panabit与PanaLog(二)通过U盘引导GRUB安装ESXi
  6. 小组取什么名字好_起名字大全宝宝起名字:起名字免费:女孩姓赵取什么名字好...
  7. 千锋前端-React全家桶_React项目实战全球新闻发布管理系统-db.json文件数据
  8. array_column()函数用法
  9. tx2 GPIO使用教程
  10. 质量管理3个过程及相关重点