抽象和分解有什么区别?

时间:2014-05-01 17:40:42

标签: uml modeling software-design abstraction

在软件工程中,设计阶段有两个主要概念:abstractiondecomposition,但我无法区分它们之间的差异?

2 个答案:

答案 0 :(得分:5)

这两个概念都是分析和设计基本技术。在软件开发过程中,它们是相互关联的,通常一起使用。我们使用它们即使我们并不总是意识到它。更深入地理解这些概念有助于在A& D中更加准确和有效。

抽象通常是有意识地忽略正在分析的主题的某些方面的过程,以便更好地理解它的其他方面。换句话说,它是一种主题的简化。特别是在软件中,分析&设计都是关于抽象的。

  • 在为数据库建模时,忽略系统的UI和行为,并只关注数据库结构。
  • 当您对架构进行建模时,您将专注于高级模块及其关系,并忽略其内部结构
  • 例如,每个UML图表在系统上提供了一个特殊的,有限的视图,因此专注于单个方面并忽略所有其他方面(序列抽象对象和消息,部署抽象网络和服务器,用例抽象系统用户和他们与系统的互动等)
  • 用任何编程语言编写源代码需要大量的抽象 - 程序员使用有限的语言结构来抽象应用程序的功能

分解是旧的良好原则的应用"分而治之的"软件开发。它是一种对复杂元素进行分类,结构化和分组的技术,以最终形成更多原子元素,以某种方式组织并更易于管理。在所有阶段都有很多例子:

  • 将复杂过程功能分解为较小子过程和活动的层次结构
  • 复杂应用程序的高级结构,分为3层 - UI,逻辑和数据。
  • 复杂域的类结构
  • 命名空间是将全局范围分解为多个本地范围的常见概念
  • UML包直接在模型级别使用分解 - 使用包来组织模型

抽象在某种程度上是比分解更普遍的原则,是所有原则的父亲" :)

答案 1 :(得分:1)

抽象是面向对象编程的基本原则之一。抽象允许我们命名未直接实例化的对象,但作为创建具有某些公共属性或属性的对象的基础。 例如:在计算机附件的上下文中数据存储设备是一个抽象术语,因为它可以是USB笔式驱动器,硬盘或RAM。但USB笔式驱动器或硬盘是具体的对象,因为它们的属性和行为很容易识别,而数据存储设备则不是这种情况,它是计算机配件的抽象对象。因此,抽象用于在设计阶段将对象概括为一个类别。例如,在旅行管理系统中,您可以使用 Vehicle 作为抽象对象或实体,概括您从一个地方到另一个地方的旅行。

分解是一种将系统分解为模块的方法,使每个模块提供不同的功能,但也可能影响其他模块。要非常清楚地理解分解,首先应该理解关联,组合和聚合的概念。