泛化对聚合的使用

Nag*_*tri 4 oop uml class-design

我有这个班级模型,银行是一个现在正在进入计算机化银行网络的班级.这必须有ATM(自动柜员机)和人员收银员.

我使用了Generalization并使用了一个名为AccountHandlers的类来继承Bank类.这AccountHandlers进一步有ATMHumanCashier聚集到它.

现在问题是,我的朋友在争辩说我把整件事弄错了.据他介绍AccountHandlers必须汇总到银行ATMHumanCashier必须继承到AccountHandlers.

我有点困惑.我该如何塑造!! 或者这两种方法都正确吗?

Yuv*_*dam 5

我会回到基础.

你应该问自己一个ATM 是一个 AccountHandler,还是一个AccountHandler ATM.这应该给你一个关于使用继承或组合的问题的一般答案.

两者都是正确的.只有一个是好的设计,这取决于您的应用程序尝试做什么.

通常,有一条经验法则(取自Effective Java),它表明你应该支持组合而不是继承.拿一粒盐,确保你正确地设计你的应用程序.(有关更多信息,请参阅首选组合而不是继承?)


M4N*_*M4N 5

通常,继承(或特化)用于建模" is-a "关系,而聚合/组合用于" has-a "关系.

现在您可以问自己哪一个是正确的:

  • 帐户处理程序是银行银行拥有一个或多个帐户处理程序
  • 人类收银员是一种(特殊种类)的帐户处理人员帐户处理人员具有人工收银员

在我看来,大胆的陈述是正确的.因此,您应该将银行 - >帐户处理程序的聚合或组合用于帐户处理程序 - >人工收银员的继承.