泛化对聚合的使用

时间:2010-09-05 10:52:45

标签: oop class-design uml

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

我使用了Generalization并使用了一个名为 AccountHandlers 的类,它继承了 Bank 类。此 AccountHandlers 还汇总了 ATM HumanCashier

现在问题是,我的朋友在争辩说我把整件事弄错了。据他说, AccountHandlers 必须汇总到银行 ATM HumanCashier 必须继承 AccountHandlers < /强>

我对此感到有点困惑。我该如何塑造!!或者两种方法都正确吗?

4 个答案:

答案 0 :(得分:5)

我会回到基础。

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

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

通常,有一条经验法则(取自Effective Java),表明你应该支持组合而不是继承。拿一粒盐,确保你正确地设计你的应用程序。 (有关详细信息,请参阅Prefer composition over inheritance?

答案 1 :(得分:5)

通常,继承(或专业化)用于建模“ is-a ”关系,而聚合/组合用于“ has-a ”关系。< / p>

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

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

在我看来,大胆的陈述是正确的。因此,您应该使用聚合或组合作为银行&gt;帐户处理程序和继承帐户处理程序 - >人员收银员。

答案 2 :(得分:1)

如果有效则是正确的。不要陷入UML建模的浪费时间。写一个原型,任何设计缺陷很快就会显现出来。

答案 3 :(得分:0)

请与您的域专家联系,并从他们那里获得验证模型。我认为这是领域驱动设计的前几章有用的地方。您应该尝试定义实体及其关系(具有或是a),将它们绘制在白板上并与您的域专家讨论。

无论你做什么,请围绕您的实施编写单元测试。因为有了这样的混淆,你可能会修改类结构,那时你的单元测试将确保你可以顺利地重新分配代码。