19_系统分析与设计

目录

需求分析概述

需求工程

需求分类

结构化需求分析

基本概念

数据流图

数据字典

E-R图

状态转换图

面向对象需求分析

面向对象基本概念

统一建模语言

UML关系

结构化设计

系统设计概述

结构化设计

结构化设计基本原理

结构化设计原则

内聚和耦合

面向对象设计

面向对象设计流程

设计原则


需求分析概述

需求工程

软件需求:是指用户对系统在功能、行为、性能、设计约束等方面的期望。是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明。

软件需求分为需求开发和需求管理两大过程,如下图所示。

需求分类

按需求内容可分为业务需求、用户需求、系统需求三类。

(1)业务需求:由客户提出的一个宏观的功能需求。

(2)用户需求:设计员去调查需求中涉及的每个用户的具体需求。

(3)系统需求:经过整合,形成最终的系统需求,包括功能、性能、设计约束等。

1)功能需求:软件必须完成的基本动作。

2)性能需求:说明软件或人与软件交互的静态或动态数值需求,如系统响应速度、处理速度等。

3)设计约束:受其他标准硬件限制等方面的影响。

从客户角度可分为基本需求、期望需求、兴奋需求三类。

(1)基本需求:需求明确规定的功能。

(2)期望需求:除了基本需求外,客户认为理所应当包含在内的其他功能。

(3)兴奋需求:客户未要求的其他功能需求,会浪费项目开发时间和成本。

结构化需求分析

基本概念

结构化需求分析自顶向下,逐步分解,是面向数据的,强调分析对象的数据流,需要建立:功能模型(数据流图)、行为模型(状态转换图)、数据模型(E-R图)以及数据字典(数据元素、数据结构、数据流、数据存储、加工逻辑、外部实体),如下图所示。

数据流图

数据流图描述数据在系统中如何被传送或变换,以及如何对数据流进行变换的功能或子功能,用于对功能建模,数据流图如下图所示。

数据流图是可以分层的,从顶层(即上下文无关数据流)到0层、1层等,顶层数据流图只含有一个加工处理表示整个管理信息系统,描述了系统的输入和输出,以及和外部实体的数据交互。

数据字典

数据字典是用来定义在数据流图中出现的符号或者名称的含义,在数据流图中,每个存储、加工、实体的含义都必须定义在数据流图中,并且父图和子图之间这些名称要相同,示例如下图所示。

E-R

在E-R模型中,使用椭圆表示属性(一般没有)、长方形表示实体、菱形表示联系,联系的两端要填写联系类型,示例如下图所示。

状态转换图

状态转换图通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。此外,状态转换图还指明了作为特定事件的结果系统将做哪些动作,如下图所示。

面向对象需求分析

面向对象基本概念

对象:基本的运行实体,为类的实例,封装了数据和行为的整体,如学生、汽车等真实存在的实体。对象具有清晰的边界、良好定义的行为和可扩展性。

类:是对象的抽象,定义了一组大体相似的对象结构,定义了数据和行为。包括实体类(用于对必须存储的信息和相关行为建模的类,是需要长久保存且一直存在的类)、边界类(系统内部与系统外部的业务主角之间进行交互建模的类)、控制类(用于对一个或几个用例所特有的控制行为进行建模,在用例执行过程中被动出现的特定行为的类)。

消息:对象之间进行通信的一种构造称为消息。

继承:父类和子类之间共享数据和方法的机制。是类之间的一种关系。

覆盖:子类在原有父类接口的基础上,用适合于自己要求的实现去置换父类中的相应实现。即在子类中重定义一个与父类同名同参的方法。

函数重载:与覆盖要区分开,函数重载与子类父类无关,且函数是同名不同参数。

多态:不同的对象收到同一个消息时产生完全不同的反应。包括参数多态(不同类型参数多种结构类型)、包含多态(父子类型关系)、过载多态(类似于重载,一个名字不同含义)、强制多态 (强制类型转换)四种类型。多态由继承机制支持。

静态成员是不同的对象之间共享数据的方式,值可修改,静态方法只能访问静态成员。

静态类型是指一个对象的类型在编译时就确定,动态类型指对象类型在运行时才能确定。

静态绑定(静态分配)是基于静态类型的,在程序执行前方法已经被绑定。

动态绑定是基于动态类型的,运行时根据变量实际引用的对象类型决定调用哪个方法,动态绑定支持多态。

封装:一种信息隐蔽技术,其目的是使对象的使用者和生产者分离,也就是使其他开发人员无需了解所要使用的软件组件内部的工作机制,只需知道如何使用组件。

类的属性和方法分为public(所有类都可以访问)、private(仅本类内部可以访问)、protect(本类内部可访问、继承子类也可以访问)。

统一建模语言

统一建模语言(Uinfied Modeling Language,UML)是统一建模语言,和程序设计语言并无关系。从总体上来看,UML结构包括构造块、规则和公共机制三个部分。

(1)构造块。UML有三种基本的构造块,分别是事物(thing)、关系(relationship)和图 (diagram)。事物是UML的重要组成部分,关系把事物紧密联系在一起,图是多个相互关联的事物的集合。

(2)规则。规则是构造块如何放在一起的规定。

(3)公共机制。公共机制是指达到特定目标的公共UML方法。

UML关系

依赖:一个事物的语义依赖于另一个事物的语义的变化而变化。

关联:是一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合,都是部分和整体的关系,其中组合事物之间关系更强。两个类之间的关联,实际上是两个类所扮演角色的关联,因此,两个类之间可以有多个由不同角色标识的关联。

泛化:一般/特殊的关系,子类和父类之间的关系。

