关于类图中关联多重性的疑问

goodbetter011 2018-12-13 10:38:52
在《UML和模式应用》这本较为经典的书籍中提到:多重性的值是指在特定时刻(而不是在某个时间跨度内)一个类有多个实例与对方类的一个实例发生联系。例如,男人与女人之间存在"结婚"关联,关联两端的重数都为0..1,因为在某一时刻一个人要么没结婚,要么只和一个人结婚。
但是在很多其他的资料中,对重数的定义并未涉及时间上的限制,也就是说并未要求是特定时刻。这样的话,多重性的确定相当于就存在两种观点。按照这两种观点,对于相同的问题就可能得到不同的重数。例如,“书”和“借书信息”之间存在关联,如果按照第一种观点,“借书信息”这一方的重数就应该是0..1,因为在特定时刻,一本书要么未被借,要么被借,它的“借书信息”是0..1条;如果按照第二种观点(不考虑特定时刻),那么“借书信息”这一方的重数就应该是0..*,因为在一段时间内,一本书可能未被借过,可能被借多次,它的“借书信息”是0..*条。类似的例子还有很多,例如公司和人之间的“雇用”关联,若按照第一种观点来确定重数,公司一方的重数是0..1;若按照第二种观点来确定重数,公司一方的重数就是0..*,因为一个人在一段时间可以被多个公司雇佣。个人觉得,第一种观点或许是正确的,因为一个对象一般只需要知道当前(特定时刻)与自己相关的其它对象有多少个就可以了,并不需要知道在一段时间内与自己相关的其它对象有多少个。
另外,类和它们之间的关系可以被映射为数据库中的表以及表之间的关系。对于上面的借书的例子,如果采用第一种观点来确定重数,那么“书“表和“借书信息”表之间就应该是1对1的关系,但实际上“借书信息”表中保存的是历史上所有的借书信息,该表跟“书”表之间应该是多对一的关系,这意味着按照第一种观点来确定重数就存在问题。
在一些书本的类图中,这两种观点往往被混用,有的重数是按第一种观点确定的,有的重数却是按第二种观点确定的。如果按照第一种观点来确定重数,是否在把类和它们之间的关联映射为表与表之间的关系时,需要对表之间的关系进行调整?
...全文
699 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,405

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 设计模式
社区管理员
  • 设计模式
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