您的位置:首页 > 其它

bouml的简易教程(中文)

2017-03-24 22:37 148 查看

Bouml -教程

 

本教程主要为了帮助您第一次起用BOUML。在这里仅显露BOUML少数的特点,而BOUML完整描述参见其参考手册。

本教程必须按序阅读,因为我不会每次重复诸如调用菜单等一般性的命令。

 

启动

   当您执行BOUML出现下面消息,按确定(OK)按钮。但你将不得不定义你自己的有效的BOUML标识:(1~127中的整数)。

 

      在BOUML视窗显现(图样取决于使用的Qt版本,这里是在Linux下运行的2.4版本,与Windows版本兼容):

 

   bouml窗口由三个部分组成:

 

u       左边的子窗口是一个展示您项目的浏览器,可由鼠标或上下左右键进行导航。   
黑体的字体表示该项是可修改的,当您没有文件写权限时则一个项是只读。

u       右下角的子窗口是用来显示/修改与当前所选项相关联的注释。

u       右上方的部分是用来显示/修改图表,这些窗口可以的最大化或最小化。

 

显然地,个别子窗的大小会发生改变,当把鼠标放在它们之间的分拆处时,可以更改窗口大小。注意:如果你有双监视器配置,更好的办法是设置环境变量BOUML_LIMIT_DESKTOP,参见此地

 

在此水平下你必须创建一个新的项目,或加载一个已经存在的项目。

 

创建一个新项目

这儿,我们创建一个新项目:在Project菜单中选择New菜单项,呈现一个文件对话框(它的外观取决于所用的系统和窗口管理器),请求输入项目名称,你必须选择一个目录用以存放项文件,并选择输入项目名字,我输入项目名为foo,放置在/
tmp
目录之下:

 
 

