第5章面向对象基础.ppt

上传人:豆**** 文档编号:77672347 上传时间:2023-03-16 格式:PPT 页数:110 大小:1.08MB
返回 下载 相关 举报
第5章面向对象基础.ppt_第1页
第1页 / 共110页
第5章面向对象基础.ppt_第2页
第2页 / 共110页
点击查看更多>>
资源描述

《第5章面向对象基础.ppt》由会员分享,可在线阅读,更多相关《第5章面向对象基础.ppt(110页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第5章面向对象基础 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望引言o话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗性大发,不觉吟道:“喝酒唱歌,人生真爽。”。众文武齐呼:“丞相好诗!”于是一臣子速命印刷工匠刻版印刷,以便流传天下。喝酒唱歌喝酒唱歌人生真爽人生真爽曹操感觉不妥:“喝与唱,此话过俗,应改为对酒当歌,工匠眼看连夜刻版之工,彻底白费,心中叫苦不喋,只得照办

2、。喝酒当歌喝酒当歌人生真爽人生真爽唱唱当当曹操细细一品,觉得还是不好:“人生真爽太过直接,应改问语才够意境,对酒当歌,人生几何?!工匠听后当即晕倒把每个字做一个对象,只需更改四个字就可对酒当歌对酒当歌人生几何人生几何只需更改要改之字,此为可维护可维护;这些字并非用完这次就无用,在后来的印刷中可重复使用,此乃可复用可复用;此诗若要加字,只需另刻字加入即可,此称可扩展可扩展;字的排列横竖均可,此是灵活性好灵活性好。程序不容易维护,灵活性差,不易扩展,更谈不上复用面向对象方法通过封装、继承、多态把程序的耦合度降低通过封装、继承、多态把程序的耦合度降低(传统印刷术的问题就在于所有的字都刻在同一版面上造

3、成耦合度太高),使程序更加灵活使程序更加灵活,易修改易修改,易复用易复用。第5章面向对象基础1)面向对象的基本概念2)UML用例图、活动图和类图的应用3)软件建模语言的作用4)UML的5个视图的作用5)UML顺序图、交互图、组件图、配置图、状态图的应用掌握掌握理解了解了解要求要求第5章面向对象基础5.1从一个例子看结构化方法的问题5.2面向对象概念5.3面向对象开发方法介绍5.4UML语言5.5用例图5.6活动图5.7状态图5.8交互图5.9类图5.10配置图5.11组件图5.1从一个例子看结构化方法的问题o例子:设计并实现一个四则运算软件,输入两个数和运算符号,输出运算结果。o用结构化设计:

4、这个例子很简单没有必要画数据流程图,如果一定要画的话,只有三个处理“数据录入”,“计算”,“结果输出”,转换成设计模块也只有“主模块”“数据录入”“计算”“结果输出”4个简单的模块。注:主模块太简单我们省略了。模块名称:input 功能:输入运算数和运算符输入模块主要代码输出/返回无提示输入信息:请输入数字A、B和运算符:读入NumberA、NumberB和OperateNumberA,NumberB,Operate输入模块主要代码输出/返回NumberANumberBOperateString Result=;Switch(Operate)case+:Result=string(Number

5、A+NumberB);break;case:Result=string(NumberA NumberB);break;case*:Result=string(NumberA NumberB);break;case/:if (NumberB!=0)Result=string(NumberA NumberB);else Result=除数不能为0break;Result模块名称:comput功能:计算输入模块主要代码输出/返回ResultConsole.WriteLine(运算结果:+Result);无模块名称:output功能:输出结果o结构化方法是将需求分解为一个个简单的功能,简单的功能直接影

6、射为模块,复杂的功能可以设计多个模块。o当需求发生变化,例如,增加一个平方运算或开根运算时,需要修改计算模块,这就要求程序员对计算模块的代码非常了解。这对于功能简单的软件比较容易实现,当软件规模比较大,功能复杂时,非常容易出错,并且软件的维护量很大。点评:o首先设计一个计算类operation,有两个私有的操作数numberA和numberB、三个方法:NumberA(),NumberB()和GetResult()o在设计时考虑到软件的可扩充性,把计算类设计为基类,四则运算分别继承基类。为了增加软件的灵活性,设计一个实例化工厂类,专门生成运算类的实例化对象。类图如下:点评:o在客户端主程序直接

7、调用实例化工厂类创建相应的运算类对象,工厂返回相应的运算类对象指针。例如,下面的代码oper指向OperationAdd类,接着调用该类的方法NumberA和NumberB进行属性赋值,最后调用该类的GetResult方法计算结果。输入和输出的处理代码与结构化方法相同,故省略。Operationoper;oper=OperationFactory.createOperate(+);oper.NumberA=1;oper.NumberB=2;double.result=oper.GetResult();o面向对象方法比结构化方法设计的软件结构要复杂一些。在本例中,每个计算分别设计为一个子类,如果

