资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二章 软件分析与设计基础,本章包含的内容:,1,)面向过程分析与设计,2,)面向对象分析与设计,3,)数据库建模与设计,本章重点:,1,)掌握面向过程分析与设计的思想与方法;,2,)熟练掌握面向对象分析与设计的思想与方法;,3,)熟练掌握数据库设计的思想与方法。,经验和教训表明,:,1),软件开发需要遵循软件工程方法论的指导,软件分析与设计质量决定软件产品的质量,2),合理的软件分析与设计建立在对软件需求正确理解的基础上,对软件需求的深入理解是软件开发工作获得成功的前提和关键,3),要开发出好的软件产品,首先必须知道用户的需求,并在充分了解用户需求的基础上,对用户的业务需求建模,并进行相应的分析与设计,才能生产出真正符合用户要求且生命周期长的软件产品。,2.1,面向过程分析与设计,传统的软件工程方法,:,结构化分析(,Structrued Analysis,,,SA,),结构化设计(,Structrued Design,,,SD,)。,2.1,面向过程分析与设计,2.1.1,结构化分析,结构化分析是,20,世纪,70,年代后期提出的,是一种基于功能分解的需求分析方法,适用于分析大型数据处理系统。与结构化设计,(SD),一起联合使用,能较好地实现一个软件系统的研制。,它是一种面向数据流,自顶向下、逐步求精进行需求分析的方法。,它通常用,数据流图,表达需求,以,数据字典,表示数据的逻辑定义。,2.1,面向过程分析与设计,SA,方法的特点,:,核心思想是自顶向下、逐步求精,基本手段是分解和抽象,所谓分解就是把大问题分割成若干小问题,把复杂度降低到人们可以掌握的程度,然后分别解决。,所谓抽象就是把细节略去,先考虑最本质的东西。,使用数据流图、数据字典等规范化工具描述需求。,2.1,面向过程分析与设计,使用,SA,方法进行软件需求分析的步骤,:,(1),建立当前系统的具体模型,分析当前系统和现实环境,描述当前系统的工作方式,客观地反映现实世界的实际情况。,(2),抽象出当前系统的逻辑模型,就是在理解当前系统“怎么做”的基础上,抽取出“做什么”的本质,从当前系统的具体模型抽象出当前系统的逻辑模型。,2.1,面向过程分析与设计,(3),建立目标系统的逻辑模型,所谓目标系统是指将要开发的由计算机处理的系统。方法如下:,在数据流图上把目标系统与当前系统在逻辑上不同的部分找出来,这部分就是要改变的部分。将要改变部分抽象为一个加工,再进行逐步分解,最后就可获得目标系统的逻辑模型。,2.1,面向过程分析与设计,1.,数据流图,数据流是数据在系统内的传输途径,数据流图从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的变换过程。,数据流图是结构化系统分析的主要工具,它去掉了具体的组织机构、工作场所、物质流等,仅反映信息和数据存储、流动、使用以及加工的情况。,2.1,面向过程分析与设计,数据流图的基本元素,包括数据流、加工、数据存取文件、输入数据的源点和输出数据的汇点,4,类。常采用如图,2-1,所示的图形符号:,图,2-1,数据流图基本图形符号,2.1,面向过程分析与设计,绘制数据流图时,应先找出系统的数据源点与汇点及对应的输入数据流与输出数据流,然后从输入数据流,(,即系统的源点,),出发,按照系统的逻辑需要,逐步画出系列逻辑加工,直到所需的输出数据流,(,即系统的汇点,),。,2.1,面向过程分析与设计,数据流在传递过程中,需要一些加工处理。常见的加工关系及对应的图形符号如图,2-2,所示。,图,2-2,数据流图加工关系,2.1,面向过程分析与设计,数据流图应用举例:,取款单信息,付款,储户,核查,登录,账卡,存折,存折信息,取款信息,银行取款过程的数据流图,反馈信息,付款信息,可取款信息,2.1,面向过程分析与设计,分层数据流图,较复杂的实际问题中,仅用一个数据流图很难表达数据处理过程和数据加工情况,需要采用“,先全局后局部,先整体后细节,先抽象后具体,”的逐步求精原则,按照问题的层次结构逐步分解。,首先确定顶层数据流图,把整个数据处理过程抽象为一个加工,它的输人数据和输出数据实际上反映了系统与外界环境的接口,这就是顶层数据流图。,然后在上一层数据流图的基础上进一步细化,直到数据流图的加工不能再分解为止。,2.1,面向过程分析与设计,2.1,面向过程分析与设计,画数据流图的步骤和原则,画数据流图的基本步骤是,自外向内,自顶向下,逐层细化,完善求精,,并且需要遵循以下基本原则:,顶层数据流图上的数据流必须封闭在外部实体之间。,每个加工至少有一个输入数据流和一个输出数据流。,在数据流图中,需按层给加工进行编号。编号应表明该加工处在哪一层,以及与上下层的父图与子图的对应关系。,任何一个数据流子图必须与它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致,即父图与子图的平衡。,图上每个元素都必须有名字,加工的名字应当表明做什么事情。,2.1,面向过程分析与设计,数据流图画法举例:,(,培训中心管理系统数据流图),2.1,面向过程分析与设计,2.1,面向过程分析与设计,2.1,面向过程分析与设计,2.1,面向过程分析与设计,2.,数据字典,数据字典是各类数据描述的集合。,它通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。,通常包括数据项、数据结构、数据流、数据存储、处理过程和外部实体等,6,个部分。,2.1,面向过程分析与设计,数据项,数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构。对数据项的描述通常包括以下内容。,数据项描述,数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,2.1,面向过程分析与设计,数据结构,数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成(嵌套数据结构),或由若干个数据项和数据结构混合组成。对数据结构的描述通常包括以下内容。,数据结构,数据结构名,含义说明,组成:,数据项或数据结构,2.1,面向过程分析与设计,数据流,数据流是数据结构在系统内的传输路径。对数据流的描述通常包括以下内容。,数据流描述,数据流名,说明,数据流来源,数据流去向,组成:,数据结构,,平均流量,高峰期流量,数据存储,数据存储是数据结构停留或保存的地方。数据存储的描述通常包括以下内容。,数据存储,数据存储名,说明,编号,流入的数据流,流出的数据流,组成:,数据结构,,数据量,存取方式,2.1,面向过程分析与设计,处理过程,处理过程应描述处理逻辑的功能,详细地描述其输入输出的数据流以及这些数据的基本转换路径和策略说明性信息,对处理过程的描述通常包括以下内容。,处理过程,处理过程名,编号,说明,输入:,数据流,,输出:,数据流,,处理:,简要说明,2.1,面向过程分析与设计,外部实体,外部实体是系统的“人,-,机”界面,系统的数据流由外部实体流入,经过加工处理之后,向外部实体流出。外部实体的描述如下。,外部实体,=,外部实体的名称,编号,输入:,数据流,,输出:,数据流,2.1,面向过程分析与设计,3.,实例,-,学籍管理分析,学籍管理涉及的内容比较多,业务逻辑也较复杂。在不失一般性的基础上,本实例简化了学籍管理的业务逻辑,.,(,1,)需求描述,工作内容:,建立学生的学籍,汇总每学期学生的学分,学生每门课程的的考试成绩,学生的平均成绩,汇总各分数段的人数,各种查询,2.1,面向过程分析与设计,涉及人员:,管理人员,班主任,任课教师,学生,系统初步:,系统性质:,MIS,软件。,系统使用者:管理人员、班主任、教师、学生等。,系统运行环境:网络运行。,2.1,面向过程分析与设计,表,2-1,学籍管理主要功能表,功能名称,功能说明,学生管理,登记学生的基本信息(姓名、性别、班级等),并提供查询功能。,课程管理,登记课程基本情况(课程名称、开课学期、课程类型、学分等),提供查询,教师管理,登记教师基本情况(姓名、年龄、性别、学历等),提供查询统计,成绩管理,登记学生各门课程的考试成绩、提供查询、统计功能,授课管理,登记教师讲授课程、授课地点、授课学期,提供查询功能,编码维护,维护系统中使用的编码(如职称编码、学院编码、班级编码等),2.1,面向过程分析与设计,(,2,)分析设计顶层数据流图,管理人员、教师、班主任、学生等是数据输入的源点和数据输出的汇点。,学生基本信息、教师信息、课程信息、教学计划、考试成绩等是数据存储文件。,图,2-4,学籍管理顶层数据流图,2.1,面向过程分析与设计,(,3,)逐步细化数据流图,根据表,2-1,中列出的学籍管理的主要功能,将学籍管理加工细化分解为学生管理、课程管理、教师管理、成绩管理、授课管理和编码维护等子加工。,图,2-5,学籍管理,1,层数据流图,2.1,面向过程分析与设计,根据实际业务,分析各处理流程,直到数据流图中出现的每个加工处理都不能再分解为止。,成绩管理管理可以继续细化为如图,2-6,所示的成绩管理数据流图。,图,2-6,成绩管理数据流图,2.1,面向过程分析与设计,图,2-6,所示的成绩录入和成绩查询都可以继续分解。例如:成绩录入加工可以继续细化为增加成绩、修改成绩、删除成绩等子加工,为了方便成绩录入,还需要班级学生名单查询子过程,因此图,2-6,所示的成绩管理的,2,层数据流图的成绩录入加工可以继续细化分解为图,2-7,所示成绩录入的,3,层数据流图。,图,2-7,细化后的成绩录入数据流图,2.1,面向过程分析与设计,(,4,)制定整理数据字典,数据字典是系统中各类数据描述的集合。通常包括,数据项、数据结构、,数据流,、数据存储,、处理过程和外部实体等,6,个部分。,数据项的描述,以图,2-7,中的“学号”数据项为例说明:,数据项名称:学号,含义:唯一标识每个学生,别名:,类型:字符型,长度:,5,取值范围:,00000,至,99999,取值含义:前,2,位标别该学生所在年级,后,3,位为顺序编号。,2.1,面向过程分析与设计,数据流的描述,以“学生名单”数据流为例。,数据流名称:学生名单,说明:某班全部学生的名单,数据流来源:班级学生名单查询,数据流去向:班级学生名单显示,组成(包含的数据项):班级、学号、姓名,平均流量:,高峰期流量:,2.1,面向过程分析与设计,数据存储的描述,以数据存储“考试成绩”为例。,数据存储:考试成绩,说明:保存学生各门课的考试成绩,流入数据流:新增的成绩、修改后的成绩,流出数据流:原成绩,组成:学号、姓名、成绩,数据量:,3000,(学生)*,15,(课程),存取方式:随机存取,2.1,面向过程分析与设计,处理过程的描述,以处理过程“增加成绩”为例。,处理过程:增加成绩,说明:录入一个或一批学生某门课程的考试成绩,输入:添加成绩要求,输出:新增的成绩,处理:在考试成绩数据存储中增加一个或一批学生的考试成绩。,2.1,面向过程分析与设计,2.1.2,结构化设计,通常把设计工作划分为,概要设计和详细设计,两个阶段。,概要设计阶段的主要任务是,通过仔细分析需求规格说明,对软件进行功能分解,从而把软件划分为模块,并且设计出完成预定功能的模块结构。,详细设计阶段的主要任务是,详细地设计每个模块,确定完成每个模块功能所需要的算法和数据结构。,2.1,面向过程分析与设计,结构化设计的主要原则,如下:,抽象,就是把事物本质的共同特性提取出来而不考虑其他细节。软件设计中考虑模块化解决方案时,可以定出多个抽象级别。抽象的层次从概要设计到详细设计逐步降低。,模块化,模块是指把一个待开发的软件分解成若干小的简单的部分。每个模块可以完成一个特定的子功能,各个模块可以按一定的方法组装起来成为一个整体,从而实现整个系统的功能。,2.1,面向过程分析与设计,信息隐蔽,指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。,模块独立性,模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。,2.1,结构化开发方法,内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。按照内聚性由弱到强的顺序可分为:,偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚,。,耦合性是模块间互相连接紧密程度的度量。按照耦合性由弱到强的顺序可分为:,非直接耦合、数据耦合、标记耦合、,控制耦合、外部耦合、,公共耦合、,内容耦合,。一般来说,设计软件时应尽量使用数据耦合,减少控制耦合,限制外部环境耦合和公共耦合,杜绝内容耦合。,耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合。,2.1,面向过程分析与设计,1),非直接耦合,。,如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。,2),数据耦合。,如果一个模块访问另一个模块时,彼此之间是通过简单数据参数,(,不是控制参数、公共数据结构或外部变量,),来交换 输入、输出信息的,则称这种耦合为数据耦合。,2.1,面向过程分析与设计,3),标记耦合。,如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。,4)控制耦合。,如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。,5)外部耦合。,一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。,2.1,面向过程分析与设计,6)公共耦合。,若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。,7),内容耦合。,当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。,2.1,面向过程分析与设计,1),偶然性内聚。,偶然性内聚又称为巧合性内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块。,2),逻辑性内聚。,这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。,2.1,面向过程分析与设计,3),时间性内聚。,如果一个模块内的几个功能必须在同一时间内执行,但这些功能只是因为时间因素关联在一起,则称为时间性内聚。,4),过程性内聚。,如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程性内聚。,5),通信性内聚。,如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。,6),信息性内聚。,如果一个模块内完成许多功能,每个功能都有各自的入口点,并且代码相对独立,但所有功能都在相同的数据结构上完成,则该模块具有信息性内聚。,7),功能性内聚。,一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割,则称该模块为功能内聚模块。,2.1,面向过程分析与设计,1.,概要设计,概要设计的基本任务是,:,(,1,)设计软件系统结构,在需求分析阶段,已经把系统分解成层次结构,而在概要设计阶段,需要进一步分解,划分为模块以及模块的层次结构。划分的具体过程是:,将一个复杂的系统按功能划分成模块;,确定每个模块的功能;,确定模块之间的调用关系;,确定模块之间的接口,即模块之间传递的信息;,评价模块结构的质量。,2.1,面向过程分析与设计,(,2,)数据结构及数据设计,数据设计是实现需求定义和规格说明过程中提出的数据对象的逻辑表示。,数据设计的具体任务是:,确定输入、输出文件的详细数据结构;,结合算法设计,确定算法所必需的逻辑数据结构及其操作;,确定对逻辑数据结构所必须的那些操作的程序模块,限制和确定各个数据设计决策的影响范围;,需要与操作系统或调度程序接口所必需的控制表进行数据交换时,确定其详细的数据结构和使用规则;,数据的保护性设计;,防卫性、一致性、冗余性设计。,2.1,面向过程分析与设计,(,3,)编写概要设计文档。,概要设计说明书,数据库设计说明书,集成测试计划等。,(,4,)概要设计文档评审。,对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性、有效性,各部分之间的一致性等都要进行评审。,2.1,面向过程分析与设计,概要设计的设计过程为,:,(1),分析数据流图,弄清楚数据流加工的过程;,(2),根据数据流图确定数据流图的类型;,(3),从数据流图导出系统的初始软件结构图;,(4),改进软件结构图,直到符合要求为止;,(5),复查。,2.1,面向过程分析与设计,数据流图的类型,转换处理型,是对输入数据流进行转换而得到输出数据流的处理。,处理过程由输入数据流、变换数据流和输出数据流,3,步组成。,输入,加工,输入信息,转换,加工,内部输入,输入,加工,内部结果,输出信息,2.1,面向过程分析与设计,事务处理型,是对输入数据流进行某种加工后,按加工的结果选择一个输出数据流继续执行的处理。,事务处理中,输入数据流称为事务流,加工称为事务中心,若干平行数据流称为事务路径。,事务,中心,事务流,P2,事务路径,2,P1,事务路径,1,P3,事务路径,3,2.1,面向过程分析与设计,常用的软件结构设计工具是结构图(,SC,,,StructureChart,),也称程序结构图。使用结构图描述软件系统的层次和分块结构关系,它反映了整个系统的功能实现以及模块与模块之间的联系与通讯。,表示模块,框内用文字标记模块名。,箭头表示模块间的调用关系;边上的小箭头表示调用时模块间传送的数据,小箭头的方向表示传送信息的方向。,表示上属模块有条件地调用下属模块。,表示上属模块重复调用下属模块。,2.1,面向过程分析与设计,2.1,面向过程分析与设计,转换分析,使用转换分析技术可以把转换型处理数据流图转换为标准结构。(有了标准结构就可根据软件结构的度量准则、模块化准则、模块独立性准则完善软件结构,从而得到结构良好的最终结构图)。,转换分析步骤为:确定数据流图的类型;确定输入流、转换流、输出流的流界;进行一级分解,设计上层模块;进行二级分解,设计中下层模块;进一步细化。,2.1,面向过程分析与设计,(,1,)确定数据流图的类型,(,2,)确立流界,主要确定输入流和输出流的边界,独立出中心流。,找出输入流的终点,找出输出流的起点,找出中心加工,4,号,加工,1,号,加工,A,2,号,加工,B,中心,加工,C,3,号,加工,D,E,F,输入,输出,转换流,2.1,面向过程分析与设计,(3),进行一级分解,设计上层模块。,在中心加工位置设计一个主模块,命名为,M,,其功能是控制整个软件结构,完成系统所要做的各项工作,,为输人流设计一个输入控制模块,功能是为主模块提供输入信息。,为输出流设计一个输出控制模块,CO,,功能是为主模块提供数据输出。,为中心设计一个转换控制模块,CT,,功能是控制所有内部数据的操作。,M,CT,CI,CO,C,C,D,D,2.1,面向过程分析与设计,(4),进行二级分解,设计中下层模块。,自顶向下,逐步细化,为第一层的每一个输入模块、输出模块、转换模块设计从属模块,.,为输入流加工设计一个输入模块,向上属模块提供输入信息,而这个模块又需要两个下属模块,一个为此模块输入信息,另一个将接收的信息转换为上属模块所需的信息。如果输入模块还有输入模块时,又要重复上属过程,若输入模块是物理输入端时,则细化工作停止。,CI,C,取,B,B,转换,B,B,C,A,取,A,转化,A,A,B,2.1,面向过程分析与设计,为输出流加工设计一个输出模块,接收中心加工的输出信息,而这个模块又需要两个下属模块,一个将接收的信息转换为输出的形式,另一个将它们输出。如果输出模块还有输出模块时,又要重复上属过程,若输出模块是物理输出端时,则细化工作停止。,CO,D,转换,D,D,送,E,E,E,转换,E,送,F,F,F,2.1,面向过程分析与设计,为中心加工设计转换模块。,(5),进一步细化,对上述采用转换分解技术方法得到的结构图按照设计标准进一步细化。,CT,处理,C,C,D,C,D,2.1,面向过程分析与设计,事务分析,(,1,)确定数据流图的类型,(,2,)确立流界,从数据流图中找出事务中心,确定事务流,确定事务路径,1,事务流,P2,P1,P3,事务中心,事务路经,2.1,面向过程分析与设计,(,3,),进行一级分析,设计上层模块。,事务分析的任务是从数据流图中导出具有接受分支和发送分支的软件结构。对事务中心设计“事务控制”模块;对事务流设计“接受事务模块;对事务路径,设计“发送事务模块。,事务控制,接受事务,发送事务,2.1,面向过程分析与设计,(4),进行二级分解,设计中下层模块,。,对于接受分支,可用类似于转换处理型数据流图中对输人数据流的分析方法设计中下层模块。,对于发送分支,在发送事务模块下为每个事务路径设计一个事务处理模块。这一层称为事务层。在事务层模块下,沿各事务路径进行分析,进一步细化,设计动作层模块及细节层模块等。,2.1,面向过程分析与设计,好的设,计准则:,模块独立性高。,模块规模适中。,深度、宽度适度,作用域在控制域内。,接口和界面简单。,模块的出口、入口为单入口、单出口。,功能可预测。,2.1,面向过程分析与设计,2.,详细设计,详细设计的任务是为软件结构图中的每个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。,常见设计工具有:,图形工具:程序流程图,,N-S,(方框图),,PAD,(问题分析图);,表格工具:判定表;,语言工具:,PDL,(伪码)。,2.1,结构化开发方法,方框图(,N-S,图)。,2.1,面向过程分析与设计,2.1,面向过程分析与设计,2.2,面向对象分析与设计,面向对象方法和技术是自,20,世纪,80,年代以来逐渐形成的一种分析问题和解决问题的新方法,它的基本出发点是尽可能按照人类认识世界的方法和思维方式来分析和解决问题。,面向对象方法不把程序看作是,工作在数据上的一系列过程或函数的集合,,而是把程序看作是,相互协作而又彼此独立的对象的集合,。,2.2,面向对象分析与设计,面向对象软件开发方法又称为,OOSD,(,Object-Oriented Software Development,)。,OOSD,包括面向对象分析(,OOA,)、面向对象设计(,OOD,)和面向对象程序设计(,OOP,),3,个方面。,OOP,是基础,,OOA,和,OOD,是应用,OOP,的机制。所以应用,OOSD,时,必须使用面向对象程序设计语言。,2.2,面向对象分析与设计,2.2.1,传统软件分析设计的问题,(1),传统的软件分析技术难以应对需求的不断变化,(2),传统软件开发方法无法实现高效的软件复用,(3),传统软件设计方法难以实现从分析到设计的直接过渡,2.2,面向对象分析与设计,2.2.2,面向对象分析与设计的主要特点,(1),按照人类习惯的思维方法,对软件开发过程所有阶段进行综合考虑,传统的面向过程的设计方法以算法为核心,将,数据和过程,作为相互独立的部分,程序代码用于处理这些数据,面向对象的方法以对象为核心,强调模拟现实世界中的概念而不是算法,尽量用符合,人类认识世界的思维方式,来渐进地分析、解决问题,2.2,面向对象分析与设计,(,2,)软件生存期各阶段所使用的方法、技术具有高度的连续性,传统的软件开发过程把一个充满回溯的软件开发过程硬性地分割为几个阶段,而且各个阶段所使用的模型、描述方法不相同。,面向对象的方法使用喷泉模型作为其工作模型,软件生存期各阶段没有明显的界限,开发过程回溯重叠,使用相同的描述方法和模型,使得软件生存期各阶段所使用的方法、技术具有高度的连续性。,2.2,面向对象分析与设计,(3),软件开发各阶段有机集成,有利于系统的稳定性,OOA,、,OOD,与,OOP,有机地集成在一起,使开发过程始终围绕着建立问题领域的对象,(,类,),模型进行,且各阶段解决的问题又各有侧重。,(4),具有良好的重用性,由于对象具有的封装性和信息隐蔽,使得对象的内部实现与外界隔离,具有较强的独立性,因此,对象类提供了较理想的可重用的软件成分。,2.2,面向对象分析与设计,2.2.3,面向对象建模,面向对象分析与设计从,3,种角度建立模型:,1),使用对象模型描述系统数据结构,定义了做事情的实体,2),使用动态模型描述系统动态的协作及控制结构,规定了什么时候做,3),使用功能模型描述系统功能,系统应该“做什么”,2.2,面向对象分析与设计,准备知识:,(1),对象,。,对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。,(2),对象的状态和行为,。,对象具有状态,一个对象用数据值来描述它的状态。,对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。,对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。,2.2,面向对象分析与设计,(,3,),类,具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。,类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。,类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。,2.2,面向对象分析与设计,(,4,),消息和方法,对象之间进行通信的结构叫做消息。,在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。,发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。,类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。,2.2,面向对象分析与设计,(,5,),面向对象的特征,封装性:将对象的特性(属性)和行为(方法)包装在一起。它实现了信息的隐蔽作用,使我们通过类的方法来操作该类的对象,而不必关心其内部实现。,抽象性:将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。,继承性:是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。,2.2,面向对象分析与设计,多态性:描述的是面向对象里同一方法名的多种实现。,多态有两类情况:一类是方法的重写(,Overriding,),另一类是方法的重载(,Overloading,)。,重写发生在父类与子类的方法之间,重载发生在同一个类的方法之间。,重写指子类可以重写实现父类中有相同的名称和参数的方法,以屏蔽父类的调用。,重载指一个类中多个同名的方法,通过具有不同的参数个数或有不同的参数类型,来完成不同的实现,甚至返回不同的类型。,2.2,面向对象分析与设计,2.2.3,UML,(统一建模语言)简介,UML,(,Unified Modeling Language,)不仅统一了,Booch,方法、,OMT,方法、,OOSE,方法、,OOA/OOD,的表示方法,而且对其作了进一步的发展,最终统一为大众接受的标准建模语言。,UML,是一种定义良好、易于表达、功能强大的建模语言。它不但支持面向对象的分析与设计,还支持从需求分析开始的软件开发全过程。,2.2,面向对象分析与设计,统一建模语言,(Unified Modeling Language,,,UML),是目前最流行的可视化建模语言,可以贯穿软件开发周期中的每一个阶段。,2.2,面向对象分析与设计,1,用例图,(Use Case Diagram),用例图用于需求分析阶段,第一,它描述了待开发系统的功能需求,强调这个系统是什么;第二,它将系统看作黑盒,从外部参与者的角度来理解系统;第三,它驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保证了系统所有功能的实现,而且被用于验证和检测所开发系统是否满足需求。,用例图的主要元素是角色,(Actor),、用例,(Use Case),、角色与用例间的通信,角色代表触发系统功能的用户或其他系统,用例代表具体的功能描述,2.2,面向对象分析与设计,(1),角色(参与者),角色是系统外部的一个实体,它以某种方式参与用例的执行过程。,角色通过向系统输入或请求输入某些事件来触发系统的执行。,角色包括人角色,(Human Actor),和外部系统角色,(System Actor),。,系统的用户是人角色,用户通过与系统的交互,操纵系统,完成所需要的工作。,与本系统交互的外部系统是另一种角色,它与本系统相互作用,交换信息。它可以是软件系统,也可以是硬件设备,例如在实时监控系统中的数据采集器等。,2.2,面向对象分析与设计,2.2,面向对象分析与设计,(,2,)用例,规定了系统或部分系统的行为。,描述了系统具有的行为,但没有规定怎样实现这些行为,它是从用户(角色)的角度来看系统的特定方式。,2.2,面向对象分析与设计,(3),用例间的关系,泛化关系,(Generalization),(类属关系),即用例之间的一般和特殊关系,包含关系,(Include),。,即源用例包含了其他用例的行为,扩展关系,(Extend),即目标用例扩充了源用例的行为,2.2,面向对象分析与设计,(4)UML,用例图,2.2,面向对象分析与设计,(,2,)类图,(Class Diagram),类图描述系统的静态结构,是面向对象系统建模最常用的图,它描述了类、接口及它们之间的关系。主要元素是类以及类之间的关系。,2.2,面向对象分析与设计,类描述了一类对象的属性和行为,。,类与类之间通常有泛化,(,继承,),、关联、聚合与组合、依赖等多种关系。,2.2,面向对象分析与设计,(1),泛化,(,继承,),继承是类与类之间较常见的关系,一个类,(,称为子类,),继承另一个类,(,称为基类,),的功能,并增加它自己的新功能。,2.2,面向对象分析与设计,(2),关联,关联表示两个类的对象之间存在某种语义上的联系,是类之间的一种很弱的联系,。,2.2,面向对象分析与设计,(3),聚合与组合,聚合与组合都是特殊的关联关系,都体现了整体与部分的关系。,聚合体现的是整体与部分拥有的关系即,has-a,的关系,此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,比如计算机与,CPU,、公司与员工的关系等,2.2,面向对象分析与设计,组合体现的是一种,contains-a,的关系,这种关系比聚合更强,也称为强聚合,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,例如人和人的大脑。,UML,中定义聚合和组合都使用一个带菱形的连线表示,菱形指向具有整体性质的类,其中未填充的菱形表示聚合,填充的菱形表示组合。,2.2,面向对象分析与设计,(4),依赖,当一个类,A,使用到另一个类,B,,并且,B,类的变化会影响到,A,类,则称,A,类依赖于,B,类。,2.2,面向对象分析与设计,(,3,)对象图(,Object Diagram,),对象图描述了某一瞬间系统的对象、对象的状态及对象间的关系。,对象图可以看作是类图的实例。对象是类的实例,对象间的连线是类之间的关联关系的实例。,Object1,Object2,类图和对象图与时序图和协作图,类图和对象图是静态模型的视图;而时序图、,协作图、状态图和活动图则是动态模型。,动态模型是描述对象间的交互作用。,时序图和协作图是描述对象间的动态协作关,系;时序图反映对象间的时间顺序关系;协作,图反映收发消息的对象的结构组织。时序图与,协作图是同构的,两者之间是可以转换的。,类图和对象图与时序图和协作图,时序图的主要内容:类角色、生命线、激活,期和消息。,协作图的主要内容:类名及前面加“:”号、,序列号。,在使用上,如果强调时间和顺序,则使用时,序图;如果强调上下级关系,使用协作图。,2.2,面向对象分析与设计,(,4,)交互作用图,包括,时序图和协作图,,描述了对象间的交互作用,由对象、对象间的关系组成,并包含在对象间传递的消息。,时序图描述了消息的时间顺序,适合于描述实时系统和复杂的脚本。它是一张表,对象沿,X,轴排列,消息按照时间顺序递增沿,Y,轴排序。,2.2,面向对象分析与设计,协作图强调发送和接收消息的对象的组织结构。,协作图和时序图在语义上是相当的,可以彼此转换而不损失信息。,2.2,面向对象分析与设计,(,5,)状态图,状态图描述类的特定对象所有可能的状态,以及事件发生时状态的转移条件。,2.2,面向对象分析与设计,(,6,)活动图,主要是一个流图,描述了从活动到活动的流。它由一系列动作组成。,2.2,面向对象分析与设计,交互作用图强调从对象到对象的控制流,活动图则强调从活动到活动的控制流。,2.2,面向对象分析与设计,(,7,)组件图,组件图描述了组件及组件间的关系。,它的用途是显示系统中的软件对其他软件组件的依赖关系。,2.2,面向对象分析与设计,(,8,)配置图,配置图描述软件系统如何部署到硬件环境中,反映了系统中软件和硬件的物理架构,表示系统运行时的处理节点以及节点中组件的配置。,它的用途是显示该系统不同的组件将在何处物理地运行,以及将如何彼此通信。,2.2,面向对象分析与设计,有很多,CASE,工具都支持,UML,设计,如,Visio,、,PowerDesinger,、,Rational Rose,等。,这些工具不仅提供了标准的符号来绘制,UML,的各类模型图,同时也提供了很多辅助工具来辅助分析人员进行模型检查和各类正向与逆向工程。,2.2,面向对象分析与设计,2.2.4,面向对象分析,1,面向对象分析的基本过程,(,1,)学习、了解原始需求,目的:,1,)初步了解业务需求,2,)找出原始需求中存在二义性、不完整、不准确的需求,为需求分析打基础,(,2,)进一步的需求调研,发现和改正原始陈述中的二义性和不一致性,补充遗漏的内容,从而使需求陈述更完整、更准确。,2.2,面向对象分析与设计,(,3,)需求分析,深入理解用户需求,抽象出目标系统的本质属性,并用模型准确地表示出来。,(,4,)建立对象模型,面向对象建模得到的模型包含,3,类,即,对象模型、动态模型、功能模型,。,这,3,类模型在不同的系统中的重要程度不同,但是对象模型是任何一个软件系统都需要的,当涉及交互作用和时序时,(,如用户界面及过程控制等,),,需要使用动态模型。,2.2,面向对象分析与设计,2,建立对象模型,对象模型的建立主要是确定类、建立类之间的关联关系、确定类的属性等过程。,(1),确定类与对象,以自然语言书写的需求陈述为依据,把陈述中的名词作为类与对象的候选者,用形容词作为确定属性的线索,把动词作为服务,(,操作,),的候选者。,2.2,面向对象分析与设计,用这种简单方法确定的候选者是不准确的,往往包含大量不正确的或不必要的事物,必须经过进一步的严格筛选,从中去掉不正确的或不必要的,仅保留确实应该记录其信息或需要其提供服务的那些对象,筛选时主要依据下列标准:,冗余。如果两个类表达了同样的信息,则应该保留在此问题域中最富于描述力的名称。,无关。仅需要把与本问题密切相关的类放进目标系统中,与当前要解决的问题无关的类应该删掉。,2.2,面向对象分析与设计,笼统。在需求陈述中常常使用一些笼统的名词,如果系统无需处理有关它们的信息或者有更明确更具体的名词对应它们所暗示的事务,那么就应该去掉这些笼统的或模糊的类。,属性。在需求陈述中有些名词实际上描述的是其他对象的属性,应该把这些名词从候选类与对象中去掉。,操作。在需求陈述中有时可能使用一些既可作为名词,又可作为动词的词,应该慎重考虑它们在本问题中的含义
展开阅读全文