【问题标题】:Aggregation relationship in class diagram?类图中的聚合关系?
【发布时间】:2015-11-05 16:43:45
【问题描述】:

我想问一个关于面向对象编程世界中聚合关系的问题。

现在我有一个由 2 个类组成的类。

在聚合关系中我们知道主类有一个对聚合类的引用作为属性

但主类不包含任何属性或方法,除了聚合类。

这在面向对象编程的世界中是否正确

例如:

称为骑士的主要职业:

其他的是马和剑。

所以骑士职业是由马和剑组成的。

这是一个聚合关系...

public class knight{
private horse h;
private sword s;

// no others attributes and methods
}

我的问题:离开类骑士没有任何属性和方法如上正确???

【问题讨论】:

  • 为什么要投反对票?这是一个正确的问题,完全被问到了。 +1。

标签: java oop uml class-diagram


【解决方案1】:

是的,没错,但没用。

你忘记了,你必须以某种方式暴露骑士的属性。使用它们的字段或某些方法应该是公开的。或者你的骑士不是骑士,而是隐士:-)

例如:

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

另外,你的术语有问题。 association 显示了这种连接(有一个)。这在类图上用实线表示,可能带有点、菱形或箭头。 association 有一些 aggregation。它是关于该类型的实例有多少属于该字段以及它们如何属于。 aggregation 可以是 compositionsharednone。我们可以说这个 associationaggregation 类型为 none,但要命名为“聚合”,它具有 none 聚合显然是不正确的。所以,你说的是 association 关系。

【讨论】:

  • 非常感谢先生的回答,但我还有一个问题。你说它是正确的,但没用。现在,如果这个类在编写我的代码时永远变得无用。你认为这也是正确的吗? ...现在我只想从主类(骑士)访问马和剑类...使剑和马抽象是一个好主意???
  • 1.您有权创建无用的课程。它对于训练和演示它的问题很有用。 2. 至于为字段使用抽象类,是的,这是非常常见和现代的方式。您将它们声明为最常见的东西 - 作为一些接口或抽象类,但您将它们创建/构造为一些可实例化的类。 List list=new ArrayList() 。我不认为剑和马应该是抽象类。但是你可以创建抽象类 Weapon 和 Steed。
  • 所以你认为更好地使用主类的方法来使其有用?
  • 1.请编辑您的帖子并更改关联的聚合。保持您的问题没有不必要的错误。 2. 如果你的类做某事,你可以通过调用它的函数让它做。或者您可以创建公共内部类,公开 ITS 功能并从内部访问外部类。这是可能的,但很脏。即使你的课只是为了说明,你的老师也会问:你想怎么用?类在历史上是作为一组字段和方法出现的,没有方法的类是很特别的东西。
【解决方案2】:

是的,为什么不呢?

绝对没有理由不正确。

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多