UML课件5-类图和对象图

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个开发者用某种语言可以开发多个项目。
5.2.1 关联

Rose中演示几种关联
在工具栏中选择定制customize… 所有关联都可用画出,鼠标靠近不同的关联端
右键单击,改变相应选项(如nevigate)可得到 不同关联关系。 组合关系是在聚合的基础上选“by value”选项
5.2.1 关联
斜体表示 抽象类
5.2.2 泛化

泛化的目的
自顶向下的属性继承。可以使得子类共享父类的属性
和操作,实现继承。 自底向上的实例替换。可以使得子类的实例用于任何 父类被声明使用的地方,实现多态。(派一个人来开 会。学生、老师都可去开会。派一个老师来开会,若 替换为派一个人去开会则有歧义)

继承

存取款窗口
转账窗口
5.3.2 实体类

保存永久信息,类及其属性最终可能映射 成数据库中的表以及字段。
交易
5.3.3 控制类
协调其他类工作和控制总体逻辑流程,一 般每个用例有一个控制类。控制类会向其 他类发送消息。 源自文库 完成用例的逻辑需求的类。

5.4 类图

某校的类图
练习

一个教室有若干桌子,桌和椅一一对应, 每个椅子坐两个人。派生关联:一个桌子 可供两人使用。 一个文件夹可以有多个子文件夹或多个文 件,文件有的是加密的,有的是未加密的。

私有(private) 保护(protected)


实现(implementation) 子类无法继承和访问父类的私有属性和实现属性

5.1.1 属性

举例

[可见性] 属性名 [:类型][‘[’多重性[次序]’]’][=缺省值][{特性}]




+ size: Area =(100,100) # visibility: Boolean =false - origin : Point colors: color[3] Points: Point[2..* ordered] Name: String[0..2]
5.2.1 关联

受限关联
在关联端紧靠源类图标处可以有限定符(qualifier),
带有限定符的关联称为受限关联或限定关联。 限定符的作用就是在给定关联一端的一个对象和限定 符之后,可以唯一确定另一端的一个对象或对象集。 受限关联用于一对多或多对多的关联。将目标类的多 重性从“多”降为“一”。 Rose2003不能直接表示限定符。 限定符
5.2.1 关联

受限关联
为何引入限定符?
在设计软件时十分有用 应用系统根据关键字对数据集作查询,常用到受限 关联。引入限定符的一个目的就是把多重性从n降 到1或0..1,则查询结果是单个对象,效率高。 如果引入限定符后,另一端的多重性仍为n,则意 义不大。

5.2.1 关联

关联的约束/依赖
角色名。 生成代码后会有和角色名相应的属性出现。 自返关联通常必须标明角色。
关联角色 + 表示可见性 关联角色 n 表示多重性
Company
+employer
1
#employee Person
0..n
5.2.1 关联

关联角色的多重性(multiplicity)





多重性表示可以有多少个对象参与该关联 非负整数的子集表示 0 表示没有实例的关联,一般不用 0..1 0..n 1 即1..1 3..6 course的 teacher 的 1..n 一个教师可开设1到3门课程,一门课程可以有 1到多个教师 多重性 多重性 n
5.2.1 关联
public class A { public B theB; …… public A() { } } public class B { …… public B() { } } A B
5.2.1 关联

关联角色(role)
关联两端的类可以以某种角色参与关联。 如果在关联上没有标出角色名,则隐含地用类名作为
5.2.1 关联

关联名
关联名
可有可无
Company
Employ
Person
用于明确表达关联的含义。客户?雇员?老板?
动词短语 斜体

导航性(方向性)
从一个类(对象)可以访问到另一个,反过来却不行,
用带箭头的实线,表示单向关联,无箭头表示双向关联 被关联的对象不知道谁与自己关联,但关联对象知道自 己与谁有关联
5.1.2 操作

标准格式:

[可见性] 操作名[ (参数列表) ] [: 返回值类型][{特性}]
例:


+display() #create() -attachXWindow(xwin:XWindowPtr) +getname():String
信息隐藏(封装),双向保护

提问:为何要规定可见性?

右键-options -版型显示 Icon Label Decoration
5.3 类的划分

三种类型
边界类(Boundary) 实体类(Entity) 控制类(Control)
5.3.1 边界类
位于系统与外界的交界处,例如窗体、 对话框、报表、与外部设备或系统交互 的类等等; 边界类可以通过用例确定,因为活动者 必须通过边界类参与用例; 边界类一般可以没有属性,只有操作。
如Order类 OerderItem和Order之间是组合关系,根据箭头方向 可知Order包含了OrderItem Order类和Customer、Consignee、DeliverOrder是 关联关系。也就是说,一个订单和客户、收货人、送 货单是相关的。
阅读过程

多重性:用来说明关联的两个类之间的数 量关系

5.4.1 类图的抽象层次

概念类
描述应有领域中的概念, 仅包含类名,不考虑细节;


分析类
分析不针对具体语言, 包含一些类的细节特性


设计类
针对具体的语言, 考虑类的实现细节

5.4.2 绘制类图

