我正在尝试为图书馆管理系统制作用例图。我有两个演员管理员和用户。
现在,管理员具有三个功能 manageCategories(历史、地理等书籍)、manageUser 和 manageBooks..
我正在做的是在一个函数中考虑这三个函数,manage
即manage
一个用例。
我应该如何考虑图中的三个功能 managerUser、manageBooks、manageCategories?
我应该在一个用例中使用包含或扩展这三个功能manage
,还是使用其他任何东西?
我不同意@TonyRad。
在另一个用例中包含一个用例就像说“这个用例需要另一个用例来执行”。这并不意味着实际上会调用另一个用例。例如,当用户执行时,manageBooks
他并不总是执行editUser
,但另一方面,manageBooks
如果没有实现用例,则用例是不完整的editUser
。
当扩展用例不需要扩展用例存在时,应该使用扩展用例。例如,浏览器展示了可以添加插件的扩展点。如果没有插件,浏览器将工作,但如果有,浏览器将在扩展点到来时执行它们。
在您的情况下,问题是如何向用户显示这些用例。如果用户首先必须进入“管理”屏幕,并且可以从中访问“添加用户”、“删除用户”和“编辑用户”,那么将它们建模为包含项是合乎逻辑的。另一方面,如果管理员可以直接操作这三个用例,我会从“管理”到“添加用户”、“删除用户”和“编辑用户”进行继承。
在@vainolo 对我的回答中包含的用例混淆的更正评论后进行编辑:
如果manage
用例需要可调用的用例(managerUser、manageBooks、manageCategories)以便对主要参与者有意义(产生价值),那么您应该使用包含关系。
如果参与者可以完成manage
执行零个或所有三个可调用用例(managerUser、manageBooks、manageCategories)的用例,那么您应该使用扩展关系,您可以为它们指定扩展点条件语句。
如果manage
用例是一个容器,用于组织三个可以独立执行的可调用用例,那么我将建模manage
为一个 包含三个用例的用例包,而不是一个用例本身。
请从该帖子中找到以下关于非强制执行包含用例的摘录(正如@vainolo 正确指出的那样):
第 5 点:包含用例可能是可选的
2个状态的 UML 上层结构第 16.3.5 节:
“请注意,[包含] 用例不是可选的,并且始终是 [基本] 用例正确执行所必需的。”</p>
混乱的原因
有些人似乎将此解释为在基本用例的每次执行期间都必须执行包含用例。
没有什么比真相更远了,真相很简单。
简单的真相
包含用例对于基本用例是强制性的还是可选的,取决于在基本用例中定义片段的位置,该片段现在被包含用例的包含语句替换。
如果该片段是基本用例的无条件流程(始终执行的步骤)的一部分,则包含用例是强制性的。如果该片段是条件流(可选执行的步骤)的一部分,则包含用例是可选的。
那么 UML 语句是什么意思呢?
UML 语句的目的似乎是将包含关系与扩展关系进行对比,如下所示。
在扩展点(不是针对整个基本用例),扩展用例的执行是可选的。
当基本用例的执行到达扩展点时,可能会插入扩展用例,也可能不会插入扩展用例,因为扩展关系可能附加条件。但是,在“包含点”(不是针对整个基本用例),包含用例的执行是强制性的。
当基本用例的执行到达包含点(即基本用例中的包含语句)时,将始终执行包含用例,因为没有为包含关系附加条件的规定。