8、要增加新的运算,只需添加子类,同时在实例化工厂类中添加相应的switch分支,其他的处理不受影响。也就是说,程序员不必了解其他运算的处理代码,程序的整体结构没有变化。结构化方法的问题:o结构化方法分析和设计阶段所应用的模型之间存在鸿沟。分析阶段的主要模型是数据流程图,设计阶段的主要模型是软件模块结构图,数据流程图和软件模块结构图之间需要进行转换。不同的人转换出的模块图可能不同,有很大的随意性,这是做工程非常忌讳的,质量很难评价。o在分析阶段用数据流程图将用户需求和软件的功能需求统一起来。系统分析人员从整体至局部不断地理解用户需求,并且自顶向下逐步细化数据流程图。这里存在着两个问题:n细化程度没

9、有标准,只能凭借分析人员的经验自己把握;n过程:分析用户需求确定软件功能分解复杂的功能为多个简单的功能。当需求变更时,功能分解就要重新进行,功能变化就会导致软件模块结构发生变化,造成了软件结构不稳定。结构化方法的问题(续):o结构化程序设计将数据定义与处理数据的过程相分离,不利于软件复用。例如,在图书馆信息管理系统中,对图书基本信息进行处理的典型方法是:在数据说明中定义图书基本信息的结构,设计图书信息添加模块、修改模块、删除模块等等功能模块,实现对图书信息的处理。当新的系统要复用图书处理功能时,要分别复制数据说明定义和各个功能处理模块。o结构化方法设计的软件结构不稳定,缺乏灵活性,可维护性差。

10、从上面的例子看出,结构化方法一旦需求变更,软件的结构变化比较大,扩充功能往往意味着修改原来的结构。当软件工程的规模比较大,用户需求经常变更的情况下,不宜使用结构化方法。5.2面向对象的概念o什么是对象?n在现实世界中的任何有属性的单个实体或概念,都可看做对象。学生张三是一个对象,具有姓名、学号、班级等属性;一个银行账户是一个对象,具有用户名、余额等属性;一份订单也是一个对象,具有货品名、单价、数量等属性。n除了描述对象的属性之外,还可以说明对象所拥有的操作。例如,打印学生的姓名、学号和班级;查询一个顾客的账户余额;打印订单的价格等等。对象的操作是对象的动态特征。n软件中的对象封装了一组属性和对

11、属性进行的操作,是对现实世界中的对象实体的抽象。o什么是类?n类是具有相同属性和相同行为的对象集合。学生是一个类,其中的一名学生张三是学生类的一个实例,其属性有:姓名=张三,学号=J20080101,班级=计算机08-1:具有的操作可以是获得或设置属性值,或与其他对象用消息通信。例如,获得学生的姓名、修改班级号,向其他对象发送消息。o实际上,类就是一个创建对象的模板,定义了该类所有对象的属性和方法。o每个对象都属于一个类,属于某个类的一个具体对象称为该类的实例。o消息机制n为了实现某个功能,对象之间通过发送消息相互通信,这可能发生在同一个类的不同对象之间,也可以在不同类的对象之间。例如,用鼠标

12、点击屏幕对话框中的一个命令按钮时,一条消息发给了对话框对象,通知它命令按钮被按下了,它就开始执行相应的操作。o一般来说,发送一条消息至少要说明接受消息的对象名、消息名(什么操作),还要对参数加以说明。o封装n面向对象程序设计的特点是将属性和方法封装在一起,就是类。封装隐藏了对象内部的处理细节,内部的变化不被其他对象所知。例如电脑在不断的升级,但是机箱还是方的,里面装的CPU和内存已是今非昔比了,人们用机箱把CPU和内存封装起来,对外只提供一些标准的接口,如USB插口、网线插口和显示器插口等等,只要这些接口不变,内部怎么变,也不会影响用户的使用方式。o封装的优势:n便于复用,即在不同或相同的软件

13、中重复使用已有的对象。例如,学生对象可应用在学籍信息管理系统中,也可以应用在学校图书馆信息管理系统中作为一类读者管理n封装隐藏了对象内部的处理细节,内部的变化不被其他对象所知,对减少需求变更产生的影响是有效的保障。o继承性n如果两个类有继承关系,子类拥有父类的所有数据和方法。被继承的类称为父类,子类可以在继承父类的基础上进行扩展,添加新属性和方法;也可以改写父类的方法,就是说方法的名称是相同的,但具体的操作可以不同。o例如,若把“学生”信息作为一个类,继承它可以生成多个子类,如“小学生”、“中学生”和“大学生”等。这些子类都具有“学生”的特性,因此“学生”类是它们的“父亲”,子类是“小学生”、

