目前,我正在尝试设计一个可执行活动,其中逻辑组件向其他几个逻辑组件发送请求以启动初始化。活动图中通常的方法是为每个块创建一条游泳线。但是,由于LCs的数量很高,在这种情况下,图将是非常大的,而且它以后的修改也将是一个障碍。
在编程中,这个问题的解决方案是多态,将对象作为母类抛出并推入向量,然后在循环中调用母类的抽象函数。
我想知道sysml中是否有类似的解决方案?
我试着给所有的LCs分配一条泳线,而LCs重新请求,但似乎每条泳线只能分配给一个块。
发布于 2022-04-06 17:44:30
是的,也有类似的解决办法。实际上,这更容易。只要让ActivtyPartition表示一个多重性大于1的属性,那么这个分区中的任何InvocationAction都意味着对该属性中的所有实例进行并发调用。
UML规范说明了这一点:
第15.6.3.1节活动分区
如果该属性包含多个值,则调用将被视为是对每个值并发进行的,并且在其所有并发实例完成之前,调用不会完成。
典型的InvocationActions是CallActions和SendSignalActions。因此,可以在表示属性initialize()的分区中调用myLogicalComponents:LC[1..*]操作。
如果您还没有定义这样的属性,您可以通过使它成为一个派生的联合来派生它,然后用要初始化为它的子集的组件来定义所有现有属性:
/myLogicalComponents:LC[1..*]{union}
LC1:LC {subsets myLogicalComponents}
LC2:LC {subsets myLogicalComponents}当然,这假定您的所有逻辑组件都是专门化的LC,因此它们都继承和重新定义了initialize()操作。
在SysML中也有AllocateActivityPartitions。它没有描述清楚的语义,所以我认为更好的服务于UML,它也包含在SysML中。
https://stackoverflow.com/questions/71702310
复制相似问题