【问题标题】:uml to java code conversion conventionuml 到 java 代码转换约定
【发布时间】:2012-02-20 17:30:15
【问题描述】:

请忽略除末尾写有 1..1 或类似内容的单个简单箭头之外的任何其他箭头

我参考了许多网站和许多介绍 UML 2.0 的书籍 我遇到了两个使用的约定

当两个类用一条没有箭头的线连接,并且1..1、1..*等写在行尾时,那么

假设在加入 purchasePlan 和 User 的行结束时,术语是 1..* 而不是 0..*

1)按照一种约定,我们根据图表在User类中创建PurchasePlan对象的数组,在PurchasePlan中创建一个User对象

2) 根据第二个约定,我们只在 User 中创建 purchaseplan 对象数组,而不在 PurchasePlan 中创建用户对象

那么哪种约定是最广泛使用的还是标准的呢?

【问题讨论】:

    标签: java class coding-style uml convention


    【解决方案1】:

    您正在查看的是bi-directional association。这意味着约定 (1) 适用于这种关系。如果关联有箭头,则适用第二种方法。

    "0..*" 的意义在于用户可以没有参考的购买计划(即其 PurchasePlan 数组可以为空)。每个 PurchasePlan 中的相应 User 字段仍需要填充(不为空)以遵守双向关系;这拒绝了“孤立”购买计划的可能性。

    【讨论】:

    • 我现在很困惑,如果1..*连接在两个类之间,究竟是什么意思?
    • 多重性 1..* 表示“至少一个实例”。这意味着用户总是需要引用至少一个或多个 PurchasePlan 才能有效。请参阅我提供的链接:uml-diagrams.org/multiplicity.html
    • 好的,那么 1..1 意味着一个实例,我将它与购买计划中的一个用户实例和用户中的一个购买计划混淆了,还是我的概念错误?
    • 不,你第一次是完全正确的。 “此关系中只有一个实例”,因此两个实体中只有一个引用。基数仅适用于它旁边的关联线。
    【解决方案2】:

    第一个选项会创建一个循环依赖。这是不鼓励的,因为您获得了更高的耦合并且代码的可维护性退化。您的两个选项是在您的用户中创建购买计划的集合或在每个购买计划中创建单个用户。您使用哪一个取决于您的域。问问自己是否必须更频繁地为用户获取所有 PurchasePlan 或相反。

    【讨论】:

    • 请假设每个箭头都只是一个简单的箭头,说明一对一或多对一的这种关系,而不是用户和会话之间的风筝形状的东西
    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多