Class 具有概括性的图表构成
Class diagram composition with generalisation
我在这里试图表明 Admin 是 User 的子class,通过开放三角关系连接显示。这是否足以表明子 class 依赖于主父 class 存在,或者我是否需要进一步应用组合?我在下面展示了我的例子。我对此非常困惑。我觉得通过专业化箭头显示它就足够了,但我不确定。
Is this enough to show that the sub-class relies on the main parent class to exist or would I then need to further apply composition?
因为泛化一个Admin是一个User,所以如果没有User (User.allInstances()->size() = 0
) 那么也没有 Admin。但是当然你可以有 User(s) 而没有 Admin.
如果只是想说无非就是泛化是必要的
但是如果你想表明一个 Admin 是一个 User 并且只有 1 个管理员你可以做 :
如您所见,admin 是 class User 的 属性(isStatic 是真的)因为它是带下划线的,不需要为所有实例(包括管理员)使用它。
不使用附加关系的另一种表达方式是:
当然,如果您想说至少有一个管理员而不是一个管理员,只需在第一个解决方案中使用多重性 1..*
或在第二个解决方案中修改约束以具有 {allInstances()->size() >= 1}
.
我想对 关于泛化的出色而准确的回答添加另一种观点。
是的,确实足以使 Admin
成为 User
的特化:这意味着 Admin
是 User
。这也意味着 Admin
继承了 User
的非私有属性和操作(即 AuthenticateUser()
)。最后,这意味着 Admin
的实例 a
也是 User
的实例,因此具有 username
和密码,尽管这些仅对 [=11= 可见] 实例。不幸的是,一旦对象创建为 Admin
,它将始终保持 Admin
.
因此,您对构图的犹豫是完全可以理解的:通常建议 prefer composition over inheritance。您完全可以想象拥有一个具有 Admin
角色的 User
,而没有 Admin
从 User
继承。但这是一个完全不同的设计。在这种特定情况下,如果没有其他角色,那就很奇怪了。
最后但同样重要的是,值得一提的是 decorator pattern 可以将继承与聚合(而不是组合)结合起来:在这种设计中,您将使 Admin
成为 [= 的装饰器11=]:它以 Admin
责任(即附加操作)扩展了用户的责任。但这可以在运行时完成:您可以创建一个 User
,添加一个 Admin
责任,或者删除 Admin
责任。这更加动态。
我在这里试图表明 Admin 是 User 的子class,通过开放三角关系连接显示。这是否足以表明子 class 依赖于主父 class 存在,或者我是否需要进一步应用组合?我在下面展示了我的例子。我对此非常困惑。我觉得通过专业化箭头显示它就足够了,但我不确定。
Is this enough to show that the sub-class relies on the main parent class to exist or would I then need to further apply composition?
因为泛化一个Admin是一个User,所以如果没有User (User.allInstances()->size() = 0
) 那么也没有 Admin。但是当然你可以有 User(s) 而没有 Admin.
如果只是想说无非就是泛化是必要的
但是如果你想表明一个 Admin 是一个 User 并且只有 1 个管理员你可以做 :
如您所见,admin 是 class User 的 属性(isStatic 是真的)因为它是带下划线的,不需要为所有实例(包括管理员)使用它。
不使用附加关系的另一种表达方式是:
当然,如果您想说至少有一个管理员而不是一个管理员,只需在第一个解决方案中使用多重性 1..*
或在第二个解决方案中修改约束以具有 {allInstances()->size() >= 1}
.
我想对
是的,确实足以使 Admin
成为 User
的特化:这意味着 Admin
是 User
。这也意味着 Admin
继承了 User
的非私有属性和操作(即 AuthenticateUser()
)。最后,这意味着 Admin
的实例 a
也是 User
的实例,因此具有 username
和密码,尽管这些仅对 [=11= 可见] 实例。不幸的是,一旦对象创建为 Admin
,它将始终保持 Admin
.
因此,您对构图的犹豫是完全可以理解的:通常建议 prefer composition over inheritance。您完全可以想象拥有一个具有 Admin
角色的 User
,而没有 Admin
从 User
继承。但这是一个完全不同的设计。在这种特定情况下,如果没有其他角色,那就很奇怪了。
最后但同样重要的是,值得一提的是 decorator pattern 可以将继承与聚合(而不是组合)结合起来:在这种设计中,您将使 Admin
成为 [= 的装饰器11=]:它以 Admin
责任(即附加操作)扩展了用户的责任。但这可以在运行时完成:您可以创建一个 User
,添加一个 Admin
责任,或者删除 Admin
责任。这更加动态。