是间接继承的方法,应该从不直接实现包含接口的类访问

Are indirectly inherited methods supposed to be accessed from a class that does not directly realize the containing interfaces

提问人:GiatManos 提问时间:10/19/2023 最后编辑:ChristopheGiatManos 更新时间:10/21/2023 访问量:50

问:

我有下面的组件图,其中组件的接口SWC1_Interface被分解为多个接口(此处仅显示一个接口),这些接口分解了主组件接口提供的功能,只是为了将 API 分组到逻辑组中。Class1 实现了SWC1_Interface_SubGrouping。

My dummy component diagram and interface analysis/decomposition

然后,我绘制一个序列图,并尝试指定从 Class1 实例请求的消息。在下拉列表中,我可以看到 api1(),它是 Class1 的一个方法,并且在那里是预期的,但我也可以看到组件图中实现序列的所有间接继承方法。

My dummy sequence diagram

我的问题是:

  1. 我的组件图是否符合 UML 标准,我可以做些什么来改进它?
  2. 像这样“分解”接口有意义吗?
  3. EA 的行为,将间接继承的消息显示为消息中的选项,是否“正常”和明智?
  4. 有没有办法在 EA 中改变这种行为,阻止间接继承的操作在序列图中显示为消息的选项?
接口 UML Enterprise-Architect 组件图

评论

1赞 qwerty_so 10/20/2023
你使用实现,而不是泛化......

答:

3赞 Christophe 10/20/2023 #1

1. 尊重UML

从语法的角度来看,它看起来几乎是正确的。但不幸的是,这并不意味着你所想的:

  • 如果是组件提供的接口,则表示法要么是棒棒糖,要么是接口实现箭头(尾部的组件,头部的接口),而不是关联(这意味着组件与实现接口的分类器相关联)SWC1_Interface
  • 很有可能,接口不应该实现接口,而是从它继承(明线而不是虚线)。SWC1_Interface_subgroupingSWC1_Interface
  • 更有可能的是,分解应该在另一个方向上。事实上,如果会继承自 ,它将具有 的所有特征,甚至更多。你想说的是,实际上实现了一个或多个其他接口,从而将每个接口的功能相加。SWC1_Interface_subgroupingSWC1_InterfaceSWC1_InterfaceSWC1_Interface

2. 分解接口有意义吗

这是有道理的。例如,您可以想象一个组件提供的接口是两个不同接口和 的组合。PrintableAndSortablePrintableSortable

然而,接口隔离原则表明,在许多情况下,从设计的角度来看,这可能不是一个好主意。

3. 间接继承的消息

所有间接父级的公共特征也是继承类的特征是正常的:假设 A 继承自 B,B 继承自 C。继承告诉我们 B 是 C,A 是 B,因此也是 C。

对于实现来说,它就不那么明显了,因为从理论上讲,实现接口的类应该自己提供不同的属性和操作。但是,通常认为该类将符合要求,因此考虑此属性和操作也将可用。,

EA 行为

我不知道,但我不这么认为。

评论

1赞 GiatManos 10/20/2023
您的“更有可能”的情况是正确的。我更新到 SWC1---(realizes)--->SWC1_Interface,它又SWC1_Interface---(realizes)--->SWC1_SubInterface1/2/3 继承并将所有子功能添加到一个中央界面中。本练习的重点是为架构设计的组件接口提供一个中心参考点,同时能够将其分解为更小的块/接口以支持详细设计,以便详细设计的每个类都有自己较小的范围接口来实现。
0赞 GiatManos 10/20/2023
正如我在上面的评论中提到的,有了这种实现配置,EA 中的消息选择只给出了两个选项,一个用于类的直接 apiX() 操作,另一个用于SWC1_SubInterfaceX的等效操作,这当然要干净得多。
0赞 Christophe 10/21/2023
明白了。它是一种组件级别的外观接口,其中接口的不同部分由不同的类实现。意义。我仍然建议使用 SWC1_Interface---(inherit)--->SWC1_SubInterface1/2/3,因为根据 UML 语义,像这里这样的组合接口更多的是关于继承合约的接口,而不是实现合约的接口(即实现)。可以肯定的是:所以你现在有想要的 EA 行为?
0赞 GiatManos 10/22/2023
实际上,我希望有一个接口来表示组件在架构级别提供的功能,然后我想将这个接口分解为更小的部分,以帮助在详细设计级别进行组件内部交互。它只是语义和文档,涵盖了各个级别的 ASPICE,并同时协助细节设计者。不,我仍然在序列图中看到继承的接口。至少现在我只有正确的接口。它更好,但仍然不完美。这就是为什么我还没有接受你的答案。