软件设计原则

17 Mar 2025 | 4 分钟阅读

软件设计原则旨在提供有效处理设计复杂性的方法。 有效地管理复杂性不仅可以减少设计所需的工作量,还可以减少在设计过程中引入错误的范围。

以下是软件设计原则

Software Design Principles

问题划分

对于小问题,我们可以一次处理整个问题,但是对于重要的问题,请划分问题并解决问题,这意味着将问题划分为更小的部分,以便可以分别捕获每个部分。

对于软件设计,目标是将问题划分为可管理的部分。

问题划分的好处

  1. 软件易于理解
  2. 软件变得简单
  3. 软件易于测试
  4. 软件易于修改
  5. 软件易于维护
  6. 软件易于扩展

这些部分不能完全相互独立,因为它们共同构成了系统。 它们必须协作和通信以解决问题。 这种交流增加了复杂性。

注意:随着分区数量的增加 = 分区的成本和复杂性增加


抽象

抽象是一种工具,它使设计师能够在抽象级别上考虑组件,而无需关心实现的内部细节。 抽象可用于现有元素以及正在设计的组件。

这里,有两种常见的抽象机制

  1. 功能抽象
  2. 数据抽象

功能抽象

  1. 一个模块由其执行的方法指定。
  2. 用于完成功能的算法的细节对该功能的用户不可见。

功能抽象构成了面向功能设计方法的基础。

数据抽象

数据元素的细节对数据用户不可见。 数据抽象构成了面向对象设计方法的基础。


模块化

模块化指定将软件划分为单独的模块,这些模块具有不同的名称和地址,然后在以后集成以获得完全功能的软件。 它是唯一可以使程序在智力上可管理​​的属性。 由于大量参考变量,控制路径,全局变量等,单个大型程序难以理解和阅读。

模块化系统的理想属性是

  • 每个模块都是一个定义明确的系统,可以与其他应用程序一起使用。
  • 每个模块都有单一的指定目标。
  • 模块可以单独编译并保存在库中。
  • 模块应该比构建更容易使用。
  • 模块从外部看比从内部看更简单。

模块化的优点和缺点

在本主题中,我们将讨论模块化的各种优点和缺点。

Software Design Principles

模块化的优点

模块化有很多优点

  • 它允许许多或不同的人编写大型程序
  • 它鼓励将常用例程创建到库中,并由其他程序使用。
  • 它简化了将大型程序加载到主存储器中的覆盖过程。
  • 它提供了更多检查点来衡量进度。
  • 它提供了一个更易于测试的完整测试框架
  • 它产生了设计良好且更具可读性的程序。

模块化的缺点

模块化存在一些缺点

  • 执行时间可能(但不一定)更长
  • 存储大小也许(但不一定)增加
  • 编译和加载时间可能会更长
  • 模块间通信问题可能会增加
  • 需要更多的链接,运行时可能会更长,必须编写更多的源行,并且必须完成更多的文档

模块化设计

模块化设计降低了设计的复杂性,并通过允许并行开发系统的各个部分来实现更容易,更快的实现。 我们将在本节中详细讨论模块化设计的不同部分

1. 功能独立性:功能独立性是通过开发仅执行一种任务且与其他模块交互不多的功能来实现的。 独立性很重要,因为它使实现更容易,更快。 独立的模块更易于维护,测试和减少错误传播,并且可以在其他程序中重复使用。 因此,功能独立性是一个良好的设计特性,可确保软件质量。

它使用两个标准来衡量

  • 内聚性:它衡量模块的相对功能强度。
  • 耦合性:它衡量模块之间的相对依赖关系。

2. 信息隐藏:信息隐藏的基本原理表明,模块的特征可以通过从其他模块中保护的设计决策来表征,也就是说,换句话说,应该指定模块,即模块内包含的数据无法访问其他模块不需要此类信息。

将信息隐藏用作模块化系统设计标准在测试期间以及随后的软件维护期间需要修改时提供了最大的好处。 这是因为,由于大多数数据和过程都隐藏在软件的其他部分中,因此在修改过程中引入的无意错误不太可能传播到软件中的不同位置。


设计策略

一个好的系统设计策略是组织程序模块,以便于开发,然后在以后进行更改。 结构化的设计方法帮助开发人员处理程序的大小和复杂性。 分析人员会向开发人员生成有关代码的组成方式以及代码片段如何组合在一起以形成程序的说明。

要设计一个系统,有两种可能的方法

  1. 自顶向下方法
  2. 自底向上方法

1. 自顶向下方法:这种方法从识别主要组件开始,然后将它们分解为更详细的子组件。

Software Design Principles

2. 自底向上方法:自底向上方法从较低的细节开始,并朝着层次结构上升,如图所示。 这种方法适用于现有系统的情况。

Software Design Principles
下一个主题耦合和内聚