第8章面向对象系统分析本章计划学时:8~10学时本章主要内容•面向对象方法的优势•面向对象方法的基本概念•UML概况•需求建模–用例分析、用例图、用例描述•面向对象分析模型–对象分析、类图8.1面向对象方法的基本概念•对象、类、属性和操作•封装、隐藏•消息•继承•多态•关系面向对象的基本思想•从面向对象的角度来看,世界就是由对象组成的。•任何给定的商业功能都是由一整套共同工作的对象互相协作来完成的。•程序由一组实例对象互相通信完成特定功能。1、对象(Object)•《现代汉语词典》(商务印书馆,1996)的解释是:对象是行动或思考时作为目标的人或事物。广义地讲,对象可以是任何人或事物。•对象是一些属性及专用服务的封装体,它是问题域中一些事物的抽象。–这些属性的值刻画了一个对象的状态;–这些操作是对象的行为,通过它们改变对象的状态(即属性值)属性:高度总重量燃料成分燃料重量搭乘物……操作:点火轨道运行返回countervalueinit()dec()inc()一个计数器对象:属性:值操作:清空加1减1对象举例医疗保险账户属性:姓名:张三年度:2005医保号:100100195009090090累计账户拨入金额:1800.00累计账户支付金额:230.50最高统筹限额:50000.00累计统筹支付金额:680.00……操作:查询余额拨入资金支付费用年度结转……对象举例对象的属性•属性是类的特征或特性–属性的值是某一特定对象的属性值–在类中属性名必须是唯一的–每一个类的实例都有为这个类定义的所有属性的值属性取决于视点•从销售人员的角度–型号–价格–颜色–里程数一辆汽车具有的属性:•从维修人员的角度–马达类型–传动类型–维修记录对象的操作•对象的行为是由为此对象定义的一系列操作决定的•操作访问或修改对象的属性值•一个类可能同时存在多个实例,也可能在某一时刻没有实例•一个类的所有实例都可以使用在这个类中定义的操作•从销售人员的角度–处理客户定单–准备销售合同–加入清单–从清单中删除一辆汽车具有的操作:•从维修人员的角度–测试刹车–修理刹车–转动轮胎–检查马达速度操作取决于视点2、类(Class)•对象类(Objectclass)简称类,是指有相同属性和服务的一组对象的集合。•类的概念体现了人类常用的一种思维方式——抽象,类就是对一组对象的抽象表示,同样包含属性和服务两个部分。•实例(Instance):一个具体的对象就是该对象所在类的一个实例–类是抽象虚无的,实例是具体实在的(如个人账户与我的个人账户)–在程序运行过程中根据类定义来创建实例,每个实例互不干扰,各自有自己独立的存储空间,保存自己特有的属性。(如同数据类型和变量的关系)类举例个人账户NameIncomePaymentLimitationUsedLimitationGetBalance()Save()Pay()CarryForward()……类名属性操作张三的个人账户张三1800.00230.5050000.00680.00GetBalance()Save()Pay()CarryForward()……对象名属性操作区分对象和类•同类对象具有相同的属性和服务,是指它们的定义形式相同,即具有相同的属性项和行为方式,而不是说每个对象的属性值都相同。–类是静态的,类的存在、语义和关系在程序执行前就已经定义好了。–对象是动态的,对象在程序执行时可以被创建和删除。计算机中一个对象通常就是指一个实例•有的场合不作区分抽象类和接口•抽象类(abstractclass)用来表征我们在对问题领域进行分析、设计中得出的抽象概念。–如如圆、三角形属于“形状”这样一个抽象概念。•接口(interface)是抽象类的变体。接口是一些方法的集合,但所有方法都是抽象的,只有声明而没有程序体。其他类需要实现某个接口时才对这个接口的所有方法进行定义。–比如很多物体都有“开”和“关”的操作,但对于不同的对象类是抽象的行为,具体实现由不同的物体来定义,如电灯的开、关和门的开、关。3、封装(Encapsulation)•封装即信息隐藏,它保证软件部件具有较好的模块性。•设计软件总体结构时,应尽量封装为独立的模块,每个模块对外提供接口,而尽可能少地显露其内部处理逻辑。(黑箱)•对象是更高一个级别的封装体,它把数据和服务封装于一个内在的整体。对象向外提供某种界面(接口),可能包括一组数据(属性)和一组操作(服务),而把内部的实现细节(如函数体)隐蔽起来。良好封装的好处•封装使对象对外仅提供接口,即可见的一些属性和操作,而具体实现是不可见的。–开发人员一旦设计好对象的界面(接口)后,不需要等待该对象全部完成就可以进行后续开发,实现并行工作;–只要对象接口不变,对象内部逻辑的修改不会影响其他部件,便于复用,也减少了因修改引起的“水波效应”;–严密的接口保护,使对象的属性或服务不会随意地被使用,对象的状况易于控制,可靠性随之增强。4、继承(Inheritance)•继承是指特殊类的对象拥有其一般类的全部属性与服务–一般类/特殊类、父类/子类、超类/子类、基类/派生类等都是相同的概念。可以简化系统的描述和实现,较好地实现软件重用,提高效率。–子类(特殊类)可以继承父类(一般类)的属性和操作,也可以重新定义特殊行为。–继承可分为单继承和多继承,单继承是指子类只从一个父类继承,多继承是指子类从多个父类继承。继承举例PersonStudentFacultyStaff继承下去多继承(Multi-Inheritance)VehicleGroundVehicleAirVehicleCarTruckAmphibiousVehiclePlane多继承可以设计成对多个接口的实现5、多态(Polymorphism)•多态性又叫多形性,指相同的操作(或函数,或过程)可作用于多种类型的对象并获得不同的结果。•在OOP中多态的实现有两种方法:–由覆盖(override)实现动态多态,子类对父类的方法进行重写,称为运行时多态,展示的是父类及其多个不同子类的多态性。–由重载(overload)实现的静态多态,即利用重载技术在一个类中定义多个名称相同、参数类型不同的方法,称为编译时多态,是一个类中操作多态性的表现。PRINT050001000015000200002500030000NorthSouthEastWestBLUESKYAIRLINESSalesReportJanuaryBLUESKYAIRLINESSalesReportFebruaryPRINTPRINTTEXTobjectGRAPHobjectIMAGEobjectGraphDraw()CircleDraw()RectangleDraw()多态举例多态的好处多态性一般需要建立在继承机制之上。1.当给不同子类型的对象发送相同的消息时,消息的发送者可以不用关心具体的对象类型,而由对象自身做出不同的响应处理。2.需要扩充一种新类型时,只需要从父类中再派生出一个子类,覆盖父类的某些服务,而不需要改动其他外部程序。3.多态性极大地提高了重用性和灵活性,对象的使用和理解也得以简化。6、消息(Message)•消息是指向对象发出的服务请求(对象间的交互信息)。–一个对象向另一个对象发消息请求某项服务,接收消息的对象响应该消息,激发所要求的服务操作,并把操作结果返回给请求服务的对象。–一个消息应当包含以下信息:消息名、接收消息对象的标识、服务类型、输入信息、回答消息。•采用消息(而不是函数调用)这个术语的好处:–1、更接近人们日常思维所采用的术语,符合对象的独立自治原则;–2、在分布式环境中,对象可以在不同的网络结点上相互提供服务,消息具有更强的适应性。7、关系(Relationship)•类之间的联系方式:(1)继承/泛化(generalization):类之间的关系是指对象分类的层次关系,继承关系对于类中的所有对象都成立,而不特指某个具体对象。(2)实现(realization):即描述和实现。一个接口可以提供某些操作的描述,另一些类需要具体来完成这些操作,即对接口进行实现。•对象关系则是存在于具体对象实例之间的联系:(3)关联(association):表达对象与对象的静态联系,是一种长期关系,比如整体和部分关系。(4)依赖(dependency):表达对象与对象的动态联系(运行时),是一种短期关系。8、重用(Reuse)•对象具有封装性和信息隐蔽等特性,使其容易实现软件重用•一般对象类可以派生出新类,类可以产生实例对象,从而实现了对象类的数据结构和操作代码的复用•复杂类可以分解为简单类的组装结构,这些简单类又可以重复成为多个对象类的组成元素•面向对象程序设计语言的开发环境一般预定义了系统动态连接库,提供大量公用程序代码,避免重复编写,提高了开发效率和质量面向对象分析与设计•对于结构化分析与设计和面向对象的分析与设计来说,信息系统开发的生命周期是相同的,都要经过规划、分析、设计和实施,所不同的是建立的模型和采用的建模技术。•结构化分析与设计注重对过程进行建模,面向对象的分析与设计则强调对事物和它们的交互建模。•UML是OO方法的标准建模语言8.2UML概述•什么是UML•UML可以做什么•UML包含哪些内容•UML工具软件1、UML是什么•统一建模语言UnifiedModelingLanguage•UML是一个通用的可视化建模语言UnifiedModelingLanguage(统一建模语言)是对象管理组织(OMG)制定的一个通用的、可视化的建模语言标准,可以用来可视化(visualize)、描述(specify)、构造(construct)和文档化(document)软件密集型系统的各种工件(artifacts,又译制品)UML的历史BoochmethodOMTUnifiedMethod0.8OOPSLA´95OOSEOthermethodsUML0.9Web-June´96UML1.0UMLpartnerspublicfeedback1989-1994期间,OO方法从不足10种增加到50多种2004FinalsubmissiontoOMG,Nov‘97FirstsubmissiontoOMG,Jan´97UML1.1OMGAcceptance,Nov1997Fall1998UML1.3UML2.0UML的创始人•UML是由世界著名的面向对象技术专家G.Booch、J.Rumbaugh和I.Jacobson发起,在Booch方法、OMT方法和OOSE方法的基础上,广泛征求意见,集众家之长,几经修改而完成的。•ThreeamigosBoochRumbaughJacobsonUML的特点•统一了面向对象方法的表示•表示能力强大,可用于各种软件系统建模,以及其他系统建模,如商业系统•与开发过程无关•允许扩展•本身不设计特点语言的语法及规则,但可对应到各种OOP语言框架UML和OOA、OOD•UML既不是方法论,也不是一种开发过程,而是面向对象系统分析与设计的建模语言,是一种语言工具。–如同英语充当国际交流的工具一样•OOA&OOD是方法论,该方法论的实践过程中需要使用UML的图符,使用时还必须遵循一定的原则及步骤。2、UML结构UMLStructure构造块buildingblocks公共机制commonmechanisms构架architecture基本UML建模元素、关系和图达到特定目标的公共UML方法系统架构的UML视图构造块构造块buildingblocks物件things关系relationships图diagrams建模元素本身把物件联系在一起,关系说明两个或多个物件时如何语义相关的UML模型的视图,它们展现物件的集合,“讲述关于软件系统的故事”,是我们可视化系统将做什么(分析级图)或者系统如何做(设计级图)的方法物件物件things结构物件行为物件分组物件注解物件UML模型中的名词,如类、接口、协作、用例、活动类、构件、节点UML模型的动词,如交互、状态机包,它用于把语义上相关