Uml 限制类图中的子对象
我想使用类图为一个简单的系统建模:Uml 限制类图中的子对象,uml,associations,class-diagram,generalization,multiplicity,Uml,Associations,Class Diagram,Generalization,Multiplicity,我想使用类图为一个简单的系统建模: 我有三种可能的职业:公司,员工,经理 公司必须有20名员工(聚合?) 公司必须有1名经理(聚合?) 经理是员工(泛化?) 每个员工只能在1个公司 换句话说,我想限制这个系统有20名员工,其中1名必须是经理。但是,只有1可以成为管理器。这将使得始终有19个员工和1个经理对象 我已经在我的头脑中设置了我希望这个系统如何工作,但我不能得到完全正确的模型。这就是我得到的: 我觉得自己很亲密,但我的问题是,尽管公司与经理的1比1关系似乎正确,但与员工的1比19关系
- 我有三种可能的职业:
,公司
,员工
经理
必须有20名员工(聚合?)公司
必须有1名公司
(聚合?)经理
是员工(泛化?)经理
- 每个
只能在1个员工
公司
员工,其中1名必须是经理。但是,只有1可以成为管理器
。这将使得始终有19个员工
和1个经理
对象
我已经在我的头脑中设置了我希望这个系统如何工作,但我不能得到完全正确的模型。这就是我得到的:
我觉得自己很亲密,但我的问题是,尽管公司
与经理
的1比1关系似乎正确,但与员工
的1比19关系似乎不正确。由于经理
是员工
,我无法限制这19名员工
中有多少人是经理
。我试图做到这一点,而不是将员工
分成非经理
和经理
两类
我走对了吗?我有什么遗漏吗?或者19个必须是员工对象,1个必须是经理对象,这是否足够清楚?问题
您的模型有一个弱点:一家公司的经理
可能是另一家公司的员工
,因为您的模型中没有任何内容表明,这两家公司的雇佣关系是相同的
为什么??如果应用UML泛化语义:
员工
与公司
有关联
Manager
是员工
的专业化,因此继承了其所有属性、操作和关联,包括与公司
的关联
经理
还与公司
有自己的关联。因此,它有两种截然不同的关联:继承的关联和它自己的关联
潜在解决方案
为协会的目的贴上标签会很有帮助,例如雇主
/员工
和公司
/经理
:
- 最简单的解决方案可能是删除
经理
和公司
之间的关联,因为它是继承的。但是没有简单的方法来判断在员工中必须有一个经理
。此外,要找到公司的经理
,也不是一个简单的方法。因此,这种解决方案似乎并不合适
- 另一个解决方案是添加一个约束,指定对于
经理
,经理.公司
与员工.雇主
相同。由于经理
只管理一家公司
,员工
中不可能存在其他经理。但这听起来有点做作
- 因此,在我看来,最好的解决方案是保持这两个关联,但使用UML smeantics来解释
公司{subsets employer}
和经理{subsets employee}
请注意,这个解决方案需要20名员工,因为它清楚地表明经理是20名员工中的一名
如果您有兴趣了解更多关于子集的信息,我建议您,这也可以启发您其他变体
小评论
聚合很好。然而,由于UML规范明确指出第110页:
共享聚合的精确语义因应用程序区域和建模者而异
因此,我建议尽可能避免使用它们。因此,您也可以使用普通的UML关联。特别是对于只有一个经理的经理
评论中的另一个评论是,应删除+
中的+
:该+
是关于公众可见性的。公共或私人的不是协会本身,而是(例如,我的提案中的雇主和雇员)。当我看到你编辑问题时,我甚至没有开始写答案;-)@好吧,下次我先回答,然后再编辑。因为我也喜欢读你的答案:-)好吧,你的答案通常都很完整,我已经不再说“你的错别字了”。啊,有一句话:+has
没有意义。看起来像是名字和角色的混合体。可能应该提到。@qwerty_确实是一个非常相关的评论。我进行了编辑以使其更具可见性。