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工程文件,想试一下用EA生成代码的可以用来做测试:
百度盘:
链接:https://pan.baidu.com/s/1IJZK3lZk5aKNt3uZCtZ4qg
提取码:0hao
复制这段内容后打开百度网盘手机App,操作更方便哦