【问题标题】:uml-include or extenduml-包含或扩展
【发布时间】:2023-04-05 12:38:01
【问题描述】:

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

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

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

我应该如何考虑图中的三个功能managerUser、manageBooks、manageCategories?

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

【问题讨论】:

    标签: uml use-case ooad


    【解决方案1】:

    在纠正 @vainolo 的 cmets 关于我的回答中包含的用例混淆之后进行编辑:

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

    如果参与者可以完成manage用例执行零个或所有三个可调用用例(managerUser、manageBooks、manageCategories),那么您应该使用extend关系并且您可以指定扩展点条件语句他们。

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


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

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

    2 的 UML 上层结构语句第 16.3.5 节指出:

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

    造成混淆的原因

    有些人似乎将此解释为包含使用 必须在每次执行基本用途期间执行案例 案例。

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

    简单的事实

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

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

    那么 UML 语句是什么意思?

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

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

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

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

    【讨论】:

    【解决方案2】:

    我不同意@TonyRad。

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

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

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

    【讨论】:

    • +1 指出了我的回答中的困惑(已更新)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多