当前位置:  开发笔记 > 编程语言 > 正文

"是一个"vs"有一个":哪一个更好?

如何解决《"是一个"vs"有一个":哪一个更好?》经验,为你挑选了3个好方法。

投资组合A→基金1

投资组合A→基金2

投资组合A→基金3

如果不使用is/has,我无法构建句子.但在1和2之间,

1)有一个:

class PortfolioA
{
    List obj;
}

2)是:

class PortfolioA : List
{

}

从可扩展性,可用性的角度来看,您认为哪一个更好?我仍然可以通过任何方式访问我的资金,尽管有一个小的语法变化.



1> Bill Karwin..:

我和其他人一起投票,他们说HAS-A在这种情况下更好.你在评论中提问:

当我说一个投资组合只是一个基金的集合,有自己的一些属性,如TotalPortfolio等,这根本不会成为一个"是一个"吗?

我不这么认为.如果你说PortfolioIS-A List,那么投资组合的其他属性呢?当然,您可以向此类添加属性,但是将这些属性建模为List的属性是否准确?因为那基本上就是你在做的事情.

如果投资组合需要支持多个投资组合,该List怎么办?例如,您可能有一个列表显示当前的投资余额,而另一个列表显示新贡献的投资方式.那么什么时候停止资金,并用一套新资金来取得资金呢?历史信息对于跟踪以及当前的资金分配很有用.

关键是所有这些属性都不是List的正确属性,尽管它们可能是Portfolio的属性.



2> Steven A. Lo..:

不要"总是"赞成作曲或继承,反之亦然; 他们有不同的语义(含义); 仔细观察其含义,然后再决定 - 如果一个人比另一个人"更容易"并不重要,为了长寿,重要的是让你的语义正确

记住:is-a = type,has-a = containment

所以在这种情况下,投资组合在逻辑上是一组资金; 投资组合本身是不是一个类型的基金,所以成分是正确的关系

编辑:我最初误解了这个问题,但答案仍然是一样的.投资组合不是一种列表,它是具有自己属性的独特实体.例如,投资组合是具有初始投资成本,总当前值,随时间变化的历史值等的金融工具的集合,而列表是对象的简单集合.投资组合只是最抽象的一种"列表类型".

编辑2:考虑投资组合的定义 - 它无一例外地被描述为一系列事物.艺术家的作品集是他们艺术作品的集合,网页设计师的作品集是他们网站的集合,投资者的作品集包括他们拥有的所有金融工具,等等.很明显,我们需要一个列表(或某种类型)来表示投资组合,但这绝不意味着投资组合是一种列表!

假设我们决定让Portfolio从List继承.这一直有效,直到我们向投资组合中添加股票或债券或贵金属,然后突然不正确的继承不再有效.或者假设我们被要求对比尔盖茨的投资组合进行建模,并发现List将耗尽内存;-)更现实地说,在未来的重构之后我们可能会发现我们应该从像Asset这样的基类继承,但是如果我们已经从List继承了然后我们不能.

总结:区分我们选择表示概念的数据结构,以及概念本身的语义(类型层次结构).



3> jonnii..:

第一个,因为你应该尽可能地尝试使用组合而不是继承.


你能否证明这一说法的合理性?
在计算机科学中没有"永远",只有权衡取舍
推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有