java—在uml中,如果接口与类有关系,那么这种关系是否也适用于实现它的任何类?

aemubtdh  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(593)

因为实现接口的任何类都是与所述接口相同的类型,所以与该接口的任何关系是否也适用于实现它的任何类?
例如,假设我们有一个名为product的接口,它有一个返回类color示例的方法签名。然后我们有两个实现这个接口的类,叫做shelf和desk。这两个类包含类颜色的属性。



产品与颜色之间的关系只需要显示出来,还是产品、货架和table都需要显示它们与类颜色的关系?

qyyhg6bp

qyyhg6bp1#

接口的关联是否适用于它们的实现?

接口定义一个契约,说明实现类必须提供的特性和它们必须满足的约束。如果一个接口与一个类t有关联,那么它的所有实现的行为必须与它们也与一个类t有关联一样。
以下是uml规范告诉我们的:
接口所拥有的属性(包括关联端)意味着实现behavioredclassifier应该维护与属性的类型和多样性相对应的信息,并促进对该信息的检索和修改。在接口上声明的属性并不一定意味着在实现behavioredclassifier上会有这样的属性(例如,它可以通过等效的get和set操作实现)。
所以你的问题的答案是模棱两可的:
如果您使用的是实现类,那么您可以假设它具有这样的关联,即使它没有显示在图中。
如果您正在设计这样一个实现类,就不能假设关联自动存在:实现不是继承。如果您没有在模型中显示任何内容,则未指定类将如何履行其契约。如果您想完整,就必须在实现类中定义必要的关联:因此,第二个图将更加准确和全面。
对于其中一个实现,您还可以有一种不同的情况,即关联是从其他关联派生的,而不是显式维护的。

你真的需要联想吗?

在您的叙述中,您证明需要一个关联是因为有一个返回类型t的方法。但拥有参数或返回类型并不足以要求像另一个答案中所解释的那样进行关联。关联需要语义关系。
因此,您的接口更可能依赖于 Color .

杂项说明

在这两个图中,您应该用一个普通的空白箭头(末端的白色三角形)而不是一个开放的箭头末端来显示实现依赖关系。
在旧的uml版本1.xx中,接口的语义相当于一个抽象类,不允许有自己的属性。虽然现在情况比较轻松,但我还是建议坚持这种方法,因为:
接口意味着提供一组行为
行为在操作中实现
私有属性对外部世界是不可见的,因此在接口中与此无关。应避免使用公共属性,因为存在封装和解耦的风险。
如果您真的需要一个属性,它可能是需要类的征兆。

相关问题