这个问题基本上是语言非特定的,但针对的是使用OOP并有可能创建GUI的语言。
不过,如果我需要提供示例,我将使用Java作为参考。
正如清洁法典告诉我们的那样,构成是赞成继承 现在有很多关于这个主题的博客文章,其中一些针对GUI开发 到目前为止,我读过的最“重要”(对于那些家伙)的句子是“你不是从JFrame / JDialog派生的”。
另一方面,有规则将其视为“is-a vs has-a”,其中“has-a”表示构成,“is-a”表示继承。
现在问题是:当我开发一个具有 GUI的应用程序时,那么这个GUI 是一个 JFrame或JDialog(或者用于特定编程语言的任何东西,例如。System.Windows.Forms.Form
for .NET Windows Forms)。然后,此GUI 具有多个控件。
对我而言,案件很清楚:
我的应用程序使用组合来创建GUI的实例,但GUI本身使用继承,因为是 JFrame,然后此GUI再次使用组合作为其中的控件。
我永远不会想到使用GUI的compisition,因为我的GUI有一个GuiManager,它具有JFrame 和 GUI的所有控件然后构建(如:将它放在一起)并显示它。毕竟,控件是GUI的一部分,因此应该是它的成员变量?! (仅当GUI使用继承时才可以)
并且要更清楚:是的,我的GUI应该像JFrame一样,如果需要的话,应该像其他开发人员一样使用JFrame。
现在,问题是:
在这种情况下,正确的方法是什么?
我看待它的方式完全错了吗?
提前感谢您对此的任何意见。
答案 0 :(得分:1)
编程既是一门艺术,也是一门科学。在这方面,没有必要通过一种最佳方式来实现结果,并且由您来比较利弊。
" 组成是赞成过继承"是一个指导:
以下示例显示了此指南的有用性和有效性:
此示例提供了对 is-a 与 has-a 方法的其他见解。如果D继承自B,这意味着所有D都是B.但这也意味着存在一些B是由他们自己存在的(独立于其他任何东西)而是D.换句话说,所有老虎 是 动物,而一些动物本身就是老虎 。
这些一般规则仅供参考。黑色和白色之间有很多灰色阴影。例如: 宠物 动物本身?或某人 拥有 宠物?在您的计划范围内,您可以看到这种关系的哪一部分最相关/为您的代码表达带来最大的好处。
我无法对您的特定GUI说出多少模式。我只能给一种语言中立(我不能很好地掌握Java)主观意见(基于我的个人解释和知识):
总而言之,不要让教条为你决定。为您的具体案例做出最佳选择,并准备好用坚实的具体论据来捍卫它!