如何在 UML 中显示接口和 类 之间的关系?
How to show relation between interfaces and classes in UML?
我有一些相关的接口和 classes 我想在 UML 中表示(抱歉关系,我不知道如何使用 StarUML 正确地做到这一点):
接口 ISMS 实现 IMessage 和 IStorable 的想法,而不是让 SMS class 直接实现这两个接口,旨在使项目更加模块化、可维护且更易于测试。
这是一个好的设计方法吗?如果是这样,这是在 UML Class 图中表示它们的好方法,还是有更好的方法来表示接口及其与 UML 中其他 interfaces/classes 的关系?
Is this a good approach for the design?
我认为是的,也是因为如果添加 MMS,它也可以实现 ISMS(可能会重命名该接口)。
对于 IEmail 不太清楚,除了简化 Email 和其他使用接口的 classes 有一个接口而不是两个
我很确定 Christophe 会对此说得更多:-)
is this a good way of representing them in an UML Class Diagram or is there a better way to represent an interface and its relationship with other interfaces/classes in UML?
表示class实现接口的关系是实现(用虚线画),你用了泛化, 所以还要添加 MMS :
... ISMS implementing IMessage and IStorable
警告这不是 实现 因为 ISMS 是一个接口,与 IEmail 相同,这就是为什么接口之间的继承是由泛化而不是实现来支持的。
除了 之外,我还有几点要说。
您的设计
将接口分解为 IStorable
和 IMessage
乍一看似乎是 interface segregation principle.
的合理应用
将这两个接口组合成一个可重用的 ISMS
接口,而不是直接在具体的 SMS
class 中实现它们,在这方面将使您的代码更易于维护,因为它很容易允许用替代实现替换 SMS 实现(如果您认为 SMS 功能可以是特定于平台的,这是有意义的)。
问题是 SMS
和 email
是否不能互换使用。但只有您可以回答这个问题:如果您的设计需要保持这些通信通道的不同(并且您的实际代码可能会在两个接口之间添加一些差异),那很好。但如果不是,允许这种互换性并用一个更通用的 INotification
.
替换 ISMS
和 IEmail
是有意义的
您的 UML 表示
首先,我想强调 Bruno 关于泛化(普通线)和 realization(虚线)之间的区别的评论。
也许我是老派,但我建议使用更传统的 interface 作为界面的圆圈,而不是使用带有关键字 [=19] 的 class 框=] 在接口名称上方。特别是如果你有属性和操作。
圆圈在我看来更适合界面的棒棒糖表示法。当您对接口本身没什么可说的,但想显示 class 实现(棒棒糖)或依赖于(套接字)的接口时,这非常实用。然后在另一个更详细的图表中定义接口细节。理论上您可以将这两个符号合并到同一个图表中,但我个人认为它的可读性较差,因此不建议这样做。
我有一些相关的接口和 classes 我想在 UML 中表示(抱歉关系,我不知道如何使用 StarUML 正确地做到这一点):
接口 ISMS 实现 IMessage 和 IStorable 的想法,而不是让 SMS class 直接实现这两个接口,旨在使项目更加模块化、可维护且更易于测试。
这是一个好的设计方法吗?如果是这样,这是在 UML Class 图中表示它们的好方法,还是有更好的方法来表示接口及其与 UML 中其他 interfaces/classes 的关系?
Is this a good approach for the design?
我认为是的,也是因为如果添加 MMS,它也可以实现 ISMS(可能会重命名该接口)。
对于 IEmail 不太清楚,除了简化 Email 和其他使用接口的 classes 有一个接口而不是两个
我很确定 Christophe 会对此说得更多:-)
is this a good way of representing them in an UML Class Diagram or is there a better way to represent an interface and its relationship with other interfaces/classes in UML?
表示class实现接口的关系是实现(用虚线画),你用了泛化, 所以还要添加 MMS :
... ISMS implementing IMessage and IStorable
警告这不是 实现 因为 ISMS 是一个接口,与 IEmail 相同,这就是为什么接口之间的继承是由泛化而不是实现来支持的。
除了
您的设计
将接口分解为 IStorable
和 IMessage
乍一看似乎是 interface segregation principle.
将这两个接口组合成一个可重用的 ISMS
接口,而不是直接在具体的 SMS
class 中实现它们,在这方面将使您的代码更易于维护,因为它很容易允许用替代实现替换 SMS 实现(如果您认为 SMS 功能可以是特定于平台的,这是有意义的)。
问题是 SMS
和 email
是否不能互换使用。但只有您可以回答这个问题:如果您的设计需要保持这些通信通道的不同(并且您的实际代码可能会在两个接口之间添加一些差异),那很好。但如果不是,允许这种互换性并用一个更通用的 INotification
.
ISMS
和 IEmail
是有意义的
您的 UML 表示
首先,我想强调 Bruno 关于泛化(普通线)和 realization(虚线)之间的区别的评论。
也许我是老派,但我建议使用更传统的 interface 作为界面的圆圈,而不是使用带有关键字 [=19] 的 class 框=] 在接口名称上方。特别是如果你有属性和操作。
圆圈在我看来更适合界面的棒棒糖表示法。当您对接口本身没什么可说的,但想显示 class 实现(棒棒糖)或依赖于(套接字)的接口时,这非常实用。然后在另一个更详细的图表中定义接口细节。理论上您可以将这两个符号合并到同一个图表中,但我个人认为它的可读性较差,因此不建议这样做。