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

问题描述 投票:0回答:1

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

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

我的问题是:

  1. 我的组件图是否符合 UML 标准?我可以做些什么来改进它?
  2. 这样“分解”接口有意义吗?
  3. EA 的行为(将间接继承的消息显示为消息中的选项)是否“正常”且合理?
  4. 有没有办法改变 EA 中的这种行为,以阻止间接继承的操作在序列图中显示为消息的选项?
interface uml enterprise-architect component-diagram
1个回答
3
投票

1。尊重UML

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

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

2。接口分解有意义吗

这是有道理的。例如,您可以想象一个组件提供接口

PrintableAndSortable
,它是两个不同接口
Printable
Sortable
的组合。

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

3.间接继承的消息

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

对于实现来说不太明显,因为理论上实现只是说实现接口的类应该自己提供不同的属性和操作。然而,人们普遍认为该类将遵守这一规定,因此认为该属性和操作也将可用。 ,

EA 行为

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

© www.soinside.com 2019 - 2024. All rights reserved.