第5章 类图和对象图-2

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

图5.7 带约束的关联
5 限定关联
在关联端紧靠类图标处可以有限定符 (qualifer),带有限定符的关联称为限定关联。 限定符的作用就是在给定关联一端的一个对 象和限定符值以后,可确定另一端的一个对 象或对象集。 引入一个限定符的一个目的就是把多重性从 n降为1或0..1。
练习
画出Class类和Student类的类图。 分别尝试使用和不使用限定符。标出多重性。
百度文库
ChildClass
Swimmer
Golfer
attributes operations
图5.14 泛化关系
练习
使用泛化关系画出下列类(矩形、圆形、多边 形)的类图
练习
练习
画出以下几个类的类图,尝试使用聚集、泛 化、多重性 Zoo(动物园),Animal(动物),Bird(鸟) ,Mammal(哺乳动物),Reptile (爬行动 物),Cage(笼子), Keeper (看管员)
6 关联的种类
② 二元关联是在两个类之间的关联
Company
Employs
Person
6 关联的种类
③ N元关联(n-ary association)是在3个或3个以 上类之间的关联。 See p.55
5.2.2 聚集和组合
聚集是一种特殊形式的关联。聚集表示类 之间整体与部分的关系。在对系统进行分 析和设计时,需要描述中的“包含”, “组成”、“分为…部分”等词常常意味 着存在聚集关系。 聚集关系中整体和部分的生命周期不一定 一致。
练习: 画出Person类和Car类的类图。关联关系为 拥有。表示出关联名和关联多重性
Person 1.*
owns 0..*
Car
3 关联类
□关联本身也可以有特性,通过关联类可以 进一步描述关联的属性和操作。关联类通过 一条虚线与关联连接。
3 关联类
□要想表示Company和Person类之间的关联关系,关键是 要确定工作合同和该合同的薪水。Salary属性描述的是 Company类和Person类之间关联的属性,而不是描述 Company类或Person类的属性。
练习
画出作者类(Author)和书籍类(Book)的类图。 标出书籍和作者的关联类(BookAndAuthor)和 多重性。 提示:BookAndAuthor关联类可以有角色(role) 这一属性,用来表示作者是主要作者、支持作 者、或编辑等。
3 关联类
Author
1..*
1..*
Book title: String
5.2.1 关联
关联是模型元素间的一种语义联系。 关联意味着类实际上以属性的形式包含对其他 类的对象的引用。 链是关联的实例。关联表示的是类与类之间的 关系,而链表示的是对象与对象之间的关系
A
B
A
B
图5.2 类之间的双向关联关系
图5.3 类之间的单向关联关系
5.2.1 关联
□ 类A的代码: public class A{ public B theB; /** * @roseuid 3DAFBF0F01FC */ public A() {} }
练习
网上书店书籍评论 注册用户可以评论网上书店里出售的一本或多 本书籍 提示: 每个注册用户有一个账户用来验证用户名 和密码 每个注册用户经过验证后可以评论一本或 多本书籍 问题: 找出并画出上面问题中的类
练习
Account Book
emailAddress ID password
verifyPassword()
5.2.1 关联
□ 类B的代码: public class B{ public A theA; /** * @roseuid 3DAFBF0F01A2 */ public B() {} }
1 关联名
□ 关联名 描述关联的作用。 通常是动词或动词短语。 语义上更明确。
例如Person类可以表示是公司的客户、雇员或所有者等。 如果在关联是加上Employs这个关联名,则表示他们之 间是雇佣关系。 Employs Person Company 图5.4 使用关联名的关联 注:不需要给每个关联都加上关联名。
图5.12 聚集关系
5.2.2 聚集和组合
□ 组合表示的也是类之间整体与部分的关系, 但组合关系中的整体与部分具有同样的生存 期。也就是说,组合是一种特殊形式的聚集。
图5.13 组合关系
5.2.2 聚集和组合
□ 聚集关系的实例是传递的 如果类3对象是类2对象的一部分,类2对象是 类1对象的一部分,那么类3对象是类1对象 的一部分。比如鼠标按钮是鼠标的一部分, 鼠标是家用计算机系统的一部分,则鼠标按 钮是家用计算机系统的一部分。 □ 聚集关系的实例是反对称的 类1对象是类2对象的一部分,类2对象是类1 对象的一部分,则类1=类2
6 关联的种类
□ 对于图5.10中的类,在Rose中所生成的Java 代码如下所示: 类EnginePart的代码: public class EnginePart{ public EnginePart theEnginePart[]; /** *@roseuid 3E9290390281 */ public EnginePart(){} }
图5.6 使用关联类的关联
3 关联类
□ 为了有助于理解关联类,这里也用Rose生 成相应的Java代码,共3个类,如下所示。 类Company的代码: public class Company{ private String companyName; public Person employee[]; }
练习
画出以下类的类图,表示出类之间的关系。 一个客户(Customer)可以有0、1或多张票(Ticket) 每个票有1到4张优惠券(Coupon)组成
练习
练习
画出一下类的类图,表示出类之间的聚集和组合关 系。 汽车、引擎、车门、电池
练习
Solution 1: The car cannot “move” without engine and battery (composition), but can still move without door (aggregation).
练习
Solution 2: We assume that the engine, door and battery can be replaced, so the relationship
5.2.3 泛化关系
□ 泛化(继承)定义了一般元素和特殊元素 之间的分类关系。
ParentClass
Athlete
Class
1 *
Student
Class
studentID
1
0..1
Student
6 关联的种类
□ 按照关联所连接的类的数量
① 自返关联 ② 二元关联 ③ N元关联
6 关联的种类
① 自返关联又称递归关联,是一个类与自身 的关联,即同一个类的两个对象间的关系。
EnginePart
0..n 1
图5.10 自返关联
3 关联类
□ 类Person的代码: public class Person{ private String personName; protected Company employer; } □ 类Contract的代码: public class Contract{ private Double salary; }
BookAndAuthor role: String
4 关联的约束
□ 对于关联可以加上一些约束,以加强关联 的含义。
Person
Account
{xor} Corporation
两个关联存在异或约束 ,即Account类或者与 Person类有关联,或者 与Corporation类有关联 ,但不能同时与Person 类和Corporation类都有 关联
2 关联的角色
□在UML中,多重性可以用下面的格式表示: 0..1 *(即0..n) 0..*(也可以表示为0..n) 1(1..1的简写) 1..*(也可以表示为1..n) 7 3,6..9 0(0..0的简写)(表示没有实例参与关联,一般不用) 多重性是用非负整数的一个子集来表示的。
2 关联的角色
练习
5.2.2 聚集和组合-两者的区别
□ 聚集关系也称为“has-a”关系,组合关系也称为 “contains-a”关系。 □ 聚集关系表示事物的整体/部分关系的较弱的情况, 组合关系表示事物的整体/部分关系的较强的情况。 □ 在聚集关系中,代表部分事物的对象可以属于多个聚 集对象,可以为多个聚集对象所共享,而且可以随时 改变它所从属的聚集对象。代表部分事物的对象与代 表聚集事物对象的生存期无关,一旦删除了它的一个 聚集对象,不一定也就随即删除代表部分事物的对象。 在组合关系中,代表整体事物的对象负责创建和删除 代表部分事物的对象,代表部分事物的对象只属于一 个组合对象。一旦删除了组合对象,也就随即删除了 相应的代表部分事物的对象。
title : String author: String rating: Float
Customer
Review assignRating(rating : Int) computeAvgRating() : Double
5.2 类之间的关系
□ 类之间的关系 ① 关联 ② 聚集 ③ 组合 ④ 泛化 ⑤ 依赖
2 关联的角色
关联的两端的类可以以某种角色参与关联。 如果在关联上没有标出角色名,则隐含地 用类的名称作为角色名。 角色具有多重性,表示可以有多少个对象 参与该关联。
Company +employer
1
+employee
0..n
Person
图5.5 关联的角色 公司可以雇佣多个雇员,雇员只能被一家公司雇佣
相关文档
最新文档