uml-include或extend

时间:2012-12-03 13:30:14

标签: uml use-case ooad

我正在尝试为图书馆管理系统制作一个用例图。我有两个演员管理员和用户。

现在,管理员有三个功能manageCategories(如历史,地理等书籍)manageUser和manageBooks ..

我正在做的是在单个函数manage中考虑这3个函数,即manage是一个用例。

我应该如何考虑图表中的三个函数managerUser,manageBooks,manageCategories?

我应该在单个用例manage中使用include或扩展这三个函数,还是使用其他任何东西?

enter image description here

2 个答案:

答案 0 :(得分:2)

我不同意@TonyRad。

在另一个用例中包含一个用例就像是说“这个用例需要执行其他用例”。这并不意味着实际上会调用其他用例。例如,当用户执行manageBooks时,他并不总是执行editUser,但另一方面,如果没有manageBooks用例,则editUser用例不完整1}}用例。

当扩展用例不需要扩展用例时,应使用扩展用例。例如,浏览器展示了可以添加插件的扩展点。如果没有插件,浏览器将会工作,但是当有扩展点时,浏览器将执行它们。

在您的情况下,问题是如何向用户显示这些用例。如果用户首先必须进入“管理”屏幕并且他们可以访问“添加用户”,“删除用户”和“编辑用户”,那么将它们建模为包含是合乎逻辑的。另一方面,如果管理员可以直接操作这三个用例,我会继承“管理”到“添加用户”,“删除用户”和“编辑用户”。

答案 1 :(得分:0)

在@vainolo关于我的答案中包含的用例混淆的修正评论之后编辑

如果manage用例需要可调用用例(managerUser,manageBooks,manageCategories)以便为主actor有意义(产生值),那么您应该使用include关系。

如果actor可以完成执行零个或全部三个可调用用例(managerUser,manageBooks,manageCategories)的manage用例,那么你应该使用extend关系,你可以指定扩展名为他们指出条件陈述。

如果manage用例是用于组织可以独立执行的三个可调用用例的容器,那么我将manage建模为{{{ 3}}包含三个用例而不是用例本身。


请从Use Case Package中找到以下关于非强制执行所包含用例的摘录(正如@vainolo正确指出的那样):

  

第5点:包含用例可以是可选的

     

UML超级结构声明post个状态的第16.3.5节:

     

“请注意,[includes]用例不是可选的,并且始终是   [base]用例正确执行所必需的。“

     

引起混淆的原因

     

有些人似乎认为这意味着包含使用   必须在基本用途的每次执行期间执行   案件。

     

事实并非如此,事实很简单。

     

简单的事实

     

包含用例是强制性的还是   基本用例的可选项取决于基本用例中的位置   片段已定义,现在已替换为include语句   对于包含用例。

     

如果该片段是基本用例的无条件流的一部分   (总是执行的步骤),包含用例是强制性的。   如果该片段是条件流的一部分(步骤得到   可选地执行),包含用例是可选的。

     

那么UML语句是什么意思?

     

似乎是UML语句的目的   将包含关系与扩展关系进行对比,   如下。

     

在扩展点(不是整个基本用例),   扩展用例的执行是可选的。

     

当基本用例的执行到达扩展点时,a   可能会或可能不会插入扩展用例,因为可能存在   附加到延伸关系的条件。然而,在   “包含点”(不适用于整个基本用例),包含   用例的执行是强制性的。

     

当基本用例的执行到达包含点时   (即基本用例中的包含声明),包含使用   案件将始终执行,因为没有规定   将条件附加到包含关系。