我想问一个关于面向对象编程世界中聚合关系的问题。
现在我有一个由2个班组成的班级。
我们在聚合关系中知道主类有一个对聚合类的引用作为属性
但是主类除了聚合类之外不包含任何属性或方法。
这在面向对象编程的世界中是否正确
例如:
主要类叫骑士:
其他人都是马和剑。
因此骑士阶级由马和剑组成。
这是一种聚合关系......
public class knight{
private horse h;
private sword s;
// no others attributes and methods
}
我的问题:离开班级骑士没有任何属性和方法如上所述???
答案 0 :(得分:3)
是的,这是正确的,但没用。
你已经忘记了,你必须以某种方式揭露骑士的属性。字段或使用它们的一些方法应该是公开的。或者你的骑士不是骑士,而是隐士: - )
例如:
public boolean putSwordOn(Sword sword){}; //sets current sword
public boolean putSwordInSheath(){}; // uses sword
public boolean pullSwordOut(){}; // uses sword
public boolean attack(Creature target){}; // uses sword
public void kissSwordAndSwearToServe(Knight senior); // uses sword
public boolean climbHorse(Horse horse){}; // sets current horse
public boolean gallop(Point direction){}; // uses horse
此外,您在术语方面存在问题。此类连接(包含a)由 association
显示。这在类图上用实线显示,可能带有点或菱形或箭头。 association
有一些 aggregation
。它是关于该类型的多少个实例属于该字段以及它们是如何属于的。 aggregation
可以是 composition
, shared
或 none
。我们可以说 association
的 aggregation
类型为 none
,但要命名为“聚合” “具有 none
聚合的内容显然是不正确的。所以,您谈论的是 association
关系。
答案 1 :(得分:2)
是的,为什么不呢?
绝对没有理由说这不正确。