必需接口 vs 接口实现 vs <<使用>> 依赖

5

正如标题所示,这三者之间有什么区别,何时应该使用其中之一而不是另外两个?网络上充满了它们的定义,但我找不到任何关于何时何地使用所需接口或<<use>>依赖关系的文本或解释。


我并不需要语法和图形符号,因为互联网上已经充斥着这些内容。我想知道的是在哪里使用实现和所需接口,以及它们在实际示例中的区别。 - thunderbird
2个回答

5
实际上,只有两种情况:一方面是实现/使用,另一方面是提供/需要。它们本质上描述了同样的事情,但侧重点不同。
通过实现/使用,您可以从类(或组件,如下面的示例所示)中绘制与接口的可见关系,从而在图表中显示接口及其操作。
当然,您可以将其拆分为两个不同的图表。
另一方面,通过提供/需要,接口仅显示为棒棒糖,因此无法看到操作。但是,您可以在棒棒糖之间绘制可见的关系(通常为“装配”)。
我认为,如果您想要显示谁实现了什么,使用实现/使用更为合适。如果您想更加关注部件之间的交互,则提供/需要更为合适。

所以,假设有一个接口和一个实现了该接口的类,我可以在不同的图表中使用任一符号来强调关系的不同方面?但是,除了占用更少的空间,我仍然不理解所需接口的用途。 - thunderbird
就我而言,这就是全部了。棒棒糖符号更关注事物如何配合。我倾向于主要在组件图中使用它,而在类图中,您通常希望展示每个类实现的方法。请注意,在EA中,您可以选择将实现/使用关系显示为棒棒糖(右键单击-功能和属性...)。这些棒棒糖是特殊的,因为您无法在GUI中操纵它们或在它们之间绘制组装,它们只是在图表中显示接口的替代方式。这就是托马斯·基利安在他的示例中展示的内容。 - Uffe

2

一个必需的接口通常被表示为插座。这意味着为了使类正常工作,它需要在运行时具有棒棒糖的对应物。反过来,该对应物通过棒棒糖提供接口。为了解耦类和接口定义,您将接口放在一个带有体现的类中,并从提供类到接口绘制实现。反之,您从需要的类到接口绘制依赖关系。是否使用<<use>>对依赖关系进行建模更多是品味问题。

enter image description here

如上所述,也可表示为以下形式: enter image description here


这个“runtime counterpart”的概念只存在于UML中吗?如果不是,那么我该如何将其翻译成面向对象编程语言之一的术语? - thunderbird
在任何面向对象的编程语言中,都有接口(头文件)。实现类实现接口,而依赖类只需使用接口中声明的头文件来调用方法/使用属性。 - qwerty_so

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接