14、“中学生”、“大学生”类,它们自动拥有“学生”类的所有属性和方法。o继承优点如下:n便于复用,相同的属性和方法在父类中定义,子类直接复用n程序结构清晰,维护工作量减少,例如增加“研究生”的处理需求时,只要通过添加“研究生”子类,程序员不必了解“小学生”,“中学生”等类的处理过程,代码的修改量比较结构化方法少。n当父类的某个操作对子类不合适时,子类可以采用“重载”继承,既在父类的基础上修改继承。使得每个子类既兼容父类的主要属性和方法,又能够反映自己特殊的属性和方法。o多态性n定义是:同一操作作用于不同类的实例,将产生不同的执行结果。例如,类Shape是任意多边形对象,它有1个方法:deaw();

15、有3个子类Circle、Square和Triangle,分别继承Shape类的draw()方法。classShapevoiddraw()/父类的方法draw()classCircleextendsShapevoiddraw()Systemoutprintln(”Circle)classSquareextendsShapevoiddraw()Systemoutprintln(”Square)classTriangleextendsShapevoiddraw()Systemoutprintln(Triangle”)客户端主程序:Shapes=newShape3;/3个实例s0=newCircle(

16、);/园继承父类s1=newSquare();/正方继承父类s2=newTriangle();/三角继承父类for(inti=0;i3;i+)si.draw();该程序的执行结果为:CircleSquareTriangle5.3面向对象方法o随着面向对象技术研究的不断发展和完善,自八十年代以来,已经出现了几十种面向对象软件开发方法,其中,Booch,Coad/Yourdon,OMT和OOSE方法在面向对象软件开发界得到了广泛的认可。每种方法都有一套自己的描述符号和实现过程,每种方法都支持三种基本的活动:识别对象和类,描述对象和类之间的关系,通过描述每个类的功能定义对象的行为。面向对象方法的基本

17、阶段:o面向对象分析:分析和构造问题域的对象模型,区分类和对象,整体和部分关系;定义属性、服务,确定约束。o面向对象设计:根据面向对象分析,设计交互过程和用户接口,设计任务管理,配置资源,确定边界条件,划分子系统,确定软、硬件元素分配;o面向对象实现:使用面向对象语言实现面向对象设计。Booch方法oGradyBooch从1983年开始研究,1991年后走向成熟的一种面向对象方法。o使用一组视图来分析一个系统,每个视图采用一组模型图来描述事物的一个侧面。Booch方法的模型图有类图、对象图、状态转移图、时态图、模块图和进程图。o支持基于增量和迭代的开发过程。Booch方法(续)步骤:o在给定的

18、抽象层次上识别类和对象即发现对象。o识别对象和类的语义确定类的方法和属性。o识别类和对象之间的关系定义类之间的关系。o实现类和对象用面向对象的语言编写程序代码。开发人员通过研究用户需求找出反映事物的类和对象,接着定义类和对象的行为(即方法),利用状态转换图描述对象的状态变化,利用时态图和对象图描述对象的行为模型。最终在类的实现阶段,用选定的面向对象编程语言将类组织成模块。Coad方法o1989年由PeterCoad和EdYourdon提出的面向对象开发方法o以类图和对象图为手段在五个层次上建立分析模型:n发现类及对象。从应用领域开始识别类及对象,然后据此分析系统的职责。n识别结构。一般与特殊结

19、构、整体与部分结构。主要分析一个对象如何成为另一个对象的一部分,以及多个对象如何组装成更大的对象。n识别主题。用于将类及对象模型划分为更大的单位,以便于理解n定义类的属性。n定义对象之间的消息联接。面向对象的设计模型是分析模型的扩展,同样也包括五个层次。同时又引进了四个部分:问题域部分,人机交互部分,任务管理部分,数据管理部分。OOSE方法oIvarJacobson于1992年提出,它以“用例”驱动的思想而著称,涉及到整个软件生命周期n需求分析阶段:定义角色,识别问题域中的对象和关系,发现用例。n设计阶段:从需求分析模型中发现设计对象,描述对象的属性、行为和关联,把用例分配给对象,并且针对实现

