【问题标题】:draw UML class diagram with Service classes用服务类绘制 UML 类图
【发布时间】:2018-10-20 08:17:31
【问题描述】:

这是一个大系统的小场景。 我想在类图中建模这个场景,然后在代码中实现它

这是书店的场景。有顾客和书 客户可以买书,按名字搜索书,看书

类图的实现方式如下

1.将所有操作放到客户类,因为客户是执行这些操作的人 但buyBooks(),searchBook(),readBooks() 方法不负责改变客户类的状态 (这些方法不适用于客户类内部的数据)因为它违反了基本的 oop 原则封装。

客户可以购买、搜索、阅读 1 本书或更多本书,因此关联标记如图所示。

我发现很多类图在引用 INTERNET 时都是这样绘制的

2。 将所有操作放在与上述相同的客户类中。 并分别标记每个关联,用三个单独的行

协会

  • 客户可以购买一本或多本书籍
  • 客户可以搜索一本或多本图书
  • 客户可以阅读一本或多本书籍

3.这里将所有操作都放到服务类中,因为这些方法不负责改变客户、预订类的状态

然后标记关联。

- 这些中哪一个是正确的类图?
- 可以在 uml 类图中绘制服务类吗?

【问题讨论】:

  • 您描述了您的实现,但没有描述您的要求。但后者是设计的驱动力。

标签: oop uml behavior ooad


【解决方案1】:

我认为第一个或最后一个图表都可以工作(一旦更正),但我倾向于第一个实现。第二个是完全错误的。

我会使用第一个,因为“客户”意味着一个人在系统中的唯一目的是与您的 Book 类进行交互,特别是考虑到您的多重性值表明客户必须与至少一个相关联书课。如果客户做的事情多于与书籍的交互,那么将客户对书籍所做的事情抽象为服务可能会很有用,但我认为这里没有必要。

现在,您的类图语法已关闭。箭头应该是打开的(如>)而不是实心的。此外,您在 Book 类上的多重性值似乎是错误的:如果尚未购买书籍实例,则可能有零个与之关联的客户,如果已购买,则可能有一个与之关联的客户。如果是这样,那么您在书尾的多重性值应该是0..1

最后,您的第二张图是错误的,因为关联是按类而不是按操作;您不会为每个操作设置一个关联,而是为每个类设置一个关联。

【讨论】:

  • 我什至不相信它需要任何关联。根据需求,我无法确定是否需要在客户和图书之间建立永久关系。如果所有客户需要能够阅读/购买/搜索,那么书籍可以作为参数传递。这可以描述为依赖关系。
  • 打开箭头?概括?不,我也想知道你如何在不知道要求的情况下提出设计建议。
  • @ThomasKilian 打开箭头,分两行,类似于:>,表示单向关联。泛化当然是一个白色三角形。至于您想知道的是,第一个图表模拟了 OP 第二段中给出的规范,不是吗?
  • 咳咳,是的:-[这个箭头(图片会说得更多;请把上面的答案放在答案中)。但没有给出要求。 2 下有 3 个项目符号,但这不是我期望的要求。他们需要在开始。
  • 我同意@geertbellekens,到目前为止,OP 提供的描述并未表明任何书籍关联,它只是可能是一个依赖项。正如 Thomas Kilian 所写,要回答这个问题,我们应该更好地理解需求。根据要求,所有三个图表可能都是正确的。也可能两者都不正确。无论如何,我敢打赌,一分钱既不能准确代表 OP 的需求,至少在没有重大修正的情况下(并且使用 proper 只是众多因素中的第一个)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多