文章目录
- 1 面向对象的软件工程
-
- 1.1 软件工程定义
- 1.2 面向对象三大特征
- 1.3 软件生命周期
- 1.4 需求分析
- 2 结构化分析
-
- 2.1 数据流图
- 2.2 数据字典
- 3 结构化与面向对象
- 4 面向对象分析
-
- 4.1 OOA的基本过程
- 4.2 需求陈述
- 4.3 建立对象模型
- 4.4 建立动态模型
- 4.5 建立功能模型
- 4.6 定义服务
1 面向对象的软件工程
1.1 软件工程定义
软件工程是研究和应用如何以【系统性的、规范化的、可定量的过程化方法】去【开发软件和维护软件】,以及如何【把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来】的学科。
OOSE,即Object-Oriented Software Engineering,面向对象的软件工程。
OOA,即Object-Oriented Analysis,面向对象分析。
软件工程与计算机科学差别:
2 结构化分析
需求分析的核心是建立分析模型,其中:
1、数据字典是分析模型的核心;
2、通过DFD(数据流图,Data Flow Diagram),建立系统的功能模型。功能建模的思想就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止;
4、通过STD(状态迁移图,State Transition Diagram),建立系统的行为模型。
其中,DFD和E-R图描述了系统的静态方面的信息,而STD描述了系统行为方面的信息。
2.1 数据流图
数据流图也称为气泡图、泡泡图。数据流图:
1、可以表示任何一个(人工的、自动的、或混合的)系统中的数据流程;
2、每个表示加工的圆圈可能需要进一步分解以求得关于问题的全面理解;
3、 着重强调的是数据流程而不是控制流程。
DFD有四种类型的符 :
举个例子,下图是某个教材采购与销售管理系统的数据流图:
1、数据流图上所有图形符 只限于前述四种基本图形元素。
2、顶层数据流图上的数据流必须封闭在外部实体之间。
3、数据应通过加工流动,避免从一个数据存储直接流向另一个数据存储。
4、每个加工至少有一个输入数据流和一个输出数据流,且输入与输出数据流要平衡。
5、在数据流图中,需按层给加工框编 。编 表明该加工处在哪一层,以及上下层的父图与子图的对应关系。
6、规定任何一个数据流子图必须与它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致。
7、图上的每个元素都必须有名字。数据流和数据文件的名字应当是“名词”或“名词性短语”,表明流动的数据是什么。加工的名字应当是“动词+宾语”,表明做什么事情。
8、可以在数据流图中加入物质流,帮助用户理解数据流图。
9、数据流图中不可夹带控制流。
10、第一次画时可以忽略琐碎的细节,以集中精力于主要数据流。
下图是教材采购与销售管理系统二层数据流图L2.1:
2.2 数据字典
数据字典用于精确、严格地定义每一个与系统相关的数据元素(包括数据流、数据存储和数据项),并以字典式顺序将它们组织起来,使得用户和分析员对系统中的每个数据元素有相同的理解。在数据字典的每一个词条中应包含以下信息:
1、名称:数据对象或控制项、数据存储或外部实体的名字。
2、别名或编 。
3、分类:属于这些类别的哪一种:数据对象工据流据文件部实体制项(事件/状态)/p>
4、描述:描述内容或数据结构等。
5、何处使用:使用该词条(数据或控制项)的加工。
6、注释:数据量、峰值、限制和组织方式等。
数据字典中的符 如下:
3 结构化与面向对象
较早的软件开发使用的是结构程序设计方法,其定律是:
程序=算法+数据结构
即过程(函数)是一个独立的整体,数据结构(包含数据类型与数据)也是一个独立的整体。两者分开设计,以算法(函数或过程)为主。
结构化程序设计是一种面向过程的自顶向下的程序设计方法。结构化设计中模块和模块之间的关系被紧紧局限于信息流,试图通过信息流及其转换来认识系统,这限制了对模块之间众多关系的表达和体现,如继承、依赖。
流水线式的过程处理与人们日常处理问题的方式不一致。随着时间流逝,软件工程师越来越注重系统整体关系的表示和数据模型技术,并把数据结构与过程看作一个独立功能模块。于是程序定律被重新认识:
程序=过程+数据结构
上述思想符合现实世界中的事物特征,因为现实世界中区分事务主要依靠的就是事物各式各样的特征,包括事物不同的属性和特定的行为。于是集成化的软件开发方法——面向对象方法产生。在面向对象中,过程与数据结构被捆绑成一个对象,这样就不用为如何实现通盘的程序功能而费尽心机了。这时候,程序定义变为:
1、对象=过程+数据结构;
2、程序=对象+对象+…。
即程序就是许多对象在计算机中相继表现自己,而每个对象又单独是一个程序实体。
4 面向对象分析
分析的过程是提取系统需求的过程。分析工作包括三个内容:
1、理解需求;
2、表达需求;
3、验证需求。
分析过程中最重要的文档资料是软件需求规格说明书,在面向对象中主要由功能模型、动态模型和对象模型三个部分组成,其中对象模型是核心。
OOA(Object-Oriented Analysis,面向对象分析)的关键是识别出问题域内的类与对象,并分析它们相互间的关系,最终建立起问题域的简洁、精确、可理解的正确模型。
OOA的目的是建立需求模型,在这个过程中,相关领域知识非常关键。
4.1 OOA的基本过程
OOA就是抽取和整理用户需求并建立问题域精确模型的过程,过程中需要分析并陈述需求、用模型表示需求以及建立系统的分析模型。注意:分析人员必须向领域专家学习,特别要正确认识继承关系,其建立是知识的抽取过程。
需求的3个子模型:
1、对象模型(静态结构,类与关联);
2、动态模型(交互次序,顺序图与状态图);
3、功能模型(数据变换,用例)。
复杂问题(大型系统)的对象模型通常由5个层次组成:
1、主题层;
2、类与对象层;
3、结构层;
4、属性层;
5、服务层。
主题是指导读者理解大型、复杂模型的一种机制。通过划分主题,把一个大型、复杂的对象模型分解成几个不同的的概念范畴。
面向对象分析(OOA,Object-Oriented Analysis)的过程:
1、寻找类与对象;
2、识别主题;
3、定义属性;
4、定义服务,建立动态模型与功能模型。
4.2 需求陈述
需求陈述的内容有:
1、问题范围;
2、功能需求;
3、性能需求;
4、应用环境;
5、假设条件。
注意事项如下:
1、语法正确:慎重选用名词、动词、形容词和同义词;
2、把需求与设计决策区别开;
3、可简可繁;
4、并非一陈不变,而是随着认识的深入不断地完善;
5、与领域专家密切配合,共同提炼整理需求;
6、必要时可先建立原型系统。
下图是某银行开发一个自动取款机系统的示例:
4.4 建立动态模型
建立动态模型的步骤(共3步):
1、编写典型交互行为的脚本;
2、提取脚本中的事件;
3、利用UML中的顺序图和状态图建立动态模型。
脚本原意为“拍摄电影等所依据的本子,里面记载台词、故事情节”。在动态模型中,脚本指系统在某一执行期间内出现的一系列事件。在用例模型中,脚本指用例的实例,表示系统的一次具体执行过程。编写脚本时,应先编写正常情况的脚本,再考虑特殊情况的,最后考虑出错情况的脚本。
示例一,ATM系统的正常情况脚本:
1、ATM请储户插卡:储户插入一张现金兑换卡;
2、ATM接受该卡并读它上面的分行代码和卡 ;
3、ATM要求储户输入密码:储户输入自己的密码;
4、ATM请求总行验证卡 和密码:总行要求分行核对储户密码,然后通知ATM说这张卡有效;
5、ATM要求储户选择事务类型(取款、转账、查询等):储户选择“取款”;
6、ATM要求储户输入取款额:储户输入880;
7、ATM确认取款额。在预先规定的限额内要求总行处理这个事务;总行把请求转给分行,该分行成功地处理完这项事务并返回该账户的新余额;
8、ATM吐出现金并请储户拿走这些现金:储户拿走现金;
9、ATM问储户是否继续办理事务:储户回答“不”;
10、ATM打印账单,退出现金兑换卡,请储户拿走它们:储户取走账单和卡;
11、ATM请储户插卡。
示例二,ATM系统的异常情况脚本:
1、ATM请储户插卡:储户插入一张现金兑换卡;
2、ATM接受这张卡并顺序读它上面的数字;
3、ATM要求密码:储户误输入8888;
4、ATM请求总行验证输入的数字和密码:总行在向有关分行咨询之后拒绝这张卡;
5、ATM显示“密码错”,并请储户重新输入密码:储户输入1234;ATM请总行验证后知道这次输入的密码正确;
6、ATM请储户选择事务类型:储户选择“取款”;
7、ATM询问取款额:储户改变主意不想取款了,他按下“取消”键;
8、ATM退出现金兑换卡,并请储户拿走它:储户拿走他的卡;
9、ATM请储户插卡。
4.5 建立功能模型
课件未给出详细内容。
4.6 定义服务
定义服务:
1、识别常规行为;
2、从事件中导出操作(顺序图、状态图);
3、从功能模型中提取操作;
4、利用继承减少冗余操作;
5、反复审查。
END
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!