20、环境调整设计模型。注意:该方法中的一个关键概念就是用例,每个用例就是一个使用系统的方式,当用户给定一个输入,就执行一个用例的实例并引发执行属于该用例的一个事务。OMT方法o由Loomis,Shan和Rumbaugh在1987年提出,在1991年正式把OMT应用于面向对象的分析和设计。这个方法是在实体关系模型上扩展了类、继承和行为而得到的。oOMT方法从3个视角描述系统:对象模型、动态模型和功能模型。对象模型描述对象的静态结构和它们之间的关系,主要的概念有类、属性、方法、继承、关联和聚集。动态模型描述系统随时间变化的方面,主要概念有状态、子状态、超状态、事件、行为和活动。功能模型描述系统内部数据

21、值的转换,主要概念包括加工、数据存储、数据流、控制流和角色。oOMT方法将开发过程分为以下4个阶段:n分析:基于问题和用户需求的描述,建立现实世界的模型。分析阶段的产物包括问题描述、对象模型(对象图+数据词典)、动态模型(状态图+全局事件流图)和功能模型(数据流图+约束)。n系统设计:结合问题域的知识和目标系统的体系结构(求解域),将目标系统分解为子系统。n对象设计:基于分析模型和求解域中的体系结构等添加的实现细节,完善系统设计。主要产物包括细化的对象模型、细化的动态模型和细化的功能模型。n实现:用面向对象的语言实现设计。5.4UML语言oBooch、Rumbaugh和Jacobson三人创建

22、了统一建模语言UML。oUML1.0(1997年1月)及UML1.1(1997月11月)。1997年11月17日,OMG(对象管理组织)采纳UML1.1作为基于面向对象技术的标准建模语 言。2003年 OMG组 织 正 式 通 过 了UML2.0标准。注意:oUMLUML是一种标准的图形化建模语言,它是面向对象分析与设计方法的表现手段。它:n不是一种可视化的程序设计语言,而是一种可视化的建模语言;n不是工具或知识库的规格说明,而是一种建模语言规格说明,是一种表示的标准;n不是过程,也不是方法,但允许任何一种过程和方法使用它。视图(View)o从理想化的角度来说,如果有一张图画能清晰直观正确地描

23、述系统的结构和功能,又易于理解和交流是最好的。但靠一幅图描述系统所有方面的信息是不可能的。应该从多个角度描述系统,比如业务流程、功能结构、各个部件的关系等方面,完整地描述系统o用一组视图分别反映系统不同方面,每个视图描述系统的一个特征面。视图之间会有部分重叠。视图-用例视图o用于描述系统的功能集,是从系统外部以用户角度对系统做的抽象表示。用例视图所描述的系统功能依靠于外部用户或另一个系统触发激活,为用户或另一个系统提供服务,实现与用户或另一个系统之间的交互。o用例视图是其他视图的核心和基础。o用例图视图逻辑视图o逻逻辑辑视视图图描述用例视图中提出的系统功能的实现。与用例视图相比,逻逻辑辑视视图

24、图主要关注系统内部,它既描述系统的静态结构,也描述系统内部的动态协作关系。o系统的静态结构在类图和对象图中进行描述,而动态模型则在状态图、时序图、协作图以及活动图中进行描述。视图组件视图o组件是不同类型的代码模块,它是构造应用的软件单元。组件视图描述系统的实现模块以及它们之间的依赖关系。o组件视图主要由组件图构成。视图并发视图o并发视图主要考虑资源的有效利用、代码的并行执行以及系统环境中异步事件的处理。除了将系统划分为并发执行的控制以外,并发视图还需要处理线程之间的通信和同步。o并发视图由状态图、协作图、活动图组成。视图配置视图o配置视图体现了系统的实现环境,反映系统的物理架构。例如,计算机和

25、设备以及它们之间的连接方式。在配置视图中,计算机和设备称为结点。配置视图还包括一个映射,该映射显示在物理架构中组件是怎样分配的。例如,在各个计算机上运行的程序和对象。o配置视图主要由配置图表示。图o图由标准的UML图形符号组成,把这些图形符号有机地组织起来形成的图表示系统的某个视图,有些图可能属于多个视图。oUML中定义了用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、配置图共9种。使用这9种图就可以描述任何复杂的系统。统一过程RUPoRUP(Rational Unified Process)是一套软件工程过程,它是文档化的软件工程产品,由Rational软件公司开发和营销的一种

26、软件工程过程。o这个过程的目的是在预定的进度和预算范围内,开发出满足最终用户需要的高质量软件。oRational统一过程是Rational公司提供是一个包含了许多方法、规范和技术的软件开发过程框架,这个框架可以改造和扩展以适应采纳此方法的组织。o具体软件项目应该根据本身的情况,从中选择适用的部分,形成一个对该项目来说最佳的软件开发过程。5.5用例图认识用例图用例角色关系注意:图中的虚线是解释5.5 用例图(续)o用例图:用于描述一组用例、角色以及它们之间的关系。一个系统的用例图通常是概要地反映整个系统提供的外部可见服务和工作范围。o用例图的基本元素:用例、角色和关系。o进行需求分析时,通常将整

