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