【问题标题】:Displaying a selection from a list in a class diagram在类图中显示列表中的选择
【发布时间】:2020-10-20 20:09:55
【问题描述】:

我正在制作一个显示以下内容的图表:

学生每天在自助餐厅点菜,他们可以选择今天的完整菜单(例如,汤、三明治、甜点、饮料),也可以只选择菜单中的部分菜品(例如,只有汤)。

如何在类图上显示它。这是我的图表。订单与菜单或订单与菜品之间应该有关系吗?

【问题讨论】:

    标签: uml modeling class-diagram


    【解决方案1】:

    订单和菜单或者订单和菜品之间应该有关系吗?

    如果你只有 OrderMenu 之间的关系,你无法知道学生不想要哪些菜,所以如果你有这种关系,你也需要表示(不)想要的 Meal 的另一个关系,但是具有该附加关系会使 OrderMenu 之间的关系无用。

    所以 OrderMeal 之间有关系,但 OrderMenu 之间没有(直接)关系.


    除此之外:

    • ordersType 有用吗?同样对其进行组合也没有任何意义,因为枚举项始终存在

    • 一个Menu与几个Meal相关,所以对应的multiplicity必须是1..*

    • 一个Pupil可以有多个Order(多重性'*'),所以看起来Menu的多个实例可以同时存在,那么一个 Meal 可以是多个 Menu 的一部分,因此相应的多重性也必须是 1..*

    • 一顿饭的价格是一个int,看起来很奇怪

    • Menu/Order 的日期是 double,看起来也很奇怪

    • PupilnumClass 是一个字符串,如果 num 表示数字就很奇怪

    【讨论】:

      【解决方案2】:

      作为对布鲁诺出色回答的补充,我想补充一下您的要求非常模糊的记录。例如:

      • 学生可以吃完整的菜单和其他项目(例如第二道甜点)吗?
      • 学生可以使用包含多次相同项目的免费菜单吗?
      • 如果在完整菜单中购买或单独购买,商品的价格是否相同? 真的有商品价格还是以菜单价格为准?
      • 菜单是否完整说明了所含餐点,还是学生必须说出他/她想要哪种汤或三明治?
      • 非完整菜单是否也由菜单实例表示(例如,是否有完整菜单、只有汤和三明治的清淡菜单等...)?

      根据您的答案,有很多可能性可以对此进行建模。例如:

      • 如果菜单只是用于选择商品而不影响商品价格,则无需在订单中引用菜单。
      • 如果菜单是无法更改的自包含产品列表,或者如果菜单是允许用户创建个性化菜单的模板,则您不需要参考订单中的平均值。
      • 在其他情况下,您可能需要对项目的引用和对菜单的引用(如果允许没有菜单价格条件的额外项目)
      • 为了获得最大的灵活性,您可以根据composite pattern 设计菜单,这允许菜单像订单中的任何其他项目一样被处理为一个项目(有价格),尽管它由几餐组成.请注意,虽然非常漂亮,但它增加了一些复杂性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-21
        • 2020-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多