27、个系统看作一个黑盒子,从系统外部的视点出发观察系统:它应该做什么?谁要它做?做了以后的结果送给谁?这些正是用例图要表现的。用例o在UML中用例的符号是一个椭圆,通常以动词或短语来命名。o用例是软件开发的核心元素,需求是由用例来表达的,界面是在用例的辅助下设计的,类是根据用例来发现的,测试数据是根据用例来生成的,整个开发的管理和任务分配,也是依据用例来组织的。用例简直太重要了!角色o角色是指与系统交互的人或物。o角色可以有四种类型:系统的使用者、硬件设备、外部系统和时间。n系统使用者是最重要的角色,例如,在图书信息管理系统中的系统使用者有读者和图书馆的工作人员,包括采购、编目和办公室的工作人员。

28、n其他外部应用系统。n硬件设备,不同的硬件设备具有不同的特性和不同的处理方式。n时间作为角色,经过一定的时间触发系统中的某个事件。关系角色与用例之间的关系o通信关系描述角色与用例之间的关系。例如,当读者还书时,图书馆工作人员启动系统的“还书”用例,进行还书处理。用例也可以启动与角色的通信,例如,还书时,如果该书有预订记录,则系统的“通知”用例启动与读者的通信,通知读者前来借书。用例之间的关系o包含关系这是一种继承关系。包含关系用于构造多个用例共同的活动。例如,在ATM系统中,取钱、查询、更改密码等功能都需要验证用户名和密码。这种情况下应该将密码验证功能独立出来,便于复用、减少冗余。用例之间的关

29、系(续)o扩展关系允许一个用例扩展另一个用例的功能。例如,在图书信息管理系统中,读者还书时,系统检查所还图书是否有预订记录,如果有则执行“通知”用例。在UML中扩展关系表示为箭头和extend形式。注意o使用关系和扩展关系之间的区别,A使用B本质上是A一定使用B,同时增加自己的专属行为;而A被用例B扩展是说明A是一个一般用例,B是一个特殊用例,A在某些条件下可能使用B。用例或角色之间的继承关系o泛化关系有时角色或用例之间存在一种继承关系。例如,客户区分为公司客户与个人客户,公司客户又区分为政府机构和私人公司,这时,描述角色之间的关系就可以用泛化关系表示。注意o用例之间的泛化关系就像类之间的泛化

30、关系一样,子用例继承父用例的行为和含义。例如,一个银行系统中,有一个“验证用户”用例,用于验证用户的合法性,它有两个特殊的子用例,一个是“检查密码”,另一个是“检查指纹”,它们都有父用例“验证用户”的行为,并且可以出现在父用例出现的任何地方,还可以添加自己的行为。用例图实例o以前面图书信息管理系统为例,画出用例图。先找出参与系统地的角色:(1)读者 描述:可以查询图书;预订和取消预订图书;(2)工作人员 描述:帮助读者实现借书、还书、预订书、取消预订、查询操作;o接下来我们从角色入手寻找用例。主要角色“读者”通过“流通组工作人员”实现预订图书、取消预订、借书、还书等活动。由此,可以找出下面的一

31、些用例:(1)预订图书本用例提供了预订图书的功能,读者可以通过浏览器直接从网上预订图书;图书管理员也可以根据读者的要求预订某本图书。(2)取消预订本用例提供取消预订图书的功能。(3)还书完成还书任务,在还书是要检查所还的书是否超期、是否有其他读者预订,有的话要通知预订者。(4)借书提供借阅书功能。o分析这个用例图,发现“还书”用例应该被扩展,因为在还书时检查所还图书是否有预订记录,若有,则应该通知预订者前来借书。o当欲借图书已全部被借出时,应该可以转向“预订”用例。o读者可以直接从网上查询、预订或取消预订图书。根据以上几点,画出初始的用例图如下:如果读者所借图书是预订过的,那么应该怎么修改这张

32、图?注意o在画用例图时要特别注意:用例图是系统分析、设计和实现的一个最基础的图形,在初期是不一定要考虑太多的处理细节。o一个用例内部的具体处理细节是由其他图形工具描述的,用例图只是反映系统的总体功能,以及与这些功能的相关的角色。有些人可能在画“借书”用例时,情不自禁地就考虑了“输入读者号和书号”,“检查图书是否在库?”,“图书数量减1”,“添加读者借书记录”等等,一旦考虑了这些细节,就会发现用例图画不下去了。因此,读者注意用例图中部要考虑处理细节。5.6活动图o描述从一个活动到另一个活动的控制流,用于对系统的动态特性建模。在需求分析时用活动图描述一个用例内部活动流的操作步骤、决策点、活动的执行

