面向对象和软件建模.ppt_第1页
面向对象和软件建模.ppt_第2页
面向对象和软件建模.ppt_第3页
面向对象和软件建模.ppt_第4页
面向对象和软件建模.ppt_第5页
已阅读5页,还剩132页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章面向对象和软件建模,重点:了解模型的作用和特点熟悉面向对象的优点、掌握面向对象的三大要素、熟悉面向对象的三大模型、掌握面向对象的常用三层、熟悉面向对象的常用开发方法了解软件建模的目的、熟悉软件建模的三要素、掌握面向对象建模的3个特征、熟悉建模的分类,1,1.1模型,1.2面向对象的思想,1.3软件建模,1.4建模分类,目录,2,1.1模型,3,1.1模型,它是抓住现实系统的主要方面而忽略次要方面的一种抽象。,简单来说,模型是对现实的简化和抽象化。,可以说模型既反映现实系统,却又不等同于这个现实系统。,模型是理解、分析、开发或者改造现实系统的一种常用手段,例如图1-1显示了模型和现实系统之间的关系。,图1-1模型和现实系统之间的关系,4,模型是基于图形的表示,以可视化方式、形象直观地描述系统的特征。一个模型往往针对同一个被建模事物,由多个图形组成,这些图大致可以分为结构图和行为图两类,分别描述事件的结构特征和行为特征。,促进项目有关人员对系统的理解和交流。,模型对于问题的理解、项目有关人员之间的交流、文档的准备以及程序和数据库的设计都非常有益。它能促进人们对需求的理解,从而可使得人们直接研究大型的复杂软件系统。,有助于挑选出代价较小的解决方案。,在研究一个比较大型的软件系统的模型时,可以提出多个实际方案并对它们进行相互比较,然后挑选出一个最好的方案。,缩短系统的开发周期。,模型实际上是通过过滤掉一些不必要的细节而刻画复杂问题或者结构的必要特性的抽象,它使问题更加容易理解。软件系统的开发过程变得更快,同时也降低了系统的开发成本。,1,2,3,4,模型的作用,5,A,C,D,B,模型是局部性的,以放映事件的不同侧面,模型的目的非常明确,一个模型总是出于特定的目的或意向去建立的。,模型不是实际的、物理性的系统,而是抽象的,且有不同的抽象级别。,模型与原型不同。原型是一个缩小的、局部的、可执行的系统;对于模型来说,无论多么详细具体的模型都难以直接执行。,模型的特点,模型的特点,6,1.2面向对象的思想,1.2.1了解面向对象1.2.2面向对象的三大要素1.2.3面向对象的三大模型1.2.4面向对象的常用三层1.2.5面向对象的开发方法,7,在面向对象出现之前,传统的程序设计方法大都是面向过程的,还有一少部分是面向数据结构的。,1.2.1了解面向对象,面向过程的程序设计结构清晰,为缓解软件危机做出了贡献。但是,它的模块独立性较差,各个模块之间的耦合度非常高,一个模块的修改可能会造成许多其他模块功能上的改变。,因此,面向对象的程序设计应运而生。,面向对象是一种新兴的程序设计方法,它是对面向过程程序设计强有力的补充,它使用类、对象、继承、封装和消息等基本概念来进行程序设计。,8,问题空间与解空间的结构一致,符合人们的日常思维习惯,降低了大规模系统的分析和设计难度。,概念连贯,结构良好,便于复用,Becausecompaniesarelegalpersons,theyalsomay,方便理解,软件开发全过程始终以“类和对象”为中心概念,方便阶段结果的跟踪、管理和持续演进。,它表现在两个方面:一是对象的内聚性和“粒度”便于复用;二是继承机制为代码复用提供了内在支持。,面向对象程序设计的优点,对象具有良好的内聚性和局部独立性,从而使软件体系结构的可靠性、可维护性和可扩展性显著增强。,9,01,02,03,面向对象程序开发,面向对象只是一种思想,或者是说一种开发方法,而不是一种编程技术。它的最大好处在于帮助规划人员、开发者和客户清晰地表达抽象的概念,并将这些概念互相传达。面向对象的思想已经涉及到软件开发的各个方面,例如面向对象分析、面向对象设计、面向对象编程和面向对象测试等。,面向对象分析,简称OOA。它是面向对象方法从编程领域向分析领域发展的产物。从根本上讲,面向对象是一种方法论,不仅仅是一种编程技巧和编程风格,而是一套可用于软件开发全过程的软件工程方法,OOA是其中的第一个环节。,面向对象设计,简称OOD,中文被称为“面向对象设计”。OOD在软件设计生命周期中发生于OOA之后或者后期,其目标是建立可靠的、可实现的系统模型;其过程是完善OOA的成果,细化分析。,OOD与OOA的关系是:OOA表达了“做什么”,而OOD则表达了“怎么做”。简单来说,OOA只解决系统“做什么”,不涉及“怎么做”;而OOD涉及解决“怎么做”的问题。,面向对象编程,简称OOP。它就是使用某种面向对象的语言,实现系统中的类和对象,并使得系统能够正常运行。在理想的OO开发过程中,OOP只是简单地使用编程语言实现了OOA和OOD分析和设计模型。,10,封装,继承,多态,1.2.2面向对象的三大要素,11,32136598,封装,封装是指把对象的状态(或属性)和行为(或动作)绑定到一起的机制,把对象形成一个独立的整体,并且尽可能的隐藏对象的内部细节。封装包含两个含义:结合性:把对象的全部状态和行为结合在一起,形成一个不可分割的整体。对象的私有属性只能够由对象的行为来修改和读取。信息隐蔽性:尽可能隐蔽对象的内部细节,与外界的联系只能通过外部接口来实现。,定义,有编程经验的读者都知道,Java或者C#等语言开发的程序都会用到封装。例如,如下代码显示了C#中的一段封装代码:,privatestringcustomNo;/客户编号privateintcustomAge;/客户年龄publicstringCustomNogetreturncustomNo;setcustomNo=value;publicintCustomAgegetreturncustomAge;setif(customAge100)customAge=10;elsecustomAge=value;,这段代码首先通过private声明两个私有变量,然后将它们封装为公有属性。在CustomAge中,还对customAge变量的值进行了判断。这样,用户可以直接调用该类的公有属性并进行赋值,而不必关心是怎么实现的,直接调用即可。,示例,12,封装(续),封装优点:封装使得对象内部成为一个结构完整、可自我管理、自我平衡、高度集中的整体。而对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的有机单元。对象的接口就是它的公共属性及方法软件芯片具有封装性的条件:(1)有一个清晰的边界;(2)有明确的接口;(3)受保护的内部实现。,实现,接口,13,传统方法数据与过程是分离的,过程1,输入,输出,过程2,过程3,数据实体,属于该对象的数据,对象,处理数据的方法,消息,消息,对象把数据和处理数据的方法封装成一个单元,14,32136598,继承,继承是一种连接类与类之间的层次模型,它是指特殊类的对象拥有其一般类的属性和行为。继承意味着“自动地拥有”,即在特殊类中不必重新对已经在一般类中所定义过的属性和行为进行定义,而是特殊类自动地、隐含地拥有其一般类的属性和行为。,定义,示例,继承对类的重用性,提供了一种明确表述共性的方法。即一个特殊类既有自己定义的属性和行为,又有继承下来的属性和行为。,例如,图所示了一个简单的继承结构图。在该图中,苹果、香蕉和橘子等水果都继承自水果的属性和行为。还将香蕉分为高干型香牙蕉、中干型香牙蕉和矮干型香牙蕉等多个品种,它们不仅继承香蕉的属性和行为,还继承了水果的属性和行为。,15,继承(续),继承性是面向对象程序设计语言不同于其他语言的最主要特点。广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。继承是指子类可以自动拥有父类的全部属性与操作的机制。父类(超类)子类(派生类)继承性又分为单重继承和多重继承两类。,16,继承的描述,17,单重继承和多重继承的描述,18,A的操作,A的变量,类A,类A,A的实例变量,A的实例a1,B的操作,B的变量,类B:A的子类,从A继承特性,继承来的A的实例变量,B的实例变量,B的实例b1,类B,.,子类,父类的实例,父类,子类的实例,继承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。,图实现继承机制的原理,19,32136598,多态,定义,来自于希腊语,意思是“有许多特性”。定义:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。具体到面向对象程序设计,多态性是指在两个或多个属于不同类的同一函数名对应多个具有相似功能的不同函数,可以使用相同的调用方式来调用这些具有不同功能的同名函数。多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了数据冗余,而且显著提高了软件的可重用性和可扩充性。多态性的实现方式:通过接口实现多态性通过继承实现多态性通过抽象类实现的多态性,图形,画图(),距形,画图(),椭圆,画图(),20,32136598,多态,示例,(2)分别创建两个继承自Animal类的Dog类和Sheep类。以Dog类为例,代码如下:,classDog:Animal,(3)在main()方法中分别创建Dog类和Sheep类的实例,为Name属性赋值,然后调用AnimalSound()方法。代码如下:,staticvoidMain(stringargs)Dogdog=newDog();dog.Name=牧羊犬;dog.AnimalSound(汪汪);Sheepsheep=newSheep();sheep.Name=小绵阳;sheep.AnimalSound(咩咩);,(4)运行程序查看输出结果,控制台的输出内容如下:,牧羊犬的叫声是:汪汪小绵阳的叫声是:咩咩,21,对象模型,动态模型,功能模型,1.2.3面向对象的三大模型,对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。该模型主要关心系统中对象的结构、属性和操作,它是分析阶段三个模型的核心,是其他两个模型的框架。,动态模型是与时间和变化有关的系统性质,描述了系统的控制结构,表示了瞬时的、行为化的系统控制性质。动态模型关心的是系统的控制,操作的执行顺序,它表示从对象的事件和状态的角度出发,表现出对象的相互行为。,功能模型描述了系统的所有计算。功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体,即对象可感知或可想象到的任何事物。功能模型表示一个计算如何从输入值得到输出值,它不考虑计算的次序。,22,1.2.3面向对象的三大模型,功能模型通常由多张数据流图组成。数据流图用来表示从源对象到目标对象的数据值的流向,它不包含控制信息,控制信息在动态模型中表示,同时数据流图也不表示对象中值的组织,值的组织在对象模型中表示。数据流图包含有处理、数据流、动作对象和数据存储对象。在面向对象方法中,数据流图没有在结构化分析中重要,有时可以省略。处理数据流图中的处理用来改变数据值,最低层处理是纯粹的函数,一张完整的数据流图是一个高层处理。数据流数据流图中的数据流将对象的输出与处理、处理与对象的输入、处理与处理联系起来。在一个计算机中,使用数据流表示中间数据值,数据流不能改变数据值。动作对象它是一种主动对象,通过生成或者使用数据值来驱动数据流图。数据存储对象数据流图中的数据存储是被动对象,用来存储数据。它与动作对象不一样,数据存储本身不产生任何操作,它只响应存储和访问的要求。,23,又被称为DAL层或者持久层,主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据。也就是说,数据访问层是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。,数据访问层,界面表示层又被称为界面层、用户界面层或者UI层。简单来说,表示层就是向用户展现界面的,即用户在使用一个系统时的所见所得,例如菜单、列表、按钮和输入框等都属于这一层。,界面表示层,业务逻辑层是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那么逻辑层就是对这些积木的搭建。,业务逻辑层,1.2.4面向对象的常用三层,面向对象的程序开发过程中,通常会将面向对象系统中关联的对象分为三层,它们分别是数据访问层、业务逻辑层和界面表示层。将面向对象分为常用的三层,这样做的目的是为了实现“高内聚,低耦合”的思想。,24,1.2.5面向对象的开发方法,Rambough的OMT(ObjectModelingTechnique)方法Booch面向对象方法Coad-Yourdon面向对象开发方法(OOAD)Jacobson的面向对象软件工程(OOSE),该方法采用三种模型来描述一个系统:对象模型:分析真实世界的问题域,用对象图刻画对象的静态结构及相互间的关系。动态模型:采用状态转换图来刻画对象的动态行为,并定义和识别对象的行为。功能模型:表达系统内部数据流的传递和处理的过程,采用数据流图描述系统的功能模型。,25,Booch面向对象方法Booch过程分为逻辑设计和物理设计逻辑设计包括类图和对象图物理设计包括模块图和进程图,着重于对软件系统的结构描述Booch方法也可分为静态模型和动态模型静态模型:类图和对象图动态模型:状态图和时序图软件开发过程:发现类和对象确定类和对象的含义确认对象和类之间的关系实现类和对象,26,Coad-Yourdon面向对象方法(OOAD)OOA阶段:标识类和对象。标识结构。(类之间的关系:一般-特殊,整体-部分)标识主题:相关对象和结构放置在一起。定义属性:名称、描述、限制。定义服务:对象收到消息后执行的操作称为对象提供的服务。OOD阶段:问题域部分:对OOA进行补充完善。人机交互部分:对用户分类、设计详细的交互,生成用户界面任务管理部分:识别任务、任务的优先级、进程的驱动模式,与外界的通信等。数据管理部分:确定数据存储模式。,27,Jacobson面向对象软件工程(OOSE)需求模型RM:捕捉用户需求,用例图、问题域对象模型、人机接口界面。分析模型AM:定义系统基本结构(实体对象、界面对象和控制对象)。设计模型DM:考虑真实的运行环境,设计类模块,并详细定义。实现模型IM:某种语言来实现DM。测试模型TM:生成正规的测试报告。开发活动三个步骤:分析、构造和测试,28,1.3软件建模,1.3.1软件建模概述1.3.2建模的三要素1.3.3面向对象建模,29,规范化设计,构建,模型能给出构建系统的模板,它是一种蓝图,描述了要构建系统的目标和途径,可以指导大型软件的开发,同时也具有一致性、规范性的作用。,存档,模型是对设计决策的一种文档,它是软件文档的一个重要组成部分,是软件可维护性和可理解性的重要保障。,1.3.1软件建模概述,可视化表达,30,1.3.2建模三要素,31,A,C,B,面向对象建模将被建模事物都看作对象,然后再描述其结构和行为,面向对象建模是一种建模规范,面向对象建模是一种软件建模方法,面向对象建模的特征,1.3.3面向对象建模,32,A,C,D,B,瀑布模型,基于组件的开发模型,喷泉模型,XP开发模型,面向对象建模的开发模式,33,瀑布模型瀑布模型也被称为生存周期模型,其核心思想是按照相应的工序将问题进行简化,将系统功能的实现与系统的设计工作分开,便于项目之间的分工与协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。瀑布模型将软件生命周期划分为软件计划、需求分析和定义、软件设计、软件实现、软件测试、软件运行和维护这6个阶段,并且规定了它们自上而下的顺序,如同瀑布一样下落。瀑布模型的每一个阶段都是依次衔接的,如图1-4为瀑布模型的基本流程图。,图1-4瀑布模型基本流程,34,瀑布模型的重要地位,瀑布模型是最早出现的软件开发模型,在软件工程中占有重要的地位,它提供了软件开发的基本框架。其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容给出该项活动的工作成果,并作为输出传给下一项活动。同时评审该项活动的实施,若确认,则继续下一项活动;否则返回前面,甚至更前面的活动。对于经常变化的项目而言,瀑布模型毫无价值。,35,瀑布模型的优点,1)为项目提供了按阶段划分的检查点。2)当前一阶段完成后,您只需要去关注后续阶段。3)可在迭代模型中应用瀑布模型。增量迭代应用于瀑布模型。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。4)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。,36,瀑布模型的缺点,1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。4)瀑布模型的突出缺点是不适应用户需求的变化。,37,喷泉模型喷泉模型是一种以对象为驱动、以用户需求为动力的模型,主要用于描述面向对象的软件开发过程。喷泉模型认为软件开发过程自下而上周期的各个阶段是相互重叠和多次反复的,就像水喷上去又可以落下来一样,类似一个喷泉。例如,下面图1-5为喷泉模型的基本流程图。,图1-5喷泉模型基本流程,38,喷泉模型的概述,喷泉模型是由BHSollers和JMEdwards于1990年提出的一种新的开发模型。喷泉模型主要用于采用面向对象技术的软件开发项目,喷泉一词本身就体现了迭代和无间隙的特征。无间隙指在各项活动之间无明显边界,如分析、设计和编码之间没有明显的界限。在编码之前再进行需求分析和设计,期间添加有关功能,使系统得以演化。喷泉模型在系统某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的系统。由于对象概念的引入,需求分析、设计、实现等活动只用对象类和关系来表达,从而可以较为容易地实现活动的迭代和无间隙,并且使得开发过程自然地包括复用。,39,喷泉模型的优缺点,1、喷泉模型的优点喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。2、喷泉模型的缺点由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。,40,改进的喷泉模型,在传统喷泉模型的基础上,提出了改进的喷泉模型。以喷泉模型为基础,可以实现尽早的、全面的展开测试,同时将测试工作进行迭代。另外,改进的喷泉将需求纳入,使得模型完全实现了整个开发过程的无边界、交互性。该模型每一次测试过程包括四个阶段。第一阶段为测试需求阶段,包括提取和验证需求。这一阶段的测试主要是采用静态测试。第二阶段为测试分析阶段,又分为制定测试计划、测试设计与开发两个步骤。测试计划包括确定测试策略和测试系统,预估测试工作量等。测试设计与开发包括开发测试用例,验证并调试测试等。第三阶段为测试执行阶段,强调测试人员和开发人员的配合。该阶段的测试方法包括单元测试、集成测试、系统测试及验收测试。除了对程序进行测试外,还要对文档等进行测试。记录测试结果并写出测试总结报告,为下一轮的迭代测试打基础。第四阶段为测试维护阶段。开发者的维护包括修复顾客操作和为满足不断变化的顾客需求而对产品功能进行增强时发现的缺陷;测试组的维护意味着对缺陷的修复进行验证,测试增强了的功能以及产品的新发布版本上运行回归测试以确保修改前的产品具有的功能不因产品的新变化而被破坏。,41,42,改进的喷泉模型的优点,从模型图中可以看出,该模型除具有传统喷泉模型的优点外,还体现了以下特点:(1)分布式特点:当软件结束计划阶段,分布在不同地域的软件开发小组可以根据计划,在不同或者相同的时间启动项目开发。(2)测试的充分:软件测试中测试用例的覆盖率直接决定了软件测试的质量。改进的喷泉模型大大扩大了设计和选取测试用例的范围,可以从包括程序、文档等所有可以使用的信息中获得,提高了测试用例的覆盖率,保证测试的充分性和完全性。(3)完全实现了测试和开发的同步,以及各个过程内各个阶段之间的同步。真正实现了“全过程”测试,提高了软件测试的质量。,43,基于组件的开发模型基于组件的开发模型利用模块化方法将整个系统模块化,并且在一定组件模型的支持下复用组件库中的一个或者多个软件组件,通过组合手段高效率、高质量地构建应用软件的系统过程。例如,图1-6为基于组件的开发模型的基本流程。,图1-6基于组件的开发模型,融合了喷泉模型的许多特征,本质上是演化形的,开发过程是迭代的。,44,XP开发模型敏捷方法是一种以人为核心、迭代、循序渐进的开发方法。它强调适应性而非预测性、强调以人为中心,而不是以流程为中心。在所有的敏捷方法中,XP(eXtremePropramming)方法是最引人注目的一种轻型开发方法。例如,图1-7为4XP开发模型的基本流程。XP方法将开发阶段的4个活动(分析、设计、编码和测试)混合在一起,在全过程中采用迭代增量开发、反馈修正和反复测试。,图1-74XP开发模型基本流程,45,XP方法的核心思想,其核心思想是交流、简单、反馈和进取。XP开发小组不仅包括开发人员,还包括管理人员和客户。该模型强调小组内成员之间要经常交流,在尽量保证质量的前提下力求过程和代码的简化;来自客户、开发人员和最终用户的具体反馈意见可以提供更多的机会来调整设计,保证把握正确的开发方向;进取则包含于上述3个原则中。,46,XP方法的优点,采用简单计划策略,不需要长期计划和复杂模型,开发周期短。在全过程中采用迭代增量开发、反馈修正和反复测试的方法,软件质量有保证。能够适应用户经常变化的需求,提供用户满意的高质量软件。,47,1.4建模分类,不同的软件分析建模平台的建模工作存在差异,但大体可以把软件建模分成3类:业务建模、数据建模和应用程序建模。,1.4.1业务建模1.4.2数据建模1.4.3应用程序建模,48,业务建模是以软件模型方式描述企业管理和业务所涉及的对象和要素、以及它们的属性、行为和彼此关系,强调以体系的方式来理解、设计和构架企业信息系统。业务建模是一种建模方法的集合,目的是对业务进行建模。这方面的工作可能包括了对业务流程建模、对业务组织建模、改进业务流程和领域建模等方面。,了解目标组织(将要在其中部署系统的组织)的结构以及机制。,了解目标组织中当前存在的问题并确定改进的可能性。,确保客户、最终用户和开发者就目标组织达成共识。,导出支持目标组织所需的系统需求。,业务建模的目的,1.4.1业务建模,49,通用业务模型,新业务,修改,组织图,领域建模,单业务多系统,根据环境和需求的不同,业务建模工作可能有不同的规模,如下列出了6种场景。,50,1组织图为了便于更好的了解正在构建的应用程序的需求,建模时可能需要构建组织及其流程的简图。在这种情况下,业务建模是软件工程项目的一部分,主要在先启阶段执行。这些类型的工作在开始时常常没有打算更改组织,只是进行绘图,但实际上,构建和部署新应用程序总是包括一定程度的业务改进。2领域建模如果构建应用程序时的主要目的是管理和提供信息(例如订单管理系统或者银行系统),那么开发者可以选择在业务级别上构建该信息的模型,而无需考虑业务的工作流程,这就称为领域建模。通常,领域建模是软件工程项目的一部分,在项目的先启阶段和精化阶段执行。3单业务多系统如果正在构建一个系统或者一系列应用程序,那么可能有一项业务建模工作将要作为多个软件工程项目的输入。业务模型帮助开发者找出功能性需求,并且作为构建应用程序系列构架的输入。在这种情况下,业务建模工作常常被视为一个独立的项目。,51,4通用业务模型如果正在构建将由多个组织使用的应用程序(例如销售支持应用程序或者记账应用程序),在整个业务建模工作中,使这些组织都在开展业务时避免对于系统而言过于复杂的需求(业务改进)是很有用的。5新业务如果某个组织决定要启动一项全新的业务(业务创建),并且将构建信息系统来支持该业务,那么就需要进行业务建模工作。在这种情况下,业务建模的目的不仅是要找出对系统的需求,还要确定新业务线的可行性。在这种情况下,通常将业务建模工作本身当作一个项目。6修改如果某个组织决定要对其经营方式进行彻底修改(业务重建),那么业务建模本身通常就是一个或多个项目。通常,业务重建分多个阶段完成,包括新业务展望、对现有业务实施逆向工程、对新业务实施正向工程以及启动新业务。,52,数据建模是指对现实世界各类数据的抽象组织,确定数据库需管辖的范围、数据的组织形式等直到转换成现实的数据库。将经过系统分析后抽象出来的概念模型转化为物理模型后,在Visio或者Erwin建立数据库实体以及各实体之间关系,这里的实体一般是指表。,1,2,3,4,5,1.4.2数据建模,确定数据及其相关过程。例如实地销售人员需要查看在线产品目录并提交新客户订单。定义数据。例如数据类型、大小和默认值等。确保数据的完整性(使用业务规则和验证检查)。定义操作过程,例如安全检查和备份。选择数据存储技术,例如关系、分层或者索引存储技术。,数据建模过程中的主要活动,53,概念建模阶段实际工作中,概念建模阶段做三件事情:客户交流、理解需求和形成实体。逻辑建模阶段该阶段对实体进行细化,细化成具体的表,同时丰富表结构。这个阶段的产物是:可以在数据库中生成具体表及其他数据库对象,包括主键、外键、属性列、索引、约束,甚至是视图和存储过程等。物理建模阶段大多数的建模工具都可以将在逻辑建模阶段创建的各种数据库对象生成为相应的SQL代码,运行来创建相应具体数据库对象。但是在该阶段中不仅仅创建数据库对象,针对业务需求,开发者还可能做数据分析。另外,在该阶段还会涉及到集群。,54,在实际应用中,Web应用程序对不同的人而言含义也有所不同。一部分人认为凡是用到Java的都是Web应用程序,而另一部分人则认为凡是使用Web服务器的都是Web应用程序。,Web应用程序实现的是业务逻辑,它的使用改变了业务的状态,其状态为系统捕获,这是很重要的,因为它确定了建模工作的重点。Web应用程序执行业务逻辑,因此大多数重要的系统模型都侧重于业务逻辑和业务状态,而不是表示细节。,1.4.3应用程序建模,55,练习题,1、一个想象的对用餐方法的描述可能包括以下的步骤:设计菜单、购买原料、做饭、洗餐具。为这个过程中的每个步骤定义一个合适的“交付物”。每个阶段产生的交付物在某种意义上是作为下一步的输入么?如果不是,那么应该是什么?画一个类似于图1和图2的图形说明这个过程。,56,57,2用类似于图1和图2的图来详细说明你所熟悉的软件开发方法。,58,瀑布模型,59,1.5面向对象分析和设计,面向对象的开发方法的精髓是从不稳定的需求中分析出稳定的对象,以对象为基础来组织需求、构架系统。,面向对象分析,面向对象设计,60,1.5.1面向对象分析,面向对象分析(通常缩写为OOA)的关键,是识别出问题域内的对象,并分析它们相互间的关系,最终建立起问题域的简洁、精确、可理解的正确模型。在用面向对象观点建立起的三种模型中,对象模型是最基本、最重要、最核心的。,61,一、分析过程二、需求陈述三、建立对象模型四、建立动态模型五、建立功能模型六、定义服务七、面向对象分析实例八、面向对象分析小结,62,一、分析过程,面向对象分析,就是抽取和整理用户需求并建立问题域精确模型的过程。,63,三个子模型与五个层次面向对象建模得到的模型包含系统的三个要素,即静态结构(对象模型),交互次序(动态模型)和数据变换(功能模型)。解决的问题不同,这三个子模型的重要程度也不同:几乎解决任何一个问题,都需要从客观世界实体及实体间相互关系抽象出极有价值的对象模型;当问题涉及交互作用和时序时(例如,用户界面及过程控制等),动态模型是重要的;解决运算量很大的问题(例如,高级语言编译、科学与工程计算等),则涉及重要的功能模型。动态模型和功能模型中都包含了对象模型中的操作(即服务或方法)。复杂问题(大型系统)的对象模型由下述五个层次组成:主题层(也称为范畴层)、类&对象层、结构层、属性层和服务层,如图所示。,分析过程(续),64,图复杂问题的对象模型,综上所述,我们在概念上可以认为,面向对象分析大体上按照下列顺序进行:寻找类&对象,识别结构,识别主题,定义属性,建立动态模型,建立功能模型,定义服务。但是,正如前面已经多次强调指出过的,分析不可能严格地按照预定顺序进行,大型、复杂系统的模型需要反复构造多遍才能建成。通常,先构造出模型的子集,然后再逐渐扩充,直到完全、充分地理解了整个问题,才能最终把模型建立起来。,分析过程(续),66,分析也不是一个机械的过程。大多数需求陈述都缺乏必要的信息,所缺少的信息主要从用户和领域专家那里获取,同时也需要从分析员对问题域的背景知识中提取。在分析过程中,系统分析员必须与领域专家及用户反复交流,以便澄清二义性,改正错误的概念,补足缺少的信息。面向对象建立的系统模型,尽管在最终完成之前还是不准确、不完整的,但对做到准确、无歧义的交流仍然是大有益处的。,分析过程(续),67,二、需求陈述,书写要点通常,需求陈述的内容包括:问题范围,功能需求,性能需求,应用环境及假设条件等。总之,需求陈述应该阐明“做什么”而不是“怎样做”。它应该描述用户的需求而不是提出解决问题的方法。应该指出哪些是系统必要的性质,哪些是任选的性质。应该避免对设计策略施加过多的约束,也不要描述系统的内部结构,因为这样做将限制实现的灵活性。对系统性能及系统与外界环境交互协议的描述,是合适的需求。此外,对采用的软件工程标准、模块构造准则、将来可能做的扩充以及可维护性要求等方面的描述,也都是适当的需求。,68,图ATM系统,例子,下面陈述对ATM系统的需求。某银行拟开发一个自动取款机系统,它是一个由自动取款机、中央计算机、分行计算机及柜员终端组成的网络系统。ATM和中央计算机由总行投资购买。总行拥有多台ATM,分别设在全市各主要街道上。分行负责提供分行计算机和柜员终端。柜员终端设在分行营业厅及分行下属的各个储蓄所内。该系统的软件开发成本由各个分行分摊。,70,银行柜员使用柜员终端处理储户提交的储蓄事务。储户可以用现金或支票向自己拥有的某个账户内存款或开新账户。储户也可以从自己的账户中取款。通常,一个储户可能拥有多个账户。柜员负责把储户提交的存款或取款事务输进柜员终端,接收储户交来的现金或支票,或付给储户现金。柜员终端与相应的分行计算机通信,分行计算机具体处理针对某个账户的事务并且维护账户。,71,拥有银行账户的储户有权申请领取现金兑换卡。使用现金兑换卡可以通过ATM访问自己的账户。目前仅限于用现金兑换卡在ATM上提取现金(即取款),或查询有关自己账户的信息(例如,某个指定账户上的余额)。将来可能还要求使用ATM办理转账、存款等事务。所谓现金兑换卡就是一张特制的磁卡,上面有分行代码和卡号。分行代码唯一标识总行下属的一个分行,卡号确定了这张卡可以访问哪些账户。通常,一张卡可以访问储户的若干个账户,但是不一定能访问这个储户的全部账户。每张现金兑换卡仅属于一个储户所有,但是,同一张卡可能有多个副本,因此,必须考虑同时在若干台ATM上使用同样的现金兑换卡的可能性。也就是说,系统应该能够处理并发的访问。,将来可能做的扩充,72,当用户把现金兑换卡插入ATM之后,ATM就与用户交互,以获取有关这次事务的信息,并与中央计算机交换关于事务的信息。首先,ATM要求用户输入密码,接下来ATM把从这张卡上读到的信息以及用户输入的密码传给中央计算机,请求中央计算机核对这些信息并处理这次事务。中央计算机根据卡上的分行代码确定这次事务与分行的对应关系,并且委托相应的分行计算机验证用户密码。如果用户输入的密码是正确的,ATM就要求用户选择事务类型(取款、查询等)。当用户选择取款时,ATM请求用户输入取款额。最后,ATM从现金出口吐出现金,并且打印出账单交给用户。,73,三、建立对象模型,确定类&对象类&对象是在问题域中客观存在的,系统分析员的主要任务,就是通过分析找出这些类&对象。首先,找出所有候选的类&对象;然后,从候选的类&对象中筛选掉不正确的或不必要的。1.找出候选的类&对象,74,另一种更简单的分析方法,是所谓的非正式分析。这种分析方法以用自然语言书写的需求陈述为依据,把陈述中的名词作为类&对象的候选者,用形容词作为确定属性的线索,把动词作为服务(操作)的候选者。下面以ATM系统为例,说明非正式分析过程。认真阅读需求陈述,从陈述中找出下列名词,可以把它们作为类&对象的初步的候选者。,75,银行、自动取款机(ATM)、系统、中央计算机、分行计算机、柜员终端、网络、总行、分行、软件、成本、市、街道、营业厅、储蓄所、柜员、储户、现金、支票、账户、事务、现金兑换卡、余额、磁卡、分行代码、卡号、用户、副本、信息、密码、类型、取款额、账单以及访问。通常,在需求陈述中不会一个不漏地写出问题域中所有有关的类&对象,因此,分析员应该根据领域知识或常识进一步把隐含的类&对象提取出来。例如,在ATM系统的需求陈述中虽然没写“通信链路”和“事务日志”,但是,根据领域知识和常识可以知道,在ATM系统中应该包含这两个实体。,76,2.筛选出正确的类&对象显然,仅通过一个简单、机械的过程不可能正确地完成分析工作。非正式分析仅仅帮助我们找到一些候选的类&对象,接下来应该严格考察每个候选对象,从中去掉不正确的或不必要的,仅保留确实应该记录其信息或需要其提供服务的那些对象。筛选时主要依据下列标准,删除不正确或不必要的类&对象。,77,(1)冗余(2)无关(3)笼统(4)属性(5)操作(6)实现综上所述,在ATM系统的例子中,经过初步筛选,剩下下列类&对象:ATM、中央计算机、分行计算机、柜员终端、总行、分行、柜员、储户、账户、事务和现金兑换卡。,78,确定关联如前所述,两个或多个对象之间的相互依赖、相互作用的关系就是关联。分析确定关联,能促使分析员考虑问题域的边缘情况,有助于发现那些尚未被发现的类&对象。在分析确定关联的过程中,不必花过多的精力去区分关联和聚集。事实上,聚集不过是一种特殊的关联,是关联的一个特例。,79,1.初步确定关联在需求陈述中使用的描述性动词或动词词组,通常表示关联关系。因此,在初步确定关联时,大多数关联可以通过直接提取需求陈述中的动词词组而得出。通过分析需求陈述,还能发现一些在陈述中隐含的关联。最后,分析员还应该与用户及领域专家讨论问题域实体间的相互依赖、相互作用关系,根据领域知识再进一步补充一些关联。,80,2.筛选经初步分析得出的关联只能作为候选的关联,还需经过进一步筛选,以去掉不正确的或不必要的关联。筛选时主要根据下述标准删除候选的关联。(1)已删去的类之间的关联(2)与问题无关的或应在实现阶段考虑的关联(3)瞬时事件(4)三元关联(5)派生关联,81,3.进一步完善应该进一步完善经筛选后余下的关联,通常从下述几个方面进行改进。(1)正名(2)分解(3)补充(4)标明阶数下图是经上述分析过程之后得出的ATM系统原始对象图。,82,图ATM系统原始对象图,划分主题在开发大型、复杂系统的过程中,为了降低复杂程度,人们习惯于把系统再进一步划分成几个不同的主题,也就是在概念上把系统包含的内容分解成若干个范畴。,84,图把ATM系统划分成三个主题,确定属性一般说来,确定属性的过程包括分析和选择两个步骤。1.分析属性的确定既与问题域有关,也和目标系统的任务有关。应该仅考虑与具体应用直接相关的属性,不要考虑那些超出所要解决的问题范围的属性。在分析过程中应该首先找出最重要的属性,以后再逐渐把其余属性增添进去。在分析阶段不要考虑那些纯粹用于实现的属性。,86,2.选择认真考察经初步分析而确定下来的那些属性,从中删掉不正确的或不必要的属性。通常有以下几种常见情况。(1)误把对象当作属性(2)把链属性误作为属性(3)把限定误当成属性(4)误把内部状态当成了属性(5)过于细化(6)存在不一致的属性,87,图ATM对象模型中的属性,识别继承关系确定了类中应该定义的属性之后,就可以利用继承机制共享公共性质,并对系统中众多的类加以组织。一般说来,可以使用两种方式建立继承(即归纳)关系。自底向上:抽象出现有类的共同性质泛化出父类,这个过程实质上模拟了人类归纳思维过程。自顶向下:把现有类细化成更具体的子类,这模拟了人类的演绎思维过程。,89,图带有继承关系的ATM对象模型,反复修改仅仅经过一次建模过程很难得到完全正确的对象模型。事实上,软件开发过程就是一个多次反复修改、逐步完善的过程。在建模的任何一个步骤中,如果发现了模型的缺陷,都必须返回到前期阶段进行修改。由于面向对象的概念和符号在整个开发过程中都是一致的,因此远比使用结构化分析和设计技术更容易实现反复修改及逐步完善的过程。,91,图修改后的ATM对象模型,四、建立动态模型,建立动态模型的第一步,是编写典型交互行为的脚本。虽然脚本中不可能包括每个偶然事件,但是,至少必须保证不遗漏常见的交互行为。接下来从脚本中提取出事件,确定触发每个事件的动作对象以及接受事件的目标对象。第三步,排列事件发生的次序,确定每个对象可能有的状态及状态间的转换关系,并用状态图描绘它们。最后,比较各个对象的状态图,检查它们之间的一致性,确保事件之间的匹配。,93,1编写脚本所谓“脚本”,原意是指“表演戏曲、话剧,拍摄电影、电视剧等所依据的本子,里面记载台词、故事情节等”。在建立动态模型的过程中,脚本是指系统在某一执行期间内出现的一系列事件。脚本描述用户(或其他外部设备)与目标系统之间的一个或多个典型的交互过程,以便对目标系统的行为有更具体的认识。编写脚本的目的,是保证不遗漏重要的交互步骤,它有助于确保整个交互过程的正确性和清晰性。编写脚本时,首先编写正常情况的脚本。然后,考虑特殊情况,例如输入或输出的数据为最大值(或最小值)。最后,考虑出错情况,例如,输入的值为非法值或响应失败。,建立动态模型(续),94,表1.3.1和表1.3.2分别给出了ATM系统的正常情况脚本和异常情况脚本。表1.3.1ATM系统的正常情况脚本ATM请储户插卡;储户插入一张现金兑换卡ATM接受该卡并读它上面的分行代码和卡号ATM要求储户输入密码;储户输入自己的密码“1234”等数字ATM请求总行验证卡号和密码;总行要求“39”号分行核对储户密码,然后通知ATM说这张卡有效ATM要求储户选择事务类型(取款、转账、查询等);储户选择“取款”ATM要求储户输入取款额;储户输入“880”,建立动态模型(续),95,ATM确认取款额在预先规定的限额内,然后要求总行处理这个事务;总行把请求转给分行,该分行成功地处理完这项事务并返回该账户的新余额ZK)ATM吐出现金并请储户拿走这些现象;储户拿走现金ATM问储户是否继续这项事务;储户回答“不”ATM打印账单,退出现金兑换卡,请储户拿走它们;储户取走账单和卡ATM请储户插卡,建立动态模型(续),96,表1.3.2ATM系统的异常情况脚本ATM请储户插卡;储户插入一张现金兑换卡ATM接受这张卡并顺序读它上面的数字ATM要求密码;储户误输入“8888”ATM请求总行验证输入的数字和密码;总行在向有关分行咨询之后拒绝这张卡ATM显示“密码错”,并请储户重新输入密码;储户输入“1234”;ATM请总行验证后知道这次输入的密码正确ATM请储户选择事务类型;储户选择“取款”ATM询问取款额;储户改变主意不想取款了,他敲“取消”键ATM退出现金兑换卡,并请储户拿走它;储户拿走他的卡ATM请储户插卡,建立动态模型(续),97,2设想用户界面,建立动态模型(续),图ATM的界面格式,3画事件跟踪图完整、正确的脚本为建立动态模型奠定了必要的基础。但是,用自然语言书写的脚本往往不够简明,而且有时在阅读时会有二义性。为了有助于建立动态模型,通常在画状态图之前先画出事件跟踪图。为此首先需要进一步明确事件及事件与对象的关系。,建立动态模型(续),99,(1)确定事件应该仔细分析每个脚本,以便从中提取出所有外部事件。事件包括系统与用户(或外部设备)交互的所有信号、输入、输出、中断和动作等。从脚本中容易找出正常事件,但是,应该小心仔细,不要遗漏了异常事件和出错条件。传递信息的对象的动作也是事件。经过分析,应该区分出每类事件的发送对象和接受对象。一类事件相对它的发送对象来说是输出事件,但是相对它的接受对象来说则是输入事件。有时一个对象把事件发送给自己,在这种情况下,该事件既是输出事件又是输入事件。,建立动态模型(续),100,(2)画出事件跟踪图从脚本中提取出各类事件并确定了每类事件的发送对象和接受对象之后,就可以用事件跟踪图把事件序列以及事件与对象的关系,形象、清晰地表示出来。事件跟踪图实质上是扩充的脚本。在事件跟踪图中,一条竖线代表一个类&对象,每个事件用一条水平的箭头线表示,箭头方向从事件的发送对象指向接受对象。时间从上向下递增,也就是说,画在最上面的水平箭头线代表最先发生的事件,画在最下面的水平箭头线所代表的事件最晚发生。箭头线之间的间距并没有具体含义,图中仅用箭头线在垂直方向上的相对位置表示事件发生的先后,并不表示两个事件之间的精确时间差。下图是ATM系统正常情况下的事件跟踪图。,101,图ATM系统正常情况脚本的事件跟踪图,4画状态图状态图描绘事件与对象状态的关系。当对象接受了一个事件以后,它的下个状态取决于当前状态及所接受的事件。由事件引起的状态改变称为“转换”。如果一个事件并不引图1.3.9ATM系统正常情况脚本的事件跟踪图起当前状态发生转换,则可忽略这个事件。通常,用一张状态图描绘一类对象的行为,它确定了由事件序列引出的状态序列。但是,也不是任何一个类&对象都需要有一张状态图描绘它的行为。很多对象仅响应与过去历史无关的那些输入事件,或者把历史作为不影响控制流的参数。对于这类对象来说,状态图是不必要的。系统分析员应该集中精力仅考虑具有重要交互行为的那些类。,建立动态模型(续),103,从一张事件跟踪图出发画状态图时,应该集中精力仅考虑影响一类对象的事件,也就是说,仅考虑事件跟踪图中指向某条竖线的那些箭头线。把这些事件作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论