1、面向对象分析与设计面向对象分析与设计O-O Analysis and Design机电学院杨静萍2013-2014(1)内容提要内容提要l面向对象的概念面向对象的概念(Concepts of Object-Oriented)l面向对象技术框架面向对象技术框架(Architecture of Object-Oriented)l面向对象分析技术面向对象分析技术(Object-Oriented Analysis Technology)面向对象概念面向对象概念l哲学的观点:客观世界与主观世界l计算机软件:模拟现实世界l面向对象的基本概念l面向对象(Object Oriented)l对象和类(Objec
2、t&Class)l消息(Messages)l类的特性(Features of Class)l接口(Interface)l包(Package)哲学的观点:客观世界与主观世界哲学的观点:客观世界与主观世界1.事物实体:内部状态属性 运行规律行为2.事物归类3.相互联系4.相互作用1.对象Object 属性域 行为方法2.类Class3.关系Relation4.消息Method计算机软件:模拟现实世界计算机软件:模拟现实世界面向对象(面向对象(Object Oriented)l面向对象是一种用于产生模型的技术,这些模型使用某个领域的术语,以自然的方式来反映该领域;l面向对象有5个基本概念:对象、类、
3、消息、继承和多态。对象和类(对象和类(Object&Class)l对象(Object):现实世界中实体的逻辑模型。每个对象有一个名称,多种属性和多个操作。l类(Class):对象共性特征的抽象。每个对象也有一个名称,多种属性和多个操作。类是对象的抽象化,对象是类的实例化。消息(消息(Messages)l消息是指对象间相互联系和相互作用的方式。一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容(参数)、反馈。类的特性(类的特性(Features of Class)l(1)抽象()抽象(Abstraction)l(2)封装()封装(Encapsulation)l(3)
4、继承()继承(Inherit,Extends)l(4)多态、覆盖()多态、覆盖(Polymorphism/Override)l(5)重载()重载(Overload)l(6)关联(Association)l(7)聚集(Aggregation)(1)抽象()抽象(Abstraction)l类的定义中明确指出类是一组具有类的定义中明确指出类是一组具有内部状态内部状态和和运动规律运动规律对象的抽象,抽象是一种从一般的观对象的抽象,抽象是一种从一般的观点看待事物的方法,它要求我们集中于事物的点看待事物的方法,它要求我们集中于事物的本质特征(内部状态和运动规律),而非具体本质特征(内部状态和运动规律),而
5、非具体细节或具体实现。面向对象鼓励我们用抽象的细节或具体实现。面向对象鼓励我们用抽象的观点来看待现实世界,也就是说,现实世界是观点来看待现实世界,也就是说,现实世界是一组抽象的对象一组抽象的对象类组成的。类组成的。(2)封装(Encapsulation)l对象间的相互联系和相互作用过程主要通过消对象间的相互联系和相互作用过程主要通过消息机制得以实现。对象之间并不需要过多的了息机制得以实现。对象之间并不需要过多的了解对方内部的具体状态或运动规律。面向对象解对方内部的具体状态或运动规律。面向对象的类是封装良好的模块,的类是封装良好的模块,类定义将其说明类定义将其说明(用(用户可见的外部接口)户可见
6、的外部接口)与实现与实现(用户不可见的内(用户不可见的内部实现)部实现)显式地分开显式地分开,其内部实现按其具体定,其内部实现按其具体定义的作用域提供保护。类是封装的最基本单位。义的作用域提供保护。类是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。封装防止了程序相互依赖性而带来的变动影响。在类中定义的接收对方消息的方法称为类的接在类中定义的接收对方消息的方法称为类的接口。口。(3)继承(Inherit,Extends)l继承是类不同抽象级别之间的关系。类的定义主要有继承是类不同抽象级别之间的关系。类的定义主要有2种办法归纳和演绎;由一些特殊类归纳出来的一般种办法归纳和演绎;由一些
7、特殊类归纳出来的一般类称为这些特殊类的父类,特殊类称为一般类的子类,类称为这些特殊类的父类,特殊类称为一般类的子类,同样父类可演绎出子类;同样父类可演绎出子类;父类是子类更高级别的抽父类是子类更高级别的抽象。象。子类可以继承父类的所有内部状态和运动规律。子类可以继承父类的所有内部状态和运动规律。在计算机软件开发中采用继承性,提供了类的规范的在计算机软件开发中采用继承性,提供了类的规范的等级结构;通过类的继承关系,使公共的特性能够共等级结构;通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。享,提高了软件的重用性。(4)多态、覆盖(Polymorphism/Override)l多态(覆
8、盖):多态性是指同名的方法可在不同的类多态(覆盖):多态性是指同名的方法可在不同的类中具有不同的运动规律。在父类演绎为子类时,类的中具有不同的运动规律。在父类演绎为子类时,类的运动规律也同样可以演绎,演绎使子类的同名运动规运动规律也同样可以演绎,演绎使子类的同名运动规律律 或运动形式更具体,甚至子类可以有不同于父类或运动形式更具体,甚至子类可以有不同于父类的运动规律或运动形式。的运动规律或运动形式。不同的子类可以演绎出不同不同的子类可以演绎出不同的运动规律。的运动规律。(5)重载(Overload)l重载指类的重载指类的同名方法同名方法在给其在给其传递不同的参数传递不同的参数是是可以有不同的运
9、动规律。在对象间相互作用时,可以有不同的运动规律。在对象间相互作用时,即使接收消息对象采用相同的接收办法,但消即使接收消息对象采用相同的接收办法,但消息内容的详细程度不同,息内容的详细程度不同,接收消息对象内部接收消息对象内部的运动规律也可能不同。的运动规律也可能不同。(6)关联()关联(Association)l对象之间以某种方式发生联系,例如:对象之间以某种方式发生联系,例如:lThe man turns on the TV;lThe man is married to the woman;lThe man is a friend of the other man;lThe man dri
10、ve the car;l(7)聚集()聚集(Aggregation)l对象之间的组成关系,例如:对象之间的组成关系,例如:l计算机对象由主机、键盘、鼠标、显示器等对象组计算机对象由主机、键盘、鼠标、显示器等对象组成;成;l汽车对象由车身、轮胎、动力系统、电气装置、内汽车对象由车身、轮胎、动力系统、电气装置、内饰等对象组成;饰等对象组成;l接口(接口(Interface)l接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为,即,实现接口的类应具有接口所定义的功能。包(包(Package)l哲
11、学认为现实世界中不同对象间的相互联系和相互作用构成了各种不同的系统,不同系统间的相互联系和相互作用构成了更庞大的系统,进而构成了整个世界。在面向对象概念中把这些系统称为包。面向对象技术框架面向对象技术框架序号列名类型为空备注1brandNameString(20)N商标2modelNameString(10)N型号3serialNameString(15)Y系列4capacityNumber(8,2)N容量5stateString(8)N状态public class WashingMachine private String brandName;private String modelName
12、;private String serialName;private double capacity;private String state;public String getBrandName()return brandName;public void setBrandName面向对象分析技术面向对象分析技术(OOA)l面向对象分析技术概述l基于UML的面向对象分析面向对象分析技术面向对象分析技术概述概述lOOA的目的:目的:是对客观世界并进行建模lOOA的实质:实质:是对需求的分析和理解.lOOA的过程:过程:l获取问题陈述l确定类l准备数据字典l确定关联l使用继承来细化类型l完善对象模
13、型l建立对象动态模型l建系统功能模型l OOA的工具:工具:UML基于基于UML的面向对象分析的面向对象分析lUML简介lUML建模范围lUML世界的构成lUML分析设计过程UML简介简介lUML概述lUML的诞生lUML的发展历程UML概述概述l统一建模语言统一建模语言(Unified Modeling Language,UML)是用来对软件系统进行可视化建模的一种语言。是为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。lUML可以贯穿软件开发周期中的每一个阶段。被OMG(Object Management Group)采纳作为业界的标准。UML最适于数据建模,业务建模,
14、对象建模,组件建模。UML的诞生的诞生lGrady BoochlJames RubaughlIvar JacobsonlRational lOMG(1997)lIBM(2003)UML的发展的发展历程历程UML建模范围建模范围lUML是一种统一的、标准化的建模语言是一种统一的、标准化的建模语言 lUML是一种应用面很广泛的建模语言是一种应用面很广泛的建模语言 模型种类模型用途业务模型对业务过程、工作流、组织的建模需求模型对捕获的需求进行整理和分析的工具,辅助开发人员与用户进行沟通设计模型包含高层设计(架构模型)和详细设计模型,用于统一开发人员、沟通设计信息数据库模型 设计数据库的结构、表结构以
15、及与应用系统的交互实现模型用来理清软件的组成、部署方案,为安装与维护人员的工作提供指导UML世界的构成世界的构成UML构造块构造块规则规则公共机制公共机制建模元素建模元素关系关系图图修饰修饰公共分类公共分类扩展机制扩展机制命名命名范围范围可见性可见性完整性完整性执行执行1.结构元素结构元素(类类,接口接口,协作协作,用例用例,对象对象,构件构件,节点等节点等)2.行为元素行为元素(交互交互,状态机状态机)3.分组元素分组元素(包包)4.注解元素注解元素1.关联关联2.依赖依赖3.泛化泛化4.实现实现1.静态模型静态模型(类图类图,构件图构件图,部署图部署图)2.动态模型动态模型(对象图对象图,
16、用例图用例图,顺序图顺序图,协作图协作图,状态图状态图,活动图活动图)构造块构造块l构造块是对模型中最具有代表性的成分的抽象构造块是对模型中最具有代表性的成分的抽象 l建模元素建模元素:UML中的名词,它是模型基本物理元中的名词,它是模型基本物理元素。素。l行为元素行为元素:UML中的动词,它是模型中的动态部中的动词,它是模型中的动态部分,是一种跨越时间、空间的行为。分,是一种跨越时间、空间的行为。l分组元素分组元素:UML中的容器,用来组织模型,使模中的容器,用来组织模型,使模型更加的结构化。型更加的结构化。l注释元素注释元素:UML中的解释部分,和代码中的注释中的解释部分,和代码中的注释语
17、句一样,是用来描述模型的。语句一样,是用来描述模型的。建模元素建模元素l类(类(class)和对象()和对象(object)l用例(用例(use case)l协作(协作(collaboration)l构件(构件(component)l节点(节点(node)类(类(class)和对象()和对象(object)l类是对一组具有相同属类是对一组具有相同属性、相同操作、相同关性、相同操作、相同关系和相同语义的对象的系和相同语义的对象的抽象抽象 lUML中类是用一个矩形中类是用一个矩形表示的,它包含三个区表示的,它包含三个区域,最上面是类名、中域,最上面是类名、中间是类的属性、最下面间是类的属性、最下面
18、是类的方法是类的方法 l对象则是类的一个实例对象则是类的一个实例 用例(use case)l用例是著名的大师用例是著名的大师Ivar Jacobson首先提出的,首先提出的,现已经成为了面向对象现已经成为了面向对象软件开发中一个需求分软件开发中一个需求分析的最常用工具析的最常用工具 l用例实例是在系统中执用例实例是在系统中执行的一系列动作,这些行的一系列动作,这些动作将生成特定执行者动作将生成特定执行者可见的价值结果。一个可见的价值结果。一个用例定义一组用例实例。用例定义一组用例实例。协作(collaboration)l协作定义了一个交协作定义了一个交互,它是由一组共互,它是由一组共同工作以提
19、供某协同工作以提供某协作行为的角色和其作行为的角色和其他元素构成的一个他元素构成的一个群体。群体。l对于某个用例的实对于某个用例的实现就可以表示为一现就可以表示为一个协作个协作构件(component)l在实际的软件系统中,有在实际的软件系统中,有许多要比许多要比“类类”更大的实更大的实体,例如一个体,例如一个COM组件、组件、一个一个DLL文件、一个文件、一个JavaBeans、一个执行文、一个执行文件等等。为了更好地对在件等等。为了更好地对在UML模型中对它们进行表模型中对它们进行表示,就引入了构件(也译示,就引入了构件(也译为组件)为组件)l构件是系统设计的一个模构件是系统设计的一个模块
20、化部分,它隐藏了内部块化部分,它隐藏了内部的实现,对外提供了一组的实现,对外提供了一组外部接口。在系统中满足外部接口。在系统中满足相同接口的组件可以自由相同接口的组件可以自由地替换地替换 节点(node)l为了能够有效地对部署的为了能够有效地对部署的结构进行建模,结构进行建模,UML引入引入了节点这一概念,它可以了节点这一概念,它可以用来描述实际的用来描述实际的PC机、打机、打印机、服务器等软件运行印机、服务器等软件运行的基础硬件的基础硬件l节点是运行时存在的物理节点是运行时存在的物理元素,它表示了一种可计元素,它表示了一种可计算的资源,通常至少有存算的资源,通常至少有存储空间和处理能力储空间
21、和处理能力 行为元素行为元素l交互(交互(interaction):是在特定语境中,共同):是在特定语境中,共同完成某个任务的一组对象之间交换的信息集合完成某个任务的一组对象之间交换的信息集合 l交互的表示法很简单,就是一条有向直线,并在上交互的表示法很简单,就是一条有向直线,并在上面标有操作名面标有操作名 l状态机(状态机(state machine):是一个对象或交):是一个对象或交互在生命周期内响应事件所经历的状态序列互在生命周期内响应事件所经历的状态序列 l在在UML模型中将状态画为一个圆模型中将状态画为一个圆角矩形,并在矩形内写出状态名角矩形,并在矩形内写出状态名称及其子状态称及其子
22、状态 分组元素分组元素l对于一个中大型的软件系统而言,通常会包含对于一个中大型的软件系统而言,通常会包含大量的类,因此也就会存在大量的结构事物、大量的类,因此也就会存在大量的结构事物、行为事物,为了能够更加有效地对其进行整合,行为事物,为了能够更加有效地对其进行整合,生成或简或繁、或宏观或微观的模型,就需要生成或简或繁、或宏观或微观的模型,就需要对其进行分组。在对其进行分组。在UML中,提供了中,提供了“包包(Package)”来完成这一目标。来完成这一目标。Package1注释元素注释元素l结构事物是模型的主要构造块,行为事物则是结构事物是模型的主要构造块,行为事物则是补充了模型中的动态部分
23、,分组事物而是用来补充了模型中的动态部分,分组事物而是用来更好地组织模型,似乎已经很完整了。而注释更好地组织模型,似乎已经很完整了。而注释事物则是用来锦上添花的,它是用来在事物则是用来锦上添花的,它是用来在UML模型上添加适当的解释部分模型上添加适当的解释部分 注释写在这里:XXXXXXXXXXXXXXXXXUML模型关系的种类模型关系的种类种类变种表示法关键字或符号种类变种表示法关键字或符号抽象派生泛化关系derive导入 私有依赖关系access显现manifest公有import实现实现关实现关系系虚线加空心三角信息流flow精化依赖关系refine包含并merge跟踪trace许可pe
24、rmit关联关联关关联关系系实线协议符合未指定绑定依赖关系bind(参数表)替换依赖关系substitute部署deploy使用调用call扩展Extendextend(扩展点)创建create扩展extension扩展关扩展关系系实线加实心三角实例化instantiate泛化泛化关泛化关系系实线加空间三角职责responsibility包含依赖关系include发送send关联关系关联关系l关联(Association)表示两个类之间存在某种语义上的联系。关联关系提供了通信的路径,它是所有关系中最通用、语义最弱的。l在UML中,使用一条实线来表示关联关系。l两种特殊的关联关系:例:l聚合(A
25、ggregation)表示类之间的关系是整体与部分的关系 l组合:如果发现“部分”类的存在,是完全依赖于“整体”类的,那么就应该使用“组合”关系来描述PersonCompanyWorks foremployee*1 employer聚合与组合例聚合与组合例l组合是聚合的变种,加入了一些重要的语义。也就是说,在一个组合关系中一个对象一次就只是一个组合的一部分,“整体”负责“部分”的创建和破坏,当“整体”被破坏时,“部分”也随之消失成员*课题组个人*窗口显示区外框标题抽象(泛化、实现与依赖)关系抽象(泛化、实现与依赖)关系l泛化关系描述了一般事物与该事物中的特殊种类之间的关系,也就是父类与子类之间
26、的关系。抽象(泛化、实现与依赖)关系抽象(泛化、实现与依赖)关系l实现关系是用来规定接口和实现接口的类或组件之间的关系。接口是操作的集合,这些操作用于规定类或组件的服务。抽象(泛化、实现与依赖)关系抽象(泛化、实现与依赖)关系l有两个元素X、Y,如果修改元素X的定义可能会引起对另一个元素Y的定义的修改,则称元素Y依赖(Dependency)于元素X。UML规则规则l命名:也就是为事物、关系和图起名字。和任命名:也就是为事物、关系和图起名字。和任何语言一样,名字都是一个标识符何语言一样,名字都是一个标识符 l范围:与类的作用域相似范围:与类的作用域相似.l可见性:可见性:可见性规则标准表示法Ro
27、se属性Rose方法public任一元素,若能访问包容器,就可以访问它+protected只有包容器中的元素或包容器的后代才能够看到它#private只有包容器中的元素才能够看得到它-package只有声明在同一个包中的元素才能够看到该元素UML视图和图视图和图领域视图图结构静态视图类图设计视图复合结构图、协作图、构件图用例视图用例图动态状态视图状态机图活动视图活动图交互视图顺序图、通信图物理部署视图部署图模型管理模型管理视图 包图UML图形分类图形分类UML分析设计过程分析设计过程UML分析设计过程分析设计过程l用例建模l用例(Use case)、用例的一般化(分类和继承)l参与者(Acto
28、r)、参与者的一般化(交叠角色)l包含关系(Include)l扩展关系(Extend)l用例描述(Use case description)l过程建模l顺序图(Sequence Diagram)l将用例映射为类用例(用例(Use case)l用于定义建模的系统如何被周围环境所使用,一个正常中等大小的系统约有2050个用例。l一个用例可以模拟系统的一个用法(功能)。l用例不捕获系统外部的动作,只存在与系统内部系统内部。l一个用例组成系统的完整用法完整用法。l其名字是一个从系统观点以主动现在时态给定的动动词词短语,尽量使用约定俗成的名称,如Login。l用例与系统的内部结构是相互独立的相互独立的。
29、l用例是系统的灰盒描述:描述系统的功能和处理过程(基本的,选择性的,例外的),而不描述系统的内部构造。用例的一般化(分类和继承)用例的一般化(分类和继承)l可用于同类用途建模的用例可以抽象(一般化)为父用例,由特殊化而来的子用例实现具体的用途。体现UML中的分类学关系。测试人员测试主观题测试客观题测试参与者(参与者(Actor)l建模了系统用户组使用系统时即在与用例交互时扮演的角色。l参与者处在系统的外部外部。l参与者可以由人人扮演,也可以有机器机器、其他计算机计算机系统系统扮演。l一个一个参与者可以和多个多个用例交互。l参与者的名称是单数的名词名词性短语。l从系统角度系统角度而非业务角度建模
30、用户,例如:经理和销售员下订单办事员。参与者的一般化(交叠角色)参与者的一般化(交叠角色)l如果多个参与者与同一个用例相关联,且角色相同,则应考虑采用一个交叠角色来代替这些参与者。Maria办事员大型机订购货物包含关系包含关系(Include)l重用机制,公用事件流部分抽象。l包含用例通常也被称为抽象的(abstract),不能被实例化和自行执行。l不需要参与者启动,也不需要含有任何输出或拥有明确的动作序列结果。登记货物订购货物检查访问权限扩展关系扩展关系(Include)l在不必修改现有用例前提下扩展系统的机制。l扩展关系的一个重要动机是使得模拟系统配置中可选的服务成为可能。l一个用例允许扩
31、展多个其他的用例。l扩展用例依赖于基本用例,基本用例相对独立。l扩展点:扩展序列插入到动作序列中的准确位置。订购货物补充货物扩展点更新了货物的数量条件在货物的总数减少了所定购数量之后计算价格扩展点输入的客户ID条件客户请求当前全部订单用例描述用例描述l简要说明(Brief Description):用例的作用和目的l事件流(Flow of Event):包括l基本流:正常操作下的处理流程l备选流:误操作下的处理流程l特殊需求(Special Requirement):与用例相关的非功能需求(性能、可靠性、可用性、可扩展性等)和设计约束(所使用的操作系统、开发工具等)。l前置条件:执行用例之前系
32、统必须所处的状态。l后置条件:用例执行完毕后系统可能所处的状态。l相关数据:用例相关的数据类或数据表。顺序图(顺序图(Sequence Diagram)l用来描述用例与其环境(参与者)间的交互。:办事员订票:航空公司1:创建新机票()2:显示客户表()3:输入客户信息()4:显示航班表()5:输入航班信息()6:预定座位()7:确认预定()8:座位已预定()9:收票()10:确认编号()将用例映射为类将用例映射为类l分析模型和设计模型l分析类设计:鲁棒图分析模型和设计模型分析模型和设计模型l分析模型:描述系统的理想结构,这个结构与实现平台无关。l设计模型:描述系统的实际结构,具有内部直接的结构
33、,也即用类、组件、子系统等元素表示出系统的内部结构。分析类设计分析类设计l鲁棒图(Robustness Diagram)l边界类(Boundary):负责转换用户系统之间的消息。l控制类(Control):控制其他类工作的类。l实体类(Entity):保存要放进持久存储体的信息。l活动图(Activity Diagram)l顺序图(Sequence Diagram)l状态机图(State Diagram)鲁棒图(鲁棒图(Robustness Diagram)SystemSystemMaria办事员大型机订购货物网页订单处理程序订单网页订单处理程序订单realize状态机图状态机图顺序图顺序图sequence活动图活动图