33、者和活动影响的对象。认识活动图图书馆图书信息管理系统借书活动图活动图中的主要图形元素o泳道:活动图中的分隔线,说明谁负责执行该泳道中的活动。o开始状态:活动流的开始点。表示符号为。o活动:活动流可能由多个活动组成,一个活动的表示符号为椭圆。o操作:一个活动可以有多个操作步骤,这些操作可能发生在进入活动时、退出活动时、活动内或特定的事件发生时。o对象:活动流影响的实体对象。活动可能会改变某个对象的状态,将活动影响的对象及其状态也标识在活动图中,使得活动图表示的信息更加完整。表示的符号为。用虚线表示哪个活动影响对象的状态。o交接:是描述活动流如何从一个活动转移到下一个活动的。表示符号是活动之间的箭

34、头线。o决策:活动流中的分支判断点,在这点上根据条件判断活动流走哪个分支路径。表示符号为菱形。o同步:活动流中多个活动可以同时发生。例如,下面的图示说明活动1、活动2和活动3是同时进行的,当三个活动完成之后,进行另一个同步,也叫做连接。o结束点:活动流的结束点。并发活动图书馆图书信息管理系统借书活动图的说明o图中有两个泳道,说明借书用例所涉及的角色有两个:读者和图书馆工作人员。读者以“借书申请”活动开始这个工作流,这个活动将读者编号和图书编号传递给图书馆工作人员,由工作人员检查“读者”类,看该“读者编号”是否存在;然后检查读者的借书数量是否已经超出限制,如果读者编号有效,并且借书数量没有超限,

35、则检查图书是否在库中,否则,提示读者“读者无效”。如果欲借图书已经都被借出,则提示“图书已经被借出,是否预订?”,当读者确认预订后,转去执行“预订处理”。如果,库中有欲借图书,则首先检查“预订记录”,如果该读者是否已经预订了此书,则删除预订记录。修改此书在库数量,创建“借书记录”,结束借书过程。注意:o活动图描述多个角色之间的处理非常有效,一张活动图只能有一个开始状态,但可以有多个结束状态。o一个活动可以与多个实体对象相关,这里的相关指的是一种访问操作。在上面“借书”活动图中,“检查读者有效”的活动,要访问“读者”对象和“借还书记录”对象,检查“读者编号”的有效性和读者借书数量。5.7状态图o

36、状态图用于对系统动态特征建模,主要是帮助理解反应型对象的行为变化。一个反应型对象是这样的对象,它的行为是通过对来自外部的事件作出反应来刻画的。状态图中主要描述一个对象的三种信息:1)对象的各种状态;2)引起状态变化的事件;3)每个状态改变时所发生的动作。认识状态图认识状态图注意o读者要注意状态图与活动图的区别,活动图反映多个对象之间的交互,状态图反映一个对象的各个状态的变化。例如在图书管理信息系统中,我们可以对“读者”对象、“图书”对象的状态变化画出状态图;而对借书、还书、采购这些活动画出活动图。o状态图中的转移可以由三部分组成:事件条件/动作n其中的每一部分都可以省略。事件导致对象从一个状态

37、变换到另一个状态,但有时也可以没有事件而自动发生对象的状态转移,这时对象可能在一个状态下完成某些活动后自动转移到其它状态。n括号中的条件是控制转移发生的条件,例如,上图中借书的事件发生时,能否转移到借出状态,要先检查借阅者证件是否有效,并且书库有该书,满足了这些条件后,作出库动作,图书状态到达“借出”状态。5.8交互图o在需求分析阶段,根据获得的用例图、活动图和状态图来细化系统的需求,找出系统中对象和对象之间的关系,反映对象之间关系的工具是交互图。o交互图有两种:一种是按时间顺序反映对象之间相互关系的顺序图;另一种是集中反映各个对象之间通讯关系的合作图。o通过创建交互图,分析人员可以逐步理清用

38、例内的活动顺序,明确用例活动流程中需要什么对象、对象之间相互发送什么消息、什么角色启动流、消息按什么顺序发送。开发人员看到顺序图就可以明白与一个用例相关的对象有哪些,这些对象之间的关系,以及每个对象的责任。通常一个用例可能包含多个处理流程,在分析时,每个流程最好分别画顺序图。o交互图中包含对象和消息两类元素,创建交互图的过程实际上是向对象分配责任的过程。但是,应特别注意:向合适的对象指定合适的责任。例如,一般应用程序中,窗口和窗体对象的主要责任是实现用户输入和信息浏览功能,不应加入太多的业务处理功能,否则,一旦业务逻辑发生变化,将会影响界面,界面的改动又会影响业务处理逻辑。o为了创建顺序图和合

