不能被忽略的关联类 The Importance of Association Class


The Importance of Association Class 

 

第一次接触到关联类(association class)的时候是在一个困境之中,当时还没有很多的编程经验,也忘了当时是怎么乱七八糟解决的那个问题. 这几天在Jacquiet Barker Grant Palmer所著的 Beginning C# Object中花了较大篇章来介绍关联类的,讲得非常不错,一个student,一个course,基本所有的attribute已经确定好了,还有一个grade(成绩)实在不知道是放在哪个类里?

l         它不是student类的attribute,因为它要的是单门课程的成绩,而不是所有成绩,如果真要硬绐student的话还得用上collection

l         它也不是course类的attribute,因为样所有的学生都只会得到一个相同的成绩

l          

此时就可以用上关联类,其实两种对象多对多关联这是一个用关联类非常典型的例子,

我们构建一个GradeReceived类来实现上述功能,在类图中用虚线连接到两个相互关联的类。

 

在很多情况下,如果在一个类图中看到一个关联类,往往可以用其它方式为表达:

 

l         对于一个包含关联类的“多对多关联”,可以将多对多关联分割为两个一对多关联,完全将关联类作为“中间类”插入到两个类之间。

值得注意的是,关联类作为中间类插入其中后,和两个类的联系的多端应在关联类这边,如下例一个student对象和course对象分别对应多个GradeRecived对象,

 

l         如果是一个“一多对关联”,如person对象和company对象之间可以有一个SalaryReceived关联类,这个关联类我们可以直接将salary作为person的一个attribute折叠到里,“一对一关联”也可以采用类似的方法。

然面这种取代方法是被建议不要使用的,因为person之所以有salary是因为和某个company之间建立了关联,所以我们并不是所有时候都希望person里面有个salaryattribute,所以更多时候我们还是创建一个关联类来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值