三关系.docx
《三关系.docx》由会员分享,可在线阅读,更多相关《三关系.docx(17页珍藏版)》请在冰豆网上搜索。
三关系
3.3关系
·关联(Association)
·泛化(Generation)
·依赖(Dependency)
·精化(Refinement)
3.4关联
关联是类之间的连接,是涉及此关联的那些类的对象之间的语义连接(链接)。
3.4.1标准关联
⒈关联
图3.16关联
图3.17队员与球队之间的关联
图3.18两个类之间的不同关联
图3.19多个类可以和同一个类关联
⒉关联的多重性
图3.20关联的多重性
范围:
0..1(0或1),
0..*,或*(0到多),
1..*(1到多),
5..11(5到11)。
(1,4,6,8,10,12)
图3.21关联的多重性
⒊可导航关联
图3.22一个可导航关联
例子:
·一个保险公司拥有多份保险合同,这些合同与一个或多个客户关联。
·一个客户拥有多份保险合同(0对多),这些合同与一个保险公司关联。
·一份保险合同位于一个保险公司和一个或多个客户之间。
保险合同同时与一个客户(或多个客户)和一个保险公司相关联。
·保险合同在一份(0或1)保险契约(一份书面形式的保险合同)里表达。
·保险契约与保险合同关联。
图3.23描述保险业务的类图
3.4.2对象图
图3.24类图和对象图,以及类图被例示的一个例子
objectname:
classname
3.4.3递归关联
从一个类到其自身的关联称为递归关联(RecursiveAssociation)。
图3.25递归关联
Java实现
图3.26保险公司与保险合同的关联
//Insurance_company.javafile
publicclassInsurance_company
{
/*Methods*/
//Insurance_contractVectorisaspecializationofthe
//Vectorclassensuringhardtyping.Vectorisastandard
//Javaclassfordynamicarrays.
privateInsurance_contractVectorcontracts;
}
//Insurance_contract.javafile
publicclassInsurance_contract
{
/*Method*/
privateInsurance_companyrefer_to;
}
图3.27关联的转换
3.4.4关联中的角色
图3.28关联drives中的角色
图3.29关联marriedto中的角色
图3.30关联playson中的角色
图3.31一个类在不同的关联中可以扮演不同的角色
3.4.5限定关联
限定关联(QualifiedAssociation)用于一对多或多对多关联的情况。
限定符(Qualifier)指定了如何标识一对多关联或多对多关联中的多端的一个特定对象。
图3.32限定关联
例子:
图3.33使用限定关联
3.4.6异或关联
异或关联{xor}
图3.34在同一时间,一份保险合同不能具有一个同时与Company和Person相连的关联
图3.35一个异或关联
图3.36两个关联之间的{xor}约束
3.4.7有序关联
图3.37一个有序关联
图3.38一个有序关联
3.4.8关联类
可以将类附属到关联上,这种情况下的类称为关联类(AssociationClass)。
图3.39一个关联类
图3.40一个关联类
3.4.9三元关联
图3.41一个三元关联
3.4.10链
链:
关联的实例
图3.42链是关联的实例
3.4.11聚合
聚合(Aggregation)
“整体—部分”关系
关键词:
“由……组成”、“包含”、“是……的部分”。
两种特殊的聚合:
共享聚合(SharedAggregation)和组合聚合(CompositionAggregation)
⒈基本聚合
图3.43聚合的一个例子
⒉共享聚合
共享聚合:
聚合内的部分可以是任意整体的部分。
图3.44共享聚合的一个例子
图3.45共享聚合的一个例子
⒊组合聚合
组合聚合拥有它的各个组成部分。
整体方的多重性必须是0或1(0..1),而部分方的多重性可以是任意值。
有三种不同的方式用于显示组合聚合。
图3.46组合聚合的一个例子
图3.47组合聚合的一个例子
图3.48组合聚合的第二种显示方式
图3.49组合聚合的第三种显示方式
(a)
(b)
(c)
图3.50一个聚合只可以有一个角色名称时的例子