1、1OOA&D方法方法总结总结2面向对象的概念包括以下两种情况:面向对象的概念包括以下两种情况:(1)用来构成系统模型的某种基本成分,称为)用来构成系统模型的某种基本成分,称为建模元素建模元素(2)在建模中需要遵守的某种)在建模中需要遵守的某种原则原则,不代表任何模型成分,不代表任何模型成分 主要概念主要概念主要建模元素主要建模元素 对象、类(所有的对象都通过类来表示)对象、类(所有的对象都通过类来表示)属性、操作(类属性和实例属性,被动操作和主动操作)属性、操作(类属性和实例属性,被动操作和主动操作)一般一般-特殊关系,一般特殊关系,一般-特殊结构特殊结构整体整体-部分关系,整体部分关系,整体
2、-部分结构部分结构关联关联 (二元关联、多元关联)(二元关联、多元关联)消息消息 (控制流内部的消息,(控制流内部的消息,控制流之间的消息)控制流之间的消息)3 主要主要原则原则(1)抽象)抽象什么叫抽象什么叫抽象?OO方法广泛地运用抽象原则,例如:方法广泛地运用抽象原则,例如:系统中的对象是对现实世界中事物的抽象,类是对象的抽象,一般类是对特殊类的进一步抽象,属性是事物静态特征的抽象,操作是事物动态特征的抽象。过程抽象过程抽象任何一个完成确定功能的操作序列,其使用者都可把它看作一个单一的实体,尽管实际上它可能是由一系列更低级的操作完成的。数据抽象数据抽象根据施加于数据之上的操作来定义数据类型
3、,并限定数据的值只能由这些操作来修改和观察。4(2)分类)分类分类就是把具有相同属性和操作的对象划分为一类,用类作为这些对象的抽象描述。不同程度的抽象可得到不同层次的类,形成一般-特殊结构(又称分类结构)。强调:在类的抽象层次上建模强调:在类的抽象层次上建模(3)封装)封装(4)继承)继承(5)聚合)聚合(6)关联)关联(7)消息通信)消息通信即要求对象之间只能通过消息进行通讯,而不允许在对象之外直接地存取对象内部的属性。5(8 8)粒度控制)粒度控制人们在研究问题时既需要微观的思考,也需要宏观的思人们在研究问题时既需要微观的思考,也需要宏观的思考。因此需要控制自己的视野:考虑全局时,注重其大
4、考。因此需要控制自己的视野:考虑全局时,注重其大的组成部分,暂时不详察每一部分的具体的细节;考虑的组成部分,暂时不详察每一部分的具体的细节;考虑某部分的细节时则暂时撇开其余的部分。这就是粒度控某部分的细节时则暂时撇开其余的部分。这就是粒度控制原则。制原则。引入包(引入包(packagepackage)的概念,把模型中的类按一定的规则)的概念,把模型中的类按一定的规则进行组合,形成一些包,使模型具有大小不同的粒度层进行组合,形成一些包,使模型具有大小不同的粒度层次,次,从而有利于人们对复杂性的控制从而有利于人们对复杂性的控制。6(9 9)行为分析)行为分析以对象为单位描述系统中的各种行为以对象为
5、单位描述系统中的各种行为任何行为都归属于某个对象,用对象的操作表示。任何行为都归属于某个对象,用对象的操作表示。对象的操作只作用于对象自身的属性。对象的操作只作用于对象自身的属性。通过消息描述对象之间的行为依赖关系通过消息描述对象之间的行为依赖关系如果一个对象操作的执行需要另一个对象为它提供如果一个对象操作的执行需要另一个对象为它提供服务,则在模型中表现为前者向后者发送消息。服务,则在模型中表现为前者向后者发送消息。认识行为的起因,区分主动行为和被动行为认识行为的起因,区分主动行为和被动行为用主动对象的主动操作描述主动行为用主动对象的主动操作描述主动行为用对象的被动操作描述被动行为用对象的被动
6、操作描述被动行为认识系统的并发行为认识系统的并发行为在分析阶段根据,根据系统的需求和事物的主动性在分析阶段根据,根据系统的需求和事物的主动性来认识系统的并发行为。在设计阶段,根据具体的来认识系统的并发行为。在设计阶段,根据具体的实现条件确定系统中需要设计哪些控制流。实现条件确定系统中需要设计哪些控制流。7 模型及其规约模型及其规约在分析阶段和设计阶段建立的系统模型分别称为在分析阶段和设计阶段建立的系统模型分别称为OOA模型模型和和OOD模型模型 正规理解:正规理解:一个系统模型,应包括建模过程中产生的图形、文字等各种形式的文档。因为,所谓“模型”是指某一级别上的系统抽象描述,构成这种描述的任何
7、资料都是模型的一部分。习惯说法:习惯说法:目前大部分OOA/OOD著作谈到“模型”,一般是指OOA或OOD过程中产生的图形文档。一般习惯将模型模型和模型规约模型规约分别讨论OOA和和OOD模型包括模型包括需求模型需求模型、基本模型基本模型和和辅助模型辅助模型,通,通过过模型规约模型规约 做详细说明做详细说明8基本模型基本模型类图类图 面向对象的建模中最重要、最基本的模型图面向对象的建模中最重要、最基本的模型图集中而完整地体现了面向对象的概念集中而完整地体现了面向对象的概念 为面向对象的编程提供了直接、可靠的依据为面向对象的编程提供了直接、可靠的依据 可以从三个层次来看可以从三个层次来看 对象层
8、对象层特征层特征层关系层关系层需求模型需求模型用况图用况图 每个用况是一项系统功能使用情况的每个用况是一项系统功能使用情况的说明,把每一类参与者对每一项系统说明,把每一类参与者对每一项系统功能的使用情况确切地描述出来,便功能的使用情况确切地描述出来,便全面地定义了系统的功能需求全面地定义了系统的功能需求 辅助模型辅助模型其他各种图其他各种图 对类图起到辅助作用,提供更详细的建模信息,或者从不对类图起到辅助作用,提供更详细的建模信息,或者从不同的视角来描述系统。例如包图、顺序图、活动图等同的视角来描述系统。例如包图、顺序图、活动图等模型规约模型规约对上述各种模型图及其模型元素的详细而确切的定义和
9、对上述各种模型图及其模型元素的详细而确切的定义和解释。解释。9OOA模型框架模型框架基本模型:类图基本模型:类图模模 型型 规规 约约需求模型:需求模型:用况图用况图辅助模型:辅助模型:包图包图顺序图顺序图活动图活动图对象层对象层特征层特征层关系层关系层10OOD模型框架模型框架从两个侧面来描述从两个侧面来描述人机交互部分人机交互部分数据接口部分数据接口部分控制驱动部分控制驱动部分问题域问题域部分部分从一个侧面看:从一个侧面看:OODOOD模型包括几个主要部分?模型包括几个主要部分?一个核心加三个外围一个核心加三个外围需需 求求 模模 型型辅辅 助助 模模 型型类类 图图模模 型型 规规 约约
10、从另一侧面看:从另一侧面看:OODOOD模型每个部分模型每个部分如何用如何用OOOO概念表达?概念表达?采用与采用与OOAOOA相同的概念及相同的概念及模型组织方式模型组织方式11确定系统边界发现参与者定义用况发现对象定义对象的特征定义对象间的关系原型开发建立模型规约建立需求模型建立基本模型建立包图建立辅助模型建立活动图建立其他图建立顺序图 建模过程建模过程OOA过程过程12问题域部分设计问题域部分设计输入输入OOA模型模型人机交互部分设计人机交互部分设计控制驱动部分设计控制驱动部分设计数据接口部分设计数据接口部分设计构件化与系统部署构件化与系统部署向向OOP输出输出OOD模型模型OOD过程过
11、程13 OOA与与OOD的关系的关系一致的概念与表示法一致的概念与表示法OOA和和OOD采用一致的概念和表示法,从而不存在分析与采用一致的概念和表示法,从而不存在分析与设计之间的鸿沟。设计之间的鸿沟。不同的内容、目标和抽象层次不同的内容、目标和抽象层次OOA:研究问题域和用户需求,运用面向对象的观点发现研究问题域和用户需求,运用面向对象的观点发现问题域中与系统责任有关的对象,以及对象的特征和相互问题域中与系统责任有关的对象,以及对象的特征和相互关系。目标是建立一个直接映射问题域,符合用户需求的关系。目标是建立一个直接映射问题域,符合用户需求的OOA模型。模型。OOD:在在OOA模型基础上,针对
12、选定的实现平台进行系统模型基础上,针对选定的实现平台进行系统设计,按照实现的要求进行具体的设计,目标是产生一个设计,按照实现的要求进行具体的设计,目标是产生一个能够在选定的软硬件平台上实现的能够在选定的软硬件平台上实现的OOD模型。模型。OOA模型:模型:抽象层次较高,忽略了与实现有关的因素抽象层次较高,忽略了与实现有关的因素OOD模型:模型:抽象层次较低,包含了与实现平台有关的细节抽象层次较低,包含了与实现平台有关的细节 14在软件生存周期中的位置在软件生存周期中的位置可适应不同的生存周期模型可适应不同的生存周期模型分析分析(OOA)设计设计(OOD)编程编程(OOP)测试测试维护维护瀑布模
13、型瀑布模型强调严格的阶段强调严格的阶段划分和前后次序划分和前后次序先做完先做完OOAOOA再进再进行行OODOOD演化演化集成集成测试测试编程编程(OOP)设计设计(OOD)分析分析(OOA)喷泉模型喷泉模型各个阶段之间没有各个阶段之间没有严格的界限,其活严格的界限,其活动可以交叠和回溯动可以交叠和回溯有些工作既可在有些工作既可在OOA中进行,也可中进行,也可在在OOD中进行中进行各阶段概念和表示各阶段概念和表示法的一致为采用这法的一致为采用这种模型提供了条件种模型提供了条件15OOA与与OOD的分工的分工两种不同的观点两种不同的观点第二种观点的理由:第二种观点的理由:(1 1)过分强调)过分
14、强调“分析不考虑怎么做分析不考虑怎么做”将使某些必须在将使某些必须在OOAOOA考虑的问题得不到考虑的问题得不到完整的认识。完整的认识。(2 2)把仅与问题域和系统责任有关的)把仅与问题域和系统责任有关的对象的描述在分析阶段一次完成,避免对象的描述在分析阶段一次完成,避免设计阶段重复地认识同一事物,减少了设计阶段重复地认识同一事物,减少了工作量总和。工作量总和。(3 3)对那些与问题域和系统责任紧密)对那些与问题域和系统责任紧密相关的对象细节,分析人员比设计人员相关的对象细节,分析人员比设计人员更有发言权。更有发言权。(4 4)由于)由于OOAOOA和和OODOOD概念和表示法的一概念和表示法
15、的一致,不存在把细化工作留给设计人员的致,不存在把细化工作留给设计人员的必然理由。必然理由。(5 5)OOAOOA阶段建立平台无关的模型阶段建立平台无关的模型(PIMPIM),),OODOOD阶段针对不同的平台建立阶段针对不同的平台建立平台专用模型(平台专用模型(PSMPSM)可在最大程度上)可在最大程度上实现对实现对OOAOOA结果的复用。结果的复用。关键问题:对象的特征细节(如属关键问题:对象的特征细节(如属性的数据类型和操作流程图),是性的数据类型和操作流程图),是在分析时定义还是在设计时定义?在分析时定义还是在设计时定义?做做什什么么怎怎么么做做分分析析设设计计第第一一种种观观点点问题
16、域与问题域与系统责任系统责任与实现有与实现有关的因素关的因素分分 析析设设 计计第二种观点第二种观点16 从从MDA看看OOA与与OOD的关系的关系模型驱动的体系结构模型驱动的体系结构(model-driven architecture,MDA)是是OMG的一个技术规范,是一种加强模型能力的系统开发途的一个技术规范,是一种加强模型能力的系统开发途径。径。模型驱动模型驱动(model-driven):用模型来对系统的理解、设):用模型来对系统的理解、设计、构造、部署、操作、维护和更改进行指导。计、构造、部署、操作、维护和更改进行指导。体系结构体系结构(architecture):是对系统的部件和
17、连接件以及):是对系统的部件和连接件以及这些部件通过连接件进行交互的规约。这些部件通过连接件进行交互的规约。平台平台(platform):是一组子系统和技术,它通过一些接口):是一组子系统和技术,它通过一些接口和专用规则提供了一个连贯的功能集合,任何由该平台支持和专用规则提供了一个连贯的功能集合,任何由该平台支持的应用都可以使用平台所提供的功能而不必关心其实现细节。的应用都可以使用平台所提供的功能而不必关心其实现细节。平台无关模型平台无关模型(platform independence model,PIM):):独立于任何一种平台特征的模型。独立于任何一种平台特征的模型。平台专用模型平台专用模
18、型(platform specific model,PSM):与特定):与特定类型的平台特征有关的模型。类型的平台特征有关的模型。17模型转换模型转换(model transformation):由系统的一个模型转化):由系统的一个模型转化成同一个系统的另外一个模型。它是成同一个系统的另外一个模型。它是MDA最为关键的部分,其最为关键的部分,其核心问题是核心问题是从从PIM转换到转换到PSM。MDA提倡:在系统开发中首先建立平台无关模型(提倡:在系统开发中首先建立平台无关模型(PIM),),然后将它转换为平台专用模型(然后将它转换为平台专用模型(PSM)技术18把把MDA的观点运用于的观点运用
19、于OOA和和OODOOA:只针对问题域和系统责任,不涉及实现条件只针对问题域和系统责任,不涉及实现条件因此可因此可得到一个平台无关的得到一个平台无关的OOA模型模型OOD:在在OOA模型基础上针对特定实现条件进行设计模型基础上针对特定实现条件进行设计转换成一个平台专用的转换成一个平台专用的OOD模型模型好处:使整个好处:使整个OOA模型可以在针对不同的实现平台的设模型可以在针对不同的实现平台的设计中得到复用计中得到复用 19需求模型用况图需求分析和系统分析需求分析的确切含义是对用户需求进行分析,旨在产生一份明确、规范的需求定义。OOA的主要内容是研究问题域中与需求有关的事物,把它们抽象为系统中
20、的对象,建立类图。确切地讲,这些工作应该叫做系统分析,而不是严格意义上的需求分析。早期的OOA缺乏一个良好的基础对需求的规范描述。需求说明需求分析健壮分析需求模型分析模型分析过程Jacobson方法(OOSE)提出用况(use case)概念,解决了对需求的描述问题,其分析过程如下:20问题域(抽象的来源)OOA模型(类图)抽象OOA是将问题域中的事物抽象为系统中的对象系统责任(抽象的目标)抽象的目标是系统责任需求用况的概念解决了对需求的描述问题需求模型(用况图)21基本思路问题的提出:在系统尚未存在时,如何描绘用户需要一个什么样的系统?如何规范地定义用户需求?考虑问题的思路:把系统看作一个黑
21、箱,看它对外部的客观世界发挥什么作用,描述其外部可见的行为。系统是由一条边界包围起来的未知空间只通过有限的几个接口与外部交互系统边界以外是与系统进行交互的参与者把内外交互情况描述清楚,就确切地定义了系统的需求22系统边界系统边界:一个系统所包含的所有系统成分与系统以外各种事物的分界线。系统:被开发的计算机软硬件系统,不是指现实系统。系统成分:在OOA和OOD中定义并且在编程时加以实现的系统元素对象对象对象对象对象对象对象参与者(人员)参与者(设备)参与者(外系统)参与者:在系统边界以外,与系统进行交互的事物人员、设备、外系统系统边界与参与者23现实世界中的事物与系统之间的关系分四种情况(1)被
22、抽象为系统中的对象汽车飞机奖杯钟表起重机职员楼房天平(2)只作为系统外部的参与者与系统交互(4)与系统无关操作员(3)既是系统中的对象,本身又作为参与者与系统交互24人员系统的直接使用者直接为系统服务的人员设备与系统直接相联的设备为系统提供信息在系统控制下运行不与系统相连的设备 计算机设备 外系统上级系统子系统其它系统如何发现参与者考虑人员、设备、外系统25什么是用况I.Jacobson:用况是通过使用系统功能的某些部分而使用系统的一种具体方式。每个用况包括一个由参与者发动的完整的事件过程。它详细说明了参与者和系统之间发生的交互。因此,一个用况是一个由参与者和系统在一次对话中执行的特定的相关事
23、务序列。全部用况的集合则说明了所有可能存在的系统使用方式。对象技术词典:1对一个系统或者一个应用的一种单一的使用方式所进行的描述。2关于单个参与者在与系统的对话中所执行的处理的行为陈述序列。UML:对系统在与它的参与者交互时所能执行的一组动作序列(包括其变体)的描述。?本书的定义:用况是对参与者使用系统的一项功能时所进行的交互过程的描述,其中包含由双方交替执行的一系列动作。用况(use case)26术语“use case”的准确含义使用情况是对一项系统功能使用情况的一般描述,它对于每一次使用都普遍适应,既不是应用实例,也不是举例说明。几点说明:(1)一个用况只描述参与者对单独一项系统功能的使
24、用情况;(2)通常是平铺直叙的文字描述,UML也允许其他描述方式;(3)陈述参与者和系统在交互过程中双方所做的事;(4)所描述的交互既可能由参与者发起也可能由系统发起;(5)描述彼此为对方直接地做什么事,不描述怎么做;(6)描述应力求准确,允许概括,但不要把双方的行为混在一起;(7)一个用况可以由多种参与者分别参与或共同参与。27内容与书写格式:名称行为陈述(分左右栏)调用语句控制语句括号或标号收款输入开始本次收款的命令;作好收款准备,应收款总 数置为0,输出提示信息;for 顾客选购的每种商品 do 输入商品编号;if 此种商品多于一件 then 输入商品数量 end if;检索商品名称及单
25、价;货架商品数减去售出数;if 货架商品数低于下限 then call 通知上货 end if;计算本种商品总价并打印编号、名称、数量、单价、总价;总价累加到应收款总数;end for;打印应收款总数;输入顾客付款数;计算应找回款数,打印付款数及找回款,应收款数计入账册。例28如何定义用况针对单个用况的描述策略:把自己当作参与者,与设想中的系统进行交互。考虑:交互的目的是什么?需要向系统输入什么信息?希望由系统进行什么处理并从它得到何种结果?把上述交互过程描述出来。定义系统中所有的用况:(1)全面地了解和收集用户所要求的各项系统功能,找出所有的参与者,了解与各项功能相关的业务流程;(2)把用户
26、提出的功能组织成适当的单位,每一项功能完成一项完整而相对独立的工作;(3)穷举每一类参与者所使用的每一项系统功能,定义相应的用况;(4)检查用户对系统的各项功能需求是否都通过相应的用况做了描述。29参与者基用况 includeextendinclude用况 基用况 基用况 被包含用况 延伸用况 用况 参与者参与者模型元素:参与者用况延伸包含泛化用况图30用况之间的关系包含、延伸、泛化延伸包含问题:延伸与包含的相似性延伸的方向问题“条件”和“延伸点”问题“泛化”问题系统边界问题Perform ATMTransactionWithdrawDepositFunds泛化Transfer Funds 3
27、1用况的两种复杂情况1、两个(或多个)参与者共享一个用况不同种类的参与者可能都要使用某一项系统功能,因此它们可能共享同一个用况例:系统维护登录系统管理员普通用户322、一个用况的执行,可能需要两个(甚至多个)参与者同时与系统交互。例:网上购物网上购物客户供货商33用况图的开发过程确定系统边界发现参与者 定义用况 建立用况之间的关系 确定参与者和用况之间的关系 绘制用况图 使用用况图的几条建议最重要的工作是对用况的描述不要过分深入地描述系统内部的行为细节 运用最主要概念,加强用况内容的描述不要陷入延伸与包含、延伸点、泛化等问题的争论和辨别了解用况的局限性主要作用是描述功能需求开发过程与建议34发
28、现对象,定义对象类35主动对象(active object)至少有一个操作不需要接收消息就能主动执行的对象用于描述具有主动行为的事物主动对象的类叫做主动类(active class)被动对象(passive object)每个操作都必须在消息的驱动下才能执行的对象36在类的抽象层次建模理由:(1)充分性:模型中一个类描述了它的全部对象实例(2)必要性:个别对象实例不能代表其他对象实例(3)符合人类的思维方式:在概念层次上表达描述事物规律(4)与OOPL保持良好的对应(5)避免建模概念复杂化(6)消除抽象层次的混乱37如何运用类和对象的概念从对象出发认识问题域将问题域中的事物抽象为对象;将具有共
29、同特征的对象抽象为类用类以及它们之间的关系构成整个系统模型;归纳演绎在模型中用类表示属于该类的任何对象在类的规约中说明这个类将创建那些对象实例在程序中用类定义它的全部对象编程时静态声明类的对象运行时动态创建类的对象38发现对象研究问题域亲临现场深入调查研究直接观察并向用户及相关的业务人员进行调查和交流,考察问题域中各种各样的事物、它们的特征及相互关系 听取问题域专家的见解领域专家包括技术人员、管理者、老职员和富有经验的工人等阅读相关材料阅读各种与问题域有关的材料,学习相关行业和领域的基本知识借鉴以往的系统查阅以往在该问题域中开发过的同类系统的分析文档,吸取经验,发现可以复用的类 39正确地运用
30、抽象原则对什么进行抽象问题域当前目标系统责任忽略与系统责任无关的事物只注意与之有关的事物,抽象为系统中的对象 例如:学校的教师、学生、教务员 和 警卫忽略与系统责任无关的事物特征只注意与之有关的特征,抽象为对象的属性或操作 例如:教师的专业、职称 和 身高、体重正确地提炼对象 例如:对书的不同抽象在图书馆管理系统中以一本书作为一个对象实例在书店管理系统中以一种书作为一个对象实例40如何发现各种有用的候选对象?主要策略主要策略:从从问题域问题域、系统边界系统边界和和系统责任系统责任3个方面考虑各种能个方面考虑各种能够启发自己发现对象的因素,找出可能有用的够启发自己发现对象的因素,找出可能有用的候
31、选对象候选对象。41由系统管理或使用其信息,或者在系统中呈现某些行为的各类人员由系统管理或使用其信息,或者在系统中呈现某些行为的各类组织由系统进行管理的各种物品其他策略与启发(1)考虑问题域:抽象事物事件文件结构人员组织物品设备由系统进行管理或控制,或者在系统中呈现某些行为的各种设备例如:课程、计划、交易、账户需要长期记忆的事件例如:银行的取款、存款,保险公司的索赔,车辆管理中的驾驶违章泛指各种表格、档案、证件、票据等文件例如:业务报表,人事档案,身份证,合同,商品订单等 注意三个问题:非基础数据,同一事物的重复描述,多种事物信息组合从结构得到启发,联想到新的对象其他一切有助于发现对象的事物4
32、2(2)考虑系统边界:考察在系统边界以外与系统交互的各类参与者考虑通过哪些对象处理这些参与者的交互人员设备外系统(3)考虑系统责任:检查每一项功能需求是否已有相应的对象提供,发现遗漏的对象43审查与筛选(1)舍弃无用的对象通过属性判断:是否通过属性记录了某些有用的信息?通过操作判断:是否通过操作提供了某些有用的功能?二者都不是无用44(2)对象的精简只有一个属性的对象班级班主任姓名11班级班主任姓名只有一个操作的对象输出设备格式转换器文件格式转换输出设备文件格式转换call45(3)与实现条件有关的对象例如:图形用户界面(GUI)数据管理系统硬件操作系统 有关的对象推迟到OOD考虑46对象分类
33、(1)将对象抽象为类,用类表示它的全部对象为每一组具有相同属性和操作的对象定义为一个类,用一个类符号表示。(2)审查和调整类的属性或操作不适合该类的全部对象实例例:“汽车”类的“乘客限量”属性进一步划分特殊类属性及操作相同的类经过抽象,差别很大的事物可能只保留相同的特征(服装和计算机)考虑能否合并为一个类属性及操作相似的类例如:“轿车”和“货车”考虑能否提升出一个一般类同一事物的重复描述例:“职员”和“工作证”取消其中一个47(3)类的命名类的名字应适合该类(及其特殊类)的全部对象实例反映个体而不是群体使用名词 或 带定语的名词避免市井俚语和无意义的符号使用问题域通用的词汇使用便于交流的语言文
34、字可以用本地文字和英文双重命名48接口的概念及用途早期的面向对象方法并没有把接口作为正式的OO概念 和系统成分,只是用来解释OO概念“操作是对象(类)对外提供的访问接口”20世纪90年代中后期,接口才作为一种系统成分出现在OOPL中,并且被UML作为一种模型元素UML对接口的定义及解释:“接口(interface)是一种类目(classifier),它表示对一组紧凑的公共特征和职责的声明。一个接口说明了一个合约;实现接口的任何类目的实例必须履行这个合约。”“一个给定的类目可以实现多个接口,而一个接口可以由多个不同的类目来实现。”49为什么引入接口的概念针对不同的应用场合组织对象的操作售货员商品
35、销售采购员采购把与销售有关的操作组织成销售接口把与采购有关的操作组织成采购接口可替换(例如根据销售策略的变化开发一个新的商品类)接口提供了更灵活的衔接机制50接口(interface)是由一组操作所形成的一个集合,它由一个名字和代表其中每个操作的特征标记构成。特征标记(signature)代表了一个操作,但并不具体地定义操作的实现特征标记:=(:,:):interface接口名称操作1()操作n()表示法(详细方式):51接口与类的关系接口由某些类实现(提供),被另外某些类使用(需要)前者与接口的关系称为实现(realization)后者与接口的关系称为使用(use)interface销售查询
36、()售出()售货员商品使用实现同一个接口 对实现者而言是供接口(provided interface)对使用者而言是需接口(required interface)52表示法(简略方式):托球-托座使用者提供者提供者的供接口(托球)使用者的需接口(托座)售货员商品销售例:interface销售查询()售出()售货员商品53在一个类上可以画出它所有的供接口和需接口类供接口需接口一个接口可以由多个类使用,它也可以由多个类实现类B类D类A类E类C多个类可以共同使用同一个接口正如对象的一个操作可以被多个对象调用多个类都可以分别实现同一个接口这里表示它们可以相互替换54接口与类的区别类既有属性又有操作;接
37、口只是声明了一组操作,没有属性。在一个类中定义了一个操作,就要在这个类中真正地实现它;接口中的操作只是一个声明,不需要在接口中加以实现。类可以创建对象实例;接口则没有任何实例。引入接口概念的好处在接口的使用者和提供者之间建立了一种灵活的衔接机制,有利于对类、构件等软件成分进行灵活的组装和复用。将操作的声明与实现相分离,隔离了接口的使用者和提供者的相互影响。使用者只需关注接口的声明,不必关心它的实现;提供者不必关心哪些类将使用这个接口,只是根据接口的声明中所承诺的功能来实现它,并且可以有多种不同的实现。接口概念对描述构件之间的关系具有更重要的意义55接口与多继承的比较接口果真能部分地解决多继承问
38、题吗?interface接口 A操作A-1()操作A-n()interface接口 B操作B-1()操作B-m()类 C类 E操作A-1()操作A-n()操作B-1()操作B-m()类 D操作A-1()操作A-n()操作B-1()操作B-m()类 A操作A-1()操作A-n()类 B操作B-1()操作B-m()类 C操作A-1()操作A-n()操作B-1()操作B-m()类 E类 D56对象之间的四种关系1一般-特殊关系 又称继承关系,反映事物的分类。由这种关系可以形成一般-特殊结构。2整体-部分关系即聚合关系。反映事物的构成。由这种关系可以形成整体-部分结构。3关联关系对象实例集合(类)上的
39、一个关系,其中的元素提供了被开发系统的应用领域中一组有意义的信息。4消息关系 对象之间的动态联系,即一个对象在执行其操作时,请求其他对象为它执行某个操作,或者向其他对象传送某些信息。反映了事物之间的行为依赖关系。这些关系形成了类图的关系层定义对象间的关系57概念同义词 和 近义词继承(inheritance)是描述一般类和特殊类之间关系的最传统、最经典的术语。有时作为动词或形容词出现。一般-特殊(generalization-specialization)含义最准确,而且不容易产生误解,恰切地反映了一般类(概念)和特殊类(概念)之间的相对(二元)关系;也用于描述结构,即一般-特殊结构。缺点是书
40、写和阅读比较累赘。泛化(generalization)取“一般-特殊”的一半,是UML的做法。比较简练,但是只反映了问题的一方面。作为关系的名称尚可,说结构是一个“泛化”则很勉强。分类(classification)接近人类日常的语言习惯,体现了类的层次划分,也作为结构的名称。在许多的场合被作为一种原则。一般-特殊结构相关概念:一般类、特殊类、继承、多继承、多态语义:“is a kind of”58一般-特殊关系(继承关系)是类之间的一种二元关系是一种基本的模型元素;由这种关系所形成的结构是一般-特殊结构是一种复合的模型成分。人员股东职员顾客股东职员例:这是1个一般-特殊结构 包含5个一般特殊
41、关系59特殊类一般类的特征一般类特殊类的特征只要有这些特征必须有这些特征对象实例集合特征集合理解一般类与特殊类之间的关系定义1:如果类A具有类B的全部属性和全部操作,而且具有自己特有的某些属性或操作,则A叫做B的特殊类,B叫做A的一般类。一般类与特殊类又称父类与子类。定义2:如果类A的全部对象都是类B的对象,而且类B中存在不属于类A的对象,则A是B的特殊类,B是A的一般类。书中证明,以上两种定义是等价的一般类和特殊类的两个定义60表示法*对继承的属性或操作重新定义 拒绝继承 多态性的表示符号一般类特殊类特殊类集中式一般类特殊类特殊类分散式人员股东职员顾客股东职员例:61如何发现一般-特殊结构(
42、1)学习当前领域的分类学知识(2)按常识考虑事物的分类(3)根据一般类和特殊类的两种定义(4)考察属性与操作的适应范围?公司人员姓名身份证号股份工资?公司人员姓名身份证号 股东股份 职员工资 股东姓名身份证号股份 职员姓名身份证号工资 股东股份职员工资?公司人员姓名身份证号 62(5)考虑领域范围内的复用现钞收款机 A B C D E F X Y Z收款机ABCXY现钞收款机 D E F Z领域构件63(1)问题域是否需要这样的分类?(例:书线装书)(2)系统责任是否需要这样的分类?(例:职员本市职员)(3)是否符合分类学的常识?(用“is a kind of”来衡量)审查与调整(4)是否真正
43、的继承了一些属性或操作?飞机飞行高度 自动导航?汽车发动机载重量速度运输运输工具发动机载重量速度 飞机飞行高度 自动导航 汽车运输64一般-特殊结构的简化(1)取消没有特殊性的特殊类运输工具发动机载重量速度 飞机飞行高度 自动导航 汽车运输运输工具发动机载重量速度 飞机飞行高度 自动导航 运输65(2)增加属性简化一般特殊结构 人员男 人女 人中国人美国人日本人人员性别国籍66(3)取消用途单一的一般类,减少继承层次一般类存在的理由:*有两个或两个上以上的特殊类*需要用它创建对象实例*有助于软件复用设 备型号生产厂开启关闭 雷 达安装地点 监控 雷达型号生产厂安装地点 开启关闭监控电子设备激光
44、打印机传真机通讯设备设备电子设备计算机设备打印机民用通讯设备激光打印机传真机67多继承:允许一个特殊类具有一个以上一般类的继承模式多继承特殊类的内部情况在职研究生姓名学号班级专业职称专业在职单位来自“人员”类来自“研究生”类来自“教职工”类本类中显式定义人员姓名教职工职称专业研究生学号班级专业在职研究生在职单位 例:命名冲突68多态:多态是指同一个命名可具有不同的语义。OO方法中,常指在一般类中定义的属性或操作被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。多边形边数顶点数据绘图XY矩形边数*顶点数据*绘图正多边形*顶点数据*绘图例:整体-部分结构概念:聚合(aggregation
45、),组合(composition)整体-部分(whole-part)整体对象,部分对象语义:“a part of”或“has a”聚合关系描述了对象实例之间的构成情况,然而它的定义却是在类的抽象层次给出的。从集合论的观点看聚合关系整体-部分关系(聚合关系)是两个类之间的二元关系,其中一个类的某些对象是另一个类的某些对象的组成部分。整体-部分结构是把若干具有聚合关系的类组织在一起所形成的结构。它是一个以类为结点,以聚合关系为边的连通有向图。一种基本的模型元素由若干聚合关系形成的复合模型成分70可以正确有问题若类 A 的对象 a 是类 B 对象 b 的一个组成部分判断以下几种说法正确与否:“对象
46、b 和对象 a 之间具有聚合关系”“类 B 和类 A 之间具有聚合关系”“类 A 是类 B 的一个组成部分”组合(composition)是聚合关系的一种特殊情况,它表明整体对于部分的强拥有关系,即整体与部分之间具有紧密、固定的组成关系。UML把聚合定义为关联的一种特殊情况而组合关系是聚合关系的特殊情况71数量数量数量数量整体对象类部分对象类整体对象类部分对象类表示法在连接符两端通过数字或者符号给出关系双方对象实例的数量约束,称为多重性(multiplicity)确定的整数 给出确定的数量 例如:1,2 下界上界 给出一个范围 例如:01 ,14 *表示多个,数量不确定下界*表示多个,下界确定
47、 例如 0*,1*多重性有以下3种情况:一对一,一对多,多对多照相机1*0101镜 头机 身172如何发现整体-部分结构基本策略考察问题域中各种具有构成关系的事物(1)物理上的整体事物和它的组成部分例:机器、设备和它的零部件(2)组织机构和它的下级组织及部门例:公司与子公司、部门(3)团体(组织)与成员例:公司与职员(4)一种事物在空间上包容其它事物例:生产车间与机器(5)抽象事物的整体与部分例:学科与分支学科、法律与法律条款(6)具体事物和它的某个抽象方面例:人员与身份、履历73审查与筛选(1)是否属于问题域?例:公司职员与家庭(2)是不是系统责任的需要?例:员工与工会(3)部分对象是否有一
48、个以上的属性?例:汽车与车轮(规格)(4)是否有明显的整体-部分关系?例:学生与课程74整体-部分结构的高级应用技巧(1)简化对象的定义飞 机有关发动机的属性与操作有关驾驶室的属性与操作11141飞 机发动机驾驶室75(2)支持软件复用起重机送料车机床钻床刨床车床电动机01101101176(3)表示数量不定的组成部分订 单编号卖方买方总金额成交日期订单行商品编号订购数量成交价金额1*1商品商品编号商品名称单价厂商1*一个订单可以包含一项到多达几十项商品提问:能否不要订单行,直接用商品作为订单的部分对象?77(4)表示动态变化的对象特征人员营业员会计师经理问题:对象的属性与操作定义在系统运行中
49、动态变化,例如:不理想的解决办法:删除、重建Shlaer/Mellor的子类型迁移“动态对象”会计师身份经理身份营业员身份人员身份1m或人员营业员身份01会计师身份0101111解:经理身份78“三友”对问题的描述及解决方法“大多数面向对象的编程语言是静态类型化的,这意味着在创建对象时就限定了对象的类型。但是随着时间的推移对象还可能扮演不同的角色。”例子:候选者,雇员,退休者 persontypecandidatetypeemployeetyperetiree“对象在其生命期内动态地获得或者丢弃类型”1999年第一版persondynamiccandidatedynamicemployeedy
50、namicretiree2005年第二版总之都是围绕着继承想主意,没有运用聚合。79从上述例子得到的启示:整体-部分结构有很强的表达能力运用OO方法的基本概念可以自然而有效地解决许多在其他方法中用扩充概念解决的问题加强对基本概念的运用,不要轻易创造新的扩充概念person010101111用聚合概念解决:CandidateRoleEmployeeRoleRetireeRole80用一般特殊结构两种结构的变通汽 车制冷设备冷藏车解释:继承和聚合都是使一类对象获得另一类对象的特征,只是观察问题的角度不同。两种结构同用汽 车冷藏车制冷设备冷藏车汽 车制冷设备用整体部分结构81概念:关联(associ