1、北京大学信息科学技术学院北京大学信息科学技术学院主讲教师:邵维忠主讲教师:邵维忠2北京大学信息学院研究生课程面向对象的分析与设计2课件说明课件说明 这组课件是本人多年来在北京大学讲授这组课件是本人多年来在北京大学讲授“面向对象的面向对象的分析与设计分析与设计”课程时制作的,随着该领域理论与技术的发课程时制作的,随着该领域理论与技术的发展而逐年改进。目前的最新版本所适应的教材是邵维忠、展而逐年改进。目前的最新版本所适应的教材是邵维忠、杨芙清合写的著作杨芙清合写的著作面向对象的分析与设计面向对象的分析与设计(清华大学(清华大学出版社出版社20132013年年1 1月)。月)。为了促进学术交流和资源
2、共享,现将这套课件无偿提为了促进学术交流和资源共享,现将这套课件无偿提供给国内讲授同类课程的教师和同行,欢迎他们在教学工供给国内讲授同类课程的教师和同行,欢迎他们在教学工作中使用或作为参考。课件共包括作中使用或作为参考。课件共包括“基础篇基础篇”、“分析篇分析篇”和和“设计篇设计篇”三部分,是按照三部分,是按照5454学时研究生课程制作的学时研究生课程制作的,各位教师可根据自己的授课对象及教学计划,对原课件,各位教师可根据自己的授课对象及教学计划,对原课件进行剪裁或重新组织。进行剪裁或重新组织。北京大学信息学院北京大学信息学院 邵维忠邵维忠电子信箱:电子信箱:20132013年年7 7月月2
3、2日日3北京大学信息学院研究生课程面向对象的分析与设计3第第5 5章章建立需求模型建立需求模型用况图用况图5.1 需求分析和系统分析需求分析和系统分析需求分析需求分析的确切含义是对用户需求进行分析,旨在产生一份的确切含义是对用户需求进行分析,旨在产生一份明确、规范的需求定义。明确、规范的需求定义。OOA的主要内容是研究问题域中与需求有关的事物,把它们的主要内容是研究问题域中与需求有关的事物,把它们抽象为系统中的对象,建立类图。确切地讲,这些工作应该抽象为系统中的对象,建立类图。确切地讲,这些工作应该叫做叫做系统分析系统分析,而不是严格意义上的需求分析。,而不是严格意义上的需求分析。早期的早期的
4、OOA缺乏一个良好的基础缺乏一个良好的基础对需求的规范描述。对需求的规范描述。需求说明需求说明需求分析需求分析健壮分析健壮分析需求模型需求模型分析模型分析模型分析过程分析过程Jacobson方法(方法(OOSE)提出用况()提出用况(use case)概念,)概念,解决了对需求的描述问题,其分析过程如下:解决了对需求的描述问题,其分析过程如下:4北京大学信息学院研究生课程面向对象的分析与设计4问题域问题域(抽象的来源)(抽象的来源)OOA模型模型(类图)(类图)抽象抽象OOA是将问题域中的事物抽象为系统中的对象是将问题域中的事物抽象为系统中的对象系统责任系统责任(抽象的目标)(抽象的目标)抽象
5、的目标是系统责任抽象的目标是系统责任需求需求用况的概念解决了对需求的描述问题用况的概念解决了对需求的描述问题需求模型需求模型(用况图)(用况图)5北京大学信息学院研究生课程面向对象的分析与设计55.2 5.2 基本思路基本思路问题的提出:问题的提出:在系统尚未存在时,如何描绘用户需要一个什么样的系统?如何规范地定义用户需求?考虑问题的思路:考虑问题的思路:把系统看作一个黑箱,看它对外部的客观世界发挥什么作用,描述其外部可见的行为外部可见的行为。系统是由一条系统是由一条边界包围起来边界包围起来的未知空间的未知空间只通过有限只通过有限的几个接口的几个接口与外部交互与外部交互系统边界以外系统边界以外
6、是与系统进行是与系统进行交互的参与者交互的参与者把内外交互情况描把内外交互情况描述清楚,就确切地述清楚,就确切地定义了系统的需求定义了系统的需求6北京大学信息学院研究生课程面向对象的分析与设计6系统边界系统边界系统边界:系统边界:一个系统所包含的所有系统成分与系统以外一个系统所包含的所有系统成分与系统以外各种事物的分界线。各种事物的分界线。系统:系统:被开发的计算机软硬件系统,不是指现实系统。被开发的计算机软硬件系统,不是指现实系统。系统成分:系统成分:在在OOA和和OOD中定义并且在编程时加以实中定义并且在编程时加以实现的系统元素现的系统元素对象对象对对象象对象对象对象对象对象对象对象对象对
7、象对象参与者参与者(人员人员)参与者参与者(设备设备)参与者参与者(外系统外系统)参与者:参与者:在系在系统边界以外,统边界以外,与系统进行交与系统进行交互的事物互的事物人员、设备、人员、设备、外系统外系统5.3 系统边界与参与者系统边界与参与者7北京大学信息学院研究生课程面向对象的分析与设计7系统边界:系统边界:一个系统所包含的所有系统成分与系统以外一个系统所包含的所有系统成分与系统以外各种事物的分界线。各种事物的分界线。5.3 系统边界与参与者系统边界与参与者 责任的边界,不是物理的边界 系统的范围有多大与开发者的责任有关8北京大学信息学院研究生课程面向对象的分析与设计8参与者:参与者:在
8、系统边界以外,与系统进行交互的事物在系统边界以外,与系统进行交互的事物人员人员、设备、外系统、设备、外系统5.3 系统边界与参与者系统边界与参与者9北京大学信息学院研究生课程面向对象的分析与设计9现实世界中的事物与系统之间的关系现实世界中的事物与系统之间的关系分四种情况分四种情况(1)被抽象为系统中的对象)被抽象为系统中的对象汽车飞机奖杯钟表起重机职员楼房天平(2)只作为系统外部的参与者与系统交互)只作为系统外部的参与者与系统交互(4)与系统无关)与系统无关操作员(3)既是系统中的对象,本身又作为参与者与系统交互)既是系统中的对象,本身又作为参与者与系统交互10北京大学信息学院研究生课程面向对
9、象的分析与设计10人员人员系统的直接使用者系统的直接使用者直接为系统服务的人员直接为系统服务的人员设备设备与系统直接相联的设备与系统直接相联的设备为系统提供信息为系统提供信息在系统控制下运行在系统控制下运行不与系统相连的设备不与系统相连的设备 计算机设备计算机设备 外系统外系统上级系统上级系统子系统子系统其它系统其它系统如何发现参与者如何发现参与者考虑人员、设备、外系统考虑人员、设备、外系统11北京大学信息学院研究生课程面向对象的分析与设计111 1、对于银行存取款业务来说,下面列出的人员、设备与系、对于银行存取款业务来说,下面列出的人员、设备与系统哪些是系统参与者?哪些是系统内的对象?统哪些
10、是系统参与者?哪些是系统内的对象?储户、柜员、大堂经理、业务经理、密码器、打印机、摄像储户、柜员、大堂经理、业务经理、密码器、打印机、摄像设备、设备、ATMATM机、维修技师、机、维修技师、2 2、为下图界定系统边界,指出系统的参与者。、为下图界定系统边界,指出系统的参与者。练习:练习:12北京大学信息学院研究生课程面向对象的分析与设计12什么是用况什么是用况I.Jacobson:用况是通过使用系统功能的某些部分而使用系统的一种具体方式。每个用况是通过使用系统功能的某些部分而使用系统的一种具体方式。每个用况包括用况包括一一个个由参与者发动的由参与者发动的完整的事件过程。它详细说明了参与者和完整
11、的事件过程。它详细说明了参与者和系统之间发生的交互。因此,一个用况是一个由参与者和系统在一次对系统之间发生的交互。因此,一个用况是一个由参与者和系统在一次对话中执行的特定的相关事务序列。全部用况的集合则说明了所有可能存话中执行的特定的相关事务序列。全部用况的集合则说明了所有可能存在的系统使用方式。在的系统使用方式。对象技术词典对象技术词典:1对一个系统或者一个应用的一种单一的使用方式所进行的描述。对一个系统或者一个应用的一种单一的使用方式所进行的描述。2关于关于单个参与者单个参与者在与系统的对话中所执行的处理的行为陈述序列。在与系统的对话中所执行的处理的行为陈述序列。UML:对对系统系统在与它
12、的参与者交互时所能执行的一组动作序列(包括其变体)在与它的参与者交互时所能执行的一组动作序列(包括其变体)的描述。的描述。?本书的定义:本书的定义:用况是对参与者使用系统的一项功能时所进行的交互过程用况是对参与者使用系统的一项功能时所进行的交互过程的描述,其中包含由双方交替执行的一系列动作。的描述,其中包含由双方交替执行的一系列动作。5.4 用况(用况(use case)13北京大学信息学院研究生课程面向对象的分析与设计13术语术语“use case”use case”的准确含义的准确含义使用情况使用情况是对一项系统功能使用情况的一般描述,它对于每一次使是对一项系统功能使用情况的一般描述,它对
13、于每一次使用都普遍适应,既不是应用实例,也不是举例说明。用都普遍适应,既不是应用实例,也不是举例说明。因此译为因此译为“用况用况”,而不是,而不是“用例用例”。几点说明:几点说明:(1 1)一个用况只描述参与者对一个用况只描述参与者对单独一项单独一项系统功能的使用情况;系统功能的使用情况;(2 2)通常是平铺直叙的)通常是平铺直叙的文字文字描述,描述,UMLUML也允许其他描述方式;也允许其他描述方式;(3 3)陈述参与者和系统在交互过程中)陈述参与者和系统在交互过程中双方双方所做的事;所做的事;(4 4)所描述的交互既可能由所描述的交互既可能由参与者发起参与者发起也可能由也可能由系统发起系统
14、发起;(5 5)描述彼此为对方)描述彼此为对方直接地直接地做什么事,不描述怎么做;做什么事,不描述怎么做;(6 6)描述应力求准确,允许概括,但)描述应力求准确,允许概括,但不要把双方的行为混在一起不要把双方的行为混在一起;(7 7)一个用况可以由一个用况可以由多种参与者多种参与者分别参与或共同参与。分别参与或共同参与。14北京大学信息学院研究生课程面向对象的分析与设计14识别用况的关注点:识别用况的关注点:(1 1)用况是用来探索需求的)用况是用来探索需求的15北京大学信息学院研究生课程面向对象的分析与设计15识别用况的关注点:识别用况的关注点:(2 2)用况是给系统外部的参与者(人而非系统
15、)看的)用况是给系统外部的参与者(人而非系统)看的用人好懂的语言描述、用况要从参与者的角度命名用人好懂的语言描述、用况要从参与者的角度命名16北京大学信息学院研究生课程面向对象的分析与设计16识别用况的关注点:识别用况的关注点:(3 3)用况的含义是使用的情况,是人的使用情况,是对系统)用况的含义是使用的情况,是人的使用情况,是对系统外的人有用的外的人有用的用况描述的功能是外部可见的行为、是对人来说有价值的行用况描述的功能是外部可见的行为、是对人来说有价值的行为、一个用况体现的是一项人可用的功能为、一个用况体现的是一项人可用的功能17北京大学信息学院研究生课程面向对象的分析与设计17立足开发者
16、的视角系统要求用户输入合法的密码系统能够接受用户录入取款金额系统能够从帐户中扣除取款金额系统允许选择“打印或不打印收据”系统能够显示交易结束信息立足用户视角用户插入ATM卡系统要求输入密码用户输入密码系统验证密码正确系统提示用户输入取款金额用户输入取款金额并确认系统验证取款金额合法系统从帐户中扣除取款金额系统询问用户是否打印收据用户要求不打印收据系统显示“交易结束”,退卡(4 4)一个用况描述的功能是参与者与系统共同完成的)一个用况描述的功能是参与者与系统共同完成的识别用况的关注点:识别用况的关注点:描述用况时从参与者和系统两个角度进行、只写外部可见的描述用况时从参与者和系统两个角度进行、只写
17、外部可见的、不写内部的处理细节、不写内部的处理细节18北京大学信息学院研究生课程面向对象的分析与设计18内容与书写格式内容与书写格式:名称名称行为陈述(分左右栏)行为陈述(分左右栏)调用语句调用语句控制语句控制语句括号或标号括号或标号收款收款输入开始本次收款的命令;作好收款准备,应收款总作好收款准备,应收款总 数置为数置为0 0,输出提示信息;,输出提示信息;forfor 顾客选购的每种商品 dodo 输入商品编号;ifif 此种商品多于一件 thenthen 输入商品数量 end ifend if;检索商品名称及单价;检索商品名称及单价;货架商品数减去售出数;货架商品数减去售出数;if 货架
18、商品数低于下限货架商品数低于下限 then call 通知上货通知上货 end if;计算本种商品总价并打印编号、计算本种商品总价并打印编号、名称、数量、单价、总价;名称、数量、单价、总价;总价累加到应收款总数;总价累加到应收款总数;end forend for;打印应收款总数;打印应收款总数;输入顾客付款数;计算应找回款数,计算应找回款数,打印付款数及找回款,打印付款数及找回款,应收款数应收款数计入账册。计入账册。例例19北京大学信息学院研究生课程面向对象的分析与设计19用况描述的三个特点:用况描述的三个特点:(1 1)明显地区分参与者的)明显地区分参与者的行为和系统的行为;行为和系统的行为
19、;(2 2)通过调用语句明确地)通过调用语句明确地表示一个用况对另一个用表示一个用况对另一个用况的引用;况的引用;(3 3)引入控制语句、括号)引入控制语句、括号等结构化成分,更利于表等结构化成分,更利于表达复杂的用况内容。达复杂的用况内容。收款收款输入开始本次收款的命令;作好收款准备,应收款总作好收款准备,应收款总 数置为数置为0 0,输出提示信息;,输出提示信息;forfor 顾客选购的每种商品 dodo 输入商品编号;ifif 此种商品多于一件 thenthen 输入商品数量 end ifend if;检索商品名称及单价;检索商品名称及单价;货架商品数减去售出数;货架商品数减去售出数;i
20、f 货架商品数低于下限货架商品数低于下限 then call 通知上货通知上货 end if;计算本种商品总价并打印编号、计算本种商品总价并打印编号、名称、数量、单价、总价;名称、数量、单价、总价;总价累加到应收款总数;总价累加到应收款总数;end forend for;打印应收款总数;打印应收款总数;输入顾客付款数;计算应找回款数,计算应找回款数,打印付款数及找回款,打印付款数及找回款,应收款数应收款数计入账册。计入账册。例例20北京大学信息学院研究生课程面向对象的分析与设计20如何定义用况如何定义用况针对单个用况的描述策略:针对单个用况的描述策略:把自己当作参与者,与设想中的系统进行交互。
21、考虑:交互的目的是什么?需要向系统输入什么信息?希望由系统进行什么处理并从它得到何种结果?把上述交互过程描述出来。定义系统中所有的用况:定义系统中所有的用况:(1)全面地了解和收集用户所要求的各项系统功能,找出所有的参与者,了解与各项功能相关的业务流程;(2)把用户提出的功能组织成适当的单位,每一项功能完成一项完整而相对独立的工作;(3)穷举每一类参与者所使用的每一项系统功能,定义相应的用况;(4)检查用户对系统的各项功能需求是否都通过相应的用况做了描述。21北京大学信息学院研究生课程面向对象的分析与设计21参与者参与者基用况基用况 includeextendinclude用况用况 基用况基用
22、况 基用况基用况 被包含用况被包含用况 延伸用况延伸用况 用况用况 5.5 5.5 用况图用况图参与者参与者参与者参与者模型元素:模型元素:参与者参与者用况用况延伸延伸包含包含泛化泛化5.5 5.5 用况图用况图22北京大学信息学院研究生课程面向对象的分析与设计22用况之间的关系用况之间的关系包含、延伸、泛化包含、延伸、泛化包含包含23北京大学信息学院研究生课程面向对象的分析与设计23包含关系(include)包含关系将一个用况合并到另一个用况的行为序列中。位于两个用况之间的包含关系意味着显式地在其指定位置将包含进来,使其成为 被包含的用况就像是子程序它表示那些必须要重复描述的行为。在具有包含
23、关系的两个用况中,被包含的那个用况,它只能以实例的形式存在于包含它的用况之中24北京大学信息学院研究生课程面向对象的分析与设计24用况之间的关系用况之间的关系包含、延伸、泛化包含、延伸、泛化延伸延伸25北京大学信息学院研究生课程面向对象的分析与设计25扩展关系给用况添加增量细节。与包含的区别 当一个用况有时,可以用扩展关系对其进行扩展,使得此基用况的不同子流程能在不同的情形下以扩展用况的形式被激活。延伸关系(extend,扩展)26北京大学信息学院研究生课程面向对象的分析与设计26 注意的问题用况关系-包含和延伸27北京大学信息学院研究生课程面向对象的分析与设计27用况之间的关系用况之间的关系
24、包含、延伸、泛化包含、延伸、泛化Perform ATMPerform ATMTransactionTransactionWithdrawWithdrawDepositDepositFundsFunds泛化泛化Transfer Transfer FundsFunds 28北京大学信息学院研究生课程面向对象的分析与设计28用况的两种复杂情况用况的两种复杂情况1 1、两个(或多个)参与者共享一个用况、两个(或多个)参与者共享一个用况不同种类的参与者可能都要使用某一项系统功能,因不同种类的参与者可能都要使用某一项系统功能,因此它们可能共享同一个用况此它们可能共享同一个用况例:例:系统维护系统维护登录登
25、录系统管理员系统管理员普通用户普通用户29北京大学信息学院研究生课程面向对象的分析与设计292、一个用况的执行,可能需要两个(甚至多个)参与者同时一个用况的执行,可能需要两个(甚至多个)参与者同时与系统交互。与系统交互。例:网上购物例:网上购物网上购物客户供货商30北京大学信息学院研究生课程面向对象的分析与设计30用况图的开发过程用况图的开发过程确定系统边界:与外部事物的界限确定系统边界:与外部事物的界限发现参与者:所有与系统直接交互的人、设备、外系统发现参与者:所有与系统直接交互的人、设备、外系统 定义用况:定义用况、描述用况定义用况:定义用况、描述用况 建立用况之间的关系:包含、延伸、泛化
26、建立用况之间的关系:包含、延伸、泛化 确定参与者和用况之间的关系:直线连接确定参与者和用况之间的关系:直线连接 绘制用况图:正确使用图符绘制用况图:正确使用图符 使用用况图的几条建议使用用况图的几条建议最重要的工作是对用况的描述最重要的工作是对用况的描述不要过分深入地描述系统内部的行为细节不要过分深入地描述系统内部的行为细节 运用最主要概念,加强用况内容的描述运用最主要概念,加强用况内容的描述不要陷入延伸与包含、延伸点、泛化等问题的争论和辨别不要陷入延伸与包含、延伸点、泛化等问题的争论和辨别了解用况的局限性了解用况的局限性主要作用是描述功能需求主要作用是描述功能需求5.6 开发过程与建议开发过
27、程与建议31北京大学信息学院研究生课程面向对象的分析与设计31练习:练习:1 1、下面给出了两组用况图,分别说明哪张用况图更合理,为什么?、下面给出了两组用况图,分别说明哪张用况图更合理,为什么?(1 1)(2 2)2 2、根据你对自动存取款机的使用经验,构建自动存取款机的用况图,描、根据你对自动存取款机的使用经验,构建自动存取款机的用况图,描述其中的每一个用况。述其中的每一个用况。要求要求:(:(1)小组式建模()小组式建模(5-6人)(人)(2)角色分工()角色分工(3)电子版提交)电子版提交32北京大学信息学院研究生课程面向对象的分析与设计32概念:概念:对象(对象(object)是系统
28、中用来描述客观事物的一个实体,是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和施加于这组它是构成系统的一个基本单位,由一组属性和施加于这组属性的一组操作构成。属性的一组操作构成。类(类(class)是具有相同属性和操作的一组对象的集合,是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,它由一它为属于该类的全部对象提供了统一的抽象描述,它由一个类名、一组属性和一组操作构成。个类名、一组属性和一组操作构成。类和对象的关系类和对象的关系集合与成员,对象是类的实例集合与成员,对象是类的实例在一般在一般-特殊结构中,特殊类特殊结构中,特殊类的对
29、象实例在逻辑上也都是其的对象实例在逻辑上也都是其一般类的对象实例。一般类的对象实例。不直接创建对象实例的类称为不直接创建对象实例的类称为抽象类(抽象类(abstract class)学生学生本科生本科生研究生研究生例:例:第第6 6章章 发现对象,定义对象类发现对象,定义对象类6.1 对象和类的概念及其运用对象和类的概念及其运用33北京大学信息学院研究生课程面向对象的分析与设计33主动对象(主动对象(active object)至少有一个操作不需至少有一个操作不需要接收消息就能主动执行的对象要接收消息就能主动执行的对象用于描述具有主动行为的事物用于描述具有主动行为的事物主动对象的类叫做主动对象
30、的类叫做主动类(主动类(active class)被动对象(被动对象(passive object)每个操作都必须在每个操作都必须在消息的驱动下才能执行的对象消息的驱动下才能执行的对象主动操作(主动操作(active operation)主动对象中至少有主动对象中至少有一个不需要接收消息就能主动执行的操作。(一个不需要接收消息就能主动执行的操作。(用于定用于定义进程或线程的程序单位义进程或线程的程序单位)被动对象的操作:被动对象的操作:函数、过程、例程等函数、过程、例程等34北京大学信息学院研究生课程面向对象的分析与设计34类的语义类的语义OO方法中的类在不同的语境下有两种不同的语义:方法中的
31、类在不同的语境下有两种不同的语义:1.一个类代表由它的全部对象实例所构成的群体一个类代表由它的全部对象实例所构成的群体日常语言表达中的例子:日常语言表达中的例子:“公司里有管理人员、技术人员和市场人员公司里有管理人员、技术人员和市场人员”“马路上汽车很多马路上汽车很多”在在OO模型中:模型中:每个类都是由它的全部对象实例所构成的集合每个类都是由它的全部对象实例所构成的集合类代表了它的全部对象实例。类代表了它的全部对象实例。2.一个类代表属于该类的任意一个对象实例一个类代表属于该类的任意一个对象实例从大量的个体中抽象出一个概念,再运用这个概念时就从大量的个体中抽象出一个概念,再运用这个概念时就可
32、以代表其中的任何一个个体,例如:可以代表其中的任何一个个体,例如:“学生有一个学号,属于一个班级,要上课学生有一个学号,属于一个班级,要上课”在在OO系统模型中定义了一个类,它就可以代表它的任系统模型中定义了一个类,它就可以代表它的任何一个对象实例,例如:何一个对象实例,例如:汽车与发动机之间的聚合关系,表示任何一辆汽车都有一台发汽车与发动机之间的聚合关系,表示任何一辆汽车都有一台发动机,任何一台发动机都可以装在动机,任何一台发动机都可以装在01辆汽车上辆汽车上35北京大学信息学院研究生课程面向对象的分析与设计35在类的抽象层次建模在类的抽象层次建模 对象是现实中存在的,是面向对象方法中的核心
33、概念,但对象是现实中存在的,是面向对象方法中的核心概念,但是面向对象系统建模时,要在类的抽象层次上建立系统模型。是面向对象系统建模时,要在类的抽象层次上建立系统模型。哈利波特、金秀贤、孙俪、朱哈利波特、金秀贤、孙俪、朱亚文。亚文。36北京大学信息学院研究生课程面向对象的分析与设计36在类的抽象层次建模在类的抽象层次建模理由:理由:(1)充分性:模型中一个类描述了它的全部对象实例)充分性:模型中一个类描述了它的全部对象实例(2)必要性:个别对象实例不能代表其他对象实例)必要性:个别对象实例不能代表其他对象实例(3)符合人类的思维方式:在概念层次上表达描述事物规律)符合人类的思维方式:在概念层次上
34、表达描述事物规律(4)与)与OOPL保持良好的对应保持良好的对应(5)避免建模概念复杂化)避免建模概念复杂化(6)消除抽象层次上的混乱)消除抽象层次上的混乱37北京大学信息学院研究生课程面向对象的分析与设计37如何运用类和对象的概念如何运用类和对象的概念从对象出发认识问题域从对象出发认识问题域将问题域中的事物抽象为对象;将问题域中的事物抽象为对象;将具有共同特征的对象抽象为类将具有共同特征的对象抽象为类用类以及它们之间的关系构成整个系统模型;用类以及它们之间的关系构成整个系统模型;归纳归纳演绎演绎在模型中用类表示属于该类的任何对象在模型中用类表示属于该类的任何对象在类的规约中说明这个类将创建哪
35、些对象实例在类的规约中说明这个类将创建哪些对象实例在程序中用类定义它的全部对象在程序中用类定义它的全部对象编程时静态声明类的对象编程时静态声明类的对象运行时动态创建类的对象运行时动态创建类的对象明星资讯系统开发明星资讯系统开发38北京大学信息学院研究生课程面向对象的分析与设计38类类 名名压缩方式压缩方式类类 名名属性名属性名:类型名类型名操作名操作名()展开方式展开方式主动类主动类active类类 名名衍型(衍型(stereotype)用关键字或者用关键字或者用图标表示用图标表示类名类名UML2 主动类表示法主动类表示法主动主动类类 名名6.2 表示法表示法在在模型模型中用类符号来表示一个类
36、中用类符号来表示一个类它代表了属于该类的全部对象实例它代表了属于该类的全部对象实例39北京大学信息学院研究生课程面向对象的分析与设计39对象名对象名:类名类名压缩方式压缩方式属性名属性名=值值UML的对象的对象表示法:表示法:细节方式细节方式对象名对象名:类名类名匿名对象匿名对象:类名类名压缩方式压缩方式属性名属性名=值值细节方式细节方式:类名类名用所谓“匿名对象”代表类的任何一个对象实例,然而这恰恰是类的作用。40北京大学信息学院研究生课程面向对象的分析与设计406.3 发现对象发现对象研究问题域研究问题域亲临现场深入调查研究亲临现场深入调查研究直接观察并向用户及相关的业务人员进行调查和直接
37、观察并向用户及相关的业务人员进行调查和交流交流,考察问题域中各种各样的事物、它们的特征及相互关系 听取问题域专家的见解听取问题域专家的见解领域专家领域专家包括技术人员、管理者、老职员和包括技术人员、管理者、老职员和富有经验的工人等富有经验的工人等阅读相关材料阅读相关材料阅读各种与问题域有关的材料,学习相关行业和阅读各种与问题域有关的材料,学习相关行业和领域的基本知识领域的基本知识借鉴以往的系统借鉴以往的系统查阅以往在该问题域中开发过的同类系统的分析查阅以往在该问题域中开发过的同类系统的分析文档文档,吸取经验,发现可以复用的类,吸取经验,发现可以复用的类 41北京大学信息学院研究生课程面向对象的
38、分析与设计41正确地运用抽象原则正确地运用抽象原则对什么进行抽象对什么进行抽象问题域问题域当前目标当前目标系统责任系统责任忽略与系统责任无关的事物忽略与系统责任无关的事物只注意与之有关的事物只注意与之有关的事物,抽象为系统中的对象,抽象为系统中的对象 例如:学校的教师、学生、教务员例如:学校的教师、学生、教务员 和和 警卫警卫忽略与系统责任无关的事物特征忽略与系统责任无关的事物特征只注意与之有关的特征,抽象为对象的属性或操作只注意与之有关的特征,抽象为对象的属性或操作 例如:教师的专业、职称例如:教师的专业、职称 和和 身高、体重身高、体重判断事物是否与系统责任有关:判断事物是否与系统责任有关
39、:一是看该事物是否为系统提供了一些有用的信息,或者一是看该事物是否为系统提供了一些有用的信息,或者说它是否需要系统为它保存和管理某些信息;说它是否需要系统为它保存和管理某些信息;二是看它是否向系统提供了某些服务,或者说它是否需二是看它是否向系统提供了某些服务,或者说它是否需要系统描述它的某些行为。要系统描述它的某些行为。42北京大学信息学院研究生课程面向对象的分析与设计42正确地运用抽象原则正确地运用抽象原则对什么进行抽象对什么进行抽象问题域问题域当前目标当前目标系统责任系统责任总体原则:总体原则:(1 1)为了尽可能全面地发现系统所需要的对象,分析员应)为了尽可能全面地发现系统所需要的对象,
40、分析员应该把握该把握“先松后紧先松后紧”的原则,宁可多余,不可遗漏。的原则,宁可多余,不可遗漏。(2 2)对发现的对象进行筛查,去掉不必要的,进行必要的)对发现的对象进行筛查,去掉不必要的,进行必要的调整与合并。调整与合并。正确地提炼对象正确地提炼对象 例如:对书的不同抽象例如:对书的不同抽象在图书馆管理系统中以在图书馆管理系统中以一本书一本书作为一个对象实例作为一个对象实例在书店管理系统中以在书店管理系统中以一种书一种书作为一个对象实例作为一个对象实例43北京大学信息学院研究生课程面向对象的分析与设计43由系统管理或使用由系统管理或使用其信息,或者在系其信息,或者在系统中呈现某些行为统中呈现
41、某些行为的各类人员的各类人员由系统管理或使用由系统管理或使用其信息,或者在系其信息,或者在系统中呈现某些行为统中呈现某些行为的各类组织的各类组织由系统进行管由系统进行管理的各种物品理的各种物品其他其他策略与启发策略与启发(1 1)考虑问题域:)考虑问题域:抽象事物抽象事物事件事件文件文件结构结构人员人员组织组织物品物品设备设备在系统中运行并提在系统中运行并提供某些功能的设备供某些功能的设备,强调动态特征,强调动态特征例如:课程、生例如:课程、生产计划、交易、产计划、交易、账户账户需要长期记忆的事件需要长期记忆的事件例如:银行的取款、例如:银行的取款、存款;考虑信息的复存款;考虑信息的复杂程度,
42、例如:保险杂程度,例如:保险公司的索赔,车辆管公司的索赔,车辆管理中的驾驶违章理中的驾驶违章泛指各种表格、档案、证件、票据等文件泛指各种表格、档案、证件、票据等文件例如:业务报表,人事档案,身份证,合例如:业务报表,人事档案,身份证,合同,商品订单等同,商品订单等 注意三个问题:非基础数据,同一事物的注意三个问题:非基础数据,同一事物的重复描述,多种事物信息组合重复描述,多种事物信息组合从结构得到启发,从结构得到启发,联想到新的对象:联想到新的对象:一般一般-特殊结构、特殊结构、整体部分结构整体部分结构其他一切有助于发其他一切有助于发现对象的事物现对象的事物44北京大学信息学院研究生课程面向对
43、象的分析与设计44(2 2)考虑系统边界:)考虑系统边界:考察在系统边界以外与系统交互的各类参与者考察在系统边界以外与系统交互的各类参与者考虑通过那些对象处理这些参与者的交互考虑通过那些对象处理这些参与者的交互人员人员设备设备外系统外系统(3 3)考虑系统责任:)考虑系统责任:检查每一项功能需求是否已有相应的对象提供,检查每一项功能需求是否已有相应的对象提供,发现遗漏的对象发现遗漏的对象两个角度:两个角度:一个存储人与设备的相关信息一个存储人与设备的相关信息 一个是处理人与设备与系统之间的一个是处理人与设备与系统之间的交互交互一个角度:一个角度:系统边界,在系统中系统边界,在系统中设立一个对象
44、,处理与外设立一个对象,处理与外系统的接口系统的接口45北京大学信息学院研究生课程面向对象的分析与设计45审查与筛选审查与筛选(1)舍弃无用的对象)舍弃无用的对象通过属性判断:通过属性判断:是否通过属性记录了某些有用的信息?是否通过属性记录了某些有用的信息?通过操作判断:通过操作判断:是否通过操作提供了某些有用的功能?是否通过操作提供了某些有用的功能?二者都不是二者都不是无用无用问题的关键是:问题的关键是:设立这个对象的动机设立这个对象的动机 是为了通过其属性提供一些有用的信息?是为了通过其属性提供一些有用的信息?还是通过其操作提供一些有用的功能?还是通过其操作提供一些有用的功能?或者二者兼而
45、有之?或者二者兼而有之?46北京大学信息学院研究生课程面向对象的分析与设计46(2)对象的精简)对象的精简只有一个属性的对象只有一个属性的对象班级班级班主任班主任姓名姓名11班级班级班主任姓名班主任姓名只有一个操作的对象只有一个操作的对象输出设备输出设备格式转换器格式转换器文件格式转换文件格式转换输出设备输出设备文件格式转换文件格式转换call47北京大学信息学院研究生课程面向对象的分析与设计47(3)与实现条件有关的对象)与实现条件有关的对象例如:与例如:与图形用户界面(图形用户界面(GUI)数据管理系统数据管理系统硬件硬件 及及操作系统操作系统 有关的对象有关的对象推迟到推迟到OOD考虑考
46、虑u是否设立某个窗口对象来处理人机交互?是否设立某个窗口对象来处理人机交互?u是否设立一个进程调度对象来负责业务进程的调度?是否设立一个进程调度对象来负责业务进程的调度?u是否设立一个数据存储对象来负责对象数据的持久存是否设立一个数据存储对象来负责对象数据的持久存储?储?48北京大学信息学院研究生课程面向对象的分析与设计486.4 对象分类对象分类(1 1)将对象抽象为类,用类表示它的全部对象)将对象抽象为类,用类表示它的全部对象从对象到类的抽象过程,中间并没有一个明显的分从对象到类的抽象过程,中间并没有一个明显的分界线,这种抽象过程常常是在无形中发生的。界线,这种抽象过程常常是在无形中发生的
47、。(2 2)审查和调整)审查和调整类的属性或操作不适合该类的全部对象实例类的属性或操作不适合该类的全部对象实例例:例:“汽车汽车”类的类的“乘客限量乘客限量”属性属性进一步划分特殊类进一步划分特殊类属性及操作相同的类属性及操作相同的类经过抽象,差别很大的事物可能只保留相同的特征经过抽象,差别很大的事物可能只保留相同的特征考虑能否合并为一个类(服装和计算机)考虑能否合并为一个类(服装和计算机)属性及操作相似的类属性及操作相似的类考虑能否提升出一个一般类(轿车和货车、机床和抽风考虑能否提升出一个一般类(轿车和货车、机床和抽风机)机)同一事物的重复描述同一事物的重复描述例:例:“职员职员”和和“工作
48、证工作证”取消其中一个取消其中一个49北京大学信息学院研究生课程面向对象的分析与设计49(3 3)类的命名)类的命名 类的名字应适合该类(及其特殊类)的全部对象实例类的名字应适合该类(及其特殊类)的全部对象实例 汽车、摩托车、马车汽车、摩托车、马车 反映个体而不是群体反映个体而不是群体(学生、学生们)(学生、学生们)使用名词使用名词 或或 带定语的名词带定语的名词避免避免市井俚语和市井俚语和无意义的符号无意义的符号使用问题域通用的词汇使用问题域通用的词汇 使用便于交流的语言文字使用便于交流的语言文字可以用本地文字和英文双重命名可以用本地文字和英文双重命名50北京大学信息学院研究生课程面向对象的
49、分析与设计50练习:练习:1 1、对于谷仓和马匹来说,在什么情况下他们应该抽象为一个类?在什么情况、对于谷仓和马匹来说,在什么情况下他们应该抽象为一个类?在什么情况下他们应该抽象为两个类?下他们应该抽象为两个类?2 2、建模一个教学系统,系统应该包括哪些系统责任时,学生、学院、教师、建模一个教学系统,系统应该包括哪些系统责任时,学生、学院、教师、树会被抽象为该系统中的对象?树会被抽象为该系统中的对象?51北京大学信息学院研究生课程面向对象的分析与设计51基本共识基本共识 对象的属性和操作描述了对象的内部特征对象的属性和操作描述了对象的内部特征 对象的属性和操作是对象分类的根本依据对象的属性和操
50、作是对象分类的根本依据 由于不同的由于不同的OOPLOOPL对封装原则的体现各有不同,而对封装原则的体现各有不同,而OOAOOA应该适应该适合不同的语言,因此,在策略上不单纯以严格封装的合不同的语言,因此,在策略上不单纯以严格封装的OOPLOOPL为为背景背景第第7 7章章 定义对象的属性和操作定义对象的属性和操作7.1 属性和操作属性和操作 52北京大学信息学院研究生课程面向对象的分析与设计52 属性属性(attributeattribute)是用来描述对象静态特征的一个数据项。)是用来描述对象静态特征的一个数据项。实例属性实例属性(instance attribute)和和类属性类属性(c