如何在class图中呈现与接口class有关系的抽象class

How to present abstract class which has relationship with interface class in class diagram

我必须用至少一个摘要 class 和 interface.I 来制作图表,尽管实现 接口 [=31= 是个好主意] 这里。我的 table 是 customer 这是抽象的 class.The interface class 显示了需要的方法包含在 customers.My 问题的两种类型中的是,这是我如何呈现与接口 class 连接的抽象 class 的方式。我应该将 customer class 留空吗?使用抽象的接口是错误的 class ?

这是我的图表:

interface 不是 class。下面给出的是 Oracle's tutorial:

的定义

In the Java programming language, an interface is a reference type, similar to a class, that can contain only constants, method signatures, default methods, static methods, and nested types. Method bodies exist only for default methods and static methods. Interfaces cannot be instantiated—they can only be implemented by classes or extended by other interfaces.

同一页提到,

There are a number of situations in software engineering when it is important for disparate groups of programmers to agree to a "contract" that spells out how their software interacts. Each group should be able to write their code without any knowledge of how the other group's code is written. Generally speaking, interfaces are such contracts.

因此,在 interface 中,您应该放置您希望所有实现 classes 应该强制拥有的方法签名(合同)。

您的 abstract class 可以实现其中一些方法,这些实现作为子 classes 的默认实现(即 classes extend abstract class)。 此 class 可以为其子 class 继承其他成员

由于你的问题似乎是关于 UML 建模的,我将提供一些额外的、更面向 UML 的信息:

  • 您的 «interface» 定义了一个包含三个操作的契约(在 java 中操作是方法)。这意味着所有实现此接口的 classes 都必须提供这三个操作。
  • 根据您的叙述,抽象 class Customer 实现了接口。这应在图表中用 "realization" dependency 表示,即从 class 到带有纯空白 arrow-head 的界面的虚线。 (注意:您的图表似乎呈现了一个可导航的关联,这将具有完全不同的含义)
  • 但实现不是继承:默认情况下,实现关系不会发生任何事情,您必须为 Customer 显式添加所有三个操作。如果某些操作在此级别仍然是抽象的,则应将它们标记为抽象(即斜体)。您可以在 Customer.
  • 的特化(即继承的 classes)中重新定义任何 abstract operations

话虽这么说,抽象 class 只有在增加一些价值时才有意义,例如为某些方法提供默认实现,添加一些额外的方法或属性。如果它只是一个空框,并且 child class 无论如何都必须实现所有内容,那么您可以从设计中删除抽象 class:

  • 任何 class 继承抽象 class 然后将只实现接口而不是
  • 任何与抽象 class 关联的 class 都将与接口关联,接口将代表任何实现它的 class。