模型的作用:
- 在正式启动项目之前,通过模型的分析和实验,能发现设计中的错误和遗漏,降低项目的风险
- 通过模型,研究和比较不同的解决方案,从而选出最佳方案
- 用于同项目组其他成员、客户、领导等相关人员之间交流
- 指导和促进工程的实现
有用模型的特征:
- 抽象性
- 可理解性
- 精确性
- 说明性
- 经济性
模型的三个层次:
- 计算无关模型(CIM):描述系统的用途,而不是如何应用,例如系统的业务模型
- 平台无关模型(PIM):描述系统该如何创建,不涉及具体的实现技术,例如系统的分析模型
- 平台相关模型(PSM):关联于某一具体的技术平台,例如系统的设计模型
核心是数据和处理,以数据流为中心,构建软件的分析模型、设计模型、实现模型。基于模块化思想,采用“自顶向下,逐步求精”的技术对系统进行划分,包括结构化分析、结构化设计、结构化编程。
模型的核心是数据字典(DD),它是系统所涉及的各种数据对象的总和。从 DD 出发可构建三种图:
- 实体关系图(ERD):描述数据对象之间的关系,是软件的数据模型
- 数据流图(DFD):指明系统中的数据是如何流动和变换的,并描述数据流变换的功能,与加工说明(PSPEC)一起构成软件的功能模型
- 状态变迁图(STD):指明系统在外部事件的作用下将会如何动作,表明了系统的各状态及各状态间的变迁,是软件的行为模型
顶层 DFD 中,把整个系统当成一个大的加工过程,识别系统的源和宿,并标明系统的输入输出数据流:
0 层 DFD 中,把系统分解为主要的几大加工过程,定义其共同使用的数据文件(下图中的考生名册):
继续分解可得到 1 层 DFD:
分为结构设计(概要设计)和过程设计(详细设计)。是把用 DFD 表示的分析模型转换为以结构图(SC)表示的设计模型。
第一级分解:
第二级分解:
核心概念:对象、类、继承、消息。
基本原则:
- 抽象
- 封装:将对象特征的实现方式隐藏在公共接口之后的黑盒中,从而带来“多态”,即一个接口可以有多种实现
- 模块化:通过分解技术将软件划分为一组高内聚、低耦合的模块,以降低软件的复杂性,减少开发成本
- 层次:不同级别的抽象组成的树状结构
OOA 的基本步骤:
- 对软件的功能进行用例建模
- 识别出软件的关键抽象,即概念类,用类图建立概念模型
- 对每个用例进行用例分析,识别出分析类,建立类图和交互图
OOD 和 OOA 采用相同的表示法和模型结构,这是面向对象方法优于结构化方法的重要因素之一。从 OOA 到 OOD 不存在转换,只需要进行局部的修改或调整,并增加与实现有关的独立部分。因此两者能够紧密衔接,大大降低从 OOA 过渡到 OOD 的难度、工作量和出错率。
OOD 的基本步骤:
- 从多个视图设计软件的架构,并选定设计模式。常见的架构视图包括逻辑视图、进程视图、开发视图、物理视图、用例视图、数据视图
- 在架构设计的基础上,确定子系统之间的接口,并对子系统内部进行设计
- 进行详细的类设计和优化
相同点:采用分解和抽象技术,以模块化原则来开发软件、追求模块的高内聚和低耦合
不同点:
- 结构化方法着眼于过程抽象和数据抽象,OO 方法则有效集成了这两种抽象,将数据和操作封装成了对象
- OO 方法在模块信息隐藏和软件复用方面做得更好,从而更适合开发大型复杂的软件系统
- OO 方法中,分析和设计阶段采用一致的概念和表示法,使两个阶段能平滑过渡,降低开发成本
通过构造和组装可复用构件来开发新系统。
构件是软件复用的重要手段,是核心和基础。构件包含构件规约(接口)和构件实现。
相同点:
- 构件和对象都必须同时包含数据和操作,具有相同的外部特征
- OO 方法的一些设计原则对基于构件的方法也同样重要
不同点:
- 构件在粒度上比类更粗,通常会包含多个类
- 构件的内部设计可以是面向对象的,也可以不是,只要保证外部特征具有很好的封装性、抽象性和通用性即可
- 与 OO 方法相比,基于构件的方法更注重黑盒复用
是一种用数学理论进行建模的方法。
优点:
- 无二义性
- 一致性
- 正确性
- 完整性