我有下面的组件图,其中组件的接口 SWC1_Interface 被分解为多个接口(此处仅显示一个),这些接口分解了主组件接口提供的功能,只是将 API 分组为逻辑组。 Class1 实现了 SWC1_Interface_SubGrouping。
然后我画了一个序列图并尝试指定从 Class1 的实例请求的消息。在下拉列表中,我可以看到 api1(),它是 Class1 的一个方法,应该在那里,但我也可以从组件图中的实现序列中看到所有间接继承的方法。
我的问题是:
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 行为
我不知道,但我不这么认为。