最近用WhiteStarUML画一些类图。发现UML有些不方便的地方就是不能一键标记getter、setter方法。方便后面导成code。可能是因为UML国内用的人不多。似乎不是很关心这个。
在国外一篇文章里面找到了方法。为了让自己不忘记、特地记录一下流程。
1:找到WhiteStarUML\modules\staruml-standard下的StandardAddIn.mnu文件。
在MAINMENU标签下面新增一行:
将下面这段代码编辑成GenGettersSetters.vbs文件并保存在StandardAddIn.mnu同级目录下:
' GenGettetsSetters.vbs
' Getting Application Object
Set App = CreateObject("WhiteStarUML.WhiteStarUMLApplication")
If IsSelectedKindOf(App, "UMLAttribute") Then
App.BeginGroupAction
Set Facto = App.UMLFactory
Set Sel = App.SelectionManager.GetSelectedModelAt(0)
Set OwnerClass = Sel.Owner
' Create setter
Set SetterOper = Facto.CreateOperation(OwnerClass)
SetterOper.Name = "Set" + Sel.Name
Set Param = Facto.CreateParameter(SetterOper)
Param.Name = "new" + Sel.Name
Param.TypeExpression = Sel.TypeExpression
'Create getter
Set GetterOper = Facto.CreateOperation(OwnerClass)
GetterOper.Name = "Get" + Sel.Name
Set RetValue = Facto.CreateParameter(GetterOper)
RetValue.Name = ""
RetValue.DirectionKind = 3 ' Return Type
RetValue.TypeExpression = Sel.TypeExpression
App.EndGroupAction
Else
MsgBox "Make sure an attribute is selected in Model Explorer!"
End If
' ------------------------------------------------------------------------------
' Check Kind Of SelectedModel
' ------------------------------------------------------------------------------
Function IsSelectedKindOf(StarUMLApp, ClassName)
Dim S
If StarUMLApp.SelectionManager.GetSelectedModelCount <> 1 Then
IsSelectedKindOf = False
Else
Set S = StarUMLApp.SelectionManager.GetSelectedModelAt(0)
If S.IsKindOf(ClassName) Then
IsSelectedKindOf = True
Else
IsSelectedKindOf = False
End If
End If
End Function
打开whiteStarUML,在model explorer (右上角)窗口下找到你想添加getter、setter的属性。
然后在最上方的工具栏中找到model,选择convert diagram里面的Generate Getters/Setters。就会自动帮你在class里面的operation里面新增一个getter、setter方法。
目前没有找到一个更好的方法 。我理想中的方法是在字段里面标记一下,就能在到处code的时候自动识别。如果看到这个的人知道其他好方法的话,请不吝赐教。
最后说一下我找到这个方法的地址是:http://sourceforge.net/p/whitestaruml/discussion/general/thread/85278517