gpt4 book ai didi

uml - 事件图 : Reusing Activity/Action With different inherited type of object flow as output

转载 作者:行者123 更新时间:2023-12-02 02:09:55 24 4
gpt4 key购买 nike

我有一个关于事件图建模的问题,这个问题已经困扰我一段时间了,我无法在任何地方找到任何答案/约定。

这是一个可以更好地理解我的问题的示例:

假设我有两个类,名为“公寓”和“房子”。两者都是“住房”类别的概括。住房包含居住在其中的人的“居民”属性。公寓包含一个属性“floor”,表示公寓位于哪一层。

这是类图: class diagram of what is explained above

在事件图中,我想表示为人们提供住房的行动。此操作可以将房屋或公寓作为输入(因此我认为输入引脚使用“房屋”类型是正确的)以及未定义的人数。我希望此操作能够提供更新的房屋或公寓作为输出(不是更新的房屋,因为这意味着特定于房屋或公寓的信息将丢失。我真的不知道是否必须创建两个操作(一个用于房屋,另一个用于公寓),或者是否有办法为两个类重用该操作并从中获得正确的输出。

这是事件图: Activity diagram of what is explained above

我的问题是:如何在事件图中表示对于不同类型的对象流相同的操作作为输入,并将更新的对象流作为输出(可能是因此不同类型)?

注意:

  • 所有类型的对象流都是类,并且继承自同一个其他类。
  • 我在 modelio 中表示了这个问题,但首先在 Cameo 中遇到了这个问题。
  • 我正在努力尽可能地遵守 UML 语言的规则。

最佳答案

卡梅奥拒绝这种模式是正确的。 Give Flat Floor 需要公寓,不能与 House 一起使用,但 Assign Resident to Housing 可以返回 House。我知道,在您的上下文中它只能返回 Flat,但是该工具应该如何知道这一点?

捕捉这一事实的正确方法是向 Activity Assign Resident to Housing 添加一个后置条件,声明输入和输出引脚的类型相同。

但是,定义一套完整的兼容性规则来考虑所有全局和局部前置条件和后置条件确实非常困难,并且工具也很难根据这些规则来验证模型。因此,UML 规范选择了简单的方法,根本不允许连接引脚。

解决方案是使用ObjectFlow的transformation属性。只需指定一个 OpaqueBehavior,将 House 类型转换为 Flat 类型。然后 Cameo 将接受该模型。建模者有责任确保此转换始终有效,因为此处无法定义异常处理。也许这应该用本地后置条件来记录。

在您的具体示例中,有一个更简单的解决方案:只需 fork Flat 类型的 ObjectFlow 并省略 将 Resident 分配给住房 的 OutputPin。

作为旁注:由于 Cameo 中的错误,您可以将 OutputPin 的类型更改为比 ActivityParameter 的类型更具体的类型。这对于输入引脚来说是正确的,但对于输出引脚来说应该相反。您可以使用它来让参数为 House 类型,但 OutputPin-Type 将为 Flat。

关于uml - 事件图 : Reusing Activity/Action With different inherited type of object flow as output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67860329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com