BOUML教程.docx

上传人:b****7 文档编号:26114255 上传时间:2023-06-17 格式:DOCX 页数:44 大小:1.94MB
下载 相关 举报
BOUML教程.docx_第1页
第1页 / 共44页
BOUML教程.docx_第2页
第2页 / 共44页
BOUML教程.docx_第3页
第3页 / 共44页
BOUML教程.docx_第4页
第4页 / 共44页
BOUML教程.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

BOUML教程.docx

《BOUML教程.docx》由会员分享,可在线阅读,更多相关《BOUML教程.docx(44页珍藏版)》请在冰豆网上搜索。

BOUML教程.docx

BOUML教程

Bouml-教程

本教程主要为了帮助您第一次起用BOUML。

在这里仅显露BOUML少数的特点,而BOUML完整描述参见其参考手册。

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

启动

当您执行BOUML出现下面消息,按确定(OK)按钮。

但你将不得不定义你自己的有效的BOUML标识:

(1~127中的整数)。

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

bouml窗口由三个部分组成:

◆左边的子窗口是一个展示您项目的浏览器,可由鼠标或上下左右键进行导航。

黑体的字体表示该项是可修改的,当您没有文件写权限时则一个项是只读。

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

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

显然地,个别子窗的大小会发生改变,当把鼠标放在它们之间的分拆处时,可以更改窗口大小。

注意:

如果你有双监视器配置,更好的办法是设置环境变量BOUML_LIMIT_DESKTOP,参见此地。

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

创建一个新项目

这儿,我们创建一个新项目:

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

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

放置在/tmp/foo目录之下。

当重新加载工程时(foo.prj),这些文件都会加载。

!

注意:

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

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

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

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

你将看到,一个包(package)可能包含其他包和一些视图:

用例视图(usecaseview),类视图(classview),构件视图(componentview)和部署视图(deploymentview)。

视图(View,)用例(Usecase)

Bouml在一个bouml工程中使用视图来组织和结构化模型元素和图。

不同类型视图依据上下文提供不同的菜单,以列出在其中可以创建图和模型元素。

若要定义用例,我们需要有一个用例视图(usecaseview),所以我们选择新的用例视图(newusecaseview):

Bouml要求提供的视图名。

在以后要想修改它,必须鼠标双击用例视图(newusecaseview)

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

图(Diagram)

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

新的用例图(newusecasediagram):

同样还要输入用例图的名字。

要修改用例图,在用例图上右击鼠标键,显示一菜单[此菜单为元素的关联菜单,以后简称关联菜单],从菜单中选择edit。

相对于非图项,在图上双击显示。

在图中添加元素

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

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

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

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

我们将用例的名字取为Withdraw。

要移动图中的usecase,在usecase上按鼠标左键,保持按下状态移动鼠标,用例名跟着用例移动,但用例名也可以独立移动。

例如,将用例名放置在椭圆的中间。

您也可以选中用例后使用键盘上的箭头移动。

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

请注意,一个角色(actor)其实是一个类,当板型是角色时,在浏览器中显示的图标是一个角色,否则是一个类。

要改变板型,编辑类(在类上双击鼠标,或在类上点击鼠标右键出现的菜单,选择edit),从预定义列表中选择板型或输入一个新的板型。

关于修改预定义的板型列表,请阅读参考手册。

用例可以改变大小:

点击用例,移动的出现点即可。

然而角色不能调整大小。

你有多种方法画出关联关系:

UML的推荐(一条简单线条或有箭头),点击所需图标按钮,在角色上点击(不松开),移动鼠标到用例上,松开鼠标。

在最初的构建线条时,如果你在元素之外松开鼠标左键,线条变成折线。

或在线条构建完成之后,在线上点击鼠标左键,拖动原线条亦变为折线。

要删除线上的一个点,双击此点,或右键单击此点显示菜单并选择removefromview菜单项。

在线条的构建过程中,双击将终止构建。

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

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

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

一个角色是一个类。

删除图中的一个元素

从图中删除一些元素,选择要删除元素(左键点击),然后按DEL或从关联菜单选择removefromview。

请注意,不可能的删除图中的标签(label)。

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

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

:

例如删除的Administrator:

显然,Administrator和generalization从图中消失,但在浏览器中并非如此:

它们只是加上删除标记,相对应的菜单的也发生了改变。

