Java 依赖和组合之间的区别?
依赖性Java 依赖和组合之间的区别?,java,oop,dependencies,uml,composition,Java,Oop,Dependencies,Uml,Composition,依赖性 class Employee { private Address address; // constructor public Employee( Address newAddress ) { this.address = newAddress; } public Address getAddress() { return this.address; } public void setAddress(
class Employee {
private Address address;
// constructor
public Employee( Address newAddress ) {
this.address = newAddress;
}
public Address getAddress() {
return this.address;
}
public void setAddress( Address newAddress ) {
this.address = newAddress;
}
}
类的结构或行为的变化会影响其他相关的
类,则这两个类之间存在依赖关系。它需要
不一样,反之亦然。当一个类包含另一个类时,它将
这种情况经常发生
构图
final class Car {
private final Engine engine;
Car(EngineSpecs specs) {
engine = new Engine(specs);
}
void move() {
engine.work();
}
}
组合是聚合的一种特殊情况。以更具体的方式
以这种方式,受限聚合称为组合。当一个物体
包含另一个对象(如果包含的对象不存在)
如果容器对象不存在,则调用它
组成
Java中来自和的具体示例
依赖性
class Employee {
private Address address;
// constructor
public Employee( Address newAddress ) {
this.address = newAddress;
}
public Address getAddress() {
return this.address;
}
public void setAddress( Address newAddress ) {
this.address = newAddress;
}
}
构图
final class Car {
private final Engine engine;
Car(EngineSpecs specs) {
engine = new Engine(specs);
}
void move() {
engine.work();
}
}
简言之:
多亏了Marko Topolnik
的帮助
依赖关系
发生在一个对象“依赖”另一个对象时。这两个对象之间可以有关系也可以没有关系。实际上,一个对象甚至可能不知道另一个对象存在,但它们可能是依赖的。
例如:生产者-消费者问题。生产者不需要知道消费者存在,但它必须执行wait()和notify()。所以,“不”,依赖性不是关联的子集Composition
:是一种关联类型,其中“子”对象在没有父类的情况下无法存在。i、 例如,如果子对象存在,那么它必须位于父对象中,而不是其他任何位置
汽车(父母)有燃油喷射系统(孩子)。现在,在车外安装燃油喷射系统是没有意义的(这将是没有用的)。i、 燃油喷射系统离不开汽车聚合
:在这里,子对象可以存在于父对象之外。
汽车有司机。司机可以存在于车外可以在两个构造函数中看到差异:
- 依赖关系:
对象来自外部地址
地址
和员工
对象分别存在,并且只有相互依赖
引擎
在车内创建。引擎
对象是汽车
的一部分。这意味着汽车
由发动机
组成依赖关系是指仅在功能范围内使用对象。换句话说,类的实例只存在于包含类的函数(或方法)中,并在函数退出后销毁 您为Dependency给出的示例不是一个Dependency,因为Employee类包含一个地址实例,这称为聚合。聚合类似于合成,只是对象也可以存在于使用它的类之外。(它可以位于classes范围之外)。 在您的示例中,您将地址的副本传递给员工构造函数。但是,由于它是在Employee对象之外创建的,因此该地址也可能存在于程序中的其他位置
与聚合一样,组合是组件对象可用于整个复合对象的地方。这意味着复合对象的所有方法/函数都可以访问组件对象。聚合和组合之间的唯一区别在于,在组合中,组件对象只存在于复合对象内部,而不存在于程序中的其他位置。因此,当复合对象被销毁时,给定的组件对象也被销毁,并且不能存在于其他任何地方。在您的示例中,汽车是一个复合对象,发动机是一个组件,因为发动机的实例仅存在于该特定汽车中,而不存在于其他任何地方。这很有趣。这里面有什么问题吗?也许是在标题里,那些定义的质量很差。例如:“…这两个类之间的依赖关系”“它不一定是相同的,反之亦然”,但“between”是一种无向关系——从术语between的定义来看,它是相同的,反之亦然。你能给我一个代码示例吗:)@MarkoTopolnik一个依赖性和组合的示例,我可以清楚地理解其中的差异。在代码中,如果可能的话,你是说一个组合是一个依赖项的子集吗?是的。。。依赖性是一个通用术语。。组合/聚合/继承导致依赖性。虽然我认为关联是一个比依赖更好的术语。你能告诉我这个词的来源吗?因为我得到的两个答案互相矛盾。此外,它们在UML中的表现也不同,例如,在类图中应该使用哪一种?如果依赖关系的定义是“结构/行为的变化影响类”,那么类之间就不应该有聚合或任何其他类型的关系。例如,他们可能都访问相同的第三个对象,并且必须就使用该对象的方式达成一致。典型的例子:生产者/消费者模式。从上面的评论中引用我自己的话:典型的例子:生产者/消费者模式。生产者和消费者都聚合一个队列对象,但在其他方面完全解耦,彼此不了解。然而,改变生产者的行为将影响(并可能破坏)消费者的行为。那么依赖性==聚合@dani-h否,
聚合
和组合
描述了事物是如何构建/构造的,而依赖性
更像是某种结构的属性。请看@TheLostMind的伟大答案。