在UML类图中,常见的有以下几种关系:
泛化(Generalization)
实现(Realization)
关联(Association)
聚合(Aggregation)
组合(Composition)
依赖(Dependency)
1. 泛化(Generalization)
【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类
2. 实现(Realization)
【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.
【箭头指向】:带三角箭头的虚线,箭头指向接口
3. 关联(Association)
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者
上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
下图为自身关联:
4. 聚合(Aggregation)
【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体
5. 组合(Composition)
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
6. 依赖(Dependency)
【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
各种关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
下面这张UML图,比较形象地展示了各种类图关系:
Powerdesigner 画图
面向对象模型
面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态。这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交流。这里主要介绍用例图,序列图和类图。
1.面向对象模型OOM
面向对象模型是利用UML的图形描述系统结构的模型,可以利用PowerDesigner的面向对象模型进行创建。PowerDesigner支持UML的下列图形。
- 用例图(User Case Diagram):通常用来定义系统的高层次草图,它从用户角度描述了应用的系统功能,指出了各个功能的外部操作者。
- 序列图(Sequence Diagram):描述系统如何实际完成在User Case图中定义的功能。可以画出对象(类的实例)之间交互时产生的时序关系。
- 类图(Class Diagram):描述类与类之间的静态关系。其中包括一系列的包,类,接口和它们之间的关系。类图是定义其他图的基础。
2.创建面向对象模型
(1)选择File-New Model命令或者单击工具栏中的New Model图标,弹出New Model窗口。
(2)在左侧是Model type栏中选择Object-Oriented Model(面向对象模型)选项,在右侧输入模型名称,语言,如图8-1所示。
(3)单击“确定”按钮,进入OOM设计工作区。在该工作区中可以定义OOM的属性和操作,也可以设计各种UML的图形。
(4)选择Model-Model Properties命令,显示如图8-2所示OOM的Model Properties窗口。
(5)定义完毕后单击“确定”按钮。然后选择File-Save As命令,以PubInfoSys.OOM这个名称将所定义的模型存盘。
(6)设置模型的选择。选择Tools-Model Options命令,打开Model Options(模型选项)窗口。如图8-3所示。
(7)单击Set As Default按钮,设置为默认选项,然后单击OK按钮。
3.设计用例图
3.1 用例图用于系统需求分析阶段,进行系统需求和功能设计,它包含执行者和用例两个要素。执行者指用户在系统中的角色,用例是用户与计算机的一次交互。用例图主要用来描述每个用例将有哪些执行者进行参与。
- 定义用例:用例是外部可见的一个系统功能单元,这些功能由系统单元提供,通过一系列单元与一个或多个参与者之间交换的消息表达。
- 定义角色:角色描述了与系统相互作用的一组用户,最明显的角色是系统中的人,但也可能是系统本身。
- 定义关联:用例除了与其参与者发生关联外,还可以参与系统中的多个关系,允许定义的关联有关联,扩展,用例泛化,包括。
3.2定义用例图
定义用例图如下:
(1)单击“用例”图标定义4个用例,如图8-4所示。
图8-4
(2)选中第一个用例双击,打开Use Case Properties(用例属性)窗口,将Name属性修改为“查找”,将Code属性修改为Search,如图8-5所示。
图8-5
(3)利用同样的方法,修改其他3个用例属性如图8-6所示。
图8-6
(4)单击“执行者”图标定义3个执行者,如图8-7所示。
图8-7
(5)选中第一个执行者并双击,打开Actor Properties窗口,将Name属性修改为“顾客”,将Code属性修改为Buyer,如图8-8所示。
图8-8
(6)利用同样的方法,修改其他两个执行者的属性。
(7)定义执行者和用例之间的关系。单击“关系”图标,再单击执行者“顾客”并拖动鼠标至用例“查找”,释放鼠标,这时在执行者和用例之间建立了关系。双击该关系,打开Association Properties窗口,将Name属性修改为“查询商品”,将Code属性修改为SearchProduct。
(8)按照步骤(7)的方法,在其他执行者和用例之间建立关系。
(9)定义完成后的用例图如图8-9所示。
图8-9
4设计序列图
4.1序列图(Sequence Diagram)是用来描述系统如何实现完成在Use Case图中定义的功能。可以画出对象之间的交互时产生的时序关系。它一方面描述了一次交互,交互中涉及类图中的类,另一方面细化了用例的描述。
序列图有角色(Actor),对象(Object),消息(Message)和激活期(Activation)几个要素如果8-10所示。
图8-10
消息类型有:
- Message:消息
- Slef Message 递归消息
- Call Message带有激活期的消息
- Self Call Message带有激活期的递归消息
- Return Message返回消息
- Self Return Message递归返回消息
4.2创建序列图
(1)选择File-New Model命令,打开New Model窗口。在窗口左侧的Mode type栏选择Object-Oriented Model选项,在右侧的First diagram下拉列表框中选择Sequence Diagram选项,在Object language下拉框中选择Java选项,如图8-11所示。
图8-11
(2)选择完毕后单击“确定”按钮,进入PowerDesigner设计工作区。
(3)单击Palette工具栏的Object图标,在右边空白工作区单击鼠标,出现对象符号如图8-12所示。
图8-12
(4)在设计区空白区域右击,鼠标指针变为箭头形状,双击对象符号,弹出Actor Properties窗口,在Name文本框中输入"呼叫方",在Code文本框中输入“Caller”,然后单击“确定”按钮。
(5)重复步骤(3)(4),添加其他两个对象,Name分别为“交换机”和“被叫方”,Code分别为Exchange和Receiver。
(6)单击Palette工具栏中的Message图标,在“呼叫方”对象下方的虚线处单击,拖动鼠标至“交换机”对象下方的虚线释放鼠标,即可增加一个消息。
(7)在设计区空白区域右击,鼠标指针变成箭头形状,双击对象符号,弹出“消息属性”窗口,在Name文本框中输入“拿起话筒”,在Code文本框中输入“Lift Reciever”,然后单击“确定”按钮。
(8)重复(6)(7),添加其他消息。
(9)最终的序列图如图8-13所示。
图8-13
(10)选择File-Save命令,保存新建的面向对象模型
5设计类图
类图是用一种抽象的方法来描述对象及对象之间的关系,并不能描述对象的所有细节。
5.1创建Class(类)
(1)选择File-New Model命令,打开New Model窗口。在窗口左侧的Mode type栏选择Object-Oriented Model选项,在右侧的First diagram下拉列表框中选择Class Diagram选项,在Object language下拉框中选择Java选项,如图8-14所示。
图8-14
(2)在类图工作区中单击Palette工具栏中的Class图标,创建一个类,双击类图的图形符号,打开Class Properties窗口。
(3)选择Detail选项卡,可以定义类的更多属性。
(4)选择Attributes选项卡,可以为类增加属性。单击Add a Row图标,增加属性,也可以单击Add Attributes图标打开Selection窗口列表模型中其他类的属性,选择需要的属性,然后单击“OK”按钮即可。
(5)选择Operations选项卡,单击Add Operation图标,打开Selection窗口,从中可以选择该模型中其他类包含的操作。选择完毕后,单击OK按钮,所选的操作即可增加到当前类上。
(6)选择Inner Classifies选项卡,可以为该类定义内部类。内部类是PowerDesigner的一个分类器,在UML中分类器是一个包含有属性和操作等的模型元素。定义完毕后可以通过Preview选项卡观察当前类或接口所包含的内部类代码,如图8-15所示。
图8-15
(7)除了以上属性外,还可以定义Associations,Identifies等属性。属性定义完毕后创建的内容如图8-16所示。
图8-16
5.2创建联系
在类图中,联系有关联,依赖,泛化和实现联系。
6.生成Java的源代码
如图8-17所示类图,生成Java源代码。
图8-17
(1)在类图中选择Language-Generate Java Code命令,打开Generation窗口,显示模型中包含的类。
(2)在Selection选项卡的Classes选项卡中选择类,在Directory栏中输入Java源代码的目标路径。
(3)在Options选项卡中定义Java生成选项。
(4)在Tasks选项卡中定义Java生成任务选项,如图8-18所示。
图8-18
(5)单击“确定”按钮,开始生成Java源文件,生成完成显示Generated Files窗口。
(6)选择一个源文件,单击Edit按钮,将在文本编辑器中显示该文件的内容。如图8-19所示。
图8-19
7.根据Java代码生成类图
(1)选择File-Reverse Engineer-Object Language弹出如图8-20所示。
图8-20
(2)在Object language栏选择Java,单击确定进入如下界面,如图8-21所示。
图8-21
(3)点击Add,添加Java文件,再单击确定即可生成相应的Java类图(在Reverse engineer栏中还可以选择Java字节码文件或文件目录),如图8-23所示。
图8-23