与 Collection 对象具有 has-a 关系的类是不是与 Collection 的元素有关系?

Posted

技术标签:

【中文标题】与 Collection 对象具有 has-a 关系的类是不是与 Collection 的元素有关系?【英文标题】:Does a class with has-a relationship with a Collection object have a relationship with the Collection's elements?与 Collection 对象具有 has-a 关系的类是否与 Collection 的元素有关系? 【发布时间】:2016-05-07 13:30:54 【问题描述】:

我正在学习 Java 8 Programmer II 认证,并且正在研究类可以拥有的关系。我了解组合,但我想知道作为类的类变量的集合的元素与该类之间是否存在关系。例如,考虑以下代码:

public class A 
    static ArrayList<String> strings = new ArrayList<String>();

    public A() 
        strings.add("foo");
    

我们说字符串的String元素和A类有关系吗?

【问题讨论】:

【参考方案1】:

首先,如果类A 具有像这样的简单String 字段,我们应该明确类AString 是否存在关系:

public class A 
    static String aString;

    public A() 
       aString = "foo";
    

...我想是的!那将是“has-a”房地产-A has-a String

在您的示例中,有一个 Strings 的集合。我们也可以说A 类有-a (很多;)Strings... 你可以想象A 类与String 对象有很多关系; A 类将它们聚合到集合中。这类似于众所周知的组合示例“汽车'有'***”

您也可以说这是单向的一对多关系(单向的,因为这种关系只有一方知道另一方)。

【讨论】:

【参考方案2】:

我会说是的。集合在这里几乎无关紧要,更多的是类和字符串之间“具有”关系的实现细节,而不是其他任何东西。至于这是一个类范围的关系而不是每个实例的关系这一事实,好吧,只要你知道并且这是你的意图就可以了。

【讨论】:

【参考方案3】:

是的,它是"aggregation" 或组合,取决于相关对象的生命周期。另见https://softwareengineering.stackexchange.com/questions/61376/aggregation-vs-composition

【讨论】:

【参考方案4】:

Has-a 和 is-a 是直观的概念。它们不是编译器会检查的规则。它是一种共享词汇,用于有效地与他人交流并用于做出设计决策。那么A类“有”那些字符串吗?是的,但是您很少会说您宁愿说 A 类有一个字符串集合。一个简单的类比是,当您提着一个包时,您不会立即说您在提着书,而是最有可能说您提着一个装满书的包(字符串集合)。

【讨论】:

见。取决于上下文。我们都不会错。

以上是关于与 Collection 对象具有 has-a 关系的类是不是与 Collection 的元素有关系?的主要内容,如果未能解决你的问题,请参考以下文章

继承和派生—— 类与类之间的关系继承的基本概念

Java千百问_05面向对象(006)_is-a,has-a,like-a是什么

java基础2

java中的继承(IS-A)与组合(HAS-A)关系[重复]

IS-A 和 HAS-A

4对象与类