gpt4 book ai didi

language-agnostic - 我应该实例化一个集合还是从集合继承?

转载 作者:行者123 更新时间:2023-12-04 17:05:32 25 4
gpt4 key购买 nike

在创建类时,我曾多次问自己这个问题,尤其是那些涉及集合的类,但我从未想出令人满意的答案。这是一个面向对象的设计问题。

例如,在一个支票簿注册程序中说我有一个类 BankAccount . BankAccounts 包含涉及帐户名称、帐户类型(支票、储蓄等的枚举)和其他数据的数据,但最重要的是 Adjustment 的集合。 s(存款或取款)在账户中。

在这里,我有两个选项可以保留调整的集合:

  • 实例化一个集合并将其作为 BankAccount 类中的成员保留。这就像说“BankAccount 有一组调整”。
  • 从集合继承。这就像说“BankAccount 是调整的集合”。

  • 我认为这两种解决方案都很直观,当然,两者都有一些优点和缺点。例如,实例化允许类(在只允许单个基类的语言中)从另一个类继承,而从集合继承可以轻松控制 Add、Remove 和其他方法,而无需编写代理方法来“包装” ' 那些。

    那么,在这种情况下,哪种方法更好?

    最佳答案

    对我来说,银行账户有一系列调整。银行帐户不是调整的集合,因为它"is"远不止于此:它还"is"名称和类型等。

    因此,就您的情况(和类似情况)而言,我建议您在类(class)中聚合一个集合。

    In case of doubt, avoid inheritance. :-)



    我可以进一步论证这一点。为了正确使用继承,子类必须满足 Liskov's substitution principle ;这意味着,就您而言, BankAccount应该是任何地方的有效类型 Collection是期待。我不认为是这样,因为 Collection可能暴露了诸如 Add() 之类的方法和 Remove() ,而您将希望对在您的银行帐户中添加和删除调整进行一些控制,而不是让人们自由添加和删除它们。

    关于language-agnostic - 我应该实例化一个集合还是从集合继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2242919/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com