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