我正在尝试为图书馆管理系统制作一个用例图。我有两个演员管理员和用户。
现在,管理员有三个功能manageCategories(如历史,地理等书籍)manageUser和manageBooks ..
我正在做的是在单个函数manage
中考虑这3个函数,即manage
是一个用例。
我应该如何考虑图表中的三个函数managerUser,manageBooks,manageCategories?
我应该在单个用例manage
中使用include或扩展这三个函数,还是使用其他任何东西?
答案 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 可能会或可能不会插入扩展用例,因为可能存在 附加到延伸关系的条件。然而,在 “包含点”(不适用于整个基本用例),包含 用例的执行是强制性的。
当基本用例的执行到达包含点时 (即基本用例中的包含声明),包含使用 案件将始终执行,因为没有规定 将条件附加到包含关系。