在创建类时,特别是那些涉及集合的类时,我多次问自己这个问题,但我从未给出令人满意的答案。这是一个OOP设计问题。
例如,在支票簿注册程序中,假设我有一类BankAccount
。 BankAccounts 包含涉及帐户名称、帐户类型(支票、储蓄等枚举)和其他数据的数据,但最重要的是以下数据的集合:Adjustment
账户中的s(存款或取款)。
在这里,我有两个选项来保存调整集合:
- 实例化一个集合并将其保留为 BankAccount 类中的成员。这就像说“银行账户has调整的集合。”
- 从集合继承。这就像说“银行账户is调整的集合。”
我认为这两种解决方案都很直观,当然,两者都有一些优点和缺点。例如,实例化允许类(在只允许单个基类的语言中)从另一个类继承,而从集合继承则可以轻松控制 Add、Remove 和其他方法,而无需编写代理方法来“包装” ' 那些。
那么,在这种情况下,哪种方法更好呢?
对我来说,一个银行账户has调整的集合。一个银行账户is not调整的集合,因为它“是”远不止于此:它也是“是”名称和类型等。
因此,对于您的情况(以及类似的情况),我建议您在班级内聚合一个集合。
如有疑问,请避免继承。 :-)
我可以进一步论证这一点。为了正确使用继承,子类必须满足里氏替换原则 http://en.wikipedia.org/wiki/Liskov_substitution_principle;这意味着,就你而言,BankAccount
应该是任何地方的有效类型Collection
是期待。我不认为是这样,因为Collection
可能公开诸如Add()
and Remove()
,而您将希望对在银行帐户中添加和删除调整进行一些控制,而不是让人们自由地添加和删除它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)