Ben*_*gan 5 language-agnostic oop inheritance class-design
在创建课程时,我多次问过自己这个问题,特别是那些涉及收藏的课程,但我从来没有想出一个令人满意的答案.这是一个OOP设计问题.
例如,在支票簿注册程序中说我有一类BankAccount
.BankAccounts包含涉及帐户名称,帐户类型(检查,保存,...的枚举)和其他数据的数据,但最重要的是Adjustment
帐户中的s(存款或取款)的集合.
在这里,我有两个选项来保存调整的集合:
我认为这两种解决方案都很直观,当然,两者都有一些优点和缺点.例如,实例化允许类(在只允许单个基类的语言中)从另一个类继承,而从集合继承可以轻松控制Add,Remove和其他方法,而无需编写代理方法来"包装" '那些.
那么,在这种情况下,这是一种更好的方法吗?
对我来说,银行账户有一系列调整.银行账户不是调整的集合,因为它"远远不止于此:它也是"是一个名称和类型等.
因此,在您的情况下(以及类似情况),我建议您在课堂中聚合一个集合.
如有疑问,请避免继承.:-)
我可以进一步论证这一点.为了正确使用继承,子类必须满足Liskov的替换原则 ; 这意味着,在您的情况下,BankAccount
应该是任何Collection
预期的有效类型.我不认为是这种情况,因为Collection
可能会暴露诸如Add()
和之类的方法Remove()
,而您希望对从您的银行帐户添加和删除调整施加一些控制,而不是让人们自由添加和删除它们.