软件设计策略
软件设计是将软件需求概念化为软件实现的过程。软件设计将用户需求视为挑战,并试图找到最佳解决方案。在概念化软件的同时,制定计划以找到实现预期解决方案的最佳设计。
软件设计有多种变体。让我们简要研究一下它们:
结构化设计
结构化设计是将问题概念化为几个组织良好的解决方案元素。它主要与解决方案设计有关。结构化设计的好处是,它可以更好地理解问题是如何解决的。结构化设计还使设计师更容易更准确地专注于问题。
结构化设计主要基于"分而治之"策略,即将问题分解为几个小问题,然后逐个解决每个小问题,直至解决整个问题。
通过解决方案模块解决小问题。结构化设计强调这些模块的组织良好,以实现精确的解决方案。
这些模块按层次结构排列。它们相互通信。良好的结构化设计始终遵循一些多个模块之间通信的规则,即 -
内聚 - 对所有功能相关元素进行分组。
耦合 - 不同模块之间的通信。
良好的结构化设计具有高内聚性和低耦合性。
面向功能的设计
在面向功能的设计中,系统由许多称为功能的较小子系统组成。这些功能能够在系统中执行重要任务。系统被视为所有功能的顶视图。
面向功能的设计继承了结构化设计的一些特性,其中使用了分而治之的方法。
这种设计机制将整个系统划分为较小的功能,通过隐藏信息及其操作来提供抽象手段。这些功能模块可以通过信息传递和使用全局可用的信息来共享信息。
函数的另一个特性是,当程序调用函数时,该函数会改变程序的状态,这有时是其他模块无法接受的。面向功能的设计在系统状态无关紧要且程序/功能基于输入而非状态工作的情况下效果很好。
设计过程
- 通过数据流图,整个系统被视为数据在系统中流动的方式。
- DFD 描述了功能如何改变整个系统的数据和状态。
- 根据整个系统在系统中的操作,整个系统在逻辑上被分解为称为功能的较小单元。
- 然后详细描述每个功能。
面向对象设计
面向对象设计围绕软件系统中涉及的实体及其特征而不是功能进行。这种设计策略侧重于实体及其特征。整个软件解决方案概念都围绕所涉及的实体展开。
让我们看看面向对象设计的重要概念:
- 对象 - 解决方案设计中涉及的所有实体都称为对象。例如,个人、银行、公司和客户都被视为对象。每个实体都有一些与之关联的属性,并有一些方法可以对这些属性执行。
类 - 类是对象的广义描述。对象是类的实例。类定义对象可以具有的所有属性和方法,从而定义对象的功能。
在解决方案设计中,属性存储为变量,功能通过方法或过程定义。
- 封装 - 在 OOD 中,将属性(数据变量)和方法(对数据的操作)捆绑在一起称为封装。封装不仅将对象的重要信息捆绑在一起,而且还限制了外界对数据和方法的访问。这称为信息隐藏。
- 继承 - OOD 允许类似的类以分层方式堆叠,其中较低或子类可以从其直接超类中导入、实现和重用允许的变量和方法。OOD 的这一属性称为继承。这使得定义特定类和从特定类创建通用类变得更加容易。
- 多态性 - OOD 语言提供了一种机制,其中执行类似任务但参数不同的方法可以分配相同的名称。这称为多态性,它允许单个接口执行不同类型的任务。根据函数的调用方式,将执行相应的代码部分。
设计过程
软件设计过程可以被视为一系列定义明确的步骤。虽然它根据设计方法(面向功能或面向对象)而有所不同,但它可能涉及以下步骤:
- 根据需求或以前使用的系统和/或系统序列图创建解决方案设计。
- 根据属性特征的相似性识别对象并将其分组为类。
- 定义类层次结构及其之间的关系。
- 定义应用程序框架。
软件设计方法
以下是两种通用的软件设计方法:
自上而下的设计
我们知道,一个系统由多个子系统组成,并且包含许多组件。此外,这些子系统和组件可能具有自己的子系统和组件集,并在系统中创建层次结构。
自上而下的设计将整个软件系统作为一个实体,然后根据某些特征将其分解以实现多个子系统或组件。然后将每个子系统或组件视为一个系统并进一步分解。此过程一直运行,直到达到自上而下的层次结构中的最低系统级别。
自上而下的设计从系统的通用模型开始,并继续定义其中更具体的部分。当所有组件都组合起来后,整个系统就形成了。
当软件解决方案需要从头开始设计且具体细节未知时,自上而下的设计更合适。
自下而上的设计
自下而上的设计模型从最具体和最基本的组件开始。它通过使用基本或较低级别的组件来组合更高级别的组件。它不断创建更高级别的组件,直到所需的系统不再演变为单个组件。随着每个更高级别的增加,抽象量就会增加。
当需要从某个现有系统创建系统时,自下而上的策略更合适,其中基本原语可用于较新的系统。
自上而下和自下而上的方法都不实用。相反,两者的良好结合是有用的。