系统分析与设计
1. 需求分析概述
开发分析:需求工程阶段,需求分析
1.1 需求工程
软件需求:是指用户对系统在功能、行为、性能、设计约束等方面的期望
软件需求分为需求开发和需求管理两大过程
1.2 需求分类
按需求内容可分为业务需求、用户需求、系统需求
- 业务需求:由客户提出的一个宏观的功能需求
- 用户需求:设计员去调查需求中设计的每个用户的具体需求
- 系统需求:经过整合,形成最终的系统需求,包括功能、性能、设计约束
– 功能需求:软件必须完成的基本工资
– 性能需求:说明软件或人与软件交互的静态或动态数值需求
– 设计约束:受其他标准硬件限制等方面的影响
从客户角度可分为基本需求、期望需求、兴奋需求
- 基本需求:需求明确规定的功能
- 期望需求:客户任务理所应当包含在内的其他功能
- 兴奋需求:客户未要求的其他功能需求
2. 结构化需求分析
考点分析:结构化需求分析特点,三大模型,数据流图,数据字典,E-R图,状态转换图
结构化需求分析自顶向下,逐步分解,是面向数据的,强调分析对象的数据流
- 数据流图(功能模型):描述数据在系统中如何被传送或变换,以及如何对数据流进行变换的功能或子功能,用于对功能建模
- 数据字典:用来定义在数据流图中出现的符号或名称的含义
- E-R图(数据模型):实体联系图
- 状态转换图(行为模型):通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。状态图还指明了作为特定事件的结果系统将做哪些动作
3. 面向对象需求分析
考点分析:面向对象基本概念,UML事务,关系,图分类
3.1 面向对象基本概念
- 对象:基本的运行实体,为类的实例,封装了数据和行为的整体
- 类:是对象的抽象,定义了一组大体相似的对象结构,定义了数据和行为
- 消息:对象之间进行通信的一种构造
- 继承:父类和子类之间共享数据和方法的机制
- 覆盖:子类在原有父类接口的基础上,用适合自已要求的实现去置换父类中相应的实现
- 函数重载:与子类父类无关,且函数是同名不同参数
- 多态:不同对象收到同一个消息时产生完全不同的反应
- 静态成员:不同对象之间共享数据的方式,值可修改
- 静态类型:指一个对象的类型在编译时就确定
- 动态类型:指对象类型在运行时才能确定
- 静态绑定:基于静态类型的,在程序执行前方法以及被绑定
- 动态绑定:基于动态类型的,运行时根据变量实际引用的对象类型决定调用哪个方法
- 封装:一种信息隐蔽技术,目的是使对象的使用者和生产者分离
- 类的属性和方法:分为public(所有类都可访问)、private(仅本类内部可以访问)、protect(本类内部可访问、继承子类也可以访问)
3.2 UML
统一建模语言(Uinfied Modeling Language,UML)和程序设计语言并无关系,UML结构包括构造块、规则和公共机制三个部分
- 构造块:有三种基本的构造块,分别是事务、关系和图。事务是UML的重要组成部分,关系把事务紧密联系在一起,图示多个相互关联的事物的集合
- 规则:是构造块如何放在一起的规定
- 公共机制:是指达到特定目标的公共UML方法
4. 系统设计
考点分析:系统设计内容及步骤,结构化设计组成及原则,内聚和耦合分类及特点,面向对象设计原则
4.1 系统设计概述
- 系统设计目的:为系统指定蓝图,在各种技术和实施方法中权衡利弊,精心设计,合理地使用各种资源,最终勾画出新系统的详细设计方法
- 系统设计方法:结构化设计方法、面向对象设计方法
- 系统设计主要内容:概要设计、详细设计
– 概要设计:总体结构设计,是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图
– 详细设计:模块内详细算法设计、模块内数据结构设计、数据库的物理设计、其他设计、编写详细设计说明书、评审
4.2 结构化设计
结构化设计主要包括以下体系结构设计、数据设计、接口设计、过程设计四个部分
结构化设计基本原理:抽象化、自顶向下逐步细化、模块化、模块独立
结构化设计原则:
- 保持模块的大小适中
- 尽可能减少调用的深度
- 多扇入,少扇出
- 单入口,单出口
- 模块的作用域应该在模块之内
- 功能应该是可预测的
内核和耦合:模块的设计要求独立性高,就必须高内聚,低耦合。内聚是指一个模块内部功能之间的相关性,耦合是指多个模块之间的联系
4.3 面向对象设计
面向对象设计原则:
- 单一职责原则:设计目的单一的类
- 开放 – 封闭原则:对扩展开放,对修改封闭
- 李氏(Liskov)替换原则:子类可以替换父类
- 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
- 接口隔离原则:使用多个专门的接口比使用单一的总接口要好
- 组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
- 迪米特(Demeter)原则:一个对象应当对其他对象有尽可能少的了解