Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 具有泛化的类图组合_Oop_Uml_Class Diagram - Fatal编程技术网

Oop 具有泛化的类图组合

Oop 具有泛化的类图组合,oop,uml,class-diagram,Oop,Uml,Class Diagram,我在这里试图说明Admin是一个子类的用户,它是通过开放三角关系连接显示的。这是否足以表明子类依赖于主父类而存在,或者我需要进一步应用组合?我在下面展示了我的例子。我对此非常困惑。我觉得通过专业化箭头来显示就足够了,但我不确定。 这是否足以表明子类依赖于主父类而存在,或者我需要进一步应用组合 由于一般化,管理员是用户,因此如果根本没有用户(User.allInstances()->size()=0),那么也就没有管理员。当然,您可以拥有用户而无需管理员 如果你只是想说,没有什么比概括更重要的了

我在这里试图说明Admin是一个子类的用户,它是通过开放三角关系连接显示的。这是否足以表明子类依赖于主父类而存在,或者我需要进一步应用组合?我在下面展示了我的例子。我对此非常困惑。我觉得通过专业化箭头来显示就足够了,但我不确定。

这是否足以表明子类依赖于主父类而存在,或者我需要进一步应用组合

由于一般化,管理员是用户,因此如果根本没有用户(
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.上使用问句,这也允许其他人访问它们。这是非常好的解释。非常感谢你们两位!