39、作图,首先要检查事件流,确定需要多少流程,一般创建主流程、替换流程和错误流程。在创建交互图时可以使用模式,例如检查用户的安全级别、错误处理日志、进程间通讯、数据库操作等等。把这些模式放入独立的交互图中,在需要它们的时候直接引用相应的模式,也就是说,这些模式具有可重用性。注意o描述一个用例中的几个对象协同工作的行为,应该使用交互图;描述跨越多个用例的单个对象的行为,应当使用状态图;如果想描述跨越多个用例的对象之间的行为则应该使用活动图。顺序图o顺序图是按时间顺序反映对象之间传递的消息。顺序图的顶部放置相关的对象,沿对象向下的虚线表示对象的生命线,两个对象生命线之间的横线表示对象之间传递消息,消息

40、线的箭头形状表示消息的类型。对象也可以向自己发送消息。消息线上标注消息名,也可以加上参数并标注一些控制信息。认识顺序图o顺序图中也可以用虚线画出返回的消息,但是为了保持画面的简洁,通常不画出返回的消息。o当一个对象接收到一条消息后启动了某个活动则这个对象被激活。激活用生命线上一个细长的矩形表示。实际上激活的概念在串行的执行过程中并不是很必要,通常只在并行过程中使用激活。o简化的顺序图合作图o合作图也是反映用例中各个对象之间消息传递的图形工具。在顺序图中,消息按时间顺序排序,而在合作图中,不反映消息的时间顺序,但更容易看出对象之间的关系。oUML中提供了顺序图和合作图的相互转换认识合作图5.9类

41、图o面向对象方法的三个最重要的技术是用例图、类图和交互模型。无论是面向对象的分析还是面向对象的设计和实现,类图都是最核心技术。它不仅能够表现信息的结构,还能够反映系统的行为。o事实上,软件开发不同时期的类图反映了不同层次上的抽象。在需求分析阶段,类图用于研究领域的概念,主要反映实体类和界面类;在设计阶段,类图描述类与类之间的接口和控制;在实现阶段,类图描述系统中类的具体实现。o类是包含信息和影响信息行为的逻辑元素。类的符号是由三个格子的长方形组成,有时下面两个格子可以省略。最顶部的格子包含类的名字,类的命名应尽量用应用领域中的术语,有明确的含义,以利于开发人员与用户的理解和交流。中间的格子说明

42、类的属性。最下面的格子是类的操作行为。认识类图o类的获取是一个依赖于人的创造力的过程。实践中,寻找类有两种办法:一种是从用例的描述开始,检查用例描述中的每个名词。另一种是检查时序图中的对象,研究对象具有的共同属性和操作来发现类。o注意,并不是所有的类都能够从工作流和交互图中找到。o属性是与类相关联的信息,描述该类对象的共同特点。例如,“客户”类有“客户名”、“地址”、“电话”等属性。o常见的属性可见性有Public、Private和Protected三种,在UML类图中分别表示为“+”、“-”和“#”o属性的类型可以是基本数据类型,例如整数、实数、布尔型、字符串型等,也可以是用户自定义的类型。

43、一般它由所使用的程序设计语言确定。o约束特性则是用户对该属性性质一个约束的说明。例如“只读”说明该属性是只读属性。o操作是与类相关的行为,用于修改、检索类的属性或执行某些动作。操作通常也被称为功能,但是它们被约束在类的内部实现,只能作用到该类的对象上。o寻找类的操作比较简单,实际上,在创建交互图时,就在寻找类的操作。在识别类的操作时,下面几个问题有助于寻找类的操作:1)有哪些类会与该类交互,包括该类本身?2)该类接收哪些类(包括自己)发送的消息,收到消息之后进行什么处理?3)该类向哪些类发送消息,消息的内容是什么,在发送消息之前该类需要做什么处理?4)该类中需要哪些操作来维持自身属性的一致性、

44、完整性,以及自身属性的更新?5)系统是否需要该类具有另外一些职责?o在类图中,描述类的操作分三个部分:操作名、返回类型和参数表。o在UML中描述操作的信息有五个部分:可见性 操作名(参数表):返回类型 约束特性。“客户”类中有“取客户地址”的操作,它在UML中表现形式如下:o GetAddr(CustomerNo:String):Stringo其中“+”表示该操作是公有操作,GetAddr是操作名,调用时需要参数“CustomerNo”,操作的返回类型也为字符串,约束特征被省略了。o常见的操作可见性有Public、Private和Protected三种,在UML类图中分别表示为“+”、“-”和

