与 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
字段,我们应该明确类A
和String
是否存在关系:
public class A
static String aString;
public A()
aString = "foo";
...我想是的!那将是“has-a”房地产-A
has-a String
。
在您的示例中,有一个 String
s 的集合。我们也可以说A
类有-a (很多;)String
s... 你可以想象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是什么