首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们怎么知道偏重构图而不是泛化总是正确的选择?

我们怎么知道偏重构图而不是泛化总是正确的选择?
EN

Software Engineering用户
提问于 2011-04-10 11:20:42
回答 5查看 1.3K关注 0票数 9

不管一个物体在物理上是否存在,我们可以选择以不同的方式对它进行建模。在许多情况下,我们可以套利地使用概括或组合。然而,GoF的“偏重合成而非泛化碳化硅”原则指导我们使用构图。因此,例如,当我们建模一条线时,我们创建一个包含两个成员的类( PointA和PointB类型为Point (组合)),而不是扩展点(泛化)。尽管对象通常要复杂得多,但这只是一个简单的示例,说明了我们如何能够仲裁地选择组合或继承来建模。

我们如何知道这是正确的选择?至少这很重要,因为如果是错误的话,可能会有大量的重构工作要做?

EN

回答 5

Software Engineering用户

回答已采纳

发布于 2011-04-10 12:30:30

这并不总是正确的选择。在大多数情况下,这是有利的。当复合模型需要更改或扩展时,它对此的抵抗力要大得多,因为您可以更改组合,而不必担心会无意中影响其他类。

我们怎么知道的?从经验,和别人的经验。

我已经看到了许多情况,在这种情况下,大规模的类层次结构是从一个简单的概念开始的,而这正是您的主要重构变得必要的地方。同时,我从未见过组合结构需要重构为继承的情况。

但我的轶事证据不应该足够。只要环顾互联网,很多人都有过同样的经历。

票数 17
EN

Software Engineering用户

发布于 2011-04-10 17:41:18

如果您想要一个更强大的经验规则,而不是“偏爱组合而不是继承”,那么我可能会建议如下:

在专门化对象的两种方法--继承和组合--中,只有当您需要对您要专门化的基类具有多态(可替换性)时,才应该使用继承。

然而,就像所有的经验法则一样,一旦你理解了这个规则,你就可以自由地打破这个规则了:)

票数 7
EN

Software Engineering用户

发布于 2011-04-10 12:44:42

我看不出合成和泛化是如何替代和找不到报价

组合和继承是(为了实现专业化),可以说抽象和泛化是(实现模块化)。

你想要的是你的设计是简单和合理的,这是两个本质上相当容易衡量的品质。

在你的例子中,由两点组成一条线似乎更有道理,而不是扩展它,因为你会自然地用两点来定义一条线,而不是通过扩展一个点的概念。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/66879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档