抽象和分解之间有何区别?

4

在软件工程中,设计阶段有两个主要概念:抽象和分解。但是我不知道它们之间的区别是什么?

2个回答

10

这两个概念都是分析和设计的基本技巧。它们在软件开发过程中通常是相互关联且一起使用的。即使我们没有意识到,我们也会使用它们。更深入地理解这些概念有助于更准确、有效地进行分析和设计。

抽象化通常是指有意忽略分析对象的某些方面,以便更好地理解其它方面的过程。换句话说,它是对一个主题的简化。特别是在软件领域,分析和设计都是围绕抽象化展开的。

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

分解是将“分而治之”的老原则应用于软件开发的技术。它是一种对复杂元素进行分类、结构化和分组的技术,以便得到更原子化的元素,并以某种方式组织起来,更容易管理。在所有阶段中都有很多示例:

  • 将复杂过程进行功能性分解,形成更小的子过程和活动的层次结构。
  • 将复杂应用程序的高级结构分为3个层次-UI、逻辑和数据。
  • 复杂领域的类结构。
  • 命名空间作为一个将全局范围拆分成几个本地范围的常见概念。
  • UML包是在模型层面上直接使用分解的方式——使用包来组织您的模型。
  • 抽象化比分解原则更加通用,有点像“所有原则的父亲” :)


    感谢Aleks提供详细而有帮助的答案,该答案还得到了示例的支持。 - Carlos

    2

    抽象是面向对象编程的基本原则之一。抽象允许我们命名未直接实例化但作为创建具有某些共同属性或特性的对象基础的对象。

    例如:在计算机配件的上下文中,数据存储设备是一个抽象术语,因为它可以是USB闪存驱动器、硬盘或RAM。但USB闪存驱动器或硬盘是具体对象,因为它们的属性和行为很容易识别,而对于数据存储设备来说,这不是情况,因为它是计算机配件的抽象对象。因此,在设计阶段使用抽象将对象概括为一类。例如,在旅行管理系统中,您可以使用车辆作为抽象对象或实体,概括了如何从一个地方到另一个地方旅行。

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


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接