2

正如我们在 OOP 中所知道的,接口提供了一组没有实现的操作,而类则相反。

在面向对象的设计中,我们使用 uml 接口有一组没有实现的操作,而类也有一组没有实现的操作(我知道类除了它的操作之外还有属性)?

那么,UML 有什么区别呢?

4

3 回答 3

6

正如我们在 OOP 中所知道的,接口提供了一组没有实现的操作,而类则相反。

不完全正确 -抽象类是声明了一个或多个方法但未定义的类(在 C++ 和 Java 中,这些是抽象方法)。你可以定义一个类,它的所有方法都是抽象的——在这种情况下,它与接口非常相似。

不过,UML 中的一个关键思想是,接口是暴露给其他类或组件的一组方法。目的是定义一组操作。

然而,转向编程,可以将方法抽象化以帮助开发(例如,通过确保所有子类都有实现)。这个方法可能纯粹是类内部的。

最后一个观察:UML 中的术语接口和类并不完全等同于一种语言中的接口和类,比如 Java。例如,Java 不允许多继承。相反,Javainterface允许一个类实现多种类型(不是类 - 一个细微的区别)

编辑

速记技术用语:

  • 声明:向系统说明变量或操作存在及其类型或签名
  • 定义:与声明相同,但另外提供变量或操作的完整实现
  • 接口:一组操作声明
  • 类型:对象的接口和其他操作
  • :对象的类定义(而不是声明)对象的实现方式,包括其内部状态和操作的实现

定义是声明,类是类型。
(请参阅Type 和 Class 有什么区别?

接口的目的是定义一组操作,但我们是否对类也定义一组操作?

所以接口的目的是声明(而不是定义)一组其他对象想要使用的公共操作。一个类(在 UML 中)是一组完整的操作(公共的和私有的)。一个类(在 Java、C++ 等中)另外定义了所有非抽象操作。

所以关键是意图:当系统的其他组件要使用一组操作时,使用接口。当您使用 UML 来描述(组件、算法等的)实现时,请使用class

当我去假设实现这些操作的类时,我看不到这些操作的任何实现,因为图表描述了这些操作或任何迹象表明实现?

UML 工具用于建模,因此故意避免提供输入操作定义的位置 - 留待以后使用。这个想法是你:

  • 在 UML 中定义模型
  • 使用 UML 工具生成目标语言的代码
  • (有些允许您将代码导入回工具中,以使用在实施期间所做的任何更改来修改模型。这称为“往返”建模,旧的TogetherJ产品擅长于此)

这种故意的差距(您可能会说缺陷)意味着 UML 中的“定义”与“声明”是没有意义的。对不起。

于 2013-02-16T09:27:45.767 回答
2

也许您刚刚看到了为描述概览而创建的模型,而不是对系统进行完全建模,但是您可以在大多数 UML 工具中对类操作的行为进行建模,并且某些工具还可以对可以执行的行为进行充分建模。

可以使用 UML 状态机、使用 UML 动作语义或以其他几种方式对与操作相关的行为进行建模。很多时候,这在模型中被忽略了——去到那个级别的细节并不总是有用的,所以实现可能只是在与操作相关的文档中暗示。但是 UML 中的具体类肯定有与其操作相关的具体行为,所以 UML 和编程的区别在于 UML 侧重于行为而不是实现

于 2013-02-17T18:22:04.687 回答
0

根据维基百科-

统一建模语言(UML)是面向对象软件工程领域的标准化通用建模语言。统一建模语言包括一组图形符号技术,用于创建面向对象的软件密集型系统的可视化模型。

所以,最重要的是 UML 是通用的和图形化的。它不仅仅是关于类和接口。UML 提供了一种可视化系统架构蓝图的标准方法。软件建设需要一个计划。结构图、行为图、交互图有助于在多个维度和详细级别进行可视化,这适用于新系统和旧系统。统一通用,适应大型系统并行开发。

当我想到 UML 时,想到的一个术语是软件质量。近年来困扰软件行业的一件事是糟糕的软件设计。尽管软件行业在过去十年中表现相当不错,但全球化的影响正在改变软件的设计方式。

于 2013-02-16T09:36:15.733 回答