Oop 具有泛化的类图组合
我在这里试图说明Admin是一个子类的用户,它是通过开放三角关系连接显示的。这是否足以表明子类依赖于主父类而存在,或者我需要进一步应用组合?我在下面展示了我的例子。我对此非常困惑。我觉得通过专业化箭头来显示就足够了,但我不确定。 这是否足以表明子类依赖于主父类而存在,或者我需要进一步应用组合 由于一般化,管理员是用户,因此如果根本没有用户(Oop 具有泛化的类图组合,oop,uml,class-diagram,Oop,Uml,Class Diagram,我在这里试图说明Admin是一个子类的用户,它是通过开放三角关系连接显示的。这是否足以表明子类依赖于主父类而存在,或者我需要进一步应用组合?我在下面展示了我的例子。我对此非常困惑。我觉得通过专业化箭头来显示就足够了,但我不确定。 这是否足以表明子类依赖于主父类而存在,或者我需要进一步应用组合 由于一般化,管理员是用户,因此如果根本没有用户(User.allInstances()->size()=0),那么也就没有管理员。当然,您可以拥有用户而无需管理员 如果你只是想说,没有什么比概括更重要的了
User.allInstances()->size()=0
),那么也就没有管理员。当然,您可以拥有用户而无需管理员
如果你只是想说,没有什么比概括更重要的了
但是,如果您想表明管理员是用户,并且只有一个管理员,您可以执行以下操作:
正如您所看到的,admin是类User的一个属性(isStatic为true),因为它是用下划线写的,所以不需要对所有实例(包括admin)都使用它
不使用附加关系的另一种说法是:
当然,如果你想说至少有一个管理员,而不是一个管理员,只需在第一个解决方案中使用多重性
1..*
,或者在第二个解决方案中修改约束,使其具有{allInstances()->size()>=1}
。我想为关于泛化的优秀而准确的答案添加另一个视图
是的,使管理员
成为用户
的专门化就足够了:这意味着管理员
是用户
。它还意味着Admin
继承用户的非私有属性和操作(即AuthenticateUser()
)。最后,这意味着Admin
的实例a
也是User
的实例,因此具有username
和密码,尽管这些仅对User
实例可见。不幸的是,一旦对象被创建为Admin
,它将始终保持Admin
因此,你对作文的犹豫是完全可以理解的:人们经常建议你这样做。您完全可以想象有一个用户
拥有管理员
角色,而不继承用户
。但这是一个完全不同的设计。在这种特殊情况下,如果没有其他角色,那就很奇怪了
最后但并非最不重要的一点,值得一提的是,de可能将继承与聚合(而不是组合)结合起来:在这个设计中,您将使Admin
成为User
的装饰者:它扩展了Admin
职责的用户的责任(即通过附加操作)。但这可以在运行时完成:您可以创建用户
,添加管理员
职责,或者删除管理员
职责。这更具活力。啊,好的。所以只要有一个泛化就足够了,它表明admin是类用户的一个属性,不需要通过组合进一步说明这一点。我试图说明admin也是一种“用户”,这就是我使用泛化的原因。我还想说明,没有用户,就没有管理员,因为Admin是一个用户,这就是为什么我进行合成来说明Admin依赖于类User的存在。不确定这是否正确或有必要通过构图显示。我对此很困惑。希望这是有意义的。如果没有,我将尝试重新解释:D@ASH我编辑了我的回答谢谢,非常有用,非常感谢。还有什么我可以联系你进一步讨论类图的吗?@ASH最好的办法是继续在S.O.上使用问句,这也允许其他人访问它们。这是非常好的解释。非常感谢你们两位!