资源描述
第,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,问题空间与解空间的结构一致,符合人们的日常思维习惯,降低了大规模系统的分析和设计难度。,概念连贯,结构良好,便于复用,Because companies are legal persons,they also may,方便理解,软件开发全过程始终以“类和对象”为中心概念,方便阶段结果的跟踪、管理和持续演进。,它表现在两个方面:一是对象的内聚性和“粒度”便于复用;二是继承机制为代码复用提供了内在支持。,面向对象程序设计的优点,对象具有良好的内聚性和局部独立性,从而使软件体系结构的可靠性、可维护性和可扩展性显著增强。,9,01,02,03,面向对象程序开发,面向对象只是一种思想,或者是说一种开发方法,而不是一种编程技术。它的最大好处在于帮助规划人员、开发者和客户清晰地表达抽象的概念,并将这些概念互相传达。面向对象的思想已经涉及到软件开发的各个方面,例如面向对象分析、面向对象设计、面向对象编程和面向对象测试等。,面向对象分析,,简称,OOA,。它是面向对象方法从编程领域向分析领域发展的产物。从根本上讲,面向对象是一种方法论,不仅仅是一种编程技巧和编程风格,而是一套可用于软件开发全过程的软件工程方法,,OOA,是其中的第一个环节。,面向对象设计,,简称,OOD,,中文被称为“面向对象设计”。,OOD,在软件设计生命周期中发生于,OOA,之后或者后期,其目标是建立可靠的、可实现的系统模型;其过程是完善,OOA,的成果,细化分析。,OOD,与,OOA,的关系是:,OOA,表达了“做什么”,而,OOD,则表达了“怎么做”。简单来说,,OOA,只解决系统“做什么”,不涉及“怎么做”;而,OOD,涉及解决“怎么做”的问题。,面向对象编程,,简称,OOP,。它就是使用某种面向对象的语言,实现系统中的类和对象,并使得系统能够正常运行。在理想的,OO,开发过程中,,OOP,只是简单地使用编程语言实现了,OOA,和,OOD,分析和设计模型。,10,封装,继承,多态,There are many variations passages of lorem ipsum available majority have suffered alteration.,添加您的标题,01,02,03,1.2.2,面向对象的三大要素,11,32136598,封装,封装是指把对象的状态(或属性)和行为(或动作)绑定到一起的机制,把对象形成一个独立的整体,并且尽可能的隐藏对象的内部细节。,封装包含两个含义:,结合性:,把对象的全部状态和行为结合在一起,形成一个不可分割的整体。对象的私有属性只能够由对象的行为来修改和读取。,信息隐蔽性:,尽可能隐蔽对象的内部细节,与外界的联系只能通过外部接口来实现。,定义,有编程经验的读者都知道,,Java,或者,C#,等语言开发的程序都会用到封装。例如,如下代码显示了,C#,中的一段封装代码:,private string,customNo,;/,客户编号,private,int,customAge,;/,客户年龄,public string,CustomNo,get return,customNo,;,set,customNo,=value;,public,int,CustomAge,get return,customAge,;,set,if(,customAge,100),customAge,=10;,else,customAge,=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,类为例,代码如下:,class Dog:Animal,(,3,)在,main(),方法中分别创建,Dog,类和,Sheep,类的实例,为,Name,属性赋值,然后调用,AnimalSound,(),方法。代码如下:,static void Main(string,args,),Dog,dog,=new Dog();,dog.Name,=,牧羊犬,;,dog.AnimalSound,(,汪汪,);,Sheep,sheep,=new Sheep();,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,(,Object Modeling Technique,)方法,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,即被建模的事物是什么。,建模对象,即按什么规范来表示。,建模规范,即如何建模,建模方法,01,02,03,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,喷泉模型的概述,喷泉模型是由,B,H,Sollers,和,J,M,Edwards,于,1990,年提出的一种新的开发模型。,喷泉模型主要用于采用面向对象技术的软件开发项目,喷泉一词本身就体现了迭代和无间隙的特征。,无间隙指在各项活动之间无明显边界,如分析、设计和编码之间没有明显的界限。在编码之前再进行需求分析和设计,期间添加有关功能,使系统得以演化。,喷泉模型在系统某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的系统。,由于对象概念的引入,需求分析、设计、实现等活动只用对象类和关系来表达,从而可以较为容易地实现活动的迭代和无间隙,并且使得开发过程自然地包括复用。,39,喷泉模型的优缺点,1,、喷泉模型的优点,喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是,可以提高软件项目开发效率,节省开发时间,,适应于面向对象的软件开发过程。,2,、喷泉模型的缺点,由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此,不利于项目的管理,。此外这种模型要求,严格管理文档,,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。,40,改进的喷泉模型,在传统喷泉模型的基础上,提出了改进的喷泉模型。以喷泉模型为基础,可以实现尽早的、全面的展开测试,同时将测试工作进行迭代。另外,改进的喷泉将需求纳入,使得模型完全实现了整个开发过程的无边界、交互性。,该模型每一次测试过程包括四个阶段。,第一阶段为测试需求阶段,,包括提取和验证需求。这一阶段的测试主要是采用静态测试。,第二阶段为测试分析阶段,,又分为制定测试计划、测试设计与开发两个步骤。测试计划包括确定测试策略和测试系统,预估测试工作量等。测试设计与开发包括开发测试用例,验证并调试测试等。,第三阶段为测试执行阶段,,强调测试人员和开发人员的配合。该阶段的测试方法包括单元测试、集成测试、系统测试及验收测试。除了对程序进行测试外,还要对文档等进行测试。记录测试结果并写出测试总结报告,为下一轮的迭代测试打基础。,第四阶段为测试维护阶段,。开发者的维护包括修复顾客操作和为满足不断变化的顾客需求而对产品功能进行增强时发现的缺陷;测试组的维护意味着对缺陷的修复进行验证,测试增强了的功能以及产品的新发布版本上运行回归测试以确保修改前的产品具有的功能不因产品的新变化而被破坏。,41,42,改进的喷泉模型的优点,从模型图中可以看出,该模型除具有传统喷泉模型的优点外,还体现了以下特点:,(1),分布式特点,:当软件结束计划阶段,分布在不同地域的软件开发小组可以根据计划,在不同或者相同的时间启动项目开发。,(2),测试的充分,:软件测试中测试用例的覆盖率直接决定了软件测试的质量。改进的喷泉模型大大扩大了设计和选取测试用例的范围,可以从包括程序、文档等所有可以使用的信息中获得,提高了测试用例的覆盖率,保证测试的充分性和完全性。,(3),完全实现了测试和开发的同步,以及各个过程内各个阶段之间的同步。,真正实现了“全过程”测试,提高了软件测试的质量。,43,基于组件的开发模型,基于组件的开发模型利用模块化方法将整个系统模块化,并且在一定组件模型的支持下复用组件库中的一个或者多个软件组件,通过组合手段高效率、高质量地构建应用软件的系统过程。例如,图,1-6,为基于组件的开发模型的基本流程。,图,1-6,基于组件的开发模型,融合了喷泉模型的许多特征,本质上是演化形的,开发过程是迭代的。,44,XP,开发模型,敏捷方法是一种以人为核心、迭代、循序渐进的开发方法。它强调适应性而非预测性、强调以人为中心,而不是以流程为中心。,在所有的敏捷方法中,,XP,(,eXtreme,Propramming,)方法是最引人注目的一种轻型开发方法。例如,图,1-7,为,4XP,开发模型的基本流程,。,XP,方法将开发阶段的,4,个活动(分析、设计、编码和测试)混合在一起,在全过程中采用迭代增量开发、反馈修正和反复测试。,图,1-7 4XP,开发模型基本流程,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,、中央计算机、分行计算机、柜员终端、总行
展开阅读全文