在这种情况下BOUML
/tmp下创建目录foo(即\tmp\foo),并将某些文件(包括foo.prj

放置在/tmp/foo目录之下。当重新加载工程时(foo.prj),这些文件都会加载。

!注意:不要重命名或删除由BOUML产生的文件,以及目录本身!

 
 

接着显示一个新的对话框:

遵循以下的建议,通过Language菜单我为此例切换为C + +和Java的语言(以后我们将看到为什么这样做):

该项目的名称显示在浏览器中,该项目是顶级包,其上点击鼠标右键产生的菜单:

你将看到,一个包(package)可能包含其他包和一些视图:用例视图(use case view),类视图(class view),构件视图(component
view)和部署视图(deployment view)。

 

视图(View,)用例(Use case)

Bouml在一个bouml工程中使用视图来组织和结构化模型元素和图。不同类型视图依据上下文提供不同的菜单,以列出在其中可以创建图和模型元素。若要定义用例,我们需要有一个用例视图(use
case view) ,所以我们选择新的用例视图 (new use case view):

 

 

 

 

Bouml要求提供的视图名。在以后要想修改它,必须鼠标双击用例视图 (new use case view)

,或点鼠标右键出现菜单,从菜单中选择edit,则显示了用例编辑器

 

图(Diagram)

要在此视图创建用例图(use case diagram)
,在用例视图上右击鼠标,弹出菜单,并选择

新的用例图(new use case diagram)


同样还要输入用例图的名字。要修改用例图,在用例图上右击鼠标键,显示一菜单[此菜单为元素的关联菜单,以后简称关联菜单],从菜单中选择edit。相对于非图项,在图上双击显示。

 

 

在图中添加元素

在用例图中创建并放置用例你有两种方法可选

u     在用例视图右击鼠标,在菜单中选择新的用例(new use case)
,然后从浏览器拖放到图中。

u     或点击图子窗口顶上的用例功能(椭圆)按钮,然后在图中某个点点击鼠标即可。

    .请注意,用例是包含用例图的视图中创建的,除状态机(states machine.)外,不论何种图皆与此类似。

    我们将用例的名字取为
Withdraw

要移动图中的use case,在use case上按鼠标左键,保持按下状态移动鼠标,用例名跟着用例移动,但用例名也可以独立移动。例如,将用例名放置在椭圆的中间。您也可以选中用例后使用键盘上的箭头移动。

 

创建一个名为Customer的角色如同你创建用例一样,结果如下:

 

请注意,一个角色(actor)其实是一个类,当板型是角色时,在浏览器中显示的图标是一个角色,否则是一个类。要改变板型,编辑类(在类上双击鼠标,或在类上点击鼠标右键出现的菜单,选择edit),从预定义列表中选择板型或输入一个新的板型。关于修改预定义的板型列表,请阅读参考手册。

用例可以改变大小:点击用例,移动的出现点即可。然而角色不能调整大小。

 

你有多种方法画出关联关系:UML的推荐(一条简单线条或有箭头),点击所需图标按钮,在角色上点击(不松开),移动鼠标到用例上,松开鼠标。

 

在最初的构建线条时,如果你在元素之外松开鼠标左键,线条变成折线。或在线条构建完成之后,在线上点击鼠标左键,拖动原线条亦变为折线。

要删除线上的一个点,双击此点,或右键单击此点显示菜单并选择remove from view菜单项。在线条的构建过程中,双击将终止构建。

同样方式在图中添加新元素,如下图(编辑依赖性以设置其板型)

 

正如你所看到的,在浏览器上可见到范化(generalizations)和依赖(dependencies)关系,它们关联菜单(在其上鼠标右键单击)允许浏览到你要找的目标。

如果您从WithDraw来编辑泛化关联,将有一个简单的对话框,这与角色之间的泛化关系不是一回事,因为继承会产生源代码:一个角色是一个类。

 

删除图中的一个元素

从图中删除一些元素,选择要删除元素(左键点击),然后按DEL或从关联菜单选择remove from view。请注意,不可能的删除图中的标签(label)。

删除/恢复浏览器中的元素

要从模型中删除元素,按ctrol+d或从关联菜单选择delete from model,,你也可以在浏览器中如此做。:例如删除的Administrator
 :

 

  显然,Administratorgeneralization从图中消失,但在浏览器中并非如此:它们只是加上删除标记,相对应的菜单的也发生了改变。你可仅恢复(undelete)
Administrator或者它和它的全部子孙(递归性恢复)。当Administrator被删除时,generalizationr
没有关联菜单,在Administrator被删除时,是不可以单单恢复它的子孙。

   注意:所有删除的元素是不保存的,如果你重新调入工程,被删除的元素一定丢失了。

   恢复角色和它的子孙,它们将不会在图中。

   在图中再插入角色,使用拖放操作,把角色从浏览器中拖到图子窗口中,或点击图中的角色图标,再到图中的某一点点击,从所建议的列表中选择Administrator
。子孙并不自动绘制,但在类图中可能自动绘制(依赖于绘制设置
drawings settings)。要求绘制generalization,使用拖放操作从浏览器中拖到图中。

 

绘制设置(drawing settings)

通过设置drawing settings可以改变颜色和其它绘制特征。如果你总喜欢蓝色的用例,最好的方法是在工程关联菜单(也就是在浏览器的foo)上选择
edit drawing settings
.转到最后一个标签(tab),改变默认的用例的颜色(default use case color)。如果你在一个子级别上如此去做,例如在图上,新值的有效的范围将限于所选级别以及它的子孙,若此级设置的值是默认值,则继承上一级别所给出的值,除工程级别例外,因为它已经没有上一级。

这样,我们在工程一级修改用例的颜色为蓝色,则所有用例都是蓝色。我们在WithDraw上调用相关联的菜单,选择
edit drawing settings,将颜色(黙认值)改为绿色。

 

 

  现在,在浏览器中的图上的关联菜单上,选择
duplicate (复制),
如此将开始复制此图,显示一对话框,要求为此复制品输入一个名字,按OK按钮,将打开此新图,它是一个复制品,编缉它的drawing settings
,使其用例为黄色显示,结果看到:

 

在图中选中元素

要在图中选中几个元素,以便于移动它们:

n        
control+a  选择全部元素

n         在contrl
键按下时,鼠标左击允许增加点元素或者从所选择的元素集中删除点元素

n         在任何元素之外的空白处鼠标左键按下并移动,它将定义一个矩形区域,其包含的元素都将选中。

n         在一个对象的菜单上选择
select linked items (链接在一起的)
菜单,允许你选择所有链接在一起的元素,实际上是吗(这里是所有的元素)?

 

z-dimension

Diaggram2
上增加和删除元素,使之如是(图被最大化)

增加一个
subject
,调整尺寸,使之如是:

现在试着增加从
Transfer funds
Card identification 依赖性关联:你能吗?发生了什么?

因为你在Card identification
之后增加 subject
subjectuse case上面,BOUML考虑你试图建立从Transfer funds到
subject 依存关系。

 

如果你改变subject
的颜色,可看的更明白。

不要惊慌,相对其他UML工具,您不必重做所有工作,仅只须调用subject的关联菜单,选择lower,现在您可以增加依赖性了。

 

放大,窗口尺寸,图的格式

当你打开一个图时,显示比例设为100%,窗口的尺寸不定。

当你改变比例时(使用小箭头或者直接在spin box写入值)[实际上是回到100%]。

箭头的尺寸不会改变,使之在小比例时可见,当比例较大时,一般不使用箭头。

虚线表明了图的范围(画布的尺寸),你在虚线外你能看到一些东西。黙认的图的格式是欧洲ISO-A4.要改变图的格式,从图的关联菜单中format (在浏览器中图的关联菜单不允许如此做)。格式‘A’相对于美国字符,‘B’相对于美国更大些,而‘C’则更大。设置图的格以便于以后使用,在主窗口的Miscellaneous菜单中选择子菜单Diagram
default format。

  fit% 使比例更大些,以便于看到图中的所有元素,比例的大小依赖于图子窗口尺寸。亦可在图的关联菜单上选择optimal scale
菜单项。

与此相对,在关联菜单上选择optimal window size,或通过按钮,你能够自动改变图子窗口的尺寸,以便在当前比例下看到所有元素。

关闭图,接着打开图,窗口的尺寸和比例将由默认值重置。要保存当前窗口的尺寸和比例,以便你在下一次重新打开时使用,可以使用图子窗口的关联菜单,选择set preferred size and scale
菜单项(浏览器中的菜单不可能使用)。

   

输出图的图片

这儿有几种方法输出图的图片:

l         打印:如需,打开图以显示图,使用bouml窗口左上方的打印机图标按钮。

l         复制:粘贴到其它程序:如需,打开图以显示图,可以使用图的关联菜单,选择opy visible picture part
菜单项(浏览器中不可能),可视部分是图的可见部分,依赖图子窗口的滚动条的位置。要复制所有的元素,甚至不可见的元素,选择copy optimal picture part.菜单项。

l         保存图像为PNG文件:如需,打开图以显示图,可以使用图的关联菜单,选择save visible picture part (png)
菜单项(浏览器中不可能)。要得到所有的元素,甚至不可见的元素,选择save optimal picture part (png).菜单项。

l         保存图像为SVG文件:如需,打开图以显示图,可以使用图的关联菜单,选择save visible picture part (svg)菜单项(浏览器中不可能)。要得到所有的元素,甚至不可见的元素,选择save
optimal picture part (cvg)
菜单项。

l         使用plug-out,例如HTML
生成器。在此情况下,一个输出的图不是一个打开的图,保存部分的比例和尺寸是默认值,除非你使用了set preferred size and scale
做了特别说明。

 

子包、类视图、图图和类

现在我们想设计类以产生代码。

为此目的,我们首先创建一个类视图(class view),为什么不?我们不想将此视图直接放在项目包中。从项目的关联菜单中选择new package,菜单项,给包命名Package3
Package3
关联菜单上选择 new class view
 菜单项,给类视图命名为
Class view4  :

要定义一类,类图不要一定需要的,除非需要加入关系。通过类视图创建一个类图,打开此图,如是:

 

 

按类图标的按钮,在图的某一个地方点击(也可在浏览器中使用class view菜单创建一个类),给类命名为C1

因为角色是类,它们可以加入到类图中。使用拖动方法,从浏览器中拖到图子窗口中;或者点击类图标,显示一对话框,选择一个角色
Administrator ,角色类以一个角色方式绘制,对于具有Actor范型的类,这是默认绘制方式(这依赖于类的drawing settings设置,其它的特殊类是关于范型control,boundary
entry):

 

然而在正常情况下,角色目的不是用于产生代码的。在生成设置中在类级别上的actor范型,目标语言在产生过程中忽略actor。以下为取消此限制,编辑generation
settings
,转到
stereotype 标签,在stereotype=actor行内,用C++和其它语言设置取代
ignored。

 

增加属性和操作

我们想定义一个命为att的属性和一个命为oper的操作。从类的关联菜单上选择执行add attribute,然后选择执行add
operation 。
当你通过图增加类的成员时,调用相关的编辑器,而不是浏览器。类的成员可见,类的图像如是:

因为默认的可见性由class settings
设置(属性为保护的而类是公开的)。而class settings
而在类视图级或包级别进行设置,遵循和drawing settings
同样的原则。

 

编辑属性

一旦决定att是一个整数,我们必须编辑此属性,可以有几种方法:在浏览器上双击属性;或者在浏览器调用此属性的关联菜单,选择edit项;
或在图上调用此属性的类的关联菜单,选edit attribute,再选择att
,
你将看到一对话框:

 

第一个标签关心的是UML特征,一个属性默认为一个示例的成员(不是类的成员),不是易变的(volatile),也不是只读的(read-only)。其它的每一个标签连接到一个特定语言:使用bouml,你可以同时使用几种语言进行设计。例如HTML生成器是由C++和Java两者来实现的。

设置其类型为int
,通过从先前定义好的类型列表(通过generation settings可修改)中选择一个,或直接输入int。

转到C++标签(在C++上点击):

正如你所见,C++的可见性默认是遵循UML的一个值,但这不强制性的,有助于那些具有不相同的可见性的情形(C++和Java),并且C++里属性可能是mutable。

declaration
之前的文本是可修改的,而在result
after substitution [替换后的结果]之前的文本则是不可修改,此文本由C++的生成器产生的源代码(假定你不修改它!)。除了由$()标记的关键字和由@()标记的用户的特性(用户属性名-值对集合)外,所有其它的字符将按原样生成,包括新行。$(type)
将由 int
替换而@(name) 将由
att 替换,这对你来说并不难理解。此两者的设置在UML标签内进行。这也意味着,如果你用
aze 替换$(type),在C++中关于att
的生成类型将是 aze  等等。。。

也许,你有自己的编码规则,例如在C++中属性的名字必须以‘_’开头,当然你可重新为属性命名为
_att ,  但在类图中‘_’是不太美的,较好的方法是在$(name)之前加上‘_’:

转到Java
标签:

在Java标签内,应用相同的原则。

在这里是不可能看见IDL和Php的定义。为什么?回想一下,在本教程开始时我请求你在语言菜单上设置C++和Java选中开关,这样的话所有未选中的语言将被隐藏。按OK按钮关闭对话框,通过Languages菜单,选中所有语言,再来属性,转到IDL标签。

 

声明(declaration)是空的,这还是因为未在Languages
上设置Idl。按Default State declaration
按钮,我们有:

首先,的可见性是私有的而不是保护的,因protected在IDL中不存在。

其下,$(type)
由 long 替换,而不是int,
这也是因为在IDL中不存在int
类型,而最好目标类型是long, 太奇了!

它们都是由BOUML自动地转换类型,例如你在UML中选择any类型,你能在C++中得到Void类型,Java中得到Object
类型,而在ODL中得到 any类型。显然的这些转换不是硬编码完成的,而是可以用
generation settings 进行设置的。

转到Php标签,请求其默认的声明:

这是Php5的定义,如果你想使用Php4,最好的方法是针对package
改变可见性,则其定义将是:

关键字的定义(给出一一个默认的样子)也能够通过generation settings
进行修改。它允许你在C++的代码内在属性名前加上‘_’,如上所述。更多的说明,参阅手册。备注:当你更改generation settings
,已经存在的元素的定义并不改变。

按OK
校验更改的合法性。

类绘制设置 Class drawing settings

在类图中,仅可见到属性名和操作名,即见不到类型也不见其可见性,调用类的关联菜单,改变三个drawing settings
如下:

类的图像现在是这的:

不要犹豫,试一试其它的绘制设置,细节参阅参考手册。

关系

我们想增加一个从C1
指向 Administrator
单向关联:在图子窗口的顶上点击相应的图标,如同用例图中一样增加绘制此关系。

正如你所见,关联加入到了浏览器中,默认的,它的名字是编辑此关联:

如同attributes
一样,我们有UML标签和其它语言标签。

因关联是单向的,所以仅一极(关联的一极)是可编缉的。如同属性和操作,默认的可见性由Class settings
设定。角色名将产生成员名,我们发现已经存在属性的标志:从生成代码的观点来看,一个关联和属性之前没有差异。

给关联命名Admin
,转到C++标签:

默认情况下,在C++代码中,一个关联和一个聚合产生一个指针,由值给出的聚合将不会产生指针。显然,其默认的定义可通过generation settings
来改变。

转到Java
标签:

再转到Php标签:

再转到IDL标签:

 

回到UML标签,首先改变关系的类型为具有双向的关联,然后做其它的修改,使之如是:

转到C++标签,然后按
Default declaration 按钮,则有两极(两端):

 

转到Java标签,然后按
Default declaration 按钮,则有两极(两端):

转到IDL标签,然后按
Default declaration 按钮,则有两极(两端):

正如你所见到的,默认的定义依赖于关联的类型和关联的重数,当然这些默认值可通过generation settings
进行修改。

UML的范型相对于各语言来说都是屏蔽的(保护的),其实现可以通过generation settings
进行修改。下面你可见到,UML中vector在C++中产生一个向量Vector,而在IDL中产生序列sequence。

按OK按钮,看图:

因为,现在关联是双向的,在浏览器中C1 and
Administrator 中都可见到此关联。(我将它们标记为红色)

定义结构、联合、类型定义(typedef),枚举

要定义一个C++或ISDL的struc,使用类范型
struct , 使用Default declaration
按钮,针对相关的语言编辑类。在Java 中的struct
是通过一个标准的类来实现的,当然在UML的类范型到给定的语言的映射可以通过设置generation settings来完成,请看下面的对话框,并参阅参考手册。

 

要定义一个C++或IDL的联合,针对Class
使用Union 范型:

 

例如要在C++中定义typedef T,它是指向C1的一个指针:创建类T,绘制一个从T到C1的依赖关系。

编辑此类T,设置其范型为typedef:对话框中发生改变指向其基类型。

转到C++标签:

 

当然,依赖性不是强制的,例如可以定义
typedef int turlututu

在$(type)和$(name)之间増加一个’*’


通过enum
范型和  enum_pattern 范型以支持枚举。

创建一个类E,编辑E,设置其范型为enum,按OK。在浏览器中调用类的关联菜单,选择add
item 并给一个名字a ,
接着,重新调用类的关联菜单,选择add attribute
,并给一个名字 b。编辑类E,转到C++标签,请求黙认的声明:

正如你所见,$(item)
产生 a(这里’…’指明仅显示其名,而不是全部的定义)而不是b,这是因为在C++中,一个枚举仅仅有项,属性和方法都是不合法。

转至Java
标签,在至少JDK5的条件下,它是一个枚举。

 

b是由$(member)产生的,因为它的范型是attribute
,允许分开项目和属性。

转到Php标签,并不像C++那样,b不显示。

转到IDL标签,并不像C++那样,b不显示。

同样的方法,如果我们在enum中定义一个方法,则这个方法将在C++,Php,IDL实现中没有此方法。

现创建类OE,编辑OE,设置其范型为enum_pattern,按OK。查看OE关联菜单,它仅能增加items。E与OE在C++与IDL之间没有差异,但在Java里是完全不同的,因为这种类型的enum
是由类支持的。

 

 

我建议你编辑E和OE类中a,
要所有语言中查看其定义。

代码生成,部署视图,artifact

也许你在类的关联菜单中已经见过
Generate ,对于C1,试一试生成代码:无论何种语言,你将有下错误“C1:does not have associated artifact.”在UML2
中artifacts表示生成的文件,源文件,代码,库,执行文件,jar等,。。。。

[以下内容在最新版BOUML已经不存在,略过]
http://blog.chinaunix.net/uid-9525959-id-2001605.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Bouml