UML 类表示

问题描述

我正在学习 UML 并想创建一个小型餐厅应用程序,该应用程序具有菜单菜单中包含的菜肴以及菜肴中使用的产品。菜单分为不同的类型,只能包含适当的类型。 我想课程菜单和菜肴应该是抽象的。 那是我的 UML 图。

enter image description here

如何最好地展示抽象类的关系?

解决方法

第一次尝试

如果我们看一下要求,即 Order 是关于 Dish 的,Dish 是由 Product 组成的,并且 {{1} } 就像某种Menu的目录,我们会得出这样的图:

enter image description here

我们将仅显示摘要 Dish 和摘要 Dish 之间的“关系”。专门的菜肴和菜单继承了这种关联。只是你必须用关联的注释来表达使用与菜单兼容的菜肴的约束。

进一步反思

问题是我们是否真的需要 Menu 专业化。如果他们有非常不同的行为,这将是合理的。

此外,在您的示例中,您假设菜单专业化是严格分离的。但是,如果在稍后阶段您会有重叠的菜单,例如主菜单包括素食、纯素和肉类菜肴,以及仅提供纯素菜肴但适用于各种菜肴的纯素菜单。

如果所有菜单专业化的行为都相同,并且这只是一种任意分类(而且,如果在实践中每个类只有一个实例),那么最好使 { {1}} 具体并将其与 Menu 类相关联。顺便说一句,您还可以将抽象 Menu 与一个或多个 Category 相关联,这样可以更轻松地表达您想要的约束。

最后,值得探索 association class 的概念并重新思考 DishCategory 之间以及 OrderDish 之间的内容。

,

我在 @Christophe 之后给出了答案,因为在他的提案(的第一个版本)中存在一些异常问题。

一个订单至少包含一道菜。但是订单不是由菜肴组成,所以没有组合,对我来说甚至也没有聚合。

一道菜由至少一种产品制成,使用一定数量的产品。根据产品的不同,数量是体积(例如液体)、重量(例如黄油)或数量(例如鸡蛋)等。为此,您可以使用类关系。关系不能是组合,因为给定的产品可以用于几道菜。

一个菜单至少包含一个菜,但一个给定的菜可以在多个菜单中使用,因此不能使用组合。在我的图表中,我使用了聚合,但这可能不是一个好主意。

假设你总是需要有专门的MenuDish类,你可以:

enter image description here

但我不确定你是否总是需要这些专业,所以 DishMenu 不是抽象的,即使它们可以有专业,你可以有:

enter image description here

(我想一道菜总是至少是一个菜单的一部分,这是一个选择,所以厨师做的“准备”而不是菜单的一部分不是一道菜)

正如@Christophe 在评论中所说,客户可以要求一些特定的说明(肉的中等与血腥等),这可以由类关系支持:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...