45、“#”。o类之间的关系有关联关系、组成关系、泛化关系。要寻找关系,可以检查交互图,大多数关系信息已经在交互图中列出,重温这些图,获得类之间的关系。类之间的关系示例o类的版型可以将类进行分类,并且有助于理解每个类的责任,例如,Form版型的类负责向用户显示信息和接收用户信息,不同版型的类具有不同的职责。o分析过程中,可以根据功能将类分为实体类、边界类和控制类。o边界类位于系统于外界的交界处,包括所有的窗体、报表、系统硬件接口、与其它系统的接口。o实体类实体类保存要存入永久存储体的信息。实体类通常在事件流或交互图中,是对用户最有意义的类。o控制类控制类负责协调其它类的工作。每个用例中至少应该有一个

46、控制类,它控制用例中的事件顺序。一般地,控制类接收的消息并不多,而发出的消息比较多,因为它更多地是向其它类委托责任。注意o不要试图使用所有的符号。从简单的开始,例如,类、关联、属性和继承等概念。在UML中,有些符号仅适用于特殊的场合,只有当需要时才使用。o根据项目所处的开发阶段,用正确的观点来画类图。如果处于分析阶段,应画概念层类图;在设计阶段,应画说明层类图;当考察某个特定的实现技术时,则应画实现层类图。5.10配置图o配置图反映了系统的物理模型,表示系统运行时的处理节点以及节点中组件的配置。o图书馆信息管理系统的配置图。其中办公室、采编部和借阅部的PC机上部署了本地的应用,采用C/S结构。

47、而远程读者可以通过互联网进行图书查询、图书预订、缺书登记等操作,采用B/S结构。认识配置图o连线上的内说明通信协议或者网络类型。o节点用一个立方体表示,节点名放在左上角,其中的每个组件代表一个负责某种应用处理的软件包,配置图中显示了各个软件包在系统运行时的分布情况。5.11组件图o组件图描述组件以及它们之间的关系,用于表示系统的静态实现视图。o图书馆信息管理系统的组件图。其中图书馆.java是启动该系统的组件,与借书相关的界面都被封装在借书组件中,与查询相关的界面被封装在查询组件中,其他类推。借书界面组件依赖于借书处理组件,借书处理组件依赖于数据库实体-关系类组件,其他组件的关系类似。认识组件

48、图o当发布一个较复杂的应用系统时,例如这个应用系统有可执行文件、数据库、其他动态链接库、资源文件、页面文件,对于分布式系统可能还会有分散到各个节点上的多个可执行组件,这时可以用组件图展示、发布组件及其组件之间的关系。o例如,下图中可执行文件组件find.exe依赖于dbacs.dll和nateng.dll,而find.html组件依赖于find.exe,组件index.html依赖于find.html组件。有了这个组件图就好像得到了整个系统的联络图一样。5.12RationalROSEoIBM公司推出的支持UML的可视化建模工具。RationalROSE采用用例、逻辑、组建和部署试图支持面向对

49、象的分析和设计,在不同的视图中建立相应的UML图形,反映系统的不同特性。工具提供了丰富的符号元素和辅助建模的画图功能,可方便地建立各种基于UML的软件模型,并可生成C+、Java、VisualBasic、IDL和DDL等多种代码和数据框架。RationalROSE企业级的产品提供的正/逆向工程功能可以在系统地UML设计模型和系统的程序代码之间转换。oRationalROSE建模工具是菜单驱动的应用程序,支持八种不同类型的UML框图:UseCase(用例图)、Activity(活动图)、Sequence(顺序图)、Collaboration(合作图)、Class(类图)、Statechart(状

50、态图)、Component(组件图)、Deployment(配置图)。oRationalROSE的界面分五个部分,分别是浏览区、文档窗口、工具栏、图形窗口和日志,如图示本章要点o结构化方法存在的主要问题:分析阶段的主要模型是数据流模型,设计阶段的主要模型是软件模块结构,数据流程图和软件模块结构图之间需要进行转换,转换有一定的随意性。功能变化就会导致软件模块结构发生变化,造成了软件结构不稳定。结构化设计将数据定义与处理数据的过程相分离,不利于软件复用。o面向对象的主要概念:类是具有相同属性和相同行为的对象集合。对象是类的一个实例。对象之间通过发送消息相互通信。类封装了属性和方法,封装隐藏了对象内

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