【问题标题】:Is my code correct? UML-> Java translation我的代码正确吗? UML-> Java 翻译
【发布时间】:2014-02-18 15:39:30
【问题描述】:

我刚刚浏览了一些 UML 图表的示例,它们被翻译成 Java,而我被困在了这一点上。 我将图表作为参考:

由于我是 Java 编程的新手,所以我在这段代码中不明白:为什么我必须添加 LinkedList? Gehege右上角的T:Tier是什么意思? (Gehege=动物园,Tiere=德语动物)

public class Tier {
    private int anzahlbeine;
    private String farbe;

    public Tier(int anzahlbeine, String farbe) {
        this.anzahlbeine=anzahlbeine;
        this.farbe=farbe;
    }

    public void laufen (double strecke) {
        System.out.println(strecke);
    }

    public void fressen () {
        System.out.println("I eat");
    }
} 

和

public class Gehege <T extends Tier> {
    private int kapazitaet;
    private double groesse;
    private LinkedList<T> tiere;

    public Gehege(int kapazitaet, double groesse) {
        this.kapazitaet=kapazitaet; 
        this.groesse=groesse;
    }

    public void addTier(T tier) {
        if (this.kapazitaet>this.groesse.size) {
            this.tiere.add(tiere);
        }
        else { throw new Exception RunTimeException ("Full"); }
    }

    public void removeTier(T tier){
        this.tiere.remove(tier);}
}

http://i.imgur.com/f1Ii41X.png 提供更高质量的图片

【问题讨论】:

  • throw new Exception RunTimeException ("Full"); 此行无法编译。你的缩进和括号放置真的让我失望。尝试在放置它们的位置上保持一致。不过,快速浏览一下,您的代码与提供的 UML 图一致(至少从您提供的内容来看)

标签: java generics linked-list uml add


【解决方案1】:

Gehege右上角的T:Tier是什么意思?

这意味着Gehege 使用Tier 模板化。尽管一切在语法上都是正确的,但在语义上却是不正确的。可以有不同种类的Geheges 持有不同种类的东西吗?这看起来不太对劲!

以List 为例。 List 是模板化的,因为可以有不同类型的对象的列表,例如 - Car 的 List、Book 的 List 等。将相同的东西应用于 Gehege - 逻辑很平坦。因此,在我看来,这个设计在语义上是不正确的。

【讨论】:

  • 为什么不呢?我可能会误解这一点,但是拥有Elefants(大象)的Gehege(动物园)或Tausendfuesslers 的Gehege 是否有意义?
  • 那么,Gehege 具有Elefants 和Tigers 的一般情况呢?你如何使用这个模型来实现它?
【解决方案2】:

您必须将LinkedList&lt;T&gt; 类型的多值引用属性tiere 添加到类Gehege 以实现Gehege 和Tier 之间的关联/聚合,它将许多Tier 实例与一个关联Gehege 实例。按照约定,此属性的名称是关联类的小写复数名称 (Tier)。

事实上,最好不要通过使用List 接口作为多值引用属性的类型来选择LinkedList 还是ArrayList。因此,它应该是相当

public class Gehege <T extends Tier> {
  ...
  private List<T> tiere;
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多