两个类之间的OOP关系

时间:2013-12-25 07:24:39

标签: class oop inheritance composition relationships

当谈到InheritanceComposition的问题时,我一直在努力解决两个类之间的抽象问题......类似{{1}之间的IS-A与HAS-A关系1}}和LoginManager

我看到它的方式LoginManager可以是,并且可以舒适地坐在具有AuthenticateManager的IS-A位置,将其继承为超类(即类AuthenticateManager)或者只是将AuthenticateManager的对象声明为其自己的类的成员这意味着组合,所以我想它只是归结为经验和对OOP范式的正确认识。所以,请问,任何人都可以帮助解释这些课程之间的正确关系吗?

PS:请主持人不要因为与网站提问原则不一致而关闭此主题。

感谢。

2 个答案:

答案 0 :(得分:4)

这取决于您的需求。继承为您提供对超类的受保护成员的访问,而组合则不允许。如果有类成员只能用于派生类,那么使它们成为属性并使用组合访问它们是没有意义的,因为每个其他对象也可以访问它们。否则就是你和你的团队所喜欢的。

修改

没有任何规则如你所愿那么严格。例如,设计模式只是模板,您无需严格遵循它们。你不能盲目遵守规则,没有人会相信你。考虑OOP会更好,但要编写代码,以便清楚地解释你做了什么以及为什么。

由于我不知道你的两个班级的设计,我不能真正告诉你你的需求是什么。这句话(已经提到过)应该足以让你指出正确的方向。

  

继承为您提供了对超类的受保护成员的访问,而组合则没有。

答案 1 :(得分:1)

为什么不考虑更容易掌握的东西?

我有一个父亲 - 我继承了他的基因(有些不好吗?)但是嘿。

他有肾脏。他自己和那组成了他的作品。

我有自己的肾脏 - 我自己的肾脏,这使我的作文。

所以

IS-A - 我是我父亲的孩子 HAVE-A - 我有一个肾脏

我的肾脏与我父亲的工作方式不同 但我的蓝眼睛是我从父亲那里继承的