步骤
分析问题域,确定需求 寻找类,确定类的含义和职责 定义类的属性和操作 确定类之间的关系 精化类和类之间的关系 绘制类图
约束是UML三种扩展机制之一:约束、版型、标记值 给关联加上约束,可以加强关联的含义。
Person Account {xor} Corporation
5.2.1 关联

聚合(aggregation)

has-a关系 表达整体和部分的关系 整体和部分的关系,个体可以属于多个整体。(聚合是特殊的关联)
性}] 可见性:可访问性 多重性:属性值个数格式 次序:属性值顺序 特性:对该属性性质的一个约束说明,如{只读} 选取类的属性时只考虑系统用到的特征,不必将所有属 性都表示出来,原则上,由类的属性应能区分每个特定 的对象。
5.1.1 属性

可见性

属性的可访问性,四类: 公共(public)
自返关联
5.2.1 关联
二元关联和N元关联,大多数N元关联经过 细致分析,都可转成二元关联。 Rose2003不能直接表示N元关联。

Project n n Language
programmer n Person
一个人在一个项目中可以使用多种开发语言;
一个项目中使用某种语言的可以有多个开发者;
如何阅读类图
先看清有哪些类 然后看类之间的关系 结合多重性来理解类图的结构特点以及各 属性、方法的含义

阅读过程

找出类
Order、OrderItem、Customer、Consignee、
DeliverOrder、Peddlery、Product

找出关系
从图中关系最复杂(也就是线最密集)的类开始阅读,
5.2 类的关系
关联(accociation) 泛化(generalization) 实现(implementation) 依赖(dependency)

5.2.1 关联

关联(association)表示类与类之间的关系 链(link)表示的是对象与对象之间的关系 一个关联可以有两个或多个关联端(association end),每个关联端连接到一个类。 关联可以是单向的uni-directional 或 双向的bidirectional 两个类之间的关联将在所生成的代码中体现出来, 表现为类中有一个方法可以访问到另一个类
第5章 类图和对象图
OO思想
OO思想
5.1 类的定义

什么是类(class)

具有相似结构、行为和关系的一组对象的描述符
类的组成


属性 操作
UML中,类表示为划分 为三格的矩形 例,图形类Shape

5.1.1 属性

属性的格式
[可见性]
属性名 [:类型][‘[’多重性[次序]’]’][=缺省值][{特
5.2.3 依赖

一个元素B的改变会影响另外一个元素A, 则称A依赖于B,二者之间存在依赖关系。
stereotype 客户 提供者
5.2.4 实现


一个元素完成另外一个元素的操作功能,则二者 之间构成实现关系。 如接口类及其实现;接口没有属性,只有声明的 操作方法(对于方法没有实现部分),而由实现 类具体定义实现部分。 Rose中画法
5.2.1 关联

受限关联

例:一客户可以在bank中有多个 账户,但给定了一个账户account后, 其只对应0..1个客户 n (bank, account) 0..1个costomer costomer 多个(bank, account)
n

表达customer和bank之间的关系?
阅读过程

理解方法

Order类有两个方法dispatch()和close (),从名字中可以猜出它们 分别实现“分发订单生成送货单”和“完成订单”。 DeliveOrder 类中有一个close ()方法,同理,它表示“完成送 货”。 而在OrderItem中有一个stateChange ()方法和deliverState,不 难猜出它就是用于改变其“是否交给收货人”标志位的。 先调用Order的dispatch ()方法,它将根据其包含的OrderItem中 产品信息,来按供应商户分拆成若干个DeliverOrder。商户登录 系统后就可以获取其DeliverOrder,并在执行完成后再调用close ()方法。此时,就将调用OrderItem的stateChange()方法来改变 其状态。同时再调用Order的close()方法,判断该Order的所有 的OrderItem是否都已经送到了,如果是就将其真正close()掉。

派生(Derived)关联
一个关联是由另外的关联推导出来的,派生关联前面加
斜杠表示。生成代码时,派生关联不产生相应代码。 一个公司有多个部门,一个职员为其中某部门工作,则 可推导该职员为该公司工作。
5.2.2 泛化

Generalization,一般元素和特殊元素之间 的关系。即OO语言中,类之间的继承关系
Rose中可以看到之类已继承了父类的属性 private、implementation属性不被继承 public、protected属性可被继承


多态

尽管每个之类的实现方法不同,但外界调 用方式完全一样
oLine->draw();
5.2.2 泛化

抽象类(abstract,斜体表示):不能产生 实例的类,因为类中的方法往往只是声明, 而没有具体实现。
5.2.1 关联

关联类(association class)
关联本身也可以有特性,通过建立关联类可以进一步
描述关联的属性、操作和其他信息。 通过虚线与关联连接。
改成#,代码如 何修改?
public class Company { private String companyName; public Person employee[ ]; } public class Person { private String personName; public Company employer; } public class Contract { private Double salary; }

组合(composition)contains-a关系


整体和部分的关系,个体唯一属于一个整体。 组合关系中的“整体”控制着“部分”的生存期。 组合是一种特殊的聚合关系,又称强聚合。
Form
Button
5.2.1 关联

关联的种类
自返关联 二元关联 N元关联
5.2.1 关联

相关文档
最新文档