第十一章面向对象分析与设计本章重点面向对象方法产生和发展1面向对象方法的基本概念2统一建模语言3面向对象设计5面向对象分析和设计案例6面向对象分析411.1面向对象方法的形成与发展11.1.1面向对象方法的发展史20世纪60年代末,Simula67语言。70年代到80年代,Smalltalk语言。80年代中期到90年代,C++,ObjectPascal、Java等。80年代后,Booch提出的Booch方法;Jacobson提出的OOSE方法;Rumbaugh提出的OMT方法。90年代中期,统一建模语言(UnifiedModelingLanguage,UML)11.1面向对象方法的形成与发展(续)11.1.2面向对象方法的基本原理OO方法强调从“问题域”到“实现域”的映射应采用一种直接和自然的映射方法,使实现域保持了问题域的本来面目,没有对问题域造成扭曲。这是OO方法最突出的优点。OO方法以对象为中心,强调对象是对客观事物的正确抽象,是构成软件系统的基本单位。对象是由属性和服务组成的。将具有相同属性和服务的对象归为一类,类是这些对象的抽象描述。通过继承机制简化了对系统的构造和描述。通过消息实现了对象的动态联系。通过关联实现对象的静态联系。11.2面向对象方法的主要概念11.2.1对象1、对象对象是系统中用来描述客观事物的一个实体,一个对象由一组属性和对这组属性进行操作的一组服务构成。2、属性属性是用来描述对象静态特征的一个数据项。3、服务服务是用来描述对象动态特征的一个操作序列。11.2面向对象方法的主要概念(续)11.2.2类类是指具有相同属性和服务的一组相似对象的集合。11.2.3封装封装(Encapsulation)是指通过对象将属性和服务组合起来,构成一个不可分割的独立的系统单位,并尽可能隐蔽其内部细节。11.2.4继承继承(Inheritance)是指特殊类的对象可自动地拥有其一般类定义的全部属性与服务。11.2面向对象方法的主要概念(续)11.2.5消息消息(Message)是指向对象发出的服务请求。11.2.6关系一般-特殊关系又称作继承关系或“is-a-kind-of”关系。关联关系关联(Association)表示一个对象了解其它对象的程度。11.2面向对象方法的主要概念(续)整体-部分关系整体-部分关系又称作组合关系或“is-a-part-of”关系。行为依赖关系行为依赖关系描述对象之间的动态联系,即:若一个对象在执行自己的服务时,需要向另外的一个对象发送消息请求它的某种服务,则称这两个对象之间存在着行为依赖关系。11.2.7多态性对象的多态性(Polymorphism)是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。11.2面向对象方法的主要概念(续)11.2.8永久对象永久对象(PersistentObject),就是其生存期可以超越程序的执行时间而长期存在的对象。11.2.9主动对象1、被动对象对象的每一个服务只有在一条消息的驱动下才被执行,这样的对象称为被动对象(PassiveObject)。2、主动对象主动对象(ActiveObject)就是至少有一个服务不需要接收消息就能主动执行(称为主动服务)的对象。11.3统一建模语言UML11.3.1UML的发展与作用(一)UML发展史1995年10月同在美国Rational软件公司工作的G.Booch和J.Rumbaugh把他们各自提出的Booch方法和OMT方法结合起来,形成一种统一方法,即UM(UnifiedMethod)0.8。OOSE的提出者I.Jacobson也加入了这一行列,经过三人的密切合作,于1996年6月和10月先后发布了二义性较少的UML0.9和0.91版本。1997年1月,他们推出了UML1.0版,并提交到对象管理组织(ObjectManagementGroup,OMG)作为初步的提案申请。11.3统一建模语言UML(续)1997年9月1日提出了UML1.1,并作为最终提案提交到OMG,该提案在1997年11月被OMG正式采纳为OO建模的标准语言。OMG平台技术委员会批准成立UML修订任务组,先后制定改进版本,包括:UML1.2、UML1.3、UML1.4。并将UMLl.3作为其最终草案,于1999年6月提交给OMG组织委员会和平台技术委员会,并获得批准。目前最高版本是UML2.011.3统一建模语言UML(续)(二)UML的主要作用作为一种建模语言,UML定义了建立系统模型所需的概念及其标准的可视化图形表示符号。但是它并不介绍如何进行系统建模。因此,UML并不是一种面向对象建模方法和过程。UML是一种建模语言,而不是一种程序设计语言。UML是一个可扩展的建模语言。11.3统一建模语言UML(续)11.3.2面向对象分析和设计的UML模型结构UML将OOA&D要建立的系统模型划分为系统功能视图、系统静态视图和系统动态视图。系统功能视图OOA&D模型用例图系统静态视图系统动态视图类图对象图状态图序列图协作图活动图11.3统一建模语言UML(续)(一)功能视图功能视图用于展现一个系统应具有的功能集合。UML用例图(UseCaseDiagram)来描述。(二)静态视图静态视图也成为逻辑视图,用于展现系统的静态结构,揭示系统内部的组成元素及其它们之间的关系。UML用“类图”和“对象图”来描述。(三)动态视图动态视图用于展现系统的动态行为特征。UML用序列图(SequenceDiagram)、状态图(StateDiagram)、协作图(CollaborationDiagram)和活动图(ActivityDiagram)来描述。11.3统一建模语言UML(续)11.3.3功能视图的概念和表示方法用例图基本的模型元素包括用例(UseCase)、角色(Actor)和用例关系。UseCaseNameActorNameextendsuses(a)用例(b)角色(c)扩展关系(d)使用关系(e)通信关联用例图中的主要模型元素及其表示符号11.3统一建模语言UML(续)(一)角色“角色”是指在系统边界以外与系统进行信息交互的有关事物。(二)用例“用例”是指从系统外部各个角色的角度观察,系统应支持哪些功能,一个用例提供对应系统对外部提供的一项功能,它是对系统功能的宏观描述。(三)用例关系扩展(Extends)关系使用(Uses)关系11.3统一建模语言UML(续)取款存款验证客户身份usesusesextends具体用例快取抽象用例客户(四)用例图示例11.3统一建模语言UML(续)11.3.4静态视图的概念和表示方法(一)类和对象的表示1、类和对象表示的符号类和对象都用长方形表示,长方形分成上、中、下三个区域来分别表示类和对象的名字、类的属性和服务。类名属性服务类名对象名:类名属性服务对象名:类名(a)类的完整和简化表示符号(b)对象的完整和简化表示符号11.3统一建模语言UML(续)2、属性类的属性用来描述该类的所有对象所具有的静态特征,对象的属性用来描述该对象所有的属性值。UML描述属性的语法格式为:[可见性]属性名:属性类型名[=初值{性质串}]3、服务类的服务说明了该类能做些什么。每种服务定义的标准语法格式为:[可见性]服务名(参数表):返回值类型[{性质串}]11.3统一建模语言UML(续)+GetStudentTotal():Integer+休学()+获得学籍状态():String+调整班级(in新班级:String)+注册(in学年学期:String=当前学期,in注册标识:Boolean=true)-学号:String-姓名:String-性别:String-出生日期:Date#录取专业:String-在校学生总数:Integer+班级:String+入学日期:Date=当天日期-学籍状态:String=在校-注册结果:注册信息本科学生4、类定义示例11.3统一建模语言UML(续)(二)继承关系的表示1、继承关系表示的符号继承关系用一条带空心三角形的直线表示,空心三角形紧挨父类。学生研究生本科生专科生父类子类(a)继承关系表示符号(b)继承关系示例在职研究生非在职研究生11.3统一建模语言UML(续)2.多态子类也可以把本来在父类中定义的属性和服务重新进行定义,来达到“名字相同,语义不同”的目的。“多态”是在属性或服务的“性质串”中来说明的。3.抽象类所谓“抽象类”是指没有具体对象的类。抽象类一般只作为父类,用于描述其子类的公共属性和服务。抽象类通常都具有抽象服务。抽象服务仅仅用来指定某个类的所有子类应具有哪些行为,但并不指定具体的实现方式。抽象服务的表示方法是在抽象服务标记后跟随一个性质串{抽象性=Abstract}。11.3统一建模语言UML(续)考核(){时序,抽象性=Abstract}姓名......人员{抽象性=Abstract}考核(){polymorphic,时序}学号班级专业......研究生考核(){polymorphic,时序}职称专业......教职工考核(){polymorphic,时序}单位......在职研究生“在职研究生”类的父类是“研究生”和“教职工”抽象类和服务的表示方法4、多继承及其抽象类表示法示例11.3统一建模语言UML(续)(三)关联关系表示1、关联关系表示的符号一般的关联关系采用一条直线来表示,该直线连接了具有关联关系的两个类或对象。角色名角色名关联名称[阅读方向]多重性多重性11.3统一建模语言UML(续)2、关联名称使用关联名称可更清晰地说明该关联关系的含义和目的。3、角色名角色名用于规定某个类在关联关系中所起的作用。4、多重性多重性用于说明关联关系中某类对象的数量关系,即该类的多少个对象可以与另一个类的一个对象相关联。5、导向性导向性用于说明两个类的关联是单向的,导向性采用实线箭头表示,即只有箭头所指方向上才有这种关联关系。11.3统一建模语言UML(续)6、关联类“关联类”用来表示关联关系本身所拥有的特征。7、多元关联客观世界中,有时多个事物之间存在某种联系。(a)三元关联关系角色名多重性多重性关联名多重性角色名角色名关联类角色名角色名(b)关联类多重性多重性11.3统一建模语言UML(续)(四)整体-部分关系表示对象间的整体-部分关系是关联关系的特例。UML中表示整体-部分关系的符号与关联关系类似,只是在指向整体对象的一端增加了一个小菱形。如果是聚合关系,则小菱形是空心的,如果是组成关系,则小菱形是实心的。多重性多重性角色名角色名聚合名称[阅读方向]多重性多重性角色名角色名组成名称[阅读方向](a)聚合表示符号(b)组成表示符号11.3统一建模语言UML(续)(五)包的概念及其表示1、包的概念包(Package)是一种组合机制,把各种各样的模型元素通过内在的语义连成一个整体就形成一个包。构成包的模型元素称为包的内容。2、包的表示“包”的图形表示符号类似文件夹,由两个长方形组成,小长方形位于大长方形的左上角。11.3统一建模语言UML(续)3、包间关系依赖关系如果包A引用了包B的类或类的服务,则称B依赖A。依赖关系用一条带箭头的虚线表示。继承关系,如果包B内的某个类是包A某个类的子类,则包A和B构成了继承关系,包间继承关系的表示符号同类间的继承关系一样。11.3统一建模语言UML(续)成绩管理成绩维护成绩查询成绩统计4、包的示例11.3统一建模语言UML(续)11.3.5动态视图的概念和表示方法(一)状态图状态图用于描述一个对象所能达到的所有状态以及引起状态变化的事件,用于对类所描述事物的补充说明。1、状态的表示一个对象的状态由一个初始状态、若干个中间状态和零到多个终止状态组成。状态名状态变量状态名活动表转移条件(a)初态(b)终态(c)简化状态(d)完整状态(e)状态转换11.3统一建模语言UML(续)2、状态转移表示对象状态间的转换用一条带