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个
    公司
换句话说,我想限制这个系统有20名
员工,其中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_确实是一个非常相关的评论。我进行了编辑以使其更具可见性。