资源预览内容
第1页 / 共213页
第2页 / 共213页
第3页 / 共213页
第4页 / 共213页
第5页 / 共213页
第6页 / 共213页
第7页 / 共213页
第8页 / 共213页
第9页 / 共213页
第10页 / 共213页
亲,该文档总共213页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第二部分:分析篇第二部分:分析篇北京大学信息科学技术学院北京大学信息科学技术学院研究生课程研究生课程研究生课程研究生课程面向对象的分析与设计面向对象的分析与设计主讲教师:邵维忠主讲教师:邵维忠2北京大学信息学院研究生课程面向对象的分析与设计2课件说明课件说明 这组课件是本人多年来在北京大学讲授这组课件是本人多年来在北京大学讲授“面向对象的面向对象的分析与设计分析与设计”课程时制作的,随着该领域理论与技术的发课程时制作的,随着该领域理论与技术的发展而逐年改进。目前的最新版本所适应的教材是邵维忠、展而逐年改进。目前的最新版本所适应的教材是邵维忠、杨芙清合写的著作杨芙清合写的著作面向对象的分析与设计面向对象的分析与设计(清华大学(清华大学出版社出版社20132013年年1 1月)。月)。 为了促进学术交流和资源共享,现将这套课件无偿提为了促进学术交流和资源共享,现将这套课件无偿提供给国内讲授同类课程的教师和同行,欢迎他们在教学工供给国内讲授同类课程的教师和同行,欢迎他们在教学工作中使用或作为参考。课件共包括作中使用或作为参考。课件共包括“基础篇基础篇”、“分析篇分析篇”和和“设计篇设计篇”三部分,是按照三部分,是按照5454学时研究生课程制作的,学时研究生课程制作的,各位教师可根据自己的授课对象及教学计划,对原课件进各位教师可根据自己的授课对象及教学计划,对原课件进行剪裁或重新组织。行剪裁或重新组织。北京大学信息学院北京大学信息学院 邵维忠邵维忠电子信箱:电子信箱:wzshaopku.edu.cnwzshaopku.edu.cn20132013年年7 7月月2 2日日3北京大学信息学院研究生课程面向对象的分析与设计3第第5 5章章建立需求模型建立需求模型用况图用况图5.1 需求分析和系统分析需求分析和系统分析需求分析需求分析的确切含义是对用户需求进行分析,旨在产生一份的确切含义是对用户需求进行分析,旨在产生一份明确、规范的需求定义。明确、规范的需求定义。OOA的主要内容是研究问题域中与需求有关的事物,把它们的主要内容是研究问题域中与需求有关的事物,把它们抽象为系统中的对象,建立类图。确切地讲,这些工作应该抽象为系统中的对象,建立类图。确切地讲,这些工作应该叫做叫做系统分析系统分析,而不是严格意义上的需求分析。,而不是严格意义上的需求分析。早期的早期的OOA缺乏一个良好的基础缺乏一个良好的基础对需求的规范描述。对需求的规范描述。需求说明需求说明需求分析需求分析健壮分析健壮分析需求模型需求模型分析模型分析模型分析过程分析过程Jacobson方法(方法(OOSE)提出用况()提出用况(use case)概念,)概念,解决了对需求的描述问题,其分析过程如下:解决了对需求的描述问题,其分析过程如下:4北京大学信息学院研究生课程面向对象的分析与设计4问题域问题域(抽象的来源)(抽象的来源)OOA模型模型(类图)(类图)抽象抽象OOA是将问题域中的事物抽象为系统中的对象是将问题域中的事物抽象为系统中的对象系统责任系统责任(抽象的目标)(抽象的目标)抽象的目标是系统责任抽象的目标是系统责任需求需求用况的概念解决了对需求的描述问题用况的概念解决了对需求的描述问题需求模型需求模型(用况图)(用况图)5北京大学信息学院研究生课程面向对象的分析与设计55.2 5.2 基本思路基本思路问题的提出:问题的提出:在系统尚未存在时,如何描绘用户需要一个什么样的系统?如何规范地定义用户需求?考虑问题的思路:考虑问题的思路:把系统看作一个黑箱,看它对外部的客观世界发挥什么作用,描述其外部可见的行为外部可见的行为。系统是由一条系统是由一条边界包围起来边界包围起来的未知空间的未知空间只通过有限只通过有限的几个接口的几个接口与外部交互与外部交互系统边界以外系统边界以外是与系统进行是与系统进行交互的参与者交互的参与者把内外交互情况描把内外交互情况描述清楚,就确切地述清楚,就确切地定义了系统的需求定义了系统的需求6北京大学信息学院研究生课程面向对象的分析与设计6系统边界系统边界系统边界:系统边界:一个系统所包含的所有系统成分与系统以外一个系统所包含的所有系统成分与系统以外各种事物的分界线。各种事物的分界线。系统:系统:被开发的计算机软硬件系统,不是指现实系统。被开发的计算机软硬件系统,不是指现实系统。系统成分:系统成分:在在OOA和和OOD中定义并且在编程时加以实中定义并且在编程时加以实现的系统元素现的系统元素对象对象对对象象对象对象对象对象对象对象对象对象对象对象参与者参与者( (人员人员) )参与者参与者( (设备设备) )参与者参与者( (外系统外系统) )参与者:参与者:在系在系统边界以外,统边界以外,与系统进行交与系统进行交互的事物互的事物人员、设备、人员、设备、外系统外系统5.3 系统边界与参与者系统边界与参与者7北京大学信息学院研究生课程面向对象的分析与设计7系统边界:系统边界:一个系统所包含的所有系统成分与系统以外一个系统所包含的所有系统成分与系统以外各种事物的分界线。各种事物的分界线。5.3 系统边界与参与者系统边界与参与者责任的边界,不是物理的边界系统的范围有多大与开发者的责任有关8北京大学信息学院研究生课程面向对象的分析与设计8参与者:参与者:在系统边界以外,与系统进行交互的事物在系统边界以外,与系统进行交互的事物人员、人员、设备、外系统设备、外系统5.3 系统边界与参与者系统边界与参与者 建模参与者的原则是为角色建模建模参与者的原则是为角色建模建模参与者的原则是为角色建模建模参与者的原则是为角色建模 参与者表示在与系统交互当中对象的参与者表示在与系统交互当中对象的参与者表示在与系统交互当中对象的参与者表示在与系统交互当中对象的特定侧面特定侧面特定侧面特定侧面,同一,同一,同一,同一参与者可以表示不同类的对象。参与者可以表示不同类的对象。参与者可以表示不同类的对象。参与者可以表示不同类的对象。 如果对象的行为有如果对象的行为有如果对象的行为有如果对象的行为有不同侧面不同侧面不同侧面不同侧面的话,就可以被绑定到多的话,就可以被绑定到多的话,就可以被绑定到多的话,就可以被绑定到多个参与者上。个参与者上。个参与者上。个参与者上。 示例示例示例示例 尽管许多不同的个人都使用自动售货机,但他们的行尽管许多不同的个人都使用自动售货机,但他们的行尽管许多不同的个人都使用自动售货机,但他们的行尽管许多不同的个人都使用自动售货机,但他们的行为却可以用参与者为却可以用参与者为却可以用参与者为却可以用参与者客户和维修技师客户和维修技师客户和维修技师客户和维修技师来概括。来概括。来概括。来概括。 对象对象对象对象MaryMaryMaryMary、FrankFrankFrankFrank和和和和PaulPaulPaulPaul可能都是自动售货机的客可能都是自动售货机的客可能都是自动售货机的客可能都是自动售货机的客户,同时户,同时户,同时户,同时PaulPaulPaulPaul也可能是自动售货机的维修技师也可能是自动售货机的维修技师也可能是自动售货机的维修技师也可能是自动售货机的维修技师9北京大学信息学院研究生课程面向对象的分析与设计9现实世界中的事物与系统之间的关系现实世界中的事物与系统之间的关系分四种情况分四种情况(1)被抽象为系统中的对象)被抽象为系统中的对象汽车飞机奖杯钟表起重机职员楼房天平(2)只作为系统外部的参与者与系统交互)只作为系统外部的参与者与系统交互(4)与系统无关)与系统无关操作员(3)既是系统中的对象,本身又作为参与者与系统交互)既是系统中的对象,本身又作为参与者与系统交互10北京大学信息学院研究生课程面向对象的分析与设计10人员人员系统的直接使用者系统的直接使用者直接为系统服务的人员直接为系统服务的人员设备设备与系统直接相联的设备与系统直接相联的设备为系统提供信息为系统提供信息在系统控制下运行在系统控制下运行不与系统相连的设备不与系统相连的设备 计算机设备计算机设备 外系统外系统上级系统上级系统子系统子系统其它系统其它系统如何发现参与者如何发现参与者考虑人员、设备、外系统考虑人员、设备、外系统11北京大学信息学院研究生课程面向对象的分析与设计111 1、对于银行存取款业务来说,下面列出的人员、设备与系、对于银行存取款业务来说,下面列出的人员、设备与系统哪些是系统参与者?哪些是系统内的对象?统哪些是系统参与者?哪些是系统内的对象?储户、柜员、大堂经理、业务经理、密码器、打印机、摄像储户、柜员、大堂经理、业务经理、密码器、打印机、摄像设备、设备、ATMATM机、维修技师、机、维修技师、2 2、为下图界定系统边界,指出系统的参与者。、为下图界定系统边界,指出系统的参与者。练习:练习:12北京大学信息学院研究生课程面向对象的分析与设计12什么是用况什么是用况I. Jacobson:用况是通过使用系统功能的某些部分而使用系统的一种具体方式。每个用况是通过使用系统功能的某些部分而使用系统的一种具体方式。每个用况包括用况包括一一个个由参与者发动的由参与者发动的完整的事件过程。它详细说明了参与者和完整的事件过程。它详细说明了参与者和系统之间发生的交互。因此,一个用况是一个由参与者和系统在一次对系统之间发生的交互。因此,一个用况是一个由参与者和系统在一次对话中执行的特定的相关事务序列。全部用况的集合则说明了所有可能存话中执行的特定的相关事务序列。全部用况的集合则说明了所有可能存在的系统使用方式。在的系统使用方式。对象技术词典对象技术词典:1对一个系统或者一个应用的一种单一的使用方式所进行的描述。对一个系统或者一个应用的一种单一的使用方式所进行的描述。2关于关于单个参与者单个参与者在与系统的对话中所执行的处理的行为陈述序列。在与系统的对话中所执行的处理的行为陈述序列。UML:对对系统系统在与它的参与者交互时所能执行的一组动作序列(包括其变体)在与它的参与者交互时所能执行的一组动作序列(包括其变体)的描述。的描述。?本书的定义:本书的定义:用况是对参与者使用系统的一项功能时所进行的交互过程的用况是对参与者使用系统的一项功能时所进行的交互过程的描述,其中包含由双方交替执行的一系列动作。描述,其中包含由双方交替执行的一系列动作。5.4 用况(用况(use case)13北京大学信息学院研究生课程面向对象的分析与设计13术语术语“use caseuse case”的准确含义的准确含义使用情况使用情况是对一项系统功能使用情况的一般描述,它对于每一次使是对一项系统功能使用情况的一般描述,它对于每一次使用都普遍适应,既不是应用实例,也不是举例说明。用都普遍适应,既不是应用实例,也不是举例说明。因此译为因此译为“用况用况”,而不是,而不是“用例用例”。几点说明:几点说明:(1 1)一个用况只描述参与者对一个用况只描述参与者对单独一项单独一项系统功能的使用情况;系统功能的使用情况;(2 2)通常是平铺直叙的)通常是平铺直叙的文字文字描述,描述,UMLUML也允许其他描述方式;也允许其他描述方式;(3 3)陈述参与者和系统在交互过程中)陈述参与者和系统在交互过程中双方双方所做的事;所做的事;(4 4)所描述的交互既可能由所描述的交互既可能由参与者发起参与者发起也可能由也可能由系统发起系统发起 ;(5 5)描述彼此为对方)描述彼此为对方直接地直接地做什么事,不描述怎么做;做什么事,不描述怎么做;(6 6)描述应力求准确,允许概括,但)描述应力求准确,允许概括,但不要把双方的行为混在一起不要把双方的行为混在一起;(7 7)一个用况可以由一个用况可以由多种参与者多种参与者分别参与或共同参与。分别参与或共同参与。 14北京大学信息学院研究生课程面向对象的分析与设计14识别用况的关注点:识别用况的关注点:(1 1)用况是用来探索需求的)用况是用来探索需求的15北京大学信息学院研究生课程面向对象的分析与设计15识别用况的关注点:识别用况的关注点:(2 2)用况是给系统外部的参与者(人而非系统)看的)用况是给系统外部的参与者(人而非系统)看的用人好懂的语言描述、用况要从参与者的角度命名用人好懂的语言描述、用况要从参与者的角度命名16北京大学信息学院研究生课程面向对象的分析与设计16识别用况的关注点:识别用况的关注点:(3 3)用况的含义是使用的情况,是人的使用情况,是对系统)用况的含义是使用的情况,是人的使用情况,是对系统外的人有用的外的人有用的用况描述的功能是外部可见的行为、是对人来说有价值的行为、用况描述的功能是外部可见的行为、是对人来说有价值的行为、一个用况体现的是一项人可用的功能一个用况体现的是一项人可用的功能17北京大学信息学院研究生课程面向对象的分析与设计17立足开发者的视角系统要求用户输入合法的密码系统能够接受用户录入取款金额系统能够从帐户中扣除取款金额系统允许选择“打印或不打印收据”系统能够显示交易结束信息立足用户视角用户插入ATM卡系统要求输入密码用户输入密码系统验证密码正确系统提示用户输入取款金额用户输入取款金额并确认系统验证取款金额合法系统从帐户中扣除取款金额系统询问用户是否打印收据用户要求不打印收据系统显示“交易结束”,退卡(4 4)一个用况描述的功能是参与者与系统共同完成的)一个用况描述的功能是参与者与系统共同完成的识别用况的关注点:识别用况的关注点:描述用况时从参与者和系统两个角度进行、只写外部可见的、描述用况时从参与者和系统两个角度进行、只写外部可见的、不写内部的处理细节不写内部的处理细节18北京大学信息学院研究生课程面向对象的分析与设计18内容与书写格式内容与书写格式 :名称名称行为陈述(分左右栏)行为陈述(分左右栏)调用语句调用语句控制语句控制语句括号或标号括号或标号收款收款输入开始本次收款的命令; 作好收款准备,应收款总作好收款准备,应收款总 数置为数置为0 0,输出提示信息;,输出提示信息;forfor 顾客选购的每种商品 dodo 输入商品编号; ifif 此种商品多于一件 thenthen 输入商品数量 end ifend if; 检索商品名称及单价;检索商品名称及单价; 货架商品数减去售出数;货架商品数减去售出数; if 货架商品数低于下限货架商品数低于下限 then call 通知上货通知上货 end if; 计算本种商品总价并打印编号、计算本种商品总价并打印编号、 名称、数量、单价、总价;名称、数量、单价、总价; 总价累加到应收款总数;总价累加到应收款总数;end forend for; 打印应收款总数;打印应收款总数;输入顾客付款数; 计算应找回款数,计算应找回款数, 打印付款数及找回款,打印付款数及找回款, 应收款数应收款数计入账册。计入账册。例例19北京大学信息学院研究生课程面向对象的分析与设计19用况描述的三个特点:用况描述的三个特点:(1 1)明显地区分参与者的)明显地区分参与者的行为和系统的行为;行为和系统的行为;(2 2)通过调用语句明确地)通过调用语句明确地表示一个用况对另一个用况表示一个用况对另一个用况的引用;的引用;(3 3)引入控制语句、括号)引入控制语句、括号等结构化成分,更利于表达等结构化成分,更利于表达复杂的用况内容。复杂的用况内容。收款收款输入开始本次收款的命令; 作好收款准备,应收款总作好收款准备,应收款总 数置为数置为0 0,输出提示信息;,输出提示信息;forfor 顾客选购的每种商品 dodo 输入商品编号; ifif 此种商品多于一件 thenthen 输入商品数量 end ifend if; 检索商品名称及单价;检索商品名称及单价; 货架商品数减去售出数;货架商品数减去售出数; if 货架商品数低于下限货架商品数低于下限 then call 通知上货通知上货 end if; 计算本种商品总价并打印编号、计算本种商品总价并打印编号、 名称、数量、单价、总价;名称、数量、单价、总价; 总价累加到应收款总数;总价累加到应收款总数;end forend for; 打印应收款总数;打印应收款总数;输入顾客付款数; 计算应找回款数,计算应找回款数, 打印付款数及找回款,打印付款数及找回款, 应收款数应收款数计入账册。计入账册。例例20北京大学信息学院研究生课程面向对象的分析与设计20如何定义用况如何定义用况针对单个用况的描述策略:针对单个用况的描述策略:把自己当作参与者,与设想中的系统进行交互。考虑:交互的目的是什么?需要向系统输入什么信息?希望由系统进行什么处理并从它得到何种结果?把上述交互过程描述出来。定义系统中所有的用况:定义系统中所有的用况:(1)全面地了解和收集用户所要求的各项系统功能,找出所有的参与者,了解与各项功能相关的业务流程;(2)把用户提出的功能组织成适当的单位,每一项功能完成一项完整而相对独立的工作;(3)穷举每一类参与者所使用的每一项系统功能,定义相应的用况;(4)检查用户对系统的各项功能需求是否都通过相应的用况做了描述。21北京大学信息学院研究生课程面向对象的分析与设计21参与者参与者基用况基用况 includeextendinclude用况用况 基用况基用况 基用况基用况 被包含用况被包含用况 延伸用况延伸用况 用况用况 5.5 5.5 用况图用况图参与者参与者参与者参与者模型元素:模型元素:参与者参与者用况用况延伸延伸包含包含泛化泛化5.5 5.5 用况图用况图22北京大学信息学院研究生课程面向对象的分析与设计22用况之间的关系用况之间的关系包含、延伸、泛化包含、延伸、泛化包含包含23北京大学信息学院研究生课程面向对象的分析与设计23包含关系(include)包含关系将一个用况合并到另一个用况的行为序列中。 位于两个用况之间的包含关系意味着基基用用况况显式地在其指定位置将另另一一个个用用况况包含进来, 使其成为自自己己的的行行为为的的一一部部分分被包含的用况就像是子程序它表示那些必须要重复描述的行为。 包包含含关关系系可可用用于于提提取取共共用用的的用用况况在具有包含关系的两个用况中,被包含的那个用况不不能能单单独独存存在在,它只能以实例的形式存在于包含它的用况之中24北京大学信息学院研究生课程面向对象的分析与设计24用况之间的关系用况之间的关系包含、延伸、泛化包含、延伸、泛化延伸延伸25北京大学信息学院研究生课程面向对象的分析与设计25扩展关系给用况添加增量细节。 两两个个用用况况之之间间的的扩扩展展关关系系,代代表表基基用用例例可可以以隐隐式式地地包包含含另另一一个个用用况况作作为为其其行行为为的的一一部部分分,包包含含的的位位置置间间接接地地由由另另一一个个用用况况(扩扩展展用用况况)确确定定。 与包含的区别 基基用用况况可可以以独独立立于于扩扩展展用用况况单单独独存存在在。当一个用况有多多个个子子流流程程时,可以用扩展关系对其进行扩展,使得此基用况的不同子流程能在不同的情形下以扩展用况的形式被激活。延伸关系(extend,扩展)26北京大学信息学院研究生课程面向对象的分析与设计26注意的问题1 1、扩扩展展用用例例经经常常也也是是片片段段,它它不不能能作作为为行行为为序序列列单单独独出出现现。2 2、基基用用例例在在缺缺少少任任何何扩扩展展用用例例的的情情况况下下也也必必须须是是合合法法用用例例。3 3、扩扩展展用用例例要要确确定定在在基基用用例例行行为为序序列列中中的的插插入入位位置置。4 4、在在多多数数情情况况下下,扩扩展展关关系系有有一一个个附附加加条条件件,只只有有当当控控制制到到达达插插入入位位置置时时条条件件为为真真,才才会会发发生生扩扩展展行行为为。用况关系-包含和延伸27北京大学信息学院研究生课程面向对象的分析与设计27用况之间的关系用况之间的关系包含、延伸、泛化包含、延伸、泛化Perform ATMPerform ATMTransactionTransactionWithdrawWithdrawDepositDepositFundsFunds泛化泛化Transfer Transfer FundsFunds 28北京大学信息学院研究生课程面向对象的分析与设计28用况的两种复杂情况用况的两种复杂情况1 1、两个(或多个)参与者共享一个用况、两个(或多个)参与者共享一个用况不同种类的参与者可能都要使用某一项系统功能,因不同种类的参与者可能都要使用某一项系统功能,因此它们可能共享同一个用况此它们可能共享同一个用况例:例:系统维护系统维护登录登录系统管理员系统管理员普通用户普通用户29北京大学信息学院研究生课程面向对象的分析与设计292、一个用况的执行,可能需要两个(甚至多个)参与者同时一个用况的执行,可能需要两个(甚至多个)参与者同时与系统交互。与系统交互。例:网上购物例:网上购物网上购物客户供货商30北京大学信息学院研究生课程面向对象的分析与设计30用况图的开发过程用况图的开发过程确定系统边界:与外部事物的界限确定系统边界:与外部事物的界限发现参与者:所有与系统直接交互的人、设备、外系统发现参与者:所有与系统直接交互的人、设备、外系统 定义用况:定义用况、描述用况定义用况:定义用况、描述用况 建立用况之间的关系:包含、延伸、泛化建立用况之间的关系:包含、延伸、泛化 确定参与者和用况之间的关系:直线连接确定参与者和用况之间的关系:直线连接 绘制用况图:正确使用图符绘制用况图:正确使用图符 使用用况图的几条建议使用用况图的几条建议最重要的工作是对用况的描述最重要的工作是对用况的描述不要过分深入地描述系统内部的行为细节不要过分深入地描述系统内部的行为细节 运用最主要概念,加强用况内容的描述运用最主要概念,加强用况内容的描述不要陷入延伸与包含、延伸点、泛化等问题的争论和辨别不要陷入延伸与包含、延伸点、泛化等问题的争论和辨别了解用况的局限性了解用况的局限性主要作用是描述功能需求主要作用是描述功能需求5.6 开发过程与建议开发过程与建议31北京大学信息学院研究生课程面向对象的分析与设计31练习:练习:1 1、下面给出了两组用况图,分别说明哪张用况图更合理,为什么?、下面给出了两组用况图,分别说明哪张用况图更合理,为什么?(1 1)(2 2)2 2、根据你对自动存取款机的使用经验,构建自动存取款机的用况图,描述、根据你对自动存取款机的使用经验,构建自动存取款机的用况图,描述其中的每一个用况。其中的每一个用况。 要求要求:(:(1)小组式建模()小组式建模(5-6人)(人)(2)角色分工()角色分工(3)电子版提交)电子版提交32北京大学信息学院研究生课程面向对象的分析与设计32概念:概念:对象(对象(object)是系统中用来描述客观事物的一个实体,是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和施加于这组它是构成系统的一个基本单位,由一组属性和施加于这组属性的一组操作构成。属性的一组操作构成。类(类(class)是具有相同属性和操作的一组对象的集合,是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,它由一它为属于该类的全部对象提供了统一的抽象描述,它由一个类名、一组属性和一组操作构成。个类名、一组属性和一组操作构成。 类和对象的关系类和对象的关系集合与成员,对象是类的实例集合与成员,对象是类的实例在一般在一般-特殊结构中,特殊类的特殊结构中,特殊类的对象实例在逻辑上也都是其一对象实例在逻辑上也都是其一般类的对象实例。般类的对象实例。不直接创建对象实例的类称为不直接创建对象实例的类称为抽象类(抽象类(abstract class) 学生学生本科生本科生研究生研究生例:例:第第6 6章章 发现对象,定义对象类发现对象,定义对象类6.1 对象和类的概念及其运用对象和类的概念及其运用33北京大学信息学院研究生课程面向对象的分析与设计33主动对象(主动对象(active object)至少有一个操作不需至少有一个操作不需要接收消息就能主动执行的对象要接收消息就能主动执行的对象用于描述具有主动行为的事物用于描述具有主动行为的事物主动对象的类叫做主动对象的类叫做主动类(主动类(active class)被动对象(被动对象(passive object) 每个操作都必须在每个操作都必须在消息的驱动下才能执行的对象消息的驱动下才能执行的对象主动操作(主动操作(active operation) 主动对象中至少有主动对象中至少有一个不需要接收消息就能主动执行的操作。(一个不需要接收消息就能主动执行的操作。(用于定义用于定义进程或线程的程序单位进程或线程的程序单位)被动对象的操作:被动对象的操作:函数、过程、例程等函数、过程、例程等34北京大学信息学院研究生课程面向对象的分析与设计34类的语义类的语义OO方法中的类在不同的语境下有两种不同的语义:方法中的类在不同的语境下有两种不同的语义:1. 一个类代表由它的全部对象实例所构成的群体一个类代表由它的全部对象实例所构成的群体日常语言表达中的例子:日常语言表达中的例子:“公司里有管理人员、技术人员和市场人员公司里有管理人员、技术人员和市场人员”“马路上汽车很多马路上汽车很多” 在在OO模型中:模型中:每个类都是由它的全部对象实例所构成的集合每个类都是由它的全部对象实例所构成的集合类代表了它的全部对象实例。类代表了它的全部对象实例。2. 一个类代表属于该类的任意一个对象实例一个类代表属于该类的任意一个对象实例从大量的个体中抽象出一个概念,再运用这个概念时就从大量的个体中抽象出一个概念,再运用这个概念时就可以代表其中的任何一个个体,例如:可以代表其中的任何一个个体,例如: “学生有一个学号,属于一个班级,要上课学生有一个学号,属于一个班级,要上课” 在在OO系统模型中定义了一个类,它就可以代表它的任系统模型中定义了一个类,它就可以代表它的任何一个对象实例,例如:何一个对象实例,例如:汽车与发动机之间的聚合关系,表示任何一辆汽车都有一台发汽车与发动机之间的聚合关系,表示任何一辆汽车都有一台发动机,任何一台发动机都可以装在动机,任何一台发动机都可以装在01辆汽车上辆汽车上35北京大学信息学院研究生课程面向对象的分析与设计35在类的抽象层次建模在类的抽象层次建模 对象是现实中存在的,是面向对象方法中的核心概念,但是对象是现实中存在的,是面向对象方法中的核心概念,但是面向对象系统建模时,要在类的抽象层次上建立系统模型。面向对象系统建模时,要在类的抽象层次上建立系统模型。 哈利波特、金秀贤、孙俪、朱哈利波特、金秀贤、孙俪、朱亚文。亚文。36北京大学信息学院研究生课程面向对象的分析与设计36在类的抽象层次建模在类的抽象层次建模理由:理由:(1)充分性:模型中一个类描述了它的全部对象实例)充分性:模型中一个类描述了它的全部对象实例(2)必要性:个别对象实例不能代表其他对象实例)必要性:个别对象实例不能代表其他对象实例(3)符合人类的思维方式:在概念层次上表达描述事物规律)符合人类的思维方式:在概念层次上表达描述事物规律(4)与)与OOPL保持良好的对应保持良好的对应(5)避免建模概念复杂化)避免建模概念复杂化 (6)消除抽象层次上的混乱)消除抽象层次上的混乱37北京大学信息学院研究生课程面向对象的分析与设计37如何运用类和对象的概念如何运用类和对象的概念从对象出发认识问题域从对象出发认识问题域将问题域中的事物抽象为对象;将问题域中的事物抽象为对象;将具有共同特征的对象抽象为类将具有共同特征的对象抽象为类用类以及它们之间的关系构成整个系统模型;用类以及它们之间的关系构成整个系统模型;归纳归纳演绎演绎在模型中用类表示属于该类的任何对象在模型中用类表示属于该类的任何对象在类的规约中说明这个类将创建哪些对象实例在类的规约中说明这个类将创建哪些对象实例在程序中用类定义它的全部对象在程序中用类定义它的全部对象编程时静态声明类的对象编程时静态声明类的对象运行时动态创建类的对象运行时动态创建类的对象明星资讯系统开发明星资讯系统开发38北京大学信息学院研究生课程面向对象的分析与设计38类类 名名压缩方式压缩方式类类 名名属性名属性名:类型名类型名操作名操作名()展开方式展开方式主动类主动类active类类 名名衍型(衍型(stereotype)用关键字或者用关键字或者用图标表示用图标表示类名类名UML2 主动类表示法主动类表示法主动主动类类 名名6.2 表示法表示法在在模型模型中用类符号来表示一个类中用类符号来表示一个类它代表了属于该类的全部对象实例它代表了属于该类的全部对象实例39北京大学信息学院研究生课程面向对象的分析与设计39对象名对象名: :类名类名压缩方式压缩方式属性名属性名=值值UML的对象表示法:的对象表示法:细节方式细节方式对象名对象名: :类名类名匿名对象匿名对象: :类名类名压缩方式压缩方式属性名属性名=值值细节方式细节方式: :类名类名用所谓“匿名对象”代表类的任何一个对象实例,然而这恰恰是类的作用。40北京大学信息学院研究生课程面向对象的分析与设计406.3 发现对象发现对象研究问题域研究问题域亲临现场深入调查研究亲临现场深入调查研究直接观察并向用户及相关的业务人员进行调查和直接观察并向用户及相关的业务人员进行调查和交流交流,考察问题域中各种各样的事物、它们的特征及相互关系 听取问题域专家的见解听取问题域专家的见解领域专家领域专家包括技术人员、管理者、老职员和包括技术人员、管理者、老职员和富有经验的工人等富有经验的工人等阅读相关材料阅读相关材料阅读各种与问题域有关的材料,学习相关行业和阅读各种与问题域有关的材料,学习相关行业和领域的基本知识领域的基本知识借鉴以往的系统借鉴以往的系统查阅以往在该问题域中开发过的同类系统的分析查阅以往在该问题域中开发过的同类系统的分析文档文档 ,吸取经验,发现可以复用的类,吸取经验,发现可以复用的类 41北京大学信息学院研究生课程面向对象的分析与设计41正确地运用抽象原则正确地运用抽象原则对什么进行抽象对什么进行抽象问题域问题域当前目标当前目标系统责任系统责任忽略与系统责任无关的事物忽略与系统责任无关的事物只注意与之有关的事物只注意与之有关的事物 ,抽象为系统中的对象,抽象为系统中的对象 例如:学校的教师、学生、教务员例如:学校的教师、学生、教务员 和和 警卫警卫忽略与系统责任无关的事物特征忽略与系统责任无关的事物特征只注意与之有关的特征,抽象为对象的属性或操作只注意与之有关的特征,抽象为对象的属性或操作 例如:教师的专业、职称例如:教师的专业、职称 和和 身高、体重身高、体重判断事物是否与系统责任有关:判断事物是否与系统责任有关: 一是看该事物是否为系统提供了一些有用的信息,或者一是看该事物是否为系统提供了一些有用的信息,或者说它是否需要系统为它保存和管理某些信息;说它是否需要系统为它保存和管理某些信息; 二是看它是否向系统提供了某些服务,或者说它是否需二是看它是否向系统提供了某些服务,或者说它是否需要系统描述它的某些行为。要系统描述它的某些行为。42北京大学信息学院研究生课程面向对象的分析与设计42正确地运用抽象原则正确地运用抽象原则对什么进行抽象对什么进行抽象问题域问题域当前目标当前目标系统责任系统责任总体原则:总体原则:(1 1)为了尽可能全面地发现系统所需要的对象,分析员应)为了尽可能全面地发现系统所需要的对象,分析员应该把握该把握“先松后紧先松后紧”的原则,宁可多余,不可遗漏。的原则,宁可多余,不可遗漏。(2 2)对发现的对象进行筛查,去掉不必要的,进行必要的)对发现的对象进行筛查,去掉不必要的,进行必要的调整与合并。调整与合并。正确地提炼对象正确地提炼对象 例如:对书的不同抽象例如:对书的不同抽象在图书馆管理系统中以在图书馆管理系统中以一本书一本书作为一个对象实例作为一个对象实例在书店管理系统中以在书店管理系统中以一种书一种书作为一个对象实例作为一个对象实例43北京大学信息学院研究生课程面向对象的分析与设计43由系统管理或使用由系统管理或使用其信息,或者在系其信息,或者在系统中呈现某些行为统中呈现某些行为的各类人员的各类人员由系统管理或使用由系统管理或使用其信息,或者在系其信息,或者在系统中呈现某些行为统中呈现某些行为的各类组织的各类组织由系统进行管由系统进行管理的各种物品理的各种物品其他其他策略与启发策略与启发(1 1)考虑问题域:)考虑问题域:抽象事物抽象事物事件事件文件文件结构结构人员人员组织组织物品物品设备设备在系统中运行并提在系统中运行并提供某些功能的设备,供某些功能的设备,强调动态特征强调动态特征例如:课程、生例如:课程、生产计划、交易、产计划、交易、账户账户需要长期记忆的事件需要长期记忆的事件例如:银行的取款、例如:银行的取款、存款;考虑信息的复存款;考虑信息的复杂程度,例如:保险杂程度,例如:保险公司的索赔,车辆管公司的索赔,车辆管理中的驾驶违章理中的驾驶违章泛指各种表格、档案、证件、票据等文件例泛指各种表格、档案、证件、票据等文件例如:业务报表,人事档案,身份证,合同,如:业务报表,人事档案,身份证,合同,商品订单等商品订单等 注意三个问题:非基础数据,同一事物的重注意三个问题:非基础数据,同一事物的重复描述,多种事物信息组合复描述,多种事物信息组合从结构得到启发,从结构得到启发,联想到新的对象:联想到新的对象:一般一般- -特殊结构、特殊结构、整体部分结构整体部分结构其他一切有助于发其他一切有助于发现对象的事物现对象的事物44北京大学信息学院研究生课程面向对象的分析与设计44(2 2)考虑系统边界:)考虑系统边界:考察在系统边界以外与系统交互的各类参与者考察在系统边界以外与系统交互的各类参与者考虑通过那些对象处理这些参与者的交互考虑通过那些对象处理这些参与者的交互人员人员设备设备外系统外系统(3 3)考虑系统责任:)考虑系统责任:检查每一项功能需求是否已有相应的对象提供,检查每一项功能需求是否已有相应的对象提供,发现遗漏的对象发现遗漏的对象两个角度:两个角度: 一个存储人与设备的相关信息一个存储人与设备的相关信息 一个是处理人与设备与系统之间的一个是处理人与设备与系统之间的交互交互一个角度:一个角度: 系统边界,在系统中系统边界,在系统中设立一个对象,处理与外设立一个对象,处理与外系统的接口系统的接口45北京大学信息学院研究生课程面向对象的分析与设计45审查与筛选审查与筛选(1)舍弃无用的对象)舍弃无用的对象通过属性判断:通过属性判断:是否通过属性记录了某些有用的信息?是否通过属性记录了某些有用的信息?通过操作判断:通过操作判断:是否通过操作提供了某些有用的功能?是否通过操作提供了某些有用的功能?二者都不是二者都不是无用无用问题的关键是:问题的关键是:设立这个对象的动机设立这个对象的动机 是为了通过其属性提供一些有用的信息?是为了通过其属性提供一些有用的信息? 还是通过其操作提供一些有用的功能?还是通过其操作提供一些有用的功能? 或者二者兼而有之?或者二者兼而有之?46北京大学信息学院研究生课程面向对象的分析与设计46(2)对象的精简)对象的精简只有一个属性的对象只有一个属性的对象班级班级班主任班主任姓名姓名11班级班级班主任姓名班主任姓名只有一个操作的对象只有一个操作的对象输出设备输出设备格式转换器格式转换器文件格式转换文件格式转换输出设备输出设备文件格式转换文件格式转换call47北京大学信息学院研究生课程面向对象的分析与设计47(3)与实现条件有关的对象)与实现条件有关的对象例如:与例如:与图形用户界面(图形用户界面(GUI)数据管理系统数据管理系统硬件硬件 及及操作系统操作系统 有关的对象有关的对象推迟到推迟到OOD考虑考虑u是否设立某个窗口对象来处理人机交互?是否设立某个窗口对象来处理人机交互?u是否设立一个进程调度对象来负责业务进程的调度?是否设立一个进程调度对象来负责业务进程的调度?u是否设立一个数据存储对象来负责对象数据的持久存是否设立一个数据存储对象来负责对象数据的持久存储?储?48北京大学信息学院研究生课程面向对象的分析与设计486.4 对象分类对象分类(1 1)将对象抽象为类,用类表示它的全部对象)将对象抽象为类,用类表示它的全部对象从对象到类的抽象过程,中间并没有一个明显的分从对象到类的抽象过程,中间并没有一个明显的分界线,这种抽象过程常常是在无形中发生的。界线,这种抽象过程常常是在无形中发生的。(2 2)审查和调整)审查和调整类的属性或操作不适合该类的全部对象实例类的属性或操作不适合该类的全部对象实例例:例:“汽车汽车”类的类的“乘客限量乘客限量”属性属性进一步划分特殊类进一步划分特殊类属性及操作相同的类属性及操作相同的类经过抽象,差别很大的事物可能只保留相同的特征经过抽象,差别很大的事物可能只保留相同的特征考虑能否合并为一个类(服装和计算机)考虑能否合并为一个类(服装和计算机)属性及操作相似的类属性及操作相似的类考虑能否提升出一个一般类(轿车和货车、机床和抽风考虑能否提升出一个一般类(轿车和货车、机床和抽风机)机)同一事物的重复描述同一事物的重复描述例:例:“职员职员”和和“工作证工作证”取消其中一个取消其中一个49北京大学信息学院研究生课程面向对象的分析与设计49(3 3)类的命名)类的命名 类的名字应适合该类(及其特殊类)的全部对象实例类的名字应适合该类(及其特殊类)的全部对象实例 汽车、摩托车、马车汽车、摩托车、马车 反映个体而不是群体反映个体而不是群体(学生、学生们)(学生、学生们) 使用名词使用名词 或或 带定语的名词带定语的名词避免避免市井俚语和市井俚语和无意义的符号无意义的符号使用问题域通用的词汇使用问题域通用的词汇 使用便于交流的语言文字使用便于交流的语言文字可以用本地文字和英文双重命名可以用本地文字和英文双重命名50北京大学信息学院研究生课程面向对象的分析与设计50练习:练习:1 1、对于谷仓和马匹来说,在什么情况下他们应该抽象为一个类?在什么情况、对于谷仓和马匹来说,在什么情况下他们应该抽象为一个类?在什么情况下他们应该抽象为两个类?下他们应该抽象为两个类?2 2、建模一个教学系统,系统应该包括哪些系统责任时,学生、学院、教师、建模一个教学系统,系统应该包括哪些系统责任时,学生、学院、教师、树会被抽象为该系统中的对象?树会被抽象为该系统中的对象?51北京大学信息学院研究生课程面向对象的分析与设计51基本共识基本共识 对象的属性和操作描述了对象的内部特征对象的属性和操作描述了对象的内部特征 对象的属性和操作是对象分类的根本依据对象的属性和操作是对象分类的根本依据 由于不同的由于不同的OOPLOOPL对封装原则的体现各有不同,而对封装原则的体现各有不同,而OOAOOA应该适应该适合不同的语言,因此,在策略上不单纯以严格封装的合不同的语言,因此,在策略上不单纯以严格封装的OOPLOOPL为为背景背景第第7 7章章 定义对象的属性和操作定义对象的属性和操作7.1 属性和操作属性和操作 52北京大学信息学院研究生课程面向对象的分析与设计52 属性属性(attributeattribute)是用来描述对象静态特征的一个数据项。)是用来描述对象静态特征的一个数据项。实例属性实例属性(instance attribute)和和类属性类属性(class attribute)的区别的区别 实例属性是每个对象实例各自拥有的属性,它描述了各个实例属性是每个对象实例各自拥有的属性,它描述了各个对象实例自身的特征。对象实例自身的特征。 类属性是一个类的全部对象实例共同拥有的属性,它的值类属性是一个类的全部对象实例共同拥有的属性,它的值被这个类的全部对象实例所共享。被这个类的全部对象实例所共享。例如:仪表类例如:仪表类输入电压、功率及各种规定的质量指标输入电压、功率及各种规定的质量指标类属性类属性编号、出厂日期、精度等实际性能参数编号、出厂日期、精度等实际性能参数实例属性实例属性第第7 7章章 定义对象的属性和操作定义对象的属性和操作7.1 属性和操作属性和操作 53北京大学信息学院研究生课程面向对象的分析与设计53 第第7 7章章 定义对象的属性和操作定义对象的属性和操作7.1 属性和操作属性和操作 54北京大学信息学院研究生课程面向对象的分析与设计54操作操作(operationoperation)是用来描述对象动态特征(行为)的)是用来描述对象动态特征(行为)的一个动作序列一个动作序列 。近义词:方法(近义词:方法(methodmethod),服务(),服务(serviceservice) 被动操作被动操作(passive operation):):只有接收到消息才能执行的操作只有接收到消息才能执行的操作 编程语言中的函数、过程等被动成分编程语言中的函数、过程等被动成分主动操作主动操作(active operation):):不需要接收消息就能主动执行的操作不需要接收消息就能主动执行的操作编程语言中的进程、线程等主动成分编程语言中的进程、线程等主动成分 55北京大学信息学院研究生课程面向对象的分析与设计55实现级细节方式实现级细节方式分析级细节方式分析级细节方式7.2 属性和操作的表示法属性和操作的表示法类类 名名属性名属性名:类型名类型名=值值操作名操作名(参数表参数表):返回类型:返回类型类类 名名属性名属性名:类型名类型名操作名操作名()用衍型表示用衍型表示主动操作主动操作主动主动 类名类名操作名操作名()主动主动操作名操作名()类名类名操作名操作名()主动主动操作名操作名()操作名操作名()主动主动操作名操作名()56北京大学信息学院研究生课程面向对象的分析与设计567.3 7.3 定义属性定义属性(1 1)策略与启发)策略与启发按常识这个对象应该有哪些属性?按常识这个对象应该有哪些属性?人人姓名、地址、出生年月姓名、地址、出生年月在当前的问题域中,对象应该有哪些属性?在当前的问题域中,对象应该有哪些属性?超级市场:商品超级市场:商品条形码条形码根据系统责任,这个对象应具有哪些属性?根据系统责任,这个对象应具有哪些属性? 航空订票系统中的短信通知功能:乘客航空订票系统中的短信通知功能:乘客手机号码手机号码建立这个对象是为了保存和管理哪些信息?建立这个对象是为了保存和管理哪些信息?商场管理系统:商品商场管理系统:商品规格、库存量规格、库存量为实现操作的功能,需要增设哪些属性?为实现操作的功能,需要增设哪些属性?实时监控系统:传感器(信号采集功能)实时监控系统:传感器(信号采集功能)时间间隔时间间隔 (报警功能)(报警功能) 临界值临界值是否需要增加描述对象状态的属性?是否需要增加描述对象状态的属性?设备(关闭、待命、运行、故障)设备(关闭、待命、运行、故障)状态状态 用什么属性表示关联和聚合?用什么属性表示关联和聚合?课程课程任课教师,汽车任课教师,汽车发动机发动机57北京大学信息学院研究生课程面向对象的分析与设计57(2)审查与筛选)审查与筛选是否体现了以系统责任为目标的抽象是否体现了以系统责任为目标的抽象例:书例:书重量?重量?是否描述了对象本身的特征是否描述了对象本身的特征例:课程例:课程教师的电话号码?教师的电话号码?是否可通过继承得到?是否可通过继承得到? 例:员工例:员工姓名姓名 全职员工全职员工姓名?姓名?是否可从其他属性直接导出?是否可从其他属性直接导出? 例:人例:人出生年月、年龄出生年月、年龄7.3 7.3 定义属性定义属性58北京大学信息学院研究生课程面向对象的分析与设计58(4)属性的命名与定位)属性的命名与定位命名:原则与类的命名相同命名:原则与类的命名相同-名词或带定语的名词,规范的、名词或带定语的名词,规范的、问题域通用的词汇,不使用无意义的字符和数字问题域通用的词汇,不使用无意义的字符和数字定位:针对所描述的对象定位:针对所描述的对象适合类(及其子类)的全部对象实例适合类(及其子类)的全部对象实例7.3 7.3 定义属性定义属性(3)推迟到)推迟到OOD考虑的问题考虑的问题规范化问题规范化问题 OOAOOA阶段不要针对阶段不要针对RDBMSRDBMS的要求进行规范化,即使已经决定要采用的要求进行规范化,即使已经决定要采用RDBMSRDBMS,其规范化程度的高低也要根据所采用的硬件与系统软件性能做出权,其规范化程度的高低也要根据所采用的硬件与系统软件性能做出权衡。衡。对象标识对象标识 用什么作为对象在系统中的唯一标识与实现技术有关。用什么作为对象在系统中的唯一标识与实现技术有关。性能问题性能问题 时空开销问题的解决可能需要增设一些属性时空开销问题的解决可能需要增设一些属性59北京大学信息学院研究生课程面向对象的分析与设计59(1 1)对象行为分类)对象行为分类系统行为系统行为-在在OOAOOA阶段一般不必为之定义相应的操作阶段一般不必为之定义相应的操作例:创建、删除、复制、转存例:创建、删除、复制、转存原因原因: : 一是从概念上讲一是从概念上讲, ,此类行为并不是对象自身所具有的此类行为并不是对象自身所具有的, ,而是它而是它所在的系统施加于它的所在的系统施加于它的. . 二是在实现时编程语言往往为这些系统行为提供了统一的支二是在实现时编程语言往往为这些系统行为提供了统一的支持持, ,如果实现条件缺乏某些支持如果实现条件缺乏某些支持, ,应该在应该在OODOOD阶段补流相应的操作阶段补流相应的操作, ,而不是在而不是在OOAOOA中定义中定义. .7.4 7.4 定义操作定义操作60北京大学信息学院研究生课程面向对象的分析与设计60(1 1)对象行为分类)对象行为分类对象自身的行为对象自身的行为封装原则引起的附加行为封装原则引起的附加行为( (算法简单的操作算法简单的操作) ) 在在OOAOOA阶段不必考虑。阶段不必考虑。例:读、写属性值例:读、写属性值原因:原因:一是此类操作本质上并不是对客观事物固有行为的抽象,而是由严格封装一是此类操作本质上并不是对客观事物固有行为的抽象,而是由严格封装的原则所引起的,它们对刻画事物的固有行为无太大作用的原则所引起的,它们对刻画事物的固有行为无太大作用二是系统的实现未必采用严格封装的原则二是系统的实现未必采用严格封装的原则三是把如此简单而大量的操作放在对象中,三是把如此简单而大量的操作放在对象中,OOAOOA模型将变得臃肿而琐碎。模型将变得臃肿而琐碎。7.4 7.4 定义操作定义操作61北京大学信息学院研究生课程面向对象的分析与设计61(1 1)对象行为分类)对象行为分类对象自身的行为对象自身的行为算法复杂的操作算法复杂的操作 在在OOAOOA中需要重点考虑。中需要重点考虑。例:计算或监控例:计算或监控7.4 7.4 定义操作定义操作62北京大学信息学院研究生课程面向对象的分析与设计62考虑系统责任考虑系统责任有哪些功能要求在本对象提供?有哪些功能要求在本对象提供? 例:例:FileFile类中的操作有类中的操作有print( )print( )考虑问题域考虑问题域对象在问题域对应的事物有哪些行为?对象在问题域对应的事物有哪些行为? 例:实时监控系统中的操作有例:实时监控系统中的操作有warn( )warn( )分析对象状态分析对象状态-画状态机图画状态机图对象状态的转换是由哪些操作引起的?对象状态的转换是由哪些操作引起的? 例:图书馆借阅系统中的操作有例:图书馆借阅系统中的操作有borrow( )borrow( )追踪操作的执行路径追踪操作的执行路径-画时序图画时序图模拟操作的执行,并在整个系统中跟踪模拟操作的执行,并在整个系统中跟踪(3)策略与启发)策略与启发63北京大学信息学院研究生课程面向对象的分析与设计63审查对象的每个操作是否审查对象的每个操作是否真正有用真正有用是否直接提供系统责任所要求的某项功能?是否直接提供系统责任所要求的某项功能?或者或者 响应其它操作的请求间接地完成这种功能的某些局响应其它操作的请求间接地完成这种功能的某些局部操作?部操作? 调整调整取消无用的操作取消无用的操作审查操作是不是审查操作是不是高内聚高内聚的的一个操作应该只完成一项单一的、完整的功能一个操作应该只完成一项单一的、完整的功能 调整调整拆分拆分 或或 合并合并(3 3)审查与调整)审查与调整64北京大学信息学院研究生课程面向对象的分析与设计64考虑问题域考虑问题域对象行为是被引发的,对象行为是被引发的,还是主动呈现的?还是主动呈现的?(4 4)认识对象的主动行为)认识对象的主动行为操作执行路径的逆向追踪操作执行路径的逆向追踪 按消息传递的相反方向追踪,直到发现某个操作按消息传递的相反方向追踪,直到发现某个操作不被任何其他对象所请求不被任何其他对象所请求与参与者直接交互的对象操作与参与者直接交互的对象操作 这些对象最有可能成为主动对象这些对象最有可能成为主动对象65北京大学信息学院研究生课程面向对象的分析与设计65问题:分析阶段为什么要给出操作流程?问题:分析阶段为什么要给出操作流程?关于关于OOA/OOD分工的两种不同观点分工的两种不同观点(5)操作过程描述)操作过程描述可采用流程图或活动图可采用流程图或活动图yesno动作陈述框,在框内动作陈述框,在框内填写要执行的动作。填写要执行的动作。条件判断框,给出一条件判断框,给出一个判断条件。个判断条件。转接,用于连接各个框,转接,用于连接各个框,表示它们之间的转接关系。表示它们之间的转接关系。入口入口/出口标记,指出出口标记,指出操作的开始或结束。操作的开始或结束。流程图:流程图:活动图:活动图:在流程图基础上进行了一些扩展,在流程图基础上进行了一些扩展,有更强的描述能力(第有更强的描述能力(第9章介绍)章介绍)66北京大学信息学院研究生课程面向对象的分析与设计66命名:动词或动宾结构命名:动词或动宾结构定位:定位:需要一定的技巧需要一定的技巧与实际事物一致与实际事物一致例:售货员例:售货员售货,商品售货,商品售出售出在一般在一般-特殊结构中的位置特殊结构中的位置适合类的全部对象实例适合类的全部对象实例(6)操作的命名和定位)操作的命名和定位商品商品售出售出从主语从主语-谓语谓语-宾语结构看对象操作的设置宾语结构看对象操作的设置“售货员销售商品售货员销售商品”操作应该放在哪里?操作应该放在哪里?售货员售货员售货售货call67北京大学信息学院研究生课程面向对象的分析与设计677.5 接口的概念及用途接口的概念及用途早期的面向对象方法并没有把接口作为正式的早期的面向对象方法并没有把接口作为正式的OO概念概念 和系统成分,只是用来解释和系统成分,只是用来解释OO概念概念“操作是对象(类)对外提供的访问接口操作是对象(类)对外提供的访问接口”20世纪世纪90年代中后期,接口才作为一种系统成分出现年代中后期,接口才作为一种系统成分出现在在OOPL中,并且被中,并且被UML作为一种模型元素作为一种模型元素UML对接口的定义及解释:对接口的定义及解释:“接口(接口(interface)是一种类目(是一种类目(classifier) ,它,它表示对一组紧凑的公共特征和职责的声明。一个接表示对一组紧凑的公共特征和职责的声明。一个接口说明了一个合约;实现接口的任何类目的实例必口说明了一个合约;实现接口的任何类目的实例必须履行这个合约。须履行这个合约。”“一个给定的类目可以实现多个接口,而一个接口一个给定的类目可以实现多个接口,而一个接口可以由多个不同的类目来实现。可以由多个不同的类目来实现。” 68北京大学信息学院研究生课程面向对象的分析与设计68为什么引入接口的概念为什么引入接口的概念售货员售货员商品商品采购员采购员callcall针对不同的应用场合组织对象的操作针对不同的应用场合组织对象的操作售货员售货员商品商品销售销售采购员采购员采购采购把与销售有关把与销售有关的操作组织成的操作组织成销售接口销售接口把与采购有关把与采购有关的操作组织成的操作组织成采购接口采购接口可替换(例如根据销可替换(例如根据销售策略的变化开发一售策略的变化开发一个新的商品类)个新的商品类)接口提供了更灵活的衔接机制接口提供了更灵活的衔接机制69北京大学信息学院研究生课程面向对象的分析与设计69接口(接口(interface)是由一组操作所形成的一个集合,它由一个名字和代表其是由一组操作所形成的一个集合,它由一个名字和代表其中每个操作的特征标记构成。中每个操作的特征标记构成。特征标记(特征标记(signature)代表了一个操作,但并不具体地定义操作的实现代表了一个操作,但并不具体地定义操作的实现特征标记特征标记 := (:,:): interface接口名称接口名称操作操作1()()操作操作n()()表示法表示法(详细方式):(详细方式):70北京大学信息学院研究生课程面向对象的分析与设计70接口与类的关系接口与类的关系接口由某些类实现(提供),被另外某些类使用(需要)接口由某些类实现(提供),被另外某些类使用(需要)前者与接口的关系称为前者与接口的关系称为实现实现(realization)后者与接口的关系称为后者与接口的关系称为使用使用(use)interface销售销售查询()查询()售出()售出()售货员售货员商品商品使用使用实现实现同一个接口同一个接口 对实现者而言是对实现者而言是供接口供接口(provided interface) 对使用者而言是对使用者而言是需接口需接口(required interface)71北京大学信息学院研究生课程面向对象的分析与设计71表示法表示法(简略方式):(简略方式):托球托球-托座托座使用者使用者提供者提供者提供者的供接口(托球)提供者的供接口(托球)使用者的需接口(托座)使用者的需接口(托座)售货员售货员商品商品销售销售例:例:interface销售销售查询()查询()售出()售出()售货员售货员商品商品72北京大学信息学院研究生课程面向对象的分析与设计72在一个类上可以画出它所有的供接口和需接口在一个类上可以画出它所有的供接口和需接口类类供接口供接口需接口需接口一个接口可以由多个类使用,它也可以由多个类实现一个接口可以由多个类使用,它也可以由多个类实现类类B类类D类类A类类E类类C多个类可以共同使用多个类可以共同使用同一个接口同一个接口正如对象的一个操作正如对象的一个操作可以被多个对象调用可以被多个对象调用多个类都可以分别实多个类都可以分别实现同一个接口现同一个接口这里表示它们可以这里表示它们可以相互替换相互替换73北京大学信息学院研究生课程面向对象的分析与设计73接口与类的区别接口与类的区别类既有属性又有操作;类既有属性又有操作;接口只是声明了一组操作,没有属性。接口只是声明了一组操作,没有属性。在一个类中定义了一个操作,就要在这个类中真正地实现它;在一个类中定义了一个操作,就要在这个类中真正地实现它;接口中的操作只是一个声明,不需要在接口中加以实现。接口中的操作只是一个声明,不需要在接口中加以实现。类可以创建对象实例;类可以创建对象实例;接口则没有任何实例。接口则没有任何实例。引入接口概念的好处引入接口概念的好处在接口的使用者和提供者之间建立了一种灵活的衔接机制,有在接口的使用者和提供者之间建立了一种灵活的衔接机制,有利于对类、构件等软件成分进行灵活的组装和复用。利于对类、构件等软件成分进行灵活的组装和复用。将操作的声明与实现相分离,隔离了接口的使用者和提供者的将操作的声明与实现相分离,隔离了接口的使用者和提供者的相互影响。使用者只需关注接口的声明,不必关心它的实现;相互影响。使用者只需关注接口的声明,不必关心它的实现;提供者不必关心哪些类将使用这个接口,只是根据接口的声明提供者不必关心哪些类将使用这个接口,只是根据接口的声明中所承诺的功能来实现它,并且可以有多种不同的实现。中所承诺的功能来实现它,并且可以有多种不同的实现。 接口概念对描述构件之间的关系具有更重要的意义接口概念对描述构件之间的关系具有更重要的意义教材第教材第9章将做进一步介绍章将做进一步介绍74北京大学信息学院研究生课程面向对象的分析与设计74接口与多继承的比较接口与多继承的比较接口果真能部分地解决多继承问题吗?接口果真能部分地解决多继承问题吗? interfaceinterface 接口接口 A A操作操作A-1A-1()()操作操作A-nA-n()() interfaceinterface 接口接口 B B操作操作B-1B-1()()操作操作B-mB-m()()类类 C C类类 E操作操作A-1()()操作操作A-n()()操作操作B-1()()操作操作B-m()()类类 D D操作操作A-1()()操作操作A-n()()操作操作B-1()()操作操作B-m()()类类 A A操作操作A-1A-1()()操作操作A-nA-n()()类类 B B操作操作B-1B-1()()操作操作B-mB-m()()类类 C C操作操作A-1A-1()()操作操作A-nA-n()()操作操作B-1()()操作操作B-m()()类类 E E类类 D D75北京大学信息学院研究生课程面向对象的分析与设计75练习:练习:1 1、在图书借阅系统中,读者可以借阅图书,借阅操作由图书管理员完成,说、在图书借阅系统中,读者可以借阅图书,借阅操作由图书管理员完成,说明借阅操作应放置在哪一个类中?为什么?明借阅操作应放置在哪一个类中?为什么?2 2、在图书借阅系统中,图书对象的创建操作是否需要在、在图书借阅系统中,图书对象的创建操作是否需要在OOAOOA阶段进行定义?为阶段进行定义?为什么?什么?3 3、用一个实际的例子描述主动对象的、用一个实际的例子描述主动对象的UML2UML2标准表示法。标准表示法。4 4、基于自动存取款机系统需求模型,完成、基于自动存取款机系统需求模型,完成OOAOOA阶段类模型的构建,用阶段类模型的构建,用UMLUML标准标准表示法进行描述。表示法进行描述。(1 1)从问题域、系统边界、系统责任三个方面初步发现系统对象;)从问题域、系统边界、系统责任三个方面初步发现系统对象;(2 2)对已发现的对象进行审查和筛选;)对已发现的对象进行审查和筛选;(3 3)将对象抽象为类;)将对象抽象为类;(4 4)初步确定类中的属性和操作。)初步确定类中的属性和操作。76北京大学信息学院研究生课程面向对象的分析与设计76对象之间的四种关系对象之间的四种关系1 1一般一般- -特殊关系特殊关系 又称又称继承继承关系,反映事物关系,反映事物的分类。由这种关系可以形成的分类。由这种关系可以形成一般一般- -特殊结构特殊结构。2 2整体整体- -部分关系部分关系即即聚合聚合关系。反映事物的构关系。反映事物的构成。由这种关系可以形成成。由这种关系可以形成整体整体- -部分结构部分结构。3 3关联关系关联关系对象实例集合(类)上的一个关对象实例集合(类)上的一个关系,其中的元素提供了被开发系统的应用领域中一系,其中的元素提供了被开发系统的应用领域中一组有意义的信息。组有意义的信息。4 4消息关系消息关系 对象之间的动态联系,即一个对对象之间的动态联系,即一个对象在执行其操作时,请求其他对象为它执行某个操象在执行其操作时,请求其他对象为它执行某个操作,或者向其他对象传送某些信息。反映了事物之作,或者向其他对象传送某些信息。反映了事物之间的行为依赖关系。间的行为依赖关系。这些关系形成了类图的关系层这些关系形成了类图的关系层第第8 8章章定义对象间的关系定义对象间的关系77北京大学信息学院研究生课程面向对象的分析与设计77概念概念同义词同义词 和和 近义词近义词继承(继承(inheritance)是描述一般类和特殊类之间关系的最传统、是描述一般类和特殊类之间关系的最传统、最经典的术语。有时作为动词或形容词出现。最经典的术语。有时作为动词或形容词出现。一般一般-特殊(特殊(generalization-specialization)含义最准确,而且不含义最准确,而且不容易产生误解,恰切地反映了一般类(概念)和特殊类(概念)之容易产生误解,恰切地反映了一般类(概念)和特殊类(概念)之间的相对(二元)关系;也用于描述结构,即一般间的相对(二元)关系;也用于描述结构,即一般-特殊结构。缺特殊结构。缺点是书写和阅读比较累赘。点是书写和阅读比较累赘。泛化(泛化(generalization)取取“一般一般-特殊特殊” 的一半,是的一半,是UML的做法。的做法。比较简练,但是只反映了问题的一方面。作为关系的名称尚可,说比较简练,但是只反映了问题的一方面。作为关系的名称尚可,说结构是一个结构是一个“泛化泛化”则很勉强。则很勉强。分类(分类(classification)接近人类日常的语言习惯,接近人类日常的语言习惯, 体现了类的层体现了类的层次划分,也作为结构的名称。在许多的场合被作为一种原则。次划分,也作为结构的名称。在许多的场合被作为一种原则。本书主要采用本书主要采用“一般一般-特殊特殊”这个术语这个术语8.1一般一般-特殊结构特殊结构相关概念:一般类、特殊类、继承、多继承、多态相关概念:一般类、特殊类、继承、多继承、多态语义:语义:“is a kind of ”78北京大学信息学院研究生课程面向对象的分析与设计78一般一般-特殊关系(继承关系)是类之间的一种二元关系特殊关系(继承关系)是类之间的一种二元关系是一种是一种基本的模型元素基本的模型元素;由这种关系所形成的结构是一般由这种关系所形成的结构是一般-特殊结构特殊结构是一种是一种复合的模型成分复合的模型成分。人员人员股东股东职员职员顾客顾客股东职员股东职员例:例:这是这是1个一般个一般-特殊结构特殊结构 包含包含5个一般特殊关系个一般特殊关系79北京大学信息学院研究生课程面向对象的分析与设计79特殊类一般类的特征一般类特殊类的特征只要有这些特征必须有这些特征对象实例集合对象实例集合特征集合特征集合理解一般类与特殊类之间的关系定义定义1:如果类如果类A A具有类具有类B B的全部属性和全部操作,而且具的全部属性和全部操作,而且具有自己特有的某些属性或操作,则有自己特有的某些属性或操作,则A A叫做叫做B B的特殊类,的特殊类,B B叫叫做做A A的一般类。一般类与特殊类又称父类与子类。的一般类。一般类与特殊类又称父类与子类。定义定义2 2:如果类如果类A A的全部对象都是类的全部对象都是类B B的对象,而且类的对象,而且类B B中存中存在不属于类在不属于类A A的对象,则的对象,则A A是是B B的特殊类,的特殊类,B B是是A A的一般类。的一般类。书中证明,以上两种定义是等价的书中证明,以上两种定义是等价的一般类和特殊类的两个定义一般类和特殊类的两个定义80北京大学信息学院研究生课程面向对象的分析与设计80表示法表示法 * 对继承的属性或操作重新定义对继承的属性或操作重新定义 拒绝继承拒绝继承 多态性的表示符号多态性的表示符号一般类一般类特殊类特殊类特殊类特殊类集中式集中式一般类一般类特殊类特殊类特殊类特殊类分散式分散式人员人员股东股东职员职员顾客顾客股东职员股东职员例:例:81北京大学信息学院研究生课程面向对象的分析与设计81如何发现一般如何发现一般-特殊结构特殊结构(1)学习当前领域的分类学知识)学习当前领域的分类学知识(2)按常识考虑事物的分类)按常识考虑事物的分类(3)根据一般类和特殊类的两种定义)根据一般类和特殊类的两种定义(4)考察属性与操作的适应范围)考察属性与操作的适应范围?公司人员公司人员姓名姓名身份证号身份证号股份股份工资工资 ?公司人员公司人员姓名姓名身份证号身份证号 股东股东股份股份 职员职员工资工资 股东股东姓名姓名身份证号身份证号股份股份 职员职员姓名姓名身份证号身份证号工资工资 股东股东股份股份职员职员工资工资 ?公司人员公司人员姓名姓名身份证号身份证号 82北京大学信息学院研究生课程面向对象的分析与设计82(5 5)考虑领域范围内的复用)考虑领域范围内的复用现钞收款机现钞收款机 A A B B C C D D E E F F X X Y Y Z Z收款机收款机A AB BC CX XY Y现钞收款机现钞收款机 D D E E F F Z Z领域构件83北京大学信息学院研究生课程面向对象的分析与设计83(1 1)问题域是否需要这样的分类?(例:书)问题域是否需要这样的分类?(例:书线装书)线装书)(2 2)系统责任是否需要这样的分类?(例:职员)系统责任是否需要这样的分类?(例:职员本市职员)本市职员)(3 3)是否符合分类学的常识?(用)是否符合分类学的常识?(用“is a kind of is a kind of ”来衡量)来衡量)审查与调整审查与调整(4 4)是否真正地继承了一些属性或操作?)是否真正地继承了一些属性或操作?( (航标船航标船船船) ) 飞机飞行高度 自动导航 ? 汽车发动机载重量速度运输运输工具发动机载重量速度 飞机飞行高度 自动导航 汽车运输84北京大学信息学院研究生课程面向对象的分析与设计84一般一般- -特殊结构的简化特殊结构的简化(1 1)取消没有特殊性的特殊类)取消没有特殊性的特殊类运输工具发动机载重量速度 飞机飞行高度 自动导航 汽车运输运输工具发动机载重量速度 飞机飞行高度 自动导航 运输提问:提问:这种简化带来的问这种简化带来的问题是什么?题是什么?85北京大学信息学院研究生课程面向对象的分析与设计85(2 2)增加属性简化一般特殊结构)增加属性简化一般特殊结构 人员人员男男 人人女女 人人中国人中国人美国人美国人日本人日本人人员人员性别性别国籍国籍86北京大学信息学院研究生课程面向对象的分析与设计86(3 3)取消用途单一的一般类,减少继承层次)取消用途单一的一般类,减少继承层次一般类存在的理由:一般类存在的理由:* * 有两个或两个上以上的特殊类有两个或两个上以上的特殊类* * 需要用它创建对象实例需要用它创建对象实例* * 有助于软件复用有助于软件复用设设 备备型号型号生产厂生产厂开启开启关闭关闭 雷雷 达达安装地点安装地点 监控监控 雷达雷达型号型号生产厂生产厂安装地点安装地点 开启开启关闭关闭监控监控电子设备电子设备激光打印机激光打印机传真机传真机通讯设备设备电子设备计算机设备打印机民用通讯设备激光打印机传真机87北京大学信息学院研究生课程面向对象的分析与设计87多继承:多继承:允许一个允许一个特殊类具有一个以上一般类的继承模式特殊类具有一个以上一般类的继承模式多继承特殊类的内部情况在职研究生在职研究生姓名姓名学号学号班级班级专业专业职称职称专业专业在职单位在职单位来自来自“人员人员”类类来自来自“研究生研究生”类类来自来自“教职工教职工”类类本类中显式定义本类中显式定义人员人员姓名姓名教职工教职工职称职称专业专业研究生研究生学号学号班级班级专业专业在职研究生在职研究生在职单位在职单位 例例:命名命名冲突冲突重复重复继承继承88北京大学信息学院研究生课程面向对象的分析与设计88多态多态:多态是指同一个命名可具有不同的语义。多态是指同一个命名可具有不同的语义。OO方法中,方法中,常指在一般类中定义的属性或操作被特殊类继承之后,常指在一般类中定义的属性或操作被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。可以具有不同的数据类型或表现出不同的行为。多边形边数顶点数据绘图XY矩形边数*顶点数据*绘图正多边形*顶点数据*绘图例:例:89北京大学信息学院研究生课程面向对象的分析与设计89概念:概念:聚合(聚合(aggregation),组合(),组合(composition)整体整体-部分(部分(whole-part )整体对象,部分对象整体对象,部分对象语义:语义:“a part of”或或“has a”聚合关系描述了对象实例之间的构成情况,然而它的聚合关系描述了对象实例之间的构成情况,然而它的定义却是在类的抽象层次给出的。定义却是在类的抽象层次给出的。从集合论的观点看聚合关系从集合论的观点看聚合关系整体整体-部分关系(聚合关系)部分关系(聚合关系)是两个类之间的二元关系,是两个类之间的二元关系,其中一个类的某些对象是另一个类的某些对象的组成其中一个类的某些对象是另一个类的某些对象的组成部分。部分。整体整体-部分结构部分结构是把若干具有聚合关系的类组织在一起是把若干具有聚合关系的类组织在一起所形成的结构。它是一个以类为结点,以聚合关系为所形成的结构。它是一个以类为结点,以聚合关系为边的连通有向图。边的连通有向图。8.2 整体整体-部分结构部分结构一种基本的一种基本的模型元素模型元素由若干聚合关由若干聚合关系形成的复合系形成的复合模型成分模型成分90北京大学信息学院研究生课程面向对象的分析与设计90组合(组合(composition)是聚合关系的一种特殊情况,它表是聚合关系的一种特殊情况,它表明整体对于部分的强拥有关系,即整体与部分之间具有紧明整体对于部分的强拥有关系,即整体与部分之间具有紧密、固定的组成关系。密、固定的组成关系。UML把聚合定义为关联的一种特殊情况把聚合定义为关联的一种特殊情况而组合关系是聚合关系的特殊情况而组合关系是聚合关系的特殊情况91北京大学信息学院研究生课程面向对象的分析与设计91数量数量数量数量数量数量数量数量整体对象类整体对象类部分对象类部分对象类整体对象类整体对象类部分对象类部分对象类表示法表示法在连接符两端通过数字或者符号给出关系双方对象实例的数量约束,称在连接符两端通过数字或者符号给出关系双方对象实例的数量约束,称为多重性(为多重性(multiplicity) 确定的整数确定的整数 给出确定的数量给出确定的数量 例如:例如: 1,2 下界下界上界上界 给出一个范围给出一个范围 例如:例如: 01 ,14 * * 表示多个,数量不确定表示多个,数量不确定下界下界* * 表示多个,下界确定表示多个,下界确定 例如例如 0* * , 1* * 多重性有以下多重性有以下3种情况:种情况:一对一,一对多,多对多一对一,一对多,多对多照相机照相机1*1*01010101镜镜 头头机机 身身1 192北京大学信息学院研究生课程面向对象的分析与设计92如何发现整体如何发现整体- -部分结构部分结构基本策略基本策略考察问题域中各种具有构成关系的事物考察问题域中各种具有构成关系的事物(1 1)物理上的整体事物和它的组成部分)物理上的整体事物和它的组成部分例:机器、设备和它的零部件例:机器、设备和它的零部件(2 2)组织机构和它的下级组织及部门)组织机构和它的下级组织及部门例:公司与子公司、部门例:公司与子公司、部门(3 3)团体(组织)与成员)团体(组织)与成员例:公司与职员例:公司与职员(4 4)一种事物在空间上包容其它事物)一种事物在空间上包容其它事物例:生产车间与机器例:生产车间与机器(5 5)抽象事物的整体与部分)抽象事物的整体与部分例:学科与分支学科、法律与法律条款例:学科与分支学科、法律与法律条款(6 6)具体事物和它的某个抽象方面)具体事物和它的某个抽象方面例:人员与身份、履历例:人员与身份、履历93北京大学信息学院研究生课程面向对象的分析与设计93审查与筛选审查与筛选(1 1)是否属于问题域?)是否属于问题域?例:公司职员与家庭例:公司职员与家庭(2 2)是不是系统责任的需要?)是不是系统责任的需要?例:员工与工会、救护车与急救设备例:员工与工会、救护车与急救设备(3 3)部分对象是否有一个以上的属性?)部分对象是否有一个以上的属性?例:汽车与车轮(规格)例:汽车与车轮(规格)(4 4)是否有明显的整体)是否有明显的整体- -部分关系?部分关系?例:学生与课程例:学生与课程94北京大学信息学院研究生课程面向对象的分析与设计94整体整体-部分结构的高级应用技巧部分结构的高级应用技巧(1 1)简化对象的定义)简化对象的定义飞飞 机机有有关关发发动动机机的的属属性性与与操操作作有有关关驾驾驶驶室室的的属属性性与与操操作作11141飞飞 机机发动机发动机驾驶室驾驶室95北京大学信息学院研究生课程面向对象的分析与设计95(2 2)支持软件复用)支持软件复用起重机起重机送料车送料车机床机床钻床钻床刨床刨床车床车床电动机电动机011011011发动机发动机飞机飞机三种情况:三种情况: 第一种情况是系统中已经定义了某个类,再定义的其他类具有该类第一种情况是系统中已经定义了某个类,再定义的其他类具有该类的一些特征。的一些特征。 第二种情况是系统中定义的几个类都有某些共同的特征。第二种情况是系统中定义的几个类都有某些共同的特征。 第三种情况是系统中只有一个类,但该类中的某些特征具有某种独第三种情况是系统中只有一个类,但该类中的某些特征具有某种独立性,具有领域内复用机会。立性,具有领域内复用机会。96北京大学信息学院研究生课程面向对象的分析与设计96(3 3)表示数量不定的组成部分)表示数量不定的组成部分订订 单单编号编号卖方卖方买方买方总金额总金额成交日期成交日期订单行订单行商品编号商品编号订购数量订购数量成交价成交价金额金额1 1* *1 1商品商品商品编号商品编号商品名称商品名称单价单价厂商厂商1 1* *一个订单可以一个订单可以包含一项到多包含一项到多达几十项商品达几十项商品提问:提问:能否不要订单行,能否不要订单行,直接用商品作为订直接用商品作为订单的部分对象?单的部分对象?97北京大学信息学院研究生课程面向对象的分析与设计97(4)表示动态变化的对象特征)表示动态变化的对象特征人员营业员会计师经理问题:问题:对象的属性与操作定义在系统运行中动态变化,例如:不理想的解决办法:不理想的解决办法:删除、重建删除、重建Shlaer/ MellorShlaer/ Mellor的子类型迁移的子类型迁移“动态对象动态对象”不理想的原因:不理想的原因:一是各个类的对象有一些共同的、不需要变化的属性,随着旧对一是各个类的对象有一些共同的、不需要变化的属性,随着旧对象的删除和新对象的建立,需要由系统用户把旧对象中有用的信象的删除和新对象的建立,需要由系统用户把旧对象中有用的信息重新录入到新对象中,增加了用户的负担。息重新录入到新对象中,增加了用户的负担。二是让对象反复地从一个类中删除而加入另一个类,将为数据管二是让对象反复地从一个类中删除而加入另一个类,将为数据管理带来困难。理带来困难。三是概念上不自然,一个对象仅仅因为一些特征发生了变化,就三是概念上不自然,一个对象仅仅因为一些特征发生了变化,就要让它经历一番死而复生的阴阳轮回,显得太小题大做。要让它经历一番死而复生的阴阳轮回,显得太小题大做。98北京大学信息学院研究生课程面向对象的分析与设计98(4)表示动态变化的对象特征)表示动态变化的对象特征问题:问题:对象的属性与操作定义在系统运行中动态变化,例如:会计师身份经理身份营业员身份人员身份1m或或人员营业员身份01会计师身份0101111解:解:经理身份思考:思考:自动存取款机系统是否存在这样的问题?99北京大学信息学院研究生课程面向对象的分析与设计99“三友三友”对问题的描述及解决方法对问题的描述及解决方法“大多数面向对象的编程语言是静态类型化的,这大多数面向对象的编程语言是静态类型化的,这意味着在创建对象时就限定了对象的类型。但是随意味着在创建对象时就限定了对象的类型。但是随着时间的推移对象还可能扮演不同的角色。着时间的推移对象还可能扮演不同的角色。”例子:候选者,雇员,退休者例子:候选者,雇员,退休者 persontypecandidatetypeemployeetyperetiree“对象在其生命对象在其生命期内动态地获得期内动态地获得或者丢弃类型或者丢弃类型”1999年第一版年第一版persondynamiccandidatedynamicemployeedynamicretiree2005年第二版年第二版总之都是围绕着继承想主意,没有运用聚合。总之都是围绕着继承想主意,没有运用聚合。100北京大学信息学院研究生课程面向对象的分析与设计100从上述例子得到的启示:从上述例子得到的启示:整体整体- -部分结构有很强的表达能力部分结构有很强的表达能力运用运用OO方法的基本概念可以自然而有效地解决许多方法的基本概念可以自然而有效地解决许多在其他方法中用扩充概念解决的问题在其他方法中用扩充概念解决的问题加强对基本概念的运用,不要轻易创造新的扩充概念加强对基本概念的运用,不要轻易创造新的扩充概念person010101111用聚合概念解决:用聚合概念解决:CandidateRoleEmployeeRoleRetireeRole101北京大学信息学院研究生课程面向对象的分析与设计101用一般特殊结构用一般特殊结构两种结构的变通两种结构的变通汽 车制冷设备冷藏车解释:解释:继承和聚合都是使一类对象获得另一类对象的特征,只是观察问题的角度不同。两种结构同用两种结构同用汽 车冷藏车制冷设备冷藏车汽 车制冷设备用整体部分结构用整体部分结构102北京大学信息学院研究生课程面向对象的分析与设计102练习:练习:1 1、对于门这个类来说、对于门这个类来说, ,有木门、铁门、玻璃门之分,也有电动门、转门、拉门有木门、铁门、玻璃门之分,也有电动门、转门、拉门之分,如何建模?之分,如何建模?2 2、在在线图书销售系统中,图书包括封面、目录和正文三个部分,封面上有、在在线图书销售系统中,图书包括封面、目录和正文三个部分,封面上有图书的名称、出版社和作者,目录中有章和节的标题,如何建模?图书的名称、出版社和作者,目录中有章和节的标题,如何建模?3 3、如果多个类中都存在一些相同的属性和操作,此时可以选择几种建模方案、如果多个类中都存在一些相同的属性和操作,此时可以选择几种建模方案?举例说明。?举例说明。4 4、基于前述建模结果,完成、基于前述建模结果,完成OOAOOA阶段类之间关系的构建,用阶段类之间关系的构建,用UMLUML标准表示法进标准表示法进行描述。行描述。103北京大学信息学院研究生课程面向对象的分析与设计103概念:概念:关联关联(association)是两个或者多个类上的一个关系)是两个或者多个类上的一个关系(即这些类的对象实例集合的笛卡儿积的一个子集合),(即这些类的对象实例集合的笛卡儿积的一个子集合),其中的元素提供了被开发系统的应用领域中一组有意义其中的元素提供了被开发系统的应用领域中一组有意义的信息。的信息。 二元关联二元关联(binary association)n元关联元关联(n-ary association) 关联的实例关联的实例有序对有序对 或或 n元组元组,又称,又称链链(link)关联是这些有序对关联是这些有序对 或或 n元组的集合元组的集合关联位于类的抽象层次,链位于对象的抽象层次关联位于类的抽象层次,链位于对象的抽象层次8.3 关联关联提问:一个提问:一个n元关联中所涉及的类的数量是否可以小于元关联中所涉及的类的数量是否可以小于n?104北京大学信息学院研究生课程面向对象的分析与设计104二元关联的表示法二元关联的表示法城市城市* * *有航线有航线(d) (d) 城市之间有航线城市之间有航线教教 师师学学 生生1 1* *指导论文指导论文教师为学生指导论文教师为学生指导论文例子例子类类 A A名称名称类类 B B数量数量数量数量角色角色角色角色1 11 11 1* * * *多重性的表示多重性的表示一对一:一对一:一对多:一对多:多对多:多对多:数量约束数量约束固定数值:例如固定数值:例如 1数值范围:例如数值范围:例如 01符号:符号: * * 表示多个表示多个0* * = * 1* * 表示表示 1到多个到多个105北京大学信息学院研究生课程面向对象的分析与设计105二元关联的实现(一对一和一对多)二元关联的实现(一对一和一对多)编程语言:编程语言:在程序中用两个类分别实现关联两端的类;以在程序中用两个类分别实现关联两端的类;以数量约束为数量约束为“1”的类的对象实例为目标,在关联另一端的类的类的对象实例为目标,在关联另一端的类中设置一个指向该目标的指针或者对象标识(源类的属性)。中设置一个指向该目标的指针或者对象标识(源类的属性)。教教 师师1 1授课授课课课 程程* *主讲教师主讲教师谁?谁?关系数据库:关系数据库:用两个数据库表分别实现关联两端的类;以数用两个数据库表分别实现关联两端的类;以数量约束为量约束为“1”的类对应的表的元组为目标,在关联另一端的的类对应的表的元组为目标,在关联另一端的类对应的表中设置一个指向该目标的外键(目标的主键)。类对应的表中设置一个指向该目标的外键(目标的主键)。教师教师课程课程106北京大学信息学院研究生课程面向对象的分析与设计106二元关联的实现(多对多)二元关联的实现(多对多)问题:问题:任何一端的一个对象实例的要和另一端多个对象实任何一端的一个对象实例的要和另一端多个对象实例发生关联,而且数量不确定。实现时不知道该设立多少个例发生关联,而且数量不确定。实现时不知道该设立多少个指针(或者对象标识、外键)才能够用。指针(或者对象标识、外键)才能够用。 课课 程程学学 生生*编程语言:编程语言:用两个类分别实现关联两端的类,同时用另外用两个类分别实现关联两端的类,同时用另外一个类来实现它们之间的关联。实现关联的类含有两个属性,一个类来实现它们之间的关联。实现关联的类含有两个属性,分别是指向两端的类的对象实例的指针或者对象标识。分别是指向两端的类的对象实例的指针或者对象标识。 增加一增加一个类个类关系数据库:关系数据库:用两个数据库表分别实现关联两端的类,同用两个数据库表分别实现关联两端的类,同时用另外一个数据库表来实现它们之间的关联。实现关联时用另外一个数据库表来实现它们之间的关联。实现关联的数据库表含有两个属性,它们分别是指向两端的表的元的数据库表含有两个属性,它们分别是指向两端的表的元组的外键。组的外键。 课程课程课程课程-学生学生学生学生107北京大学信息学院研究生课程面向对象的分析与设计107运用简单的概念及表示法解决各种复杂的关联问题运用简单的概念及表示法解决各种复杂的关联问题教师教师学生学生1*指导论文指导论文(1)带有属性和操作的关联)带有属性和操作的关联有某些信息有某些信息需要描述需要描述OMT(及(及UML)的概念扩充)的概念扩充关联类(关联类(association class) 类类1类类2属性属性操作操作例子例子教教 师师学学 生生1*指导论文指导论文论文题目论文题目答辩时间答辩时间成绩成绩问题:增加了概念的复杂性,缺乏编程语言支持问题:增加了概念的复杂性,缺乏编程语言支持108北京大学信息学院研究生课程面向对象的分析与设计108换一种思路考虑问题:换一种思路考虑问题:两类对象之间的关联带有某些复杂的信息,说明它们两类对象之间的关联带有某些复杂的信息,说明它们之间存在着某种事物(尽管可能是抽象事物)。之间存在着某种事物(尽管可能是抽象事物)。用普通的对象概念来表示这种事物,简化关联,减少用普通的对象概念来表示这种事物,简化关联,减少概念,并加强与概念,并加强与OOPLOOPL的对应。的对应。教师教师学生学生1 1* *指导论文指导论文论文题目论文题目答辩时间答辩时间成绩成绩* *论文题目论文题目答辩时间答辩时间成绩成绩 教师教师学生学生1 1指导指导毕业论文毕业论文1 11 1写作写作例1109北京大学信息学院研究生课程面向对象的分析与设计109城市之间有航线城市之间有航线城城 市市有航线有航线距离距离每周班次每周班次* * *1 1公公 司司个个 人人工工 作作薪水薪水* *公司与个人公司与个人其他例子其他例子城市之间存在航线对象城市之间存在航线对象城城 市市航线航线距离距离每周班次每周班次*2公公 司司个个 人人工工 作作薪水薪水公司与个人之间存在工作对象公司与个人之间存在工作对象1 1* *1 11 1110北京大学信息学院研究生课程面向对象的分析与设计110复杂关联表示法的转换复杂关联表示法的转换 mn类类 A A类类 B B关联类关联类属性属性操作操作类类 A A类类 B B类类 C C属性属性操作操作1 11 1mn111北京大学信息学院研究生课程面向对象的分析与设计111(2)n元关联元关联OMT的三元关联及其表示法的三元关联及其表示法问题:问题:编程语言不能直接支持编程语言不能直接支持可推广到可推广到n元关联,是否要创造更多的符号?元关联,是否要创造更多的符号?多重性表示的困难(详后)多重性表示的困难(详后)项目项目语言语言人员人员增设对象类表示多元关联增设对象类表示多元关联*项目名项目名承担者承担者语言语言 项目项目语言语言1任务任务1*人员人员*1*112北京大学信息学院研究生课程面向对象的分析与设计112在理论上,在理论上,n元关联是由若干元关联是由若干n元组形成的集合,本质上也元组形成的集合,本质上也是一个类是一个类是由每个是由每个n元组作为对象实例的类元组作为对象实例的类从实现的角度看,从实现的角度看, 用类实现用类实现n元关联是最自然的选择元关联是最自然的选择例如:用一个数据库表存放例如:用一个数据库表存放n元关联的全部元关联的全部n元组元组外键外键1 外键外键2 外键外键3 外键外键n表表1表表2表表3表表nn个表:个表:类类2类类n类类1类类3n个类:个类:N元关联113北京大学信息学院研究生课程面向对象的分析与设计113在模型中,把在模型中,把n元关联定义为一个类元关联定义为一个类并定义它与原有的各个类之间的关系并定义它与原有的各个类之间的关系都是二元关联都是二元关联类2类n类1类3n元关联元关联类2类n类1类3新增类新增类114北京大学信息学院研究生课程面向对象的分析与设计114项项 目目语语 言言人人 员员*?*是是 1 还是还是 * ?1项项 目目语语 言言任任 务务人人 员员11*1*1项项 目目语语 言言任任 务务人人 员员11*n元关联多重性表示的困难和解决办法元关联多重性表示的困难和解决办法115北京大学信息学院研究生课程面向对象的分析与设计115例:课程实习中每两名学生在一台设备上合作完成一个题目例:课程实习中每两名学生在一台设备上合作完成一个题目1)若系统要求记录和查阅哪两名学生是合作者)若系统要求记录和查阅哪两名学生是合作者建立学生类到它自身的关联(如同城市之间有航线)建立学生类到它自身的关联(如同城市之间有航线)是一个二元关联,其中学生类在关联中出现了两次是一个二元关联,其中学生类在关联中出现了两次 2)如果还要记录每组学生的实习题目和使用的设备)如果还要记录每组学生的实习题目和使用的设备建立学生、题目、设备三个类之间的建立学生、题目、设备三个类之间的4元关联元关联学生类在这个关联中出现了两次学生类在这个关联中出现了两次(3)一个类在一个关联中多次出现)一个类在一个关联中多次出现116北京大学信息学院研究生课程面向对象的分析与设计116111*1题题 目目设设 备备学学 生生学 生实实 习习11211*1题题 目目设设 备备学学 生生实实 习习假如该系统的多重性要求是:假如该系统的多重性要求是:每两名学生在一台设备上合作完成一个题目;每两名学生在一台设备上合作完成一个题目;一个题目可以供多组学生实习,可以在不同的设备上完成;一个题目可以供多组学生实习,可以在不同的设备上完成;一台设备可以供多组学生使用,可以做不同的题目。一台设备可以供多组学生使用,可以做不同的题目。 题题 目目设设 备备学学 生生学学 生生??题题 目目设设 备备学学 生生*??117北京大学信息学院研究生课程面向对象的分析与设计117关联端点的复杂情况关联端点的复杂情况 关联端点:关联的连接线与类符号相衔接的点关联端点:关联的连接线与类符号相衔接的点修饰:在端点附近标注符号或者文字,或者画成不同的形状修饰:在端点附近标注符号或者文字,或者画成不同的形状多重性(多重性(multiplicity) 有序(有序(ordered) ordered 限定符(限定符(qualifier) 详后导航性(导航性(navigability) 聚合标志(聚合标志(aggregation indicator) 角色名(角色名(rolename) 接口说明(接口说明(interface specifier) 角色名:接口说明 可变性(可变性(changeability) frozen ,addOnly 可见性(可见性(visibility)。)。 “+”、“#”或者“-” 118北京大学信息学院研究生课程面向对象的分析与设计118“限定符是关联的一种属性,它的值划定了跨过一个关联与限定符是关联的一种属性,它的值划定了跨过一个关联与一个对象相关的对象集合。一个对象相关的对象集合。”用限定符修饰的关联称为受限关联(用限定符修饰的关联称为受限关联(qualified association)UML对限定符的解释对限定符的解释类类 A限定符限定符类类 B* *01表示法表示法119北京大学信息学院研究生课程面向对象的分析与设计119BankaccountNoPerson*01Chessboardrank: Rankfile: FileSquare11Chessboard164Squarerank: intfile: intBankAccount Person*1*1订单订单产品订单行订单行Amount:Number01WorkDeskjobID: intReturnedItem* *01订单订单订单行订单行Amount:Number* *1产品产品* *1限定符的例子及其简单解决方案限定符的例子及其简单解决方案 WorkDeskjobReturnedItem* *1* *1120北京大学信息学院研究生课程面向对象的分析与设计120关联端点的修饰在关联端点的修饰在UML2的变化的变化 (1)取消了接口说明和可变性两种修饰)取消了接口说明和可变性两种修饰(2)新增两种图形方式的修饰)新增两种图形方式的修饰 :表示不可导航:表示不可导航:表示拥有权:表示拥有权(3)增加了花括号内的特性串()增加了花括号内的特性串(property string) subsets 子集合redefines 重定义union 合并ordered 有序nonunique 不唯一sequence,seq 序列121北京大学信息学院研究生课程面向对象的分析与设计121如何建立关联如何建立关联1根据问题域和系统责任发现所需要的关联根据问题域和系统责任发现所需要的关联 哪些类的对象实例之间存在着对用户业务有意义的关系?哪些类的对象实例之间存在着对用户业务有意义的关系?问题域中实际事物之间有哪些值得注意的关系?问题域中实际事物之间有哪些值得注意的关系?这种信息是否需要通过有序对(或者这种信息是否需要通过有序对(或者n n元组)来体现?元组)来体现?这些信息是否需要在系统中进行保存、管理或维护?这些信息是否需要在系统中进行保存、管理或维护?系统是否需要查阅和使用由这种关系所体现的信息?系统是否需要查阅和使用由这种关系所体现的信息?122北京大学信息学院研究生课程面向对象的分析与设计1222关联的复杂情况处理关联的复杂情况处理对关联属性和操作的处理对关联属性和操作的处理 对对n元关联的处理元关联的处理避免一个类在关联中多次出现避免一个类在关联中多次出现 多对多关联的处理多对多关联的处理 供货商客户*多对多关联多对多关联的处理的处理供需合同卖方买方.*1 1 123北京大学信息学院研究生课程面向对象的分析与设计1233为关联端点添加修饰为关联端点添加修饰 分析关联的多重性分析关联的多重性 给出关联名或角色名给出关联名或角色名识别聚合种类识别聚合种类其他修饰其他修饰导航性、特性串等导航性、特性串等根据实际情况决定是否采用根据实际情况决定是否采用限定符限定符用简单的类和关联的概念解决用简单的类和关联的概念解决4在类中设立实现关联的属性在类中设立实现关联的属性124北京大学信息学院研究生课程面向对象的分析与设计1245关联定位关联定位系统管理员系统管理员1 1计算机计算机服务器服务器客户机客户机用用 户户* *操作操作使用使用1 1* *125北京大学信息学院研究生课程面向对象的分析与设计125练习:练习:1 1、一对多的二元关联如何实现?举例说明。、一对多的二元关联如何实现?举例说明。2 2、多对多的二元关联如何实现?举例说明。、多对多的二元关联如何实现?举例说明。3 3、如何避免一个类在关联中多次出现?举例说明。、如何避免一个类在关联中多次出现?举例说明。4 4、基于前述建模结果,完成、基于前述建模结果,完成OOAOOA阶段类之间关系的构建,用阶段类之间关系的构建,用UMLUML标准表示法进标准表示法进行描述。行描述。126北京大学信息学院研究生课程面向对象的分析与设计1266.4消息消息1、什么是消息、什么是消息 (message) 现实生活中现实生活中人或其他事物之间传递的信息,例如:人或其他事物之间传递的信息,例如:人与人之间的对话、通信、发通知、留言人与人之间的对话、通信、发通知、留言交通信号灯对车辆和行人发出的信号交通信号灯对车辆和行人发出的信号人发给设备的遥控信号等人发给设备的遥控信号等软件系统中软件系统中进程或软件成分之间传送的信息进程或软件成分之间传送的信息控制信息控制信息 例如一次函数调用,或唤醒一个进程例如一次函数调用,或唤醒一个进程数据信息数据信息 例如传送一个数据文件例如传送一个数据文件面向对象的系统中面向对象的系统中(按严格封装的要求)消息是对(按严格封装的要求)消息是对象之间在行为上的唯一联系方式象之间在行为上的唯一联系方式 消息消息是向对象发出的服务请求是向对象发出的服务请求 (狭义)(狭义)消息消息是对象之间在一次交互中所传送的信息(广义是对象之间在一次交互中所传送的信息(广义) 消息有发送者和接收者,遵守共同约定的语法和语义消息有发送者和接收者,遵守共同约定的语法和语义127北京大学信息学院研究生课程面向对象的分析与设计127每个消息都是向对象发出的服务请求每个消息都是向对象发出的服务请求最常见的是函数调用最常见的是函数调用消息都是同步的。消息都是同步的。接收者执行消息所请求的服务。接收者执行消息所请求的服务。发送者等待消息处理完毕再继续执行。发送者等待消息处理完毕再继续执行。每个消息只有唯一的接收者。每个消息只有唯一的接收者。顺序系统中的消息顺序系统中的消息128北京大学信息学院研究生课程面向对象的分析与设计128并发系统中的消息并发系统中的消息控制流内部的消息控制流内部的消息与顺序系统相同与顺序系统相同控制流之间的消息控制流之间的消息情况复杂得多情况复杂得多消息有多种用途消息有多种用途服务请求,传送数据,发送通知,传递控制信号服务请求,传送数据,发送通知,传递控制信号消息有同步与异步之分消息有同步与异步之分同步消息(同步消息(synchronous messagesynchronous message)异步消息(异步消息(asynchronous messageasynchronous message) 接收者对消息有不同响应方式接收者对消息有不同响应方式创建控制流创建控制流 ,立即响应,延迟响应,不响应,立即响应,延迟响应,不响应发送者对消息处理结果有不同期待方式发送者对消息处理结果有不同期待方式等待回应,事后查看结果,不等待不查看等待回应,事后查看结果,不等待不查看消息的接收者可能不唯一消息的接收者可能不唯一定向消息(定向消息(directed messagedirected message)广播消息(广播消息(broadcast messagebroadcast message) 129北京大学信息学院研究生课程面向对象的分析与设计129消息对面向对象建模的意义消息对面向对象建模的意义消息体现了对象之间的行为依赖关系,是实现对象之间消息体现了对象之间的行为依赖关系,是实现对象之间的动态联系,使系统成为一个能运行的整体,并使各个的动态联系,使系统成为一个能运行的整体,并使各个部分能够协调工作的关键因素。部分能够协调工作的关键因素。 在顺序系统中在顺序系统中 消息体现了过程抽象的原则消息体现了过程抽象的原则一个对象的操作通过消息调用其他对象的操作一个对象的操作通过消息调用其他对象的操作在在OOOO模型中通过消息把对象操作贯穿在一起模型中通过消息把对象操作贯穿在一起系统实现后这些操作将在一个控制流中顺序地执行系统实现后这些操作将在一个控制流中顺序地执行在并发系统中在并发系统中 控制流内部的消息控制流内部的消息使系统中的每个控制流呈现出清晰的脉络使系统中的每个控制流呈现出清晰的脉络控制流之间的消息控制流之间的消息体现了控制流之间的通信关系体现了控制流之间的通信关系130北京大学信息学院研究生课程面向对象的分析与设计130OO模型需要表示消息的哪些信息模型需要表示消息的哪些信息 ?(按重要性排序)(按重要性排序) (1 1)对象之间是否存在着某种消息?)对象之间是否存在着某种消息?(2 2)这种消息是控制流内部的还是控制流之间的?)这种消息是控制流内部的还是控制流之间的?(3 3)每每一一种种消消息息是是从从发发送送者者的的哪哪个个操操作作发发出出的的?是是由由接收者的哪个操作响应和处理的?接收者的哪个操作响应和处理的?(4 4)消息是同步的还是异步的?)消息是同步的还是异步的?(5 5)发送者是否等待消息的处理结果?)发送者是否等待消息的处理结果?131北京大学信息学院研究生课程面向对象的分析与设计131以往不同的以往不同的OOA&D方法有不同的处理方式方法有不同的处理方式 例如:例如:Coad/ Yourdon方法方法 在类图中表示消息在类图中表示消息 Booch方法方法只在实例级的模型图(对象图和交互图)只在实例级的模型图(对象图和交互图)中表示消息中表示消息 UML的处理方式:的处理方式:不在类图中表示消息,只在协作图和顺序图中表示不在类图中表示消息,只在协作图和顺序图中表示理由:把类图定义为静态结构图,不表示动态信息理由:把类图定义为静态结构图,不表示动态信息问题:问题:抽象级别问题抽象级别问题局部与全局问题局部与全局问题实际上类图中仍然包含动态信息实际上类图中仍然包含动态信息操作,调用(操作,调用(call)依赖)依赖要不要在类图中表示消息要不要在类图中表示消息 132北京大学信息学院研究生课程面向对象的分析与设计132UMLUML对各种箭头的用法对各种箭头的用法同步消息(同步消息(顺序序图、协作作图)实线封封闭箭箭头依依赖(类图、包、包图、用况、用况图、构件、构件图)从消息接收者的操作返回(从消息接收者的操作返回(顺序序图)虚虚线开放箭开放箭头关关联的的导航性(航性(类图)异步消息(异步消息(顺序序图)实线开放箭开放箭头用用 途途图形符号形符号箭箭头种种类用什么符号表示消息用什么符号表示消息借用依赖关系表示类图中的消息借用依赖关系表示类图中的消息callsend控制流内部的消息控制流内部的消息控制流之间的消息控制流之间的消息133北京大学信息学院研究生课程面向对象的分析与设计133ACDEFcall call callsendBcall call 例子:例子: 缓冲区缓冲区存数据存数据取数据取数据挂起挂起唤醒唤醒生产者生产者消费者消费者callcallsend134北京大学信息学院研究生课程面向对象的分析与设计134如何建立消息(控制流内部)如何建立消息(控制流内部)策略策略“操作模拟操作模拟”和和“执行路线追踪执行路线追踪”(1 1)人为地模拟当前对象操作的执行)人为地模拟当前对象操作的执行考虑:需要其它对象(或本对象)提供什么服务考虑:需要其它对象(或本对象)提供什么服务(2 2)判断该消息是否属于同一个控制流:)判断该消息是否属于同一个控制流: 二者应该顺序地执行还是并发地执行?二者应该顺序地执行还是并发地执行? 是否引起控制流的切换?是否引起控制流的切换? 接收者是否只有通过当前消息的触发才能执行?接收者是否只有通过当前消息的触发才能执行?(3 3)向接收者画出消息连接线,填写模型规约)向接收者画出消息连接线,填写模型规约上述工作进行到当前的操作模拟执行完毕上述工作进行到当前的操作模拟执行完毕(4 4)沿沿着着控控制制流流内内部部的的每每一一种种消消息息追追踪踪到到接接收收该该消消息息的的对对象象操操作作,重重复复进进行行以以上上的的工工作作,直直到到已已发发现现的的全全部部消消息息都都经历一遍。经历一遍。针对每个主动类的每个主动操作进行上述模拟与追踪针对每个主动类的每个主动操作进行上述模拟与追踪检查系统中每个操作是否都被经历过检查系统中每个操作是否都被经历过发现遗漏的消息或多余的操作发现遗漏的消息或多余的操作135北京大学信息学院研究生课程面向对象的分析与设计135建立控制流之间消息建立控制流之间消息对每个控制流考虑以下问题:对每个控制流考虑以下问题:(1)它它在在执执行行时时,是是否否需需要要请请求求其其他他控控制制流流中中的的对对象象为为它提供某种服务?它提供某种服务?(2)它它在在执执行行时时是是否否要要向向其其他他控控制制流流中中的的对对象象提提供供或或索索取某些数据?取某些数据?(3)它它在在执执行行时时是是否否将将产产生生某某些些可可影影响响其其他他控控制制流流执执行行的事件?的事件?(4)各各个个控控制制流流的的并并发发执执行行,是是否否需需要要相相互互传传递递一一些些同同步控制信号?步控制信号?(5)一一个个控控制制流流将将在在何何种种条条件件下下中中止止执执行行?在在它它中中止止之之后将在何种条件下被唤醒?由哪个控制流唤醒?后将在何种条件下被唤醒?由哪个控制流唤醒?从上述各个角度发现控制流之间的消息从上述各个角度发现控制流之间的消息在相应的类之间画出消息连接线在相应的类之间画出消息连接线 136北京大学信息学院研究生课程面向对象的分析与设计1368.5 关于依赖关系关于依赖关系什么是依赖(什么是依赖(dependency)在以往的在以往的OO方法中,只有方法中,只有Firesmith方法用到这个概念,方法用到这个概念,其大意是:其大意是:“客户客户/服务者(服务者(client/server)关系,表示客)关系,表示客户对服务者的依赖。户对服务者的依赖。”列举的情况包括:列举的情况包括:消息传送消息传送其中客户发送消息给服务者;其中客户发送消息给服务者;聚合聚合其中聚合体(客户)的定义依赖它的构成部分其中聚合体(客户)的定义依赖它的构成部分(服务者);(服务者);继承继承其中派生类(客户)依赖它的基类(服务者)其中派生类(客户)依赖它的基类(服务者)以继承其特征。以继承其特征。结论结论:在:在Firesmith方法中,依赖并不是对象之间的一种基方法中,依赖并不是对象之间的一种基本关系,而是为了指出在消息、聚合、继承等基本关系中本关系,而是为了指出在消息、聚合、继承等基本关系中哪个模型成分是客户(依赖者),哪个模型成分是服务者哪个模型成分是客户(依赖者),哪个模型成分是服务者(被依赖者)所采用的一个概括性的术语。(被依赖者)所采用的一个概括性的术语。 137北京大学信息学院研究生课程面向对象的分析与设计137UML1.4对依赖的定义和解释对依赖的定义和解释“依赖:两个建模元素之间的一种关系,其中一个建模元依赖:两个建模元素之间的一种关系,其中一个建模元素(独立元素)的一个改变将影响到另一个建模元素(依素(独立元素)的一个改变将影响到另一个建模元素(依赖元素)。赖元素)。” “依赖是除了关联、泛化、流以及元关系之外的关系的方依赖是除了关联、泛化、流以及元关系之外的关系的方便术语。便术语。”“依赖表明一个或者一组元素的实现或者功能需要另外一依赖表明一个或者一组元素的实现或者功能需要另外一个或者一组元素出现。个或者一组元素出现。”“依赖指出了两个模型元素(或者两组模型元素)之间的依赖指出了两个模型元素(或者两组模型元素)之间的语义关系。语义关系。它指的是这些模型元素本身,而不需要一组实它指的是这些模型元素本身,而不需要一组实例来说明其含义。例来说明其含义。它指出这样一种情况:目标元素的一个它指出这样一种情况:目标元素的一个变化可能需要依赖中的源元素发生变化。变化可能需要依赖中的源元素发生变化。”Booch等等UML用户指南用户指南的解释的解释“两个事物之间的语义关系,其中一个事物(独立事物)两个事物之间的语义关系,其中一个事物(独立事物)的改变将影响到另一个事物(依赖事物)。的改变将影响到另一个事物(依赖事物)。”138北京大学信息学院研究生课程面向对象的分析与设计138UML2对依赖关系的新阐述对依赖关系的新阐述 “依赖表明模型元素之间的供方依赖表明模型元素之间的供方/客方(客方(supplier /client)关)关系,其中供方的修改可能影响到客方元素。依赖意味着,如果系,其中供方的修改可能影响到客方元素。依赖意味着,如果没有供方,客方的语义就是不完整的。没有供方,客方的语义就是不完整的。依赖在一个模型中出现依赖在一个模型中出现并不含有任何运行时的语义,它完全是以参与这种关系的模型并不含有任何运行时的语义,它完全是以参与这种关系的模型元素的名义而不是以其实例的名义给出的。元素的名义而不是以其实例的名义给出的。”“依赖是这样一个关系,它表明一个或者一组模型元素的详细依赖是这样一个关系,它表明一个或者一组模型元素的详细说明或者实现需要另外一些模型元素。这意味着,依赖元素的说明或者实现需要另外一些模型元素。这意味着,依赖元素的完整语义在语义和结构上都依赖这些供方元素的定义。完整语义在语义和结构上都依赖这些供方元素的定义。”认识:认识:1.依赖着眼于表达纸面上的模型元素之间的关系,而不是这依赖着眼于表达纸面上的模型元素之间的关系,而不是这些元素所描述的客观事物在问题域中的固有关系。些元素所描述的客观事物在问题域中的固有关系。 2.依赖基本上不能视为一种面向对象的概念。依赖基本上不能视为一种面向对象的概念。 139北京大学信息学院研究生课程面向对象的分析与设计139DependencyAbstraction PermissionUsageBindingUML1的依赖关系的依赖关系deriverefinerealizetrace callcreateinstantiateresponsibility send accessfriendimportDependencyAbstraction UsageRealizationSubstitutionUML2的依赖关系的依赖关系deriverefinetrace callcreateinstantiateresponsibility send 依赖所指的并不是单独的一种关系,而是包含了许多情况依赖所指的并不是单独的一种关系,而是包含了许多情况140北京大学信息学院研究生课程面向对象的分析与设计140关键词关键词 依赖的表示法以及其依赖的表示法以及其他外观类似的表示他外观类似的表示作为依赖关系标准作为依赖关系标准衍型的关键词衍型的关键词-instantiatecreatecallderiverefineresponsibilitysendtrace 用于依赖但未用于依赖但未明确称为标准明确称为标准衍型的关键词衍型的关键词 -abstraction realizesubstitutepermituse 附加于虚线开放附加于虚线开放箭头但不称为依箭头但不称为依赖关系的关键词赖关系的关键词 -accessapplybindextendimportincludemanifestoccurrencerepresents 各种标准衍各种标准衍型和关键词型和关键词的含义,见的含义,见教材表教材表8.18.1和表和表8.28.2141北京大学信息学院研究生课程面向对象的分析与设计141依赖关系对面向对象建模的作用依赖关系对面向对象建模的作用继承、聚合、关联、消息这四种关系中都已经蕴涵了依赖的继承、聚合、关联、消息这四种关系中都已经蕴涵了依赖的含义,不需要再用依赖关系再做重复的表示含义,不需要再用依赖关系再做重复的表示除了上述关系之外,在除了上述关系之外,在OO建模中没有多少重要的信息必须建模中没有多少重要的信息必须用依赖关系表达用依赖关系表达由于由于UML没有在类图中提供没有在类图中提供消息的表示法,可以借用依赖消息的表示法,可以借用依赖关系来表示类图中的消息关系来表示类图中的消息call send控制流内部的消息控制流内部的消息控制流之间的消息控制流之间的消息告戒:避免建立语义含糊不清的依赖关系,更要避免用这告戒:避免建立语义含糊不清的依赖关系,更要避免用这些含糊不清的依赖关系代替含义明确的些含糊不清的依赖关系代替含义明确的OO关系。关系。建立一种依赖关系,就要具体地指出它是一种什么依赖。建立一种依赖关系,就要具体地指出它是一种什么依赖。142北京大学信息学院研究生课程面向对象的分析与设计142历史上历史上OO方法采用其他模型图的三种不同情况方法采用其他模型图的三种不同情况搀杂了其他方法搀杂了其他方法OMT 对象模型对象模型+动态模型动态模型+功能模型功能模型解决不同阶段的问题解决不同阶段的问题OOSE 需求模型需求模型+健壮模型健壮模型+设计模型设计模型以面向对象方法为核心,以其他模型图作为补充以面向对象方法为核心,以其他模型图作为补充Booch方法方法 基本模型基本模型+补充模型补充模型Coad/Yourdon 类图类图+流程图流程图UML的状况和发展趋势的状况和发展趋势收集了大量的模型图收集了大量的模型图 ,从,从9种发展到种发展到13种种从不同的视角对复杂系统建模从不同的视角对复杂系统建模各种图向着健全和复杂的方向发展各种图向着健全和复杂的方向发展9.1 类图与其他模型图之间的关系类图与其他模型图之间的关系第第9 9章章 建立辅助模型建立辅助模型143北京大学信息学院研究生课程面向对象的分析与设计143在本书的面向对象建模方法中在本书的面向对象建模方法中以类图作为主要模型以类图作为主要模型基本模型基本模型用况图作为需求模型用况图作为需求模型其他模型图作为辅助模型其他模型图作为辅助模型基本模型:类图基本模型:类图模模 型型 规规 约约需求模型:需求模型:用况图用况图辅助模型:辅助模型:包图包图顺序图顺序图活动图活动图对象层对象层特征层特征层关系层关系层9.1 类图与其他模型图之间的关系类图与其他模型图之间的关系第第9 9章章 建立辅助模型建立辅助模型144北京大学信息学院研究生课程面向对象的分析与设计144UML2中的各种图中的各种图图图结构图结构图行为图行为图交互图交互图类图类图构件图构件图对象图对象图活动图活动图用况图用况图状态机图状态机图部署图部署图顺序图顺序图通讯图通讯图组合结构图组合结构图包图包图交互概览图交互概览图定时图定时图支持用户从不同的视支持用户从不同的视角进行系统建模角进行系统建模145北京大学信息学院研究生课程面向对象的分析与设计145类图:类图:基本模型,是面向对象的建模最重要的模型,必不可少。基本模型,是面向对象的建模最重要的模型,必不可少。用况图:用况图:需求模型,是开展面向对象建模的基础,提倡尽可能使用。需求模型,是开展面向对象建模的基础,提倡尽可能使用。包图:包图:辅助模型,各种模型图的组织机制,系统规模较大时使用。辅助模型,各种模型图的组织机制,系统规模较大时使用。顺序图:顺序图:辅助模型,清晰地表示一组对象之间的交互,对类图起到补充作辅助模型,清晰地表示一组对象之间的交互,对类图起到补充作用。在交互情况较复杂时使用。用。在交互情况较复杂时使用。活动图:活动图:辅助模型,可描述对象的操作流程,也可描述高层的行为。辅助模型,可描述对象的操作流程,也可描述高层的行为。状态机图:状态机图:辅助模型,对于状态与行为复杂的对象,可描述对象状态及转辅助模型,对于状态与行为复杂的对象,可描述对象状态及转移,以便更准确地定义对象的操作。移,以便更准确地定义对象的操作。构件图,部署图:构件图,部署图:辅助模型,在转入实现阶段之前,可以用它们表示如何辅助模型,在转入实现阶段之前,可以用它们表示如何组织构件以及如何把软件制品部署的各个结点(计算机)上。组织构件以及如何把软件制品部署的各个结点(计算机)上。组合结构图、交互概览图、定时图:组合结构图、交互概览图、定时图:都可以作为辅助模型,无强烈建议。都可以作为辅助模型,无强烈建议。对象图、通信图:对象图、通信图:建议不使用。建议不使用。在本书的方法中各种在本书的方法中各种UML模型图的作用模型图的作用146北京大学信息学院研究生课程面向对象的分析与设计1469.2 包图包图(package diagram)包(包(package)是一种将其他模型元素组织起来,形成较大粒是一种将其他模型元素组织起来,形成较大粒度的系统单位的通用机制。度的系统单位的通用机制。基本思想:基本思想:从不同的粒度描述和观察系统从不同的粒度描述和观察系统从宏观到微观从宏观到微观G. Miller 的的“72原则原则” 注意:注意:包是一种组织机制而不是一种基本模型元素包是一种组织机制而不是一种基本模型元素包可以嵌套包可以嵌套包中的模型元素应具有某种意义的内在联系(包中的模型元素应具有某种意义的内在联系(子系统、事子系统、事物类型、输入物类型、输入/ /输出输出)包的划分有一定的灵活性或随意性包的划分有一定的灵活性或随意性 原则:高内聚,低耦合原则:高内聚,低耦合 147北京大学信息学院研究生课程面向对象的分析与设计147名称名称包的表示法包的表示法包的压缩方式包的压缩方式包的展开方式包的展开方式 内容内容名称名称 教师教师学生学生一个包的例子一个包的例子课程管理课程管理教务管理教务管理148北京大学信息学院研究生课程面向对象的分析与设计148包之间的关系及表示法包之间的关系及表示法引入(引入(import)是包之间的一种依赖关系,表明源包中的是包之间的一种依赖关系,表明源包中的模型元素能够模型元素能够直接直接引用目标包中的模型元素。引用目标包中的模型元素。名字空间(为了避免命名冲突)名字空间(为了避免命名冲突)以包为单位划分名字空间,引用时给出路径名以包为单位划分名字空间,引用时给出路径名引入关系表明可以直接引用引入关系表明可以直接引用 Class1Class1P P3 3Class2Class2Class3Class3P P2 2import import P P1 1P P4 4访问(访问(access)关系与引入关系类似,二者之间的差别:关系与引入关系类似,二者之间的差别:目标包的元素是否可以被引入源包的其他包引入目标包的元素是否可以被引入源包的其他包引入P P5 5access import 149北京大学信息学院研究生课程面向对象的分析与设计149 Class1Class1P P1 1Class2Class2 Class1Class1P P2 2Class3Class3merge 合并(合并(merge)是包之间的一个有向关系,表明目标包的是包之间的一个有向关系,表明目标包的概念定义被合并到源包中。概念定义被合并到源包中。 在在UML自身的定义中经常被使用自身的定义中经常被使用 对大部分应用系统而言,这种层层追加的定义方式并不对大部分应用系统而言,这种层层追加的定义方式并不常见,也不值得提倡。常见,也不值得提倡。 包之间的其他关系包之间的其他关系泛化泛化没有正式的定义,只在包图的某些例子中出现没有正式的定义,只在包图的某些例子中出现依赖依赖不加任何关键词的依赖关系,没有确切的定义不加任何关键词的依赖关系,没有确切的定义150北京大学信息学院研究生课程面向对象的分析与设计150如何建立包图如何建立包图1、将模型元素打包(类图为例)、将模型元素打包(类图为例)根据类图中的各种关系:根据类图中的各种关系:一般-特殊结构 整体-部分结构 关联 消息 其他关系根据问题域和用况:根据问题域和用况:对象来源 功能类别通信频繁程度 并发和分布情况包的内容交叉问题包的内容交叉问题 教师课程管理课程管理学生课程 学籍管理学籍管理学历学位副本学生151北京大学信息学院研究生课程面向对象的分析与设计1512、包的命名、包的命名一般一般-特殊结构中的根类特殊结构中的根类整体整体-部分结构中的整体对象类部分结构中的整体对象类其他:事物、功能、来源其他:事物、功能、来源3、组织嵌套的包、组织嵌套的包72 原则原则将若干低层包合并为高层包将若干低层包合并为高层包将低层的包与零散模型元素组织到高层的包中将低层的包与零散模型元素组织到高层的包中 合并的依据合并的依据参照将模型元素打包的考虑因素参照将模型元素打包的考虑因素包之间内容是否有交叉包之间内容是否有交叉包之间的关系是否紧密包之间的关系是否紧密152北京大学信息学院研究生课程面向对象的分析与设计152A A Class1Class1Class2Class2Class3Class3Class4Class4Class5Class5 B BClass4Class4Class5Class5A A Class1Class1B BClass2Class2Class3Class3Class4Class4Class5Class5 Class1Class1A AClass2Class2Class3Class3 Class4Class4B BClass5Class5Class6Class6 C CA AB B Class1Class1C CClass2Class2Class3Class3Class5Class5Class6Class6Class4Class44、减少包的嵌套层次、减少包的嵌套层次153北京大学信息学院研究生课程面向对象的分析与设计1539.3 顺序图(顺序图(sequence diagram)顺序图顺序图是一种详细地表示对象之间行为关系的图是一种详细地表示对象之间行为关系的图 。它按时。它按时间顺序展现了一组相互协作的对象在完成一项功能时所执行间顺序展现了一组相互协作的对象在完成一项功能时所执行的操作,以及它们之间所传送的消息,从而清晰地表示对象的操作,以及它们之间所传送的消息,从而清晰地表示对象之间的行为关系以及操作和消息的时序关系。之间的行为关系以及操作和消息的时序关系。名称的演变:名称的演变:UML之前之前交互图交互图UML1顺序图顺序图协作图UML2顺序图顺序图通信图定时图交互概览图适应范围:适应范围:通常只适合表示一组相互协作的对象执行一项通常只适合表示一组相互协作的对象执行一项功能时的交互情况,包括外部可见的功能和内部功能。功能时的交互情况,包括外部可见的功能和内部功能。难以表示整个系统的交互情况。难以表示整个系统的交互情况。154北京大学信息学院研究生课程面向对象的分析与设计154主要概念及表示法主要概念及表示法:类名类名对象对象生命线生命线实体实体:类名类名返回消息返回消息同步消息同步消息异步消息异步消息名称名称名称名称丢失消息丢失消息发现消息发现消息操作操作(控制焦点)(控制焦点)执行规约执行规约消息消息(激发)(激发)155北京大学信息学院研究生课程面向对象的分析与设计155:class A:class B:class C:class D:class Et=now tt+2sec. x0 x0 else 时间约束条件对象(生命线)参与者状态不变式操作重叠自调用文字说明对象创建同步消息异步消息消息返回操作用况用况* * * * * * * * * * * * * * * * * * * * *生命线终止156北京大学信息学院研究生课程面向对象的分析与设计156组织机制与复用组织机制与复用 帧(帧(frame):即一幅图,不仅用于顺序图,也可以在其他):即一幅图,不仅用于顺序图,也可以在其他多种图中使用,特别是各种交互图。多种图中使用,特别是各种交互图。交互片段(交互片段(interaction fragment):交互中的一个片段):交互中的一个片段组合片段(组合片段(combined fragment):若干交互片段的组合):若干交互片段的组合引用(引用(reference) 交互使用(交互使用(interaction use) 标题内容区内容区操作符交互片段交互片段 1交互片段交互片段 2ref名称名称帧帧组合片段组合片段引用(交互使用)引用(交互使用)157北京大学信息学院研究生课程面向对象的分析与设计157交互使用例子例子158北京大学信息学院研究生课程面向对象的分析与设计158如何建立顺序图如何建立顺序图1决定为系统建立哪些顺序图决定为系统建立哪些顺序图基本以用况为单位,但是不绝对基本以用况为单位,但是不绝对简单的用况不必用顺序图描述简单的用况不必用顺序图描述系统内部的功能也可以用顺序图描述系统内部的功能也可以用顺序图描述2确定参加交互的对象和参与者确定参加交互的对象和参与者确定参加交互的参与者确定参加交互的参与者 找出与参与者直接交互的对象找出与参与者直接交互的对象 以消息为线索,找出与交互有关的全部对象以消息为线索,找出与交互有关的全部对象 3顺序图的绘制顺序图的绘制159北京大学信息学院研究生课程面向对象的分析与设计1599.4 活动图(活动图(activity diagram)活动图活动图是一种描述系统行为的图,它把一项行为表示成一个可是一种描述系统行为的图,它把一项行为表示成一个可以由计算机、人或者其他执行者执行的活动,通过给出活动中以由计算机、人或者其他执行者执行的活动,通过给出活动中的各个动作以及动作之间的转移关系来描述系统的行为。的各个动作以及动作之间的转移关系来描述系统的行为。UML1曾经把活动图称为状态图的变种,曾经把活动图称为状态图的变种,UML2放弃了这种放弃了这种说法。说法。 活动图起源于流程图(活动图起源于流程图(flow chart),同时借鉴了工作流、),同时借鉴了工作流、Petri网等领域的若干概念,使其表达能力比流程图更强,应网等领域的若干概念,使其表达能力比流程图更强,应用范围也更宽。用范围也更宽。 活动图可以描述各种不同的行为,例如:活动图可以描述各种不同的行为,例如:顺序执行的过程顺序执行的过程 并发执行的过程并发执行的过程一个对象的操作一个对象的操作 多个对象协同完成的一项功能多个对象协同完成的一项功能全由计算机完成的任务全由计算机完成的任务 有人员参与的业务流程有人员参与的业务流程活动图的表达能力要比流程图强得多。活动图的表达能力要比流程图强得多。 160北京大学信息学院研究生课程面向对象的分析与设计160主要概念及表示法主要概念及表示法 活动图由结点(活动图由结点(node)和边()和边(edge)两种基本元素构成)两种基本元素构成 活动结点活动结点动作、判断、合并、分岔、汇合、起点、结束动作、判断、合并、分岔、汇合、起点、结束活动边活动边控制流和对象流控制流和对象流 动作与活动动作与活动动作(动作(action)是活动的基本构成单位,是活动的基本构成单位,被看作一种原子的构造成分。被看作一种原子的构造成分。活动(活动(activity)是由一系列动作构成的,是由一系列动作构成的,是对一项系统行为的描述,它不是活动图是对一项系统行为的描述,它不是活动图的模型元素,而是一个整体概念,对应着的模型元素,而是一个整体概念,对应着整个活动图。整个活动图。如果要展开一个动作内部的细节,则:如果要展开一个动作内部的细节,则:定义为定义为“子活动子活动”UML1定义为定义为“调用行为调用行为”动作动作UML2动作名称动作名称一般动作一般动作重复动作重复动作动作名称动作名称* *在有些图中也称为顶点(在有些图中也称为顶点(vertexvertex)和弧()和弧(arcarc)161北京大学信息学院研究生课程面向对象的分析与设计161判断与合并判断与合并是一对控制结点是一对控制结点判断(判断(decision)表示执行到这一点时将判断是否满足表示执行到这一点时将判断是否满足某些条件,以决定从不同的分支选择下一个动作。某些条件,以决定从不同的分支选择下一个动作。合并(合并(merge)表示把多个分支合并到一起。表示把多个分支合并到一起。条件条件elseelse条件条件1 1elseelse条件条件2 2条件条件3 3判断判断合并合并合并与判断结合合并与判断结合162北京大学信息学院研究生课程面向对象的分析与设计162分岔与汇合分岔与汇合另一对控制结点,用来表示并发行为另一对控制结点,用来表示并发行为分岔(分岔(fork)表示一旦前面的动作结束而流入这个结点,表示一旦前面的动作结束而流入这个结点,它的每个流出边所指的动作都可以执行。它的每个流出边所指的动作都可以执行。汇合(汇合(join)表示汇合点之前有多个控制流在汇合点上表示汇合点之前有多个控制流在汇合点上需要取得同步,并汇合为一个控制流。需要取得同步,并汇合为一个控制流。 分岔分岔汇合汇合汇合与分岔结合使用汇合与分岔结合使用163北京大学信息学院研究生课程面向对象的分析与设计163起点、活动结束和流结束起点、活动结束和流结束起点(起点(initial node)表示由一个活动图所描述的整个活动表示由一个活动图所描述的整个活动的开始;的开始;活动结束(活动结束(activity final)表示活动图所描述的整个活动表示活动图所描述的整个活动到此终结;到此终结;流结束(流结束(flow final)表示活动图中一个控制流的终结,但表示活动图中一个控制流的终结,但并不是整个活动终结。并不是整个活动终结。 起点起点活动结束活动结束流结束流结束活动边活动边连接两个活动结点的有向边称为连接两个活动结点的有向边称为活动边(活动边(activity edge)包括包括控制流(控制流(control flow)和和对象流(对象流(object flow) 控制流控制流对象流对象流控制流及其连接的结点控制流及其连接的结点164北京大学信息学院研究生课程面向对象的分析与设计164一个活动图的例子一个活动图的例子 接订单接订单付款付款按订单发货按订单发货关闭订单关闭订单起点起点活动结束活动结束分岔分岔判断判断合并合并汇合汇合填写订单填写订单送发票送发票收款收款发票发票订单被拒绝订单被接受动作动作控制流控制流对象流对象流165北京大学信息学院研究生课程面向对象的分析与设计165泳道(泳道(swim lane)一种辅助机制,其作用是把活动图中的各个动作划分到一种辅助机制,其作用是把活动图中的各个动作划分到与它们的执行者相关的若干区域中,从而清晰地表现出与它们的执行者相关的若干区域中,从而清晰地表现出不同的执行者分别执行了哪些动作。不同的执行者分别执行了哪些动作。 接订单接订单付款付款按订单发货按订单发货关闭订单关闭订单填写订单填写订单送发票送发票收款收款订单被拒绝订单被拒绝订单被接受订单被接受发票发票订订单单部部财财务务部部顾顾客客166北京大学信息学院研究生课程面向对象的分析与设计166如何使用活动图如何使用活动图 描述对象的操作流程描述对象的操作流程未必每个操作未必每个操作未必十分详细未必十分详细描述系统某些局部的行为描述系统某些局部的行为判断是否真正必要判断是否真正必要描述系统外部可见的行为描述系统外部可见的行为实际上是描述用况实际上是描述用况如果用文字更清楚就用文字如果用文字更清楚就用文字描述系统的业务流程描述系统的业务流程 注意业务流程和执行过程的差别和并发描述的误差注意业务流程和执行过程的差别和并发描述的误差产生数据缓冲区满缓冲区空睡眠睡眠存数据取数据计数加1计数减1唤醒消费者唤醒生产者处理数据创建生产者创建消费者elseelse167北京大学信息学院研究生课程面向对象的分析与设计1679.5 状态机图(状态机图(state machine diagram) 状态机图:状态机图:是一种描绘系统中的对象(或者其他实体)在其生是一种描绘系统中的对象(或者其他实体)在其生命期内所经历的各种状态,状态之间的转移,发生转移的动因、命期内所经历的各种状态,状态之间的转移,发生转移的动因、条件及活动的模型图。条件及活动的模型图。别称:别称:状态图(状态图(state chart)状态转移图(状态转移图(state transition diagram,STD) 状态建模:状态建模:通过分析系统(或其局部)所经历的状态和状态之通过分析系统(或其局部)所经历的状态和状态之间的转移,用状态、转移等概念来建立系统模型。间的转移,用状态、转移等概念来建立系统模型。在某些领域可以作为一种独立的建模方法在某些领域可以作为一种独立的建模方法在面向对象建模中可以起到一种辅助作用在面向对象建模中可以起到一种辅助作用长处:长处:对状态复杂多变,并且在不同状态下呈现不同行为的对对状态复杂多变,并且在不同状态下呈现不同行为的对象,通过状态建模将有助于准确地认识和描述对象的行为象,通过状态建模将有助于准确地认识和描述对象的行为 。局限性:局限性:一个状态机图通常只适合描述系统中一个或少数几个一个状态机图通常只适合描述系统中一个或少数几个对象的状态及其转移情况,很难用于描述整个系统。对象的状态及其转移情况,很难用于描述整个系统。 168北京大学信息学院研究生课程面向对象的分析与设计168主要概念及表示法主要概念及表示法状态(状态(state)UML; “对象生命期中的一种条件或者情形,在此期间它满对象生命期中的一种条件或者情形,在此期间它满足某些条件,执行某些活动,或者等待某些事件。足某些条件,执行某些活动,或者等待某些事件。”“状态是对一种状况的模型表示,在此期间保持了某些(通常状态是对一种状况的模型表示,在此期间保持了某些(通常是固有的)条件。是固有的)条件。”对象技术词典对象技术词典 的定义的定义对象或者类的所有属性的当前值对象或者类的所有属性的当前值 。对象或者类的整体行为(例如响应消息)的某些规则所能适应对象或者类的整体行为(例如响应消息)的某些规则所能适应的(对象或类的)状况、情况、条件、形式或生存周期阶段。的(对象或类的)状况、情况、条件、形式或生存周期阶段。状态太多状态太多识别状态识别状态等价类等价类状态名称状态名称状态名称状态名称内部活动内部活动展开方式展开方式压缩方式压缩方式表示法表示法169北京大学信息学院研究生课程面向对象的分析与设计169转移(转移(transition) “源顶点和目标顶点之间的一个有向的关系。源顶点和目标顶点之间的一个有向的关系。” 对转移的形式化描述:对转移的形式化描述: := , * / 源状态源状态目标状态目标状态触发器触发器 监护约束监护约束行为表达式行为表达式 转移转移自转移自转移170北京大学信息学院研究生课程面向对象的分析与设计170组合组合状态(状态(composite state) 由若干状态组织在一起所形成的状态成为由若干状态组织在一起所形成的状态成为组合状态组合状态。包含在组合状态内部的状态称为包含在组合状态内部的状态称为子状态子状态内部不包含其他状态的状态称为内部不包含其他状态的状态称为简单状态简单状态名称名称S1S2S3名称名称组合状态的作用:组合状态的作用:使模型更清晰使模型更清晰便于复用便于复用简化图的绘制简化图的绘制展开方式展开方式压缩方式压缩方式子状态机子状态机(submachine) 可以作为一个状态单元在上层状态机中可以作为一个状态单元在上层状态机中使用的状态机使用的状态机子状态机子状态机状态(状态(submachine state) 作为一个状态单元使用作为一个状态单元使用 的子状态机的子状态机名称:类型名称:类型表示法表示法171北京大学信息学院研究生课程面向对象的分析与设计171例:一部电话机的状态机图例:一部电话机的状态机图摘机摘机活动活动空闲空闲拨号拨号超时超时连接连接无效无效振铃振铃忙忙通话通话保持保持空闲空闲172北京大学信息学院研究生课程面向对象的分析与设计172区域(区域(region) 互斥状态(互斥状态(mutually state ) 正交状态(正交状态( orthogonal state ) 名称名称S1S2S3S4区域区域互斥状态互斥状态正交状态正交状态作用:表示并发转移作用:表示并发转移 173北京大学信息学院研究生课程面向对象的分析与设计173伪状态伪状态(pseudo state) 伪状态实际上并不是一种状态,只是为了加强状态机图的伪状态实际上并不是一种状态,只是为了加强状态机图的可视化效果而引入的一些图形符号,都是结点(顶点)型可视化效果而引入的一些图形符号,都是结点(顶点)型的图形成分。的图形成分。 条件条件1 1条件条件2 2HH*选择选择接合接合分岔分岔汇合汇合初始状态初始状态终止结点终止结点进入点进入点退出点退出点浅历史浅历史深历史深历史最终状态最终状态174北京大学信息学院研究生课程面向对象的分析与设计174条件1条件2状态A触发器A触发器B触发器C状态B状态C状态D状态A触发器A条件1触发器B触发器C状态B状态C状态D触发器A条件2选择选择 与与 接合的用途接合的用途 及及 等价的表示法等价的表示法用选择和接合表示用选择和接合表示用监护约束表示用监护约束表示最终状态最终状态 和和 终止结点终止结点 的区别的区别175北京大学信息学院研究生课程面向对象的分析与设计175如何使用状态机图如何使用状态机图在某些领域中,曾经以状态建模作为主要建模手段在某些领域中,曾经以状态建模作为主要建模手段在在OO建模中,以状态机图作为认识对象行为的辅助手段建模中,以状态机图作为认识对象行为的辅助手段(1)仅对状态对行为影响复杂的对象建立状态机图)仅对状态对行为影响复杂的对象建立状态机图(2)使用状态机图的主要概念)使用状态机图的主要概念状态、转移、组合状态、伪状态状态、转移、组合状态、伪状态根据需要选用根据需要选用(3)识别对行为有不同影响的对象状态,达到如下效果:)识别对行为有不同影响的对象状态,达到如下效果:在不同的状态下对象将呈现不同的行为规则在不同的状态下对象将呈现不同的行为规则同一种状态下对象的行为规则是始终一致的。同一种状态下对象的行为规则是始终一致的。 (4)认识和描述转移)认识和描述转移触发器、监护约束、行为表达式触发器、监护约束、行为表达式(5)为类图提供有用的信息)为类图提供有用的信息状态状态属性;转移属性;转移操作操作176北京大学信息学院研究生课程面向对象的分析与设计176练习:练习:1、解释下面给出的状态图。、解释下面给出的状态图。177北京大学信息学院研究生课程面向对象的分析与设计177练习:练习:2、解释下面给出的顺序图。、解释下面给出的顺序图。178北京大学信息学院研究生课程面向对象的分析与设计1789.6 构件图构件图(component diagram) 构件图构件图是一种表示构件的组织结构和相互关系的图,用是一种表示构件的组织结构和相互关系的图,用于表达在实现时如何将系统元素组织成构件,从而支持于表达在实现时如何将系统元素组织成构件,从而支持以构件为单位进行软件制品的实现和发布。以构件为单位进行软件制品的实现和发布。UML1的构件图没有太多地反映当时构件技术的发展,的构件图没有太多地反映当时构件技术的发展,它只是着眼于把软件的逻辑蓝图转化为比特(它只是着眼于把软件的逻辑蓝图转化为比特(bit)世界)世界中的事物。中的事物。 UML2为构件图增添了许多内容,能够表示构件技术领为构件图增添了许多内容,能够表示构件技术领域的大部分常用的概念。域的大部分常用的概念。 179北京大学信息学院研究生课程面向对象的分析与设计179构件(构件(component)“一个构件表示系统中一个模块部件,它一个构件表示系统中一个模块部件,它封装了它的内容,而其表现形式在其环境中是可替换的。封装了它的内容,而其表现形式在其环境中是可替换的。”可复用构件的简称,特指按某种构件标准设计,并可在多个可复用构件的简称,特指按某种构件标准设计,并可在多个系统中重复使用的软件构造块。系统中重复使用的软件构造块。接口(接口(interface) “接口是一种类目,它表示对一组紧凑的接口是一种类目,它表示对一组紧凑的公共特征和职责的声明。一个接口说明了一个合约;实现接公共特征和职责的声明。一个接口说明了一个合约;实现接口的任何类目的实例必须履行这个合约。口的任何类目的实例必须履行这个合约。” 供接口(供接口(provided interface)实现的接口实现的接口需接口(需接口(required interface) 使用的接口使用的接口端口(端口(port) “类目的一个特征,指出类目与外部环境之间类目的一个特征,指出类目与外部环境之间或者与内部的部件之间的一个明显的交互点。或者与内部的部件之间的一个明显的交互点。” 向内,可以连接到与外部交互的内部成分向内,可以连接到与外部交互的内部成分向外,连接到供接口或者需接口,并因此而分别称为向外,连接到供接口或者需接口,并因此而分别称为供端口(供端口(provided port)需端口(需端口(required port)主要概念及表示法主要概念及表示法180北京大学信息学院研究生课程面向对象的分析与设计180OrderEntryPerson压缩方式:压缩方式:给出构给出构件的名字和对外接件的名字和对外接口,不显示其内容口,不显示其内容 把构件表示为把构件表示为衍型化类衍型化类 黑箱方式:黑箱方式:在内在内部以列表的方式部以列表的方式列出其对外接口,列出其对外接口,不显示内容不显示内容 白箱方式:白箱方式:列出构件列出构件接口、所包含的类,接口、所包含的类,以及对应的软件制品以及对应的软件制品展开方式:展开方式:以图形的以图形的方式显示构件内部成方式显示构件内部成分及其相互关系分及其相互关系 构件的表示法构件的表示法181北京大学信息学院研究生课程面向对象的分析与设计181主要概念及表示法(续)主要概念及表示法(续)实现(实现(realization)和使用()和使用(use) 用于构件与它们的接口之间用于构件与它们的接口之间构件与供接口之间为构件与供接口之间为实现实现关系关系构件与需接口之间为构件与需接口之间为使用使用关系关系接口的简略表示方式是接口的简略表示方式是“托球托球”与与“托座托座” 。当需要展现接口的细。当需要展现接口的细节时,就需要表示出它节时,就需要表示出它与构件之间的实现关系与构件之间的实现关系和使用关系。和使用关系。OrderEntryPerson等价于等价于182北京大学信息学院研究生课程面向对象的分析与设计182构件实现(构件实现(ComponentRealization) 构件中的类与这个构件之间的关系构件中的类与这个构件之间的关系表明这些类实现了这个构件表明这些类实现了这个构件等价于等价于component OrderOrderHeaderLineItemrealize realize 早期的表示法早期的表示法component OrderOrderHeaderLineItemUML2的表示法的表示法183北京大学信息学院研究生课程面向对象的分析与设计183依赖(依赖(dependence)除了除了use、realization等依赖关系之外,等依赖关系之外,UML在构件在构件图中也使用了一般的依赖关系。用于构件之间,表示一个图中也使用了一般的依赖关系。用于构件之间,表示一个构件依赖另一个构件。构件依赖另一个构件。 等价于等价于184北京大学信息学院研究生课程面向对象的分析与设计184连接件(连接件(connector)(1)委派连接件()委派连接件(delegation connector)是从构件的是从构件的端口连接到构件内部成分的连接件,它端口连接到构件内部成分的连接件,它“把构件外部把构件外部的一个合约(由它的端口说明)链接到由构件中的部的一个合约(由它的端口说明)链接到由构件中的部件对这个行为的内部实现。件对这个行为的内部实现。” 185北京大学信息学院研究生课程面向对象的分析与设计185(2)组装连接件()组装连接件(assembly connector)是两个构件之间的连是两个构件之间的连接件,它表明一个构件提供了另一个构件所需要的服务。一个接件,它表明一个构件提供了另一个构件所需要的服务。一个供接口和一个需接口之间的供接口和一个需接口之间的“托球与托座托球与托座”衔接就表示一个组衔接就表示一个组装连接件。装连接件。186北京大学信息学院研究生课程面向对象的分析与设计186如何绘制构件图如何绘制构件图用构件的图形符号表示每个构件用构件的图形符号表示每个构件UML提供了多种构件表示方式,可以有选择地采用。提供了多种构件表示方式,可以有选择地采用。 定义构件的接口定义构件的接口 考察构件中各个类的操作,发现构件的供接口和需接口考察构件中各个类的操作,发现构件的供接口和需接口定义连接件定义连接件 考察各个构件的供接口和需接口,决定每个需接口应该考察各个构件的供接口和需接口,决定每个需接口应该与哪个供接口衔接。从而定义组装连接件。与哪个供接口衔接。从而定义组装连接件。 如需表明构件接口与构件内部成分之间的衔接情况,可如需表明构件接口与构件内部成分之间的衔接情况,可以使用委派连接件。以使用委派连接件。 187北京大学信息学院研究生课程面向对象的分析与设计1879.6 UML的其他几种图的其他几种图简要介绍简要介绍对象图(对象图(object diagram) 组合结构图组合结构图 (composite structure diagram) 通信图通信图 (communication diagram) 交互概览图(交互概览图(interaction overview diagram) 定时图(定时图(timing diagram) 部署图(部署图(deployment diagram) 188北京大学信息学院研究生课程面向对象的分析与设计188对象图对象图(object diagram) UML1.3 :专门的章节和篇幅:专门的章节和篇幅UML1.4 :“对象图是一种实例图,包括对象和数据的值。对象图是一种实例图,包括对象和数据的值。静态的对象图是类图的一个实例;它显示了在一个时间点静态的对象图是类图的一个实例;它显示了在一个时间点上系统细节状态的一个快照。对象图的用处是很有限的,上系统细节状态的一个快照。对象图的用处是很有限的,主要是展示数据结构的例子主要是展示数据结构的例子”。 “工具不必支持单独形式的对象图,类图能包括对象,一工具不必支持单独形式的对象图,类图能包括对象,一个有对象而没有类的类图便是一个个有对象而没有类的类图便是一个对象图对象图。不过这个。不过这个术语对于刻画在各种方式下可能达到的特殊用法还是有用术语对于刻画在各种方式下可能达到的特殊用法还是有用的的”。“一种含有在一个时间点上的对象及其关系的图。一个对一种含有在一个时间点上的对象及其关系的图。一个对象图可以看成一个类图或者协作图的特殊形式。象图可以看成一个类图或者协作图的特殊形式。”UML2:名存实亡。没有任何一句话介绍什么是对象图,:名存实亡。没有任何一句话介绍什么是对象图,也没有任何一句话说明对象图有什么用途也没有任何一句话说明对象图有什么用途 。189北京大学信息学院研究生课程面向对象的分析与设计189组合结构图组合结构图(composite structure diagram)组合结构图组合结构图是是UML2新增的图,用来表示类、构件、协新增的图,用来表示类、构件、协作等模型元素的内部结构。作等模型元素的内部结构。 汽汽 车车: 发动机发动机: 传动装置传动装置销销 售售购买者购买者销售者销售者一个类的组合结构图一个类的组合结构图 一个协作的组合结构图一个协作的组合结构图 部件部件(part) 部件部件(part) 连接件连接件( connector ) 连接件连接件( connector ) 接口接口(nterface) 端口端口(port) 190北京大学信息学院研究生课程面向对象的分析与设计190用其他表示方式代替组合结构图用其他表示方式代替组合结构图汽汽 车车: 发动机发动机: 传动装置传动装置销销 售售购买者购买者销售者销售者发动机发动机传动装置传动装置汽车汽车购买者购买者销售者销售者销销 售售191北京大学信息学院研究生课程面向对象的分析与设计191通信图通信图(communication diagram) 通信图通信图是的是的UML2的的4种交互图之一,在种交互图之一,在UML1被称为协作图被称为协作图(collaboration diagram),),UML2改称通信图改称通信图 。UML2对通信图的全部论述:对通信图的全部论述:“通信图集中于生命线之间的交互,中心问题是其内部组通信图集中于生命线之间的交互,中心问题是其内部组织的体系结构以及如何与消息传输协调。消息的次序通过织的体系结构以及如何与消息传输协调。消息的次序通过其序列号给出。其序列号给出。”“通信图与简单的顺序图是一致的,简单的顺序图是指,通信图与简单的顺序图是一致的,简单的顺序图是指,没有交互使用和组合片段等结构机制,并且假设不会发生没有交互使用和组合片段等结构机制,并且假设不会发生消息超越(即在一个给定的消息集合内接收消息的次序与消息超越(即在一个给定的消息集合内接收消息的次序与发送消息的次序不同)或者与之无关。发送消息的次序不同)或者与之无关。”192北京大学信息学院研究生课程面向对象的分析与设计192生命线生命线(对象)(对象)带顺序号带顺序号的消息的消息消息消息帧帧通信图中的有关概念通信图中的有关概念问题:问题:消息是否只能存在于具有关联的消息是否只能存在于具有关联的类之间?(见类之间?(见1.3.7节的讨论)节的讨论)193北京大学信息学院研究生课程面向对象的分析与设计193交互概览图交互概览图(interaction overview diagram) 交互概览图是交互概览图是UML2新增加的图,是新增加的图,是4种交互图之一。种交互图之一。交互概览图采用活动图的构造方式把多个交互组织到一个交互概览图采用活动图的构造方式把多个交互组织到一个图中。它利用了活动图的各种控制结点,并把活动图的动图中。它利用了活动图的各种控制结点,并把活动图的动作结点替换为一个交互或者交互使用。每个交互或者交互作结点替换为一个交互或者交互使用。每个交互或者交互使用可以用一个顺序图来描述。通过这种方式,可以把许使用可以用一个顺序图来描述。通过这种方式,可以把许多零散的交互组织到一个图中。多零散的交互组织到一个图中。“交互概览图通过活动图的一个变种,以提升控制流概览交互概览图通过活动图的一个变种,以提升控制流概览的方式来定义交互。交互概览图的焦点集中于控制流的概的方式来定义交互。交互概览图的焦点集中于控制流的概况,其中的结点是交互或者交互使用。生命线和消息不在况,其中的结点是交互或者交互使用。生命线和消息不在概览的层次上出现。概览的层次上出现。”UML2194北京大学信息学院研究生课程面向对象的分析与设计194交互使用交互使用 时间约束时间约束 在线交互在线交互 判断判断 交互约束交互约束 例:例:195北京大学信息学院研究生课程面向对象的分析与设计195定时图定时图(timing diagram) 定时图是定时图是UML2新增的图,是新增的图,是4种交互图之一。种交互图之一。 “定时图用于表示交互,此时的主要目的是考虑时间问题。定时图用于表示交互,此时的主要目的是考虑时间问题。定时图的焦点集中于生命线内部以及它们之间沿着时间轴的定时图的焦点集中于生命线内部以及它们之间沿着时间轴的条件变化。条件变化。”“定时图既描述单个类目的行为,也描述类目间的交互,其定时图既描述单个类目的行为,也描述类目间的交互,其焦点是引起模型中生命线条件变化的事件所发生的时刻焦点是引起模型中生命线条件变化的事件所发生的时刻”一个对象在交互中可以处于不同的状态,或者遇到不同的条一个对象在交互中可以处于不同的状态,或者遇到不同的条件。定时图可以把状态(条件)发生变化的时刻以及各个状件。定时图可以把状态(条件)发生变化的时刻以及各个状态所持续的时间具体地表示出来。态所持续的时间具体地表示出来。如果把多个对象放在一个定时图中,还可以把它们之间发送如果把多个对象放在一个定时图中,还可以把它们之间发送和接收消息的时刻表现出来。和接收消息的时刻表现出来。 196北京大学信息学院研究生课程面向对象的分析与设计196生命线(对象)生命线(对象)状态或条件状态或条件持续时间约束持续时间约束时间约束时间约束事件或激发事件或激发时间标记值时间标记值计时尺计时尺一个对象的定时图一个对象的定时图197北京大学信息学院研究生课程面向对象的分析与设计197生命线生命线状态或条件状态或条件持续时间约束持续时间约束定时图的简略形式定时图的简略形式198北京大学信息学院研究生课程面向对象的分析与设计198生命线生命线状态或条件状态或条件持续时间约束持续时间约束消息消息持续时间观测持续时间观测时间约束时间约束时间观测时间观测多个对象的定时图多个对象的定时图199北京大学信息学院研究生课程面向对象的分析与设计199部署图部署图(deployment diagram) UML1的定义:的定义:“一种显示运行时的处理结点以及在其上生一种显示运行时的处理结点以及在其上生存的构件、进程及对象配置的图。存的构件、进程及对象配置的图。” UML2的定义:的定义:“部署部署图展示了制品在展示了制品在结点上根据它点上根据它们之之间部署的定部署的定义所做的定位。所做的定位。”变化:部署在结点上的软件成分不再是构件,而是变化:部署在结点上的软件成分不再是构件,而是制品制品。 200北京大学信息学院研究生课程面向对象的分析与设计200结点(结点(node) 表示一个硬件设备或执行环境,即被开发的表示一个硬件设备或执行环境,即被开发的软件制品将要部署于其上的宿主设备或环境。软件制品将要部署于其上的宿主设备或环境。 制品(制品(artifact) “制品是对软件开发过程中或系统的部署制品是对软件开发过程中或系统的部署与操作中所使用或产生的信息的物理块的说明。制品的例子与操作中所使用或产生的信息的物理块的说明。制品的例子包括模型文件、源文件、草稿、二进制可执行文件、数据库包括模型文件、源文件、草稿、二进制可执行文件、数据库表、开发交付项、或者字处理的文档、邮件消息等。表、开发交付项、或者字处理的文档、邮件消息等。” 执行环境(执行环境(ExecutionEnvironment) “执行环境是一个结执行环境是一个结点,它为以可执行制品的形式部署于其上的各类构件提供了点,它为以可执行制品的形式部署于其上的各类构件提供了一个执行环境。一个执行环境。” 各种关系各种关系部署(部署(deploy)依赖)依赖制品之间的依赖制品之间的依赖结点之间的关联结点之间的关联主要概念主要概念201北京大学信息学院研究生课程面向对象的分析与设计201(a)结点和制品(b)显式地表示部署(c)以列表方式表示部署(d)结点之间的关系(e)执行环境依赖依赖部署部署关联关联202北京大学信息学院研究生课程面向对象的分析与设计202第第10章章 模型规约(自学)模型规约(自学)模型规约(模型规约(model specification)对系统模型的详细解释与说明。对系统模型的详细解释与说明。仅靠图形文档还不足以详细、精确地表达建模阶段应该仅靠图形文档还不足以详细、精确地表达建模阶段应该给出的全部系统信息。在软件工程中,各种分析与设计给出的全部系统信息。在软件工程中,各种分析与设计方法通常需要在以图形方式表达系统模型的同时,又以方法通常需要在以图形方式表达系统模型的同时,又以文字的方式对模型进行解释和说明。文字的方式对模型进行解释和说明。 基本模型:类图基本模型:类图模模 型型 规规 约约需求模型:需求模型:用况图用况图辅助模型:辅助模型:包图包图顺序图顺序图对象层对象层特征层特征层关系层关系层203北京大学信息学院研究生课程面向对象的分析与设计203规约是给谁看的规约是给谁看的 系统主要是由人开发,还是由计算机自动生成?系统主要是由人开发,还是由计算机自动生成?采用形式语言还是自然语言采用形式语言还是自然语言 “利用形式的表示法可以避免有歧义自然语言所引起利用形式的表示法可以避免有歧义自然语言所引起的错误解释的风险。可是,它却引出由于作者和读者的错误解释的风险。可是,它却引出由于作者和读者不真正了解不真正了解OCL所引起的错误解释的风险。因此,除所引起的错误解释的风险。因此,除非你有一些对谓词演算感到舒服的读者,我愿意推荐非你有一些对谓词演算感到舒服的读者,我愿意推荐使用自然语言。使用自然语言。” M. Fowler 规约的组织规约的组织分离方式分离方式把模型图和对模型的详细描述分别组织把模型图和对模型的详细描述分别组织到不同的文档中。到不同的文档中。 混合方式混合方式凡是与模型有关的信息,不分主次、不凡是与模型有关的信息,不分主次、不分巨细、不分级别,统统放到图中进行可视化表示。分巨细、不分级别,统统放到图中进行可视化表示。 问题讨论问题讨论204北京大学信息学院研究生课程面向对象的分析与设计204UML的风格的风格混合方式混合方式 模型元素的基本表示法包含许多细节的描述模型元素的基本表示法包含许多细节的描述 通过通过注解(注解(comment)给出更多的细节)给出更多的细节注解注解注解目前大部分建模工具支持分离方式,通过模型规约来描述目前大部分建模工具支持分离方式,通过模型规约来描述模型元素的细节模型元素的细节205北京大学信息学院研究生课程面向对象的分析与设计205例例1:IBM Rational Rose对一个类的说明对一个类的说明 206北京大学信息学院研究生课程面向对象的分析与设计206例例2:北京大学:北京大学PKUModel4.0对一个属性的说明对一个属性的说明 207北京大学信息学院研究生课程面向对象的分析与设计207目标:目标:完整性完整性提供完整准确的模型信息提供完整准确的模型信息易读性易读性容易被人的阅读和理解容易被人的阅读和理解支持自动化处理支持自动化处理使尽可能多信息可自动转换为源程序使尽可能多信息可自动转换为源程序支持软件复用支持软件复用规约中的信息容易在其他系统中复用规约中的信息容易在其他系统中复用措施:措施:采用分离方式采用分离方式采用格式化的描述方式采用格式化的描述方式自然语言与形式化语言结合使用自然语言与形式化语言结合使用在类的规约中定义类之间的关系在类的规约中定义类之间的关系对于有向关系只在其源端的类中进行描述对于有向关系只在其源端的类中进行描述本书的目标与措施本书的目标与措施208北京大学信息学院研究生课程面向对象的分析与设计208对一个面向对象的系统模型建立规约,关键问题是为类图中对一个面向对象的系统模型建立规约,关键问题是为类图中的每个类给出详细、准确的定义。主要成分是的每个类给出详细、准确的定义。主要成分是类规约类规约(class specification) ,即对每个类的详细说明。,即对每个类的详细说明。类规约包括如下内容:类规约包括如下内容:1类的总体说明类的总体说明2属性说明属性说明3操作说明操作说明4对象实例说明对象实例说明209北京大学信息学院研究生课程面向对象的分析与设计209类规约组织格式类规约组织格式 类的总体说明:类的总体说明: 类名:类名: 解释:解释: 一般类:一般类:, 主动性:主动性:YesNo 持久性:持久性:YesNo 辅助模型:辅助模型: 其他:其他:属性说明:属性说明: 名称与数据类型:名称与数据类型: 属性解释:属性解释: 多态性:多态性:* *| 关联、聚合或组合:关联、聚合或组合:关联关联| 聚合聚合 |组合组合 其他:其他: 210北京大学信息学院研究生课程面向对象的分析与设计210操作说明:操作说明: 特征标记:特征标记:(: ,:): 操作解释:操作解释: 主动性:主动主动性:主动进程进程|线程线程|被动被动 多态性:多态性:* *| 消息发送:消息发送:, 操作流程:操作流程: 其他:其他: 对象实例说明:对象实例说明: 处理机:处理机:, 内存对象:内存对象:(n元数组)元数组) 外存对象:外存对象: 211北京大学信息学院研究生课程面向对象的分析与设计211其他模型图的规约其他模型图的规约 原则上,对任何一种模型图都可以通过相应地模型规约原则上,对任何一种模型图都可以通过相应地模型规约给出更详细的信息,但是在实践中需要根据各种图的具给出更详细的信息,但是在实践中需要根据各种图的具体作用而区别对待,例如:体作用而区别对待,例如:用况图用况图对每个用况的文字描述就是用况图的规约对每个用况的文字描述就是用况图的规约包图包图对每个包,必要时可以说明它的意义对每个包,必要时可以说明它的意义 活动图、状态机图、定时图活动图、状态机图、定时图这些图通常是为了详细地描这些图通常是为了详细地描述各个类的行为或者状态。它们本身的作用就是对一个类做述各个类的行为或者状态。它们本身的作用就是对一个类做进一步的辅助说明,一般不需要再对它们做更多的说明。进一步的辅助说明,一般不需要再对它们做更多的说明。 212北京大学信息学院研究生课程面向对象的分析与设计212模型规约的建立过程模型规约的建立过程 与模型图同步进行,或者分别进行与模型图同步进行,或者分别进行OOA与与OOD有不同的分工,但是没有严格的界限有不同的分工,但是没有严格的界限原则上,描述问题域中固有的事物的对象及其特征和原则上,描述问题域中固有的事物的对象及其特征和相互关系,应该在相互关系,应该在OOA阶段定义;与实现条件有关的阶段定义;与实现条件有关的对象及其特征和相互关系,应该在对象及其特征和相互关系,应该在OOD阶段定义。阶段定义。在这个原则下,有相当一部分工作既可以在在这个原则下,有相当一部分工作既可以在OOA阶段阶段进行,又可以在进行,又可以在OOD阶段进行。阶段进行。 213北京大学信息学院研究生课程面向对象的分析与设计213 以上有不当之处,请大家给与批评指正,以上有不当之处,请大家给与批评指正,谢谢大家!谢谢大家!
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号