【发布时间】:2013-02-16 08:55:32
【问题描述】:
正如我们在 OOP 中所知道的那样,接口提供了一组没有实现的操作,但是 类则相反。
在面向对象的设计中,我们使用uml接口有一组操作没有实现 并且该类也有一组没有实现的操作(我知道类除了它的操作之外还有属性)?
那么,UML 有什么区别?
【问题讨论】:
标签: interface class-design uml class-diagram
正如我们在 OOP 中所知道的那样,接口提供了一组没有实现的操作,但是 类则相反。
在面向对象的设计中,我们使用uml接口有一组操作没有实现 并且该类也有一组没有实现的操作(我知道类除了它的操作之外还有属性)?
那么,UML 有什么区别?
【问题讨论】:
标签: interface class-design uml class-diagram
正如我们在 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 工具中对类操作的行为进行建模,并且某些工具还可以对行为进行充分建模,以至于可以executed.
可以使用 UML 状态机、使用 UML 动作语义或以其他几种方式对与操作关联的行为进行建模。很多时候,这在模型中被忽略了——去到那个级别的细节并不总是有用的,所以实现可能只是在与操作相关的文档中暗示。但是 UML 中的具体类肯定有与其操作相关的具体行为,所以 UML 和编程的区别在于 UML 关注的是行为而不是实现。
【讨论】:
根据Wikipedia-
统一建模语言 (UML) 是一种标准化的通用语言 面向对象软件领域的建模语言 工程。统一建模语言包括一组图形 创建面向对象的可视化模型的符号技术 软件密集型系统。
所以,最重要的是 UML 是通用的和图形化的。它不仅仅是关于类和接口。 UML 提供了一种可视化系统架构蓝图的标准方法。 软件建设需要一个计划。结构图、行为图、交互图有助于在多个维度和细节层次上进行可视化,即 适用于新系统和旧系统。 统一通用,适应大型系统的并行开发。
当我想到 UML 时,我想到的一个术语是软件质量。近年来困扰软件行业的一件事是糟糕的软件设计。虽然软件行业在过去十年中表现相当不错,但全球化的影响正在改变软件的设计方式。
【讨论】: