【问题标题】:class versus interface in umluml 中的类与接口
【发布时间】:2013-02-16 08:55:32
【问题描述】:

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

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

那么,UML 有什么区别?

【问题讨论】:

    标签: interface class-design uml class-diagram


    【解决方案1】:

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

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

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

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

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

    编辑

    速记技术用语:

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

    Define is to Declare as Class is to Type。
    (参见What is the difference between Type and Class?

    接口的目的是定义一组操作,但我们做同样的类也定义一组操作?

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

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

    当我去假设实现这些操作的课程时,我看不到这些操作的任何实现,因为图表描述了这些操作或任何给出实现标志的东西?

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

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

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

    【讨论】:

    • 非常感谢@Andrew Alcock 在 UML 中的 clarifications.in,正如您所提到的接口的目的是定义一组操作,但我们对类也定义一组操作吗?
    • “接口是一组暴露给其他类的方法”我完全同意你的观点,但是当我去假设实现这些操作的类时,我看不到这些操作的任何实现,因为图表描述了那些操作或任何事情都表明实施?
    • @Chriss:更新了我的答案以解决您的 cmets
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      根据Wikipedia-

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-14
        • 2018-06-10
        • 2012-11-06
        • 2018-09-09
        • 1970-01-01
        • 2023-04-10
        • 2021-12-17
        • 1970-01-01
        相关资源
        最近更新 更多