你可仅恢复(undelete)Administrator或者它和它的全部子孙(递归性恢复)。

当Administrator被删除时,generalizationr没有关联菜单,在Administrator被删除时,是不可以单单恢复它的子孙。

注意:

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

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

在图中再插入角色,使用拖放操作,把角色从浏览器中拖到图子窗口中,或点击图中的角色图标,再到图中的某一点点击,从所建议的列表中选择Administrator。

子孙并不自动绘制,但在类图中可能自动绘制(依赖于绘制设置drawingssettings)。

要求绘制generalization,使用拖放操作从浏览器中拖到图中。

绘制设置(drawingsettings)

通过设置drawingsettings可以改变颜色和其它绘制特征。

如果你总喜欢蓝色的用例,最好的方法是在工程关联菜单(也就是在浏览器的foo)上选择editdrawingsettings.转到最后一个标签(tab),改变默认的用例的颜色(defaultusecasecolor)。

如果你在一个子级别上如此去做,例如在图上,新值的有效的范围将限于所选级别以及它的子孙,若此级设置的值是默认值,则继承上一级别所给出的值,除工程级别例外,因为它已经没有上一级。

这样,我们在工程一级修改用例的颜色为蓝色,则所有用例都是蓝色。

我们在WithDraw上调用相关联的菜单,选择editdrawingsettings,将颜色(黙认值)改为绿色。

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

在图中选中元素

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

⏹control+a选择全部元素

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

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

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

z-dimension

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

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

现在试着增加从Transferfunds到Cardidentification依赖性关联:

你能吗?

发生了什么?

因为你在Cardidentification之后增加subject,subject在usecase上面,BOUML考虑你试图建立从Transferfunds到subject依存关系。

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

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

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

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

当你改变比例时(使用小箭头或者直接在spinbox写入值

)[实际上是回到100%]。

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

虚线表明了图的范围(画布的尺寸),你在虚线外你能看到一些东西。

黙认的图的格式是欧洲ISO-A4.要改变图的格式,从图的关联菜单中format(在浏览器中图的关联菜单不允许如此做)。

格式‘A’相对于美国字符,‘B’相对于美国更大些,而‘C’则更大。

设置图的格以便于以后使用,在主窗口的Miscellaneous菜单中选择子菜单Diagramdefaultformat。

fit%使比例更大些,以便于看到图中的所有元素,比例的大小依赖于图子窗口尺寸。

亦可在图的关联菜单上选择optimalscale菜单项。

与此相对,在关联菜单上选择optimalwindowsize,或通过按钮

,你能够自动改变图子窗口的尺寸,以便在当前比例下看到所有元素。

关闭图,接着打开图,窗口的尺寸和比例将由默认值重置。

要保存当前窗口的尺寸和比例,以便你在下一次重新打开时使用,可以使用图子窗口的关联菜单,选择setpreferredsizeandscale菜单项(浏览器中的菜单不可能使用)。

输出图的图片

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

●打印:

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

●复制:

粘贴到其它程序:

如需,打开图以显示图,可以使用图的关联菜单,选择opyvisiblepicturepart菜单项(浏览器中不可能),可视部分是图的可见部分,依赖图子窗口的滚动条的位置。

要复制所有的元素,甚至不可见的元素,选择copyoptimalpicturepart.菜单项。

●保存图像为PNG文件:

如需,打开图以显示图,可以使用图的关联菜单,选择savevisiblepicturepart(png)菜单项(浏览器中不可能)。

要得到所有的元素,甚至不可见的元素,选择saveoptimalpicturepart(png).菜单项。

●保存图像为SVG文件:

如需,打开图以显示图,可以使用图的关联菜单,选择savevisiblepicturepart(svg)菜单项(浏览器中不可能)。

要得到所有的元素,甚至不可见的元素,选择saveoptimalpicturepart(cvg)菜单项。

●使用plug-out,例如HTML生成器。

在此情况下,一个输出的图不是一个打开的图,保存部分的比例和尺寸是默认值,除非你使用了setpreferredsizeandscale做了特别说明。

子包、类视图、图图和类

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

为此目的,我们首先创建一个类视图(classview),为什么不?

我们不想将此视图直接放在项目包中。

从项目的关联菜单中选择newpackage,菜单项,给包命名Package3。

从Package3关联菜单上选择newclassview菜单项,给类视图命名为Classview4:

要定义一类,类图不要一定需要的,除非需要加入关系。

