【问题标题】:How to implement a UML class diagram in Java [closed]如何在 Java 中实现 UML 类图 [关闭]
【发布时间】:2021-07-15 10:25:25
【问题描述】:

我要把这个类图转换成java代码:

我是这样实现的:

public class domandaAperta {
       
    private String rispostaCorretta;

    public opzione[] m = new opzione[2][5];
    
                  ..............

}

public class opzione {

        private String testo;
                 ..............
}

我的代码正确吗?

【问题讨论】:

  • 显然你没有实现opzione(为什么是小写??)。你也没有实现method(这是一个很好的操作名称)。此外:为什么是10?只需要 5 个。另请注意,SO 不是检查作业的地方。
  • @qwerty_so 我想我融化了,我编辑了帖子,10 因为 2*5
  • 2*5=10 当然。但是你从哪里得到乘以二?
  • 您可能想要阅读 UML 基础知识。多重性[2..5] 表示每个domandaAperta 实例将链接到至少2 个和最多5 个opzione 实例
  • 另外,在有人花时间写完答案后完全改变你的问题是一种粗鲁的行为。通过编辑您的代码(基于给出的答案),您完全使答案无效。

标签: java uml associations class-diagram


【解决方案1】:

你的代码是否正确:它编译了吗?

您的代码无法编译:

public type method(type)     // ouch! 

这是无效的,因为 Java 会将 type 理解为一种类型(例如 Stringint、类名……),并且会期望后面跟着一个标识符。

为您辩护,UML 图在这方面也无效,因为参数应该采用argumentName : argumentType 的形式。如果可以容忍对 UML 规范的偏离,那么type 代表什么仍然不清楚:名称或类型(即使我们可以猜到,后者)。

修正后,代码仍然无法编译,因为另外两个错误:

  • Java 区分大小写,domandaAperta 未知,而DomandaAperta 定义明确。
  • 这两个方法必须返回一个type,即使它不是有用的结果。

为了您的辩护,UML 图对两个类使用小写命名,而传统是在 Java 中使用大写类名。你没有义务,但无论你选择什么,都要保持一致。

您的代码是否正确:是否符合 UML 设计?

导航关联确实通常使用domandaAperta 中的某种optione 集合来实现,因为多重性的上限大于1。

图表中没有显示可见性:您选择了公开,这没有错。但是,我建议它默认保持私有。

一个更值得怀疑的问题是您使用 5 个元素的数组(即 new opzione[5])初始化 m。好的,然后您最多可以分配 5 个不同的opzione。但没有什么能阻止代码添加更多项目。此外,很难知道真正分配了多少项,以及未分配多少项。

更安全的方法是创建一个包含 2 个项目的数组,因为必须至少有 2 个并分配这些项目。显然,如果 m 是私有的,并且具有添加或删除项目的方法,并确保多重性保持在预期范围内,您会更好。

另一个问题是从opzione 回到domandaAperta 的方式。您已经实现了它,但图表对此保持沉默:可导航性仅在一个方向上是明确的。

注意:domandaAperta 的多重性未指定。您没有理由预见一个包含 2 个元素的数组。现在您的代码表明您可能将多重性 2..5 误解为一侧为 2,另一侧为 5?这是不正确的:2..5 表示 2 到 5 个元素。

您的代码是否正确:它是否产生有意义且准确的结果?

我们不知道,因为我们不知道它应该做什么以及你将如何实现它;-)

【讨论】:

  • 你好,谢谢你的回答,但在这个练习中,我只需要在 java 中翻译 uml 图,我知道它是如何翻译的,但我的问题是在 java 中表示关联 2 ... 5,所以正如你所说,你必须创建一个这样的多维数组: Opzione[][] Opzione = new Opzione[2][5];来自domandaAperta
  • @saretta2 在java中你不能像我所知的那样为数组创建硬边界。在结构上拥有数组但使用 optione[2] 对其进行初始化将满足最低要求。 [2][5] 在这里是二维的并且是错误的。实现这一点的方法不止一种。但是你必须至少有 2 个,构造函数接受 2 个选项参数并相应地初始化数组似乎是合乎逻辑的。只能通过检查添加项目的操作(例如 addOpzione())来施加上限,但没有定义这样的操作。
  • @saretta2 还有一种方法是使用一个构造函数,该构造函数将选项数组作为参数,检查是否至少有 2 个并将最多 5 个复制到本地数组中。
  • 好的代码你能告诉我怎么做吗?
  • @saretta2 我不会为你做这个练习。但是这里有一个关于 Java 构造函数的提示:w3schools.com/java/java_constructors.asp,这里有一些关于将数组参数传递给方法(构造函数也是如此)和访问它们的项目数的提示:tutorialspoint.com/How-to-pass-Arrays-to-Methods-in-Java - 最后,这里是如何处理如果参数的长度无效:stackoverflow.com/q/6086334/3723423。希望这可以帮助。现在由你决定。与 UML 无关的其他 java 实现问题应在单独的问题中处理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多