Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 用服务类绘制UML类图_Oop_Uml_Behavior_Ooad - Fatal编程技术网

Oop 用服务类绘制UML类图

Oop 用服务类绘制UML类图,oop,uml,behavior,ooad,Oop,Uml,Behavior,Ooad,这是一个大系统的小场景。 我想在类图中对这个场景建模,然后在代码中实现它 这是书店中的一个场景。有客户和书籍 客户可以购买书籍、按名称搜索书籍和阅读书籍 类图以以下方式实现 1.将所有操作放在customer类中,因为customer是执行这些操作的人 但是buyBooks()、searchBook()、readBooks()方法不负责更改customer类的状态 (这些方法不处理customer类内部的数据)因为它违反了基本的oop原则封装 客户可以购买、搜索、阅读一本或多本书,因此关联标记如

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

这是书店中的一个场景。有客户和书籍 客户可以购买书籍、按名称搜索书籍和阅读书籍

类图以以下方式实现

1.将所有操作放在customer类中,因为customer是执行这些操作的人 但是
buyBooks()、searchBook()、readBooks()
方法不负责更改customer类的状态 (这些方法不处理customer类内部的数据)因为它违反了基本的oop原则封装

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

我在网上发现很多类图是这样画的

二,。 将所有操作置于与上述相同的customer类。 并用三行分别标记每个关联

联想

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

3.在这里,将所有操作放到服务类,因为这些方法不负责更改customer和book类的状态

然后是马克协会

-在这些图中,哪一个是正确的类图?

-在uml类图中绘制服务类可以接受吗?

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

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

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


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

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

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

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


最后,您的第二个图表是错误的,因为关联是按类而不是按操作进行的;您没有为每个操作建立关联,而是为每个类建立关联。

您描述了您的实现,但没有描述您的需求。但后者才是设计的驱动力。您描述的是您的实现,而不是您的需求。但后者才是设计的动力,我甚至不认为它需要任何关联。根据这些要求,我无法确定是否需要在客户和书籍之间建立永久关系。如果客户需要的只是能够阅读/购买/搜索,那么可以将书籍作为参数传递。这可以被描述为一种依赖关系。打开箭头?一般化不。我还想知道,在不知道需求的情况下,您如何给出设计建议。@ThomasKilian开放式箭头有两行,类似于:
,表示单向关联。泛化当然是一个白色三角形。至于你想知道的是什么,第一个图表模拟了OP第二段中给出的规范,不是吗?嗯,是的:-[这个箭头(一张图片会说得更多;请在答案中加入上面的内容)。但是没有给出要求。2下有3个项目符号,但这不是我期望的要求。它们需要在开始时就出现。我同意@geertbellekens,OP提供的描述没有指出任何书籍关联,它可能只是一种依赖关系。正如Thomas Kilian所写,回答这个问题我们应该tter了解需求。根据需求,所有三个图表可能都是正确的。也可能两者都不正确。无论如何,我敢打赌,这两个图表都不能准确地表示OPs需求,至少在没有重大更正的情况下是如此(使用正确的图表只是众多图表中的第一个).我甚至不认为它需要任何关联。根据这些要求,我无法确定是否需要在客户和书籍之间建立永久关系。如果客户需要的是能够阅读/购买/搜索,那么书籍可以作为参数传递。这可以描述为依赖项。开放箭头?泛化?不。我也不知道您如何给出一个