通过类视图创建一个类图,打开此图,如是:

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

因为角色是类,它们可以加入到类图中。

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

然而在正常情况下,角色目的不是用于产生代码的。

在生成设置中在类级别上的actor范型,目标语言在产生过程中忽略actor。

以下为取消此限制,编辑generationsettings,转到stereotype标签,在stereotype=actor行内,用C++和其它语言设置取代ignored。

增加属性和操作

我们想定义一个命为att的属性和一个命为oper的操作。

从类的关联菜单上选择执行addattribute,然后选择执行addoperation。

当你通过图增加类的成员时,调用相关的编辑器,而不是浏览器。

类的成员可见,类的图像如是:

因为默认的可见性由classsettings设置(属性为保护的而类是公开的)。

而classsettings而在类视图级或包级别进行设置,遵循和drawingsettings同样的原则。

编辑属性

一旦决定att是一个整数,我们必须编辑此属性,可以有几种方法:

在浏览器上双击属性;或者在浏览器调用此属性的关联菜单,选择edit项;或在图上调用此属性的类的关联菜单,选editattribute,再选择att,你将看到一对话框:

第一个标签关心的是UML特征,一个属性默认为一个示例的成员(不是类的成员),不是易变的(volatile),也不是只读的(read-only)。

其它的每一个标签连接到一个特定语言:

使用bouml,你可以同时使用几种语言进行设计。

例如HTML生成器是由C++和Java两者来实现的。

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

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

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

在declaration之前的文本是可修改的,而在resultaftersubstitution[替换后的结果]之前的文本则是不可修改,此文本由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。

按DefaultStatedeclaration按钮,我们有:

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

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

它们都是由BOUML自动地转换类型,例如你在UML中选择any类型,你能在C++中得到Void类型,Java中得到Object类型,而在ODL中得到any类型。

显然的这些转换不是硬编码完成的,而是可以用generationsettings进行设置的。

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

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

关键字的定义(给出一一个默认的样子)也能够通过generationsettings进行修改。

它允许你在C++的代码内在属性名前加上‘_’,如上所述。

更多的说明,参阅手册。

备注:

当你更改generationsettings,已经存在的元素的定义并不改变。

按OK校验更改的合法性。

类绘制设置Classdrawingsettings

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

类的图像现在是这的:

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

关系

我们想增加一个从C1指向Administrator单向关联:

在图子窗口的顶上点击相应的图标,如同用例图中一样增加绘制此关系。

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

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

因关联是单向的,所以仅一极(关联的一极)是可编缉的。

如同属性和操作,默认的可见性由Classsettings设定。

角色名将产生成员名,我们发现已经存在属性的标志:

从生成代码的观点来看,一个关联和属性之前没有差异。

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

默认情况下,在C++代码中,一个关联和一个聚合产生一个指针,由值给出的聚合将不会产生指针。

显然,其默认的定义可通过generationsettings来改变。

转到Java标签:

再转到Php标签:

再转到IDL标签:

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

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

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

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

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

UML的范型相对于各语言来说都是屏蔽的(保护的),其实现可以通过generationsettings进行修改。

下面你可见到,UML中vector在C++中产生一个向量Vector,而在IDL中产生序列sequence。

按OK按钮,看图:

因为,现在关联是双向的,在浏览器中C1andAdministrator中都可见到此关联。

(我将它们标记为红色)

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

要定义一个C++或ISDL的struc,使用类范型struct,使用Defaultdeclaration按钮,针对相关的语言编辑类。

在Java中的struct是通过一个标准的类来实现的,当然在UML的类范型到给定的语言的映射可以通过设置generationsettings来完成,请看下面的对话框,并参阅参考手册。

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

例如要在C++中定义typedefT,它是指向C1的一个指针:

创建类T,绘制一个从T到C1的依赖关系。

编辑此类T,设置其范型为typedef:

对话框中发生改变指向其基类型。

转到C++标签:

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

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

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

创建一个类E,编辑E,设置其范型为enum,按OK。

在浏览器中调用类的关联菜单,选择additem并给一个名字a,接着,重新调用类的关联菜单,选择addattribute,并给一个名字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:

doesnothaveassociatedartifact.”在UML2中artifacts表示生成的文件,源文件,代码,库,执行文件,jar等,。

[以下内容在最新版BOUML已经不存在,略过]

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1