实现:一个类元指定了另一个类元保证执行的契约。

UML图

(1)用例图。用例图描述了系统提供的一个功能单元,帮助开发人员以一种可视化的方式理解系统的功能需求。

(2)类图。类图表示不同的实体如何彼此相关,换句话说,它显示了系统的静态结构。类图可用于表示逻辑类(通常就是业务人员所谈及的事物种类)和实现类(程序员处理的实体)。

(3)序列图。序列图显示具体用例的详细流程。它几乎是自描述的,并且显示了流程中不同对象之间的调用关系,同时还可以很详细地显示对不同对象的不同调用。

(4)状态图。状态图表示某个类所处的不同状态和该类的状态转换信息。

(5)活动图。活动图表示在处理某个活动时,两个或多个类对象之间的过程控制流。活动图可用于在业务单元的级别上对更高级别的业务过程进行建模,或者对低级别的内部类操作进行建模。

(6)组件图。组件图提供系统的物理视图,显示系统中的软件对其他软件的依赖关系。

(7)部署图。部署图表示该软件系统如何部署到硬件环境中。用于显示该系统不同的组件将在何处运行,以及将彼此如何通信。

结构化设计

系统设计概述

系统设计主要目的:为系统制定蓝图,在各种技术和实施方法中权衡利弊,精心设计,合理地使用各种资源,最终勾画出新系统的详细设计方法。

系统设计方法:结构化设计方法,面向对象设计方法。

系统设计的主要内容:概要设计、详细设计。

概要设计基本任务:又称为系统总体结构设计,是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图,即系统结构图。

详细设计的基本任务:模块内详细算法设计、模块内数据结构设计、数据库的物理设计、其他设计(代码、输入/输出格式、用户界面)、编写详细设计说明书、评审。

结构化设计

结构化设计主要包括以下四点内容。

(1体系结构设计:定义软件的主要结构元素及其关系。

(2)数据设计:基于实体联系图确定软件涉及的文件系统的结构及数据库的表结构。

(3)接口设计:描述用户界面,软件和其他硬件设备、其他软件系统及使用人员的外部接口,以及各种构件之间的内部接口。

(4)过程设计:确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法。

结构化设计基本原理

(1)抽象化。常用的抽象化手段有过程抽象、数据抽象和控制抽象。

过程抽象。任何一个完成明确功能的操作都可被使用者当作单位的实体看待,尽管这个操作时机上可能由一系列更低级的操作来完成。

数据抽象。与过程抽象一样,允许设计人员在不同层次上描述数据对象的细节。

与过程抽象和数据抽象一样,控制抽象可以包含一个程序控制机制而无须规定其内部细节。

(2)自顶向下,逐步细化。将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。

(3)模块化。将一个待开发的软件分解成若干个小的简单的部分——模块,每个模块可独立地开发、测试,最后组装成完整的程序。这是一种复杂问题的“分而治之”的原则。模块化的目的是使程序结构清晰,容易阅读,容易理解,容易测试,容易修改。

(4)模块独立。每个模块完成一个相对特定独立的子功能,并且与其他模块之间的联系简单。衡量度量标准有两个:模块间的耦合和模块的内聚。模块独立性强必须做到高内聚低耦合。

结构化设计原则

结构化设计原则包括:

(1)保持模块的大小适中。

(2)尽可能减少调用的深度。

(3)多扇入,少扇出。

(4)单入口,单出口。

(5)模块的作用域应该在模块之内。

(6)功能应该是可预测的。

内聚和耦合

模块的设计要求独立性高,就必须高内聚,低耦合。内聚是指一个模块内部功能之间的相关性,

耦合是指多个模块之间的联系,内聚程度从低到高见表3-5-1。耦合程度从低到高见表3-5-2。

表3-5-1内聚程度

内聚分类

定义

记忆关键字

偶然内聚

一个模块内的各处理元素之间没有任何联系

无直接关系

逻辑内聚

模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能

逻辑相似、参数决定

时间内聚

把需要同时执行的动作组合在一起形成的模块

同时执行

过程内聚

一个模块完成多个任务,这些任务必须按指定的过程执行

指定的过程顺序

通信内聚

模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据

相同数据结构、相同输入输出

顺序内聚

一个模块中的各个处理元素都密切相关于同一功能且必须顺序执行,前一个功能元素的输出就是下一个功能元素的输入

顺序执行、输入为输出

功能内聚

最强的内聚,模块内的所有元素共同作用完成一个功能,缺一不可

共同作用、缺一不可

表3-5-2耦合程度

耦合分类

定义

记忆关键字

无直接耦合

两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,不传递任何信息

无直接关系

数据耦合

两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递

传递数据值调压

标记耦合

两个模块之间传递的是数据结构

传递数据结构

控制耦合

一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择地执行模块内的某一功能

控制变量、选择执行某一功能

外部耦合

模块间通过软件之外的环境联合(如I/O将模块耦合到特定的设备、格式、通信协议上)时

软件外部环境

公共耦合

通过一个公共数据环境相互作用的那些模块间的耦合

公共数据结构

内容耦合

当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部时

模块内部关联

面向对象设计

面向对象设计流程

面向对象设计流程如下图所示。

设计原则

面向对象设计原则如下所述。

(1)单一职责原则:设计目的单一的类。

(2)开放一封闭原则:对扩展开放,对修改封闭。

(3)李氏(Liskov)替换原则:子类可以替换父类。

(4)依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程。

(5)接口隔离原则:使用多个专门的接口比使用单一的总接口要好。

(6)组合重用原则:要尽量使用组合,而不是继承关系达到重用目的。

(7)迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解。

  • 18
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值