面向对象的分析与设计课件-分析篇_第1页
面向对象的分析与设计课件-分析篇_第2页
面向对象的分析与设计课件-分析篇_第3页
面向对象的分析与设计课件-分析篇_第4页
面向对象的分析与设计课件-分析篇_第5页
已阅读5页,还剩419页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二部分:分析篇北京大学信息科学技术学院研究生课程面向对象的分析与设计主讲教师:邵维忠1第二部分:分析篇北京大学信息科学技术学院研究生课程主讲教师:课件说明这组课件是本人多年来在北京大学讲授“面向对象的分析与设计”课程时制作的,随着该领域理论与技术的发展而逐年改进。目前的最新版本所适应的教材是邵维忠、杨芙清合写的著作《面向对象的分析与设计》(清华大学出版社2013年1月)。为了促进学术交流和资源共享,现将这套课件无偿提供给国内讲授同类课程的教师和同行,欢迎他们在教学工作中使用或作为参考。课件共包括“基础篇”、“分析篇”和“设计篇”三部分,是按照54学时研究生课程制作的,各位教师可根据自己的授课对象及教学计划,对原课件进行剪裁或重新组织。北京大学信息学院邵维忠电子信箱:wzshao@2013年7月2日2课件说明2第5章 建立需求模型——用况图5.1需求分析和系统分析需求分析的确切含义是对用户需求进行分析,旨在产生一份明确、规范的需求定义。OOA的主要内容是研究问题域中与需求有关的事物,把它们抽象为系统中的对象,建立类图。确切地讲,这些工作应该叫做系统分析,而不是严格意义上的需求分析。早期的OOA缺乏一个良好的基础——对需求的规范描述。需求说明需求分析健壮分析需求模型分析模型分析过程Jacobson方法(OOSE)提出用况(usecase)概念,解决了对需求的描述问题,其分析过程如下:3第5章 建立需求模型——用况图5.1需求分析和系统分析需求问题域(抽象的来源)OOA模型(类图)抽象OOA是将问题域中的事物抽象为系统中的对象系统责任(抽象的目标)抽象的目标是系统责任——需求用况的概念解决了对需求的描述问题需求模型(用况图)4问题域抽象OOA是将问题域中的事物抽象为系统中的对象系统责任5.2基本思路问题的提出:在系统尚未存在时,如何描绘用户需要一个什么样的系统?如何规范地定义用户需求?考虑问题的思路:把系统看作一个黑箱,看它对外部的客观世界发挥什么作用,描述其外部可见的行为。系统是由一条边界包围起来的未知空间只通过有限的几个接口与外部交互系统边界以外是与系统进行交互的参与者把内外交互情况描述清楚,就确切地定义了系统的需求55.2基本思路系统是由一条边界包围起来的未知空间只通过有限系统边界系统边界:一个系统所包含的所有系统成分与系统以外各种事物的分界线。系统:被开发的计算机软硬件系统,不是指现实系统。系统成分:在OOA和OOD中定义并且在编程时加以实现的系统元素——对象对象对象对象对象对象对象参与者(人员)参与者(设备)参与者(外系统)参与者:在系统边界以外,与系统进行交互的事物——人员、设备、外系统5.3系统边界与参与者6系统边界系统边界:一个系统所包含的所有系统成分与系统以外各种系统边界:一个系统所包含的所有系统成分与系统以外各种事物的分界线。5.3系统边界与参与者责任的边界,不是物理的边界系统的范围有多大与开发者的责任有关7系统边界:一个系统所包含的所有系统成分与系统以外各种事物的分参与者:在系统边界以外,与系统进行交互的事物——人员、设备、外系统5.3系统边界与参与者建模参与者的原则是为角色建模

参与者表示在与系统交互当中对象的特定侧面,同一参与者可以表示不同类的对象。如果对象的行为有不同侧面的话,就可以被绑定到多个参与者上。示例

尽管许多不同的个人都使用自动售货机,但他们的行为却可以用参与者客户和维修技师来概括。对象Mary、Frank和Paul可能都是自动售货机的客户,同时Paul也可能是自动售货机的维修技师8参与者:在系统边界以外,与系统进行交互的事物——人员、设备、现实世界中的事物与系统之间的关系——分四种情况(1)被抽象为系统中的对象汽车飞机奖杯钟表起重机职员楼房天平(2)只作为系统外部的参与者与系统交互(4)与系统无关操作员(3)既是系统中的对象,本身又作为参与者与系统交互9现实世界中的事物与系统之间的关系——分四种情况(1)被抽象为人员——系统的直接使用者直接为系统服务的人员设备——与系统直接相联的设备为系统提供信息在系统控制下运行不与系统相连的设备×计算机设备×外系统——上级系统子系统其它系统如何发现参与者——考虑人员、设备、外系统10人员——如何发现参与者101、对于银行存取款业务来说,下面列出的人员、设备与系统哪些是系统参与者?哪些是系统内的对象?储户、柜员、大堂经理、业务经理、密码器、打印机、摄像设备、ATM机、维修技师、2、为下图界定系统边界,指出系统的参与者。练习:111、对于银行存取款业务来说,下面列出的人员、设备与系统哪些是什么是用况I.Jacobson:用况是通过使用系统功能的某些部分而使用系统的一种具体方式。每个用况包括一个由参与者发动的完整的事件过程。它详细说明了参与者和系统之间发生的交互。因此,一个用况是一个由参与者和系统在一次对话中执行的特定的相关事务序列。全部用况的集合则说明了所有可能存在的系统使用方式。《对象技术词典》:1.对一个系统或者一个应用的一种单一的使用方式所进行的描述。2.关于单个参与者在与系统的对话中所执行的处理的行为陈述序列。UML:对系统在与它的参与者交互时所能执行的一组动作序列(包括其变体)的描述。???本书的定义:用况是对参与者使用系统的一项功能时所进行的交互过程的描述,其中包含由双方交替执行的一系列动作。5.4用况(usecase)12什么是用况???本书的定义:5.4用况(usecase)术语“usecase”的准确含义——使用情况是对一项系统功能使用情况的一般描述,它对于每一次使用都普遍适应,既不是应用实例,也不是举例说明。——因此译为“用况”,而不是“用例”。几点说明:(1)一个用况只描述参与者对单独一项系统功能的使用情况;(2)通常是平铺直叙的文字描述,UML也允许其他描述方式;(3)陈述参与者和系统在交互过程中双方所做的事;(4)所描述的交互既可能由参与者发起也可能由系统发起;(5)描述彼此为对方直接地做什么事,不描述怎么做;(6)描述应力求准确,允许概括,但不要把双方的行为混在一起;(7)一个用况可以由多种参与者分别参与或共同参与。13术语“usecase”的准确含义——使用情况13识别用况的关注点:(1)用况是用来探索需求的14识别用况的关注点:(1)用况是用来探索需求的14识别用况的关注点:(2)用况是给系统外部的参与者(人而非系统)看的用人好懂的语言描述、用况要从参与者的角度命名15识别用况的关注点:(2)用况是给系统外部的参与者(人而非系统识别用况的关注点:(3)用况的含义是使用的情况,是人的使用情况,是对系统外的人有用的用况描述的功能是外部可见的行为、是对人来说有价值的行为、一个用况体现的是一项人可用的功能16识别用况的关注点:(3)用况的含义是使用的情况,是人的使用情立足开发者的视角系统要求用户输入合法的密码系统能够接受用户录入取款金额系统能够从帐户中扣除取款金额系统允许选择“打印或不打印收据”系统能够显示交易结束信息立足用户视角用户插入ATM卡系统要求输入密码用户输入密码系统验证密码正确系统提示用户输入取款金额用户输入取款金额并确认系统验证取款金额合法系统从帐户中扣除取款金额系统询问用户是否打印收据用户要求不打印收据系统显示“交易结束”,退卡(4)一个用况描述的功能是参与者与系统共同完成的识别用况的关注点:描述用况时从参与者和系统两个角度进行、只写外部可见的、不写内部的处理细节17立足用户视角(4)一个用况描述的功能是参与者与系统共同完成的内容与书写格式

:名称行为陈述(分左右栏)调用语句控制语句括号或标号收款输入开始本次收款的命令;

作好收款准备,应收款总数置为0,输出提示信息;for顾客选购的每种商品do输入商品编号;

if此种商品多于一件then输入商品数量

endif;

检索商品名称及单价;货架商品数减去售出数;if货架商品数低于下限thencall通知上货endif;计算本种商品总价并打印编号、名称、数量、单价、总价;总价累加到应收款总数;endfor;

打印应收款总数;输入顾客付款数;

计算应找回款数,打印付款数及找回款,应收款数计入账册。例18内容与书写格式:例18用况描述的三个特点:(1)明显地区分参与者的行为和系统的行为;(2)通过调用语句明确地表示一个用况对另一个用况的引用;(3)引入控制语句、括号等结构化成分,更利于表达复杂的用况内容。收款输入开始本次收款的命令;

作好收款准备,应收款总数置为0,输出提示信息;for顾客选购的每种商品do输入商品编号;

if此种商品多于一件then输入商品数量

endif;

检索商品名称及单价;货架商品数减去售出数;if货架商品数低于下限thencall通知上货endif;计算本种商品总价并打印编号、名称、数量、单价、总价;总价累加到应收款总数;endfor;

打印应收款总数;输入顾客付款数;

计算应找回款数,打印付款数及找回款,应收款数计入账册。例19用况描述的三个特点:例19如何定义用况针对单个用况的描述策略:把自己当作参与者,与设想中的系统进行交互。考虑:交互的目的是什么?需要向系统输入什么信息?希望由系统进行什么处理并从它得到何种结果?把上述交互过程描述出来。定义系统中所有的用况:(1)全面地了解和收集用户所要求的各项系统功能,找出所有的参与者,了解与各项功能相关的业务流程;(2)把用户提出的功能组织成适当的单位,每一项功能完成一项完整而相对独立的工作;(3)穷举每一类参与者所使用的每一项系统功能,定义相应的用况;(4)检查用户对系统的各项功能需求是否都通过相应的用况做了描述。20如何定义用况针对单个用况的描述策略:20参与者基用况«include»«extend»«include»用况基用况基用况被包含用况延伸用况用况5.5用况图参与者参与者模型元素:参与者用况延伸包含泛化5.5用况图21参与者基用况«include»«extend»«in用况之间的关系——包含、延伸、泛化包含22用况之间的关系包含22包含关系(include)包含关系将一个用况合并到另一个用况的行为序列中。

位于两个用况之间的包含关系意味着基用况显式地在其指定位置将另一个用况包含进来,使其成为自己的行为的一部分被包含的用况就像是子程序——它表示那些必须要重复描述的行为。

包含关系可用于提取共用的用况在具有包含关系的两个用况中,被包含的那个用况不能单独存在,它只能以实例的形式存在于包含它的用况之中23包含关系(include)包含关系将一个用况合并到另一个用况用况之间的关系——包含、延伸、泛化延伸24用况之间的关系延伸24扩展关系给用况添加增量细节。

两个用况之间的扩展关系,代表基用例可以隐式地包含另一个用况作为其行为的一部分,包含的位置间接地由另一个用况(扩展用况)确定。

与包含的区别

基用况可以独立于扩展用况单独存在。当一个用况有多个子流程时,可以用扩展关系对其进行扩展,使得此基用况的不同子流程能在不同的情形下以扩展用况的形式被激活。延伸关系(extend,扩展)25延伸关系(extend,扩展)25注意的问题1、扩展用例经常也是片段,它不能作为行为序列单独出现。2、基用例在缺少任何扩展用例的情况下也必须是合法用例。3、扩展用例要确定在基用例行为序列中的插入位置。4、在多数情况下,扩展关系有一个附加条件,只有当控制到达插入位置时条件为真,才会发生扩展行为。用况关系-包含和延伸26注意的问题用况关系-包含和延伸26用况之间的关系——包含、延伸、泛化PerformATMTransactionWithdrawDepositFunds泛化TransferFunds

27用况之间的关系PerformATMDeposit泛化Tra用况的两种复杂情况1、两个(或多个)参与者共享一个用况不同种类的参与者可能都要使用某一项系统功能,因此它们可能共享同一个用况例:系统维护登录系统管理员普通用户28用况的两种复杂情况例:系统维护登录系统管理员普通用户282、一个用况的执行,可能需要两个(甚至多个)参与者同时与系统交互。例:网上购物网上购物客户供货商292、一个用况的执行,可能需要两个(甚至多个)参与者同时与系统用况图的开发过程确定系统边界:与外部事物的界限发现参与者:所有与系统直接交互的人、设备、外系统定义用况:定义用况、描述用况建立用况之间的关系:包含、延伸、泛化确定参与者和用况之间的关系:直线连接绘制用况图:正确使用图符使用用况图的几条建议最重要的工作是对用况的描述不要过分深入地描述系统内部的行为细节运用最主要概念,加强用况内容的描述不要陷入延伸与包含、延伸点、泛化等问题的争论和辨别了解用况的局限性——主要作用是描述功能需求5.6开发过程与建议30用况图的开发过程使用用况图的几条建议5.6开发过程与建议3练习:1、下面给出了两组用况图,分别说明哪张用况图更合理,为什么?(1)(2)2、根据你对自动存取款机的使用经验,构建自动存取款机的用况图,描述其中的每一个用况。要求:(1)小组式建模(5-6人)(2)角色分工(3)电子版提交31练习:1、下面给出了两组用况图,分别说明哪张用况图更合理,为概念:对象(object)是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和施加于这组属性的一组操作构成。类(class)是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,它由一个类名、一组属性和一组操作构成。

类和对象的关系——集合与成员,对象是类的实例在一般-特殊结构中,特殊类的对象实例在逻辑上也都是其一般类的对象实例。不直接创建对象实例的类称为抽象类(abstractclass)

学生本科生研究生例:第6章发现对象,定义对象类6.1对象和类的概念及其运用32概念:在一般-特殊结构中,特殊类的对象实例在逻辑上也都是其一主动对象(activeobject)——至少有一个操作不需要接收消息就能主动执行的对象用于描述具有主动行为的事物主动对象的类叫做主动类(activeclass)被动对象(passiveobject)——每个操作都必须在消息的驱动下才能执行的对象主动操作(activeoperation)

——主动对象中至少有一个不需要接收消息就能主动执行的操作。(用于定义进程或线程的程序单位)被动对象的操作:函数、过程、例程等3333类的语义OO方法中的类在不同的语境下有两种不同的语义:1.一个类代表由它的全部对象实例所构成的群体日常语言表达中的例子:“公司里有管理人员、技术人员和市场人员”“马路上汽车很多”在OO模型中:每个类都是由它的全部对象实例所构成的集合类代表了它的全部对象实例。2.一个类代表属于该类的任意一个对象实例从大量的个体中抽象出一个概念,再运用这个概念时就可以代表其中的任何一个个体,例如:

“学生有一个学号,属于一个班级,要上课”

在OO系统模型中定义了一个类,它就可以代表它的任何一个对象实例,例如:汽车与发动机之间的聚合关系,表示任何一辆汽车都有一台发动机,任何一台发动机都可以装在0—1辆汽车上34类的语义OO方法中的类在不同的语境下有两种不同的语义:2.在类的抽象层次建模对象是现实中存在的,是面向对象方法中的核心概念,但是面向对象系统建模时,要在类的抽象层次上建立系统模型。哈利波特、金秀贤、孙俪、朱亚文。。。。。。35在类的抽象层次建模对象是现实中存在的,是面向对象方法在类的抽象层次建模理由:(1)充分性:模型中一个类描述了它的全部对象实例(2)必要性:个别对象实例不能代表其他对象实例(3)符合人类的思维方式:在概念层次上表达描述事物规律(4)与OOPL保持良好的对应(5)避免建模概念复杂化(6)消除抽象层次上的混乱36在类的抽象层次建模理由:36如何运用类和对象的概念从对象出发认识问题域将问题域中的事物抽象为对象;将具有共同特征的对象抽象为类用类以及它们之间的关系构成整个系统模型;归纳演绎在模型中用类表示属于该类的任何对象在类的规约中说明这个类将创建哪些对象实例在程序中用类定义它的全部对象编程时静态声明类的对象运行时动态创建类的对象明星资讯系统开发37如何运用类和对象的概念从对象出发认识问题域归纳演绎在模型中用类名压缩方式类名属性名:类型名······操作名()······展开方式主动类《active》类名············衍型(stereotype)用关键字或者用图标表示类名············UML2主动类表示法《主动》类名············6.2表示法在模型中用类符号来表示一个类它代表了属于该类的全部对象实例38类名压缩方式类名属性名:类型名操作名()展开方式主动类《对象名:类名压缩方式属性名=值······UML的对象表示法:细节方式对象名:类名匿名对象:类名压缩方式属性名=值······细节方式:类名用所谓“匿名对象”代表类的任何一个对象实例,然而这恰恰是类的作用。39对象名:类名压缩方式属性名=值UML的对象表示法:细节方式对6.3发现对象研究问题域亲临现场深入调查研究直接观察并向用户及相关的业务人员进行调查和交流,考察问题域中各种各样的事物、它们的特征及相互关系

听取问题域专家的见解领域专家——包括技术人员、管理者、老职员和富有经验的工人等阅读相关材料阅读各种与问题域有关的材料,学习相关行业和领域的基本知识借鉴以往的系统查阅以往在该问题域中开发过的同类系统的分析文档,吸取经验,发现可以复用的类406.3发现对象研究问题域40正确地运用抽象原则对什么进行抽象——问题域当前目标——系统责任忽略与系统责任无关的事物只注意与之有关的事物,抽象为系统中的对象

例如:学校的教师、学生、教务员和警卫忽略与系统责任无关的事物特征只注意与之有关的特征,抽象为对象的属性或操作

例如:教师的专业、职称和身高、体重判断事物是否与系统责任有关:一是看该事物是否为系统提供了一些有用的信息,或者说它是否需要系统为它保存和管理某些信息;二是看它是否向系统提供了某些服务,或者说它是否需要系统描述它的某些行为。41正确地运用抽象原则忽略与系统责任无关的事物判断事物是否与系统正确地运用抽象原则对什么进行抽象——问题域当前目标——系统责任总体原则:(1)为了尽可能全面地发现系统所需要的对象,分析员应该把握“先松后紧”的原则,宁可多余,不可遗漏。(2)对发现的对象进行筛查,去掉不必要的,进行必要的调整与合并。正确地提炼对象例如:对书的不同抽象在图书馆管理系统中以一本书作为一个对象实例在书店管理系统中以一种书作为一个对象实例42正确地运用抽象原则总体原则:正确地提炼对象42由系统管理或使用其信息,或者在系统中呈现某些行为的各类人员由系统管理或使用其信息,或者在系统中呈现某些行为的各类组织由系统进行管理的各种物品其他策略与启发(1)考虑问题域:抽象事物事件文件结构人员组织物品设备在系统中运行并提供某些功能的设备,强调动态特征例如:课程、生产计划、交易、账户需要长期记忆的事件例如:银行的取款、存款;考虑信息的复杂程度,例如:保险公司的索赔,车辆管理中的驾驶违章泛指各种表格、档案、证件、票据等文件例如:业务报表,人事档案,身份证,合同,商品订单等注意三个问题:非基础数据,同一事物的重复描述,多种事物信息组合从结构得到启发,联想到新的对象:一般-特殊结构、整体部分结构其他一切有助于发现对象的事物43由系统管理或使用其信息,或者在系统中呈现某些行为的各类人员由(2)考虑系统边界:考察在系统边界以外与系统交互的各类参与者考虑通过那些对象处理这些参与者的交互人员设备外系统(3)考虑系统责任:

检查每一项功能需求是否已有相应的对象提供,发现遗漏的对象两个角度:

一个存储人与设备的相关信息一个是处理人与设备与系统之间的交互一个角度:

系统边界,在系统中设立一个对象,处理与外系统的接口44(2)考虑系统边界:(3)考虑系统责任:两个角度:一个角度:审查与筛选(1)舍弃无用的对象通过属性判断:是否通过属性记录了某些有用的信息?通过操作判断:是否通过操作提供了某些有用的功能?二者都不是——无用问题的关键是:设立这个对象的动机

是为了通过其属性提供一些有用的信息?还是通过其操作提供一些有用的功能?或者二者兼而有之?45审查与筛选(1)舍弃无用的对象问题的关键是:设立这个对象的动(2)对象的精简只有一个属性的对象班级…………班主任姓名11班级班主任姓名…………只有一个操作的对象输出设备…………格式转换器文件格式转换输出设备……文件格式转换……«call»46(2)对象的精简班级班主任11班级只有一个操作的对象输出设备(3)与实现条件有关的对象例如:与图形用户界面(GUI)数据管理系统硬件及操作系统有关的对象——推迟到OOD考虑是否设立某个窗口对象来处理人机交互?是否设立一个进程调度对象来负责业务进程的调度?是否设立一个数据存储对象来负责对象数据的持久存储?47(3)与实现条件有关的对象是否设立某个窗口对象来处理人机交互6.4对象分类(1)将对象抽象为类,用类表示它的全部对象从对象到类的抽象过程,中间并没有一个明显的分界线,这种抽象过程常常是在无形中发生的。(2)审查和调整类的属性或操作不适合该类的全部对象实例例:“汽车”类的“乘客限量”属性——进一步划分特殊类属性及操作相同的类经过抽象,差别很大的事物可能只保留相同的特征——考虑能否合并为一个类(服装和计算机)属性及操作相似的类——考虑能否提升出一个一般类(轿车和货车、机床和抽风机)同一事物的重复描述例:“职员”和“工作证”——取消其中一个486.4对象分类(1)将对象抽象为类,用类表示它的全部对象4(3)类的命名类的名字应适合该类(及其特殊类)的全部对象实例

汽车、摩托车、马车反映个体而不是群体(学生、学生们)使用名词或带定语的名词避免市井俚语和无意义的符号使用问题域通用的词汇使用便于交流的语言文字可以用本地文字和英文双重命名49(3)类的命名49练习:1、对于谷仓和马匹来说,在什么情况下他们应该抽象为一个类?在什么情况下他们应该抽象为两个类?2、建模一个教学系统,系统应该包括哪些系统责任时,学生、学院、教师、树会被抽象为该系统中的对象?50练习:1、对于谷仓和马匹来说,在什么情况下他们应该抽象为一个基本共识

对象的属性和操作描述了对象的内部特征对象的属性和操作是对象分类的根本依据由于不同的OOPL对封装原则的体现各有不同,而OOA应该适合不同的语言,因此,在策略上不单纯以严格封装的OOPL为背景第7章定义对象的属性和操作7.1属性和操作51基本共识第7章定义对象的属性和操作7.1属性和操

属性(attribute)是用来描述对象静态特征的一个数据项。实例属性(instanceattribute)和类属性(classattribute)的区别实例属性是每个对象实例各自拥有的属性,它描述了各个对象实例自身的特征。类属性是一个类的全部对象实例共同拥有的属性,它的值被这个类的全部对象实例所共享。例如:仪表类输入电压、功率及各种规定的质量指标——类属性编号、出厂日期、精度等实际性能参数——实例属性第7章定义对象的属性和操作7.1属性和操作52第7章定义对象的属性和操作7.1属性和操

第7章定义对象的属性和操作7.1属性和操作53第7章定义对象的属性和操作7.1属性和操操作(operation)是用来描述对象动态特征(行为)的一个动作序列。近义词:方法(method),服务(service)

被动操作(passiveoperation):只有接收到消息才能执行的操作

编程语言中的函数、过程等被动成分主动操作(activeoperation):不需要接收消息就能主动执行的操作编程语言中的进程、线程等主动成分

54操作(operation)是用来描述对象动态特征(行为)的一实现级细节方式分析级细节方式7.2属性和操作的表示法类名属性名:类型名=值······操作名(参数表):返回类型······类名属性名:类型名······操作名()······用衍型表示主动操作«主动»类名······操作名()······«主动»操作名()类名······操作名()······«主动»操作名()······操作名()······«主动»操作名()55实现级细节方式分析级细节方式7.2属性和操作的表示法类名7.3定义属性(1)策略与启发按常识这个对象应该有哪些属性?人→姓名、地址、出生年月在当前的问题域中,对象应该有哪些属性?超级市场:商品→条形码根据系统责任,这个对象应具有哪些属性?

航空订票系统中的短信通知功能:乘客→手机号码建立这个对象是为了保存和管理哪些信息?商场管理系统:商品→规格、库存量为实现操作的功能,需要增设哪些属性?实时监控系统:传感器(信号采集功能)→时间间隔(报警功能)→临界值是否需要增加描述对象状态的属性?设备(关闭、待命、运行、故障)→状态用什么属性表示关联和聚合?课程→任课教师,汽车→发动机567.3定义属性(1)策略与启发56(2)审查与筛选

是否体现了以系统责任为目标的抽象

例:书→重量? 是否描述了对象本身的特征

例:课程→教师的电话号码? 是否可通过继承得到?

例:员工→姓名全职员工→姓名? 是否可从其他属性直接导出?例:人→出生年月、年龄7.3定义属性57(2)审查与筛选7.3定义属性57(4)属性的命名与定位

命名:原则与类的命名相同----名词或带定语的名词,规范的、问题域通用的词汇,不使用无意义的字符和数字 定位:针对所描述的对象适合类(及其子类)的全部对象实例7.3定义属性(3)推迟到OOD考虑的问题

规范化问题

OOA阶段不要针对RDBMS的要求进行规范化,即使已经决定要采用RDBMS,其规范化程度的高低也要根据所采用的硬件与系统软件性能做出权衡。 对象标识

用什么作为对象在系统中的唯一标识与实现技术有关。 性能问题

时空开销问题的解决可能需要增设一些属性58(4)属性的命名与定位7.3定义属性(3)推迟到OOD考虑(1)对象行为分类系统行为----在OOA阶段一般不必为之定义相应的操作例:创建、删除、复制、转存原因:一是从概念上讲,此类行为并不是对象自身所具有的,而是它所在的系统施加于它的.二是在实现时编程语言往往为这些系统行为提供了统一的支持,如果实现条件缺乏某些支持,应该在OOD阶段补流相应的操作,而不是在OOA中定义.7.4定义操作59(1)对象行为分类7.4定义操作59(1)对象行为分类对象自身的行为——封装原则引起的附加行为(算法简单的操作)在OOA阶段不必考虑。例:读、写属性值原因:一是此类操作本质上并不是对客观事物固有行为的抽象,而是由严格封装的原则所引起的,它们对刻画事物的固有行为无太大作用二是系统的实现未必采用严格封装的原则三是把如此简单而大量的操作放在对象中,OOA模型将变得臃肿而琐碎。7.4定义操作60(1)对象行为分类7.4定义操作60(1)对象行为分类对象自身的行为——算法复杂的操作

在OOA中需要重点考虑。例:计算或监控7.4定义操作61(1)对象行为分类7.4定义操作61考虑系统责任有哪些功能要求在本对象提供?例:File类中的操作有print()考虑问题域对象在问题域对应的事物有哪些行为?例:实时监控系统中的操作有warn()分析对象状态----画状态机图对象状态的转换是由哪些操作引起的?例:图书馆借阅系统中的操作有borrow()追踪操作的执行路径----画时序图模拟操作的执行,并在整个系统中跟踪(3)策略与启发62考虑系统责任(3)策略与启发62审查对象的每个操作是否真正有用是否直接提供系统责任所要求的某项功能?或者响应其它操作的请求间接地完成这种功能的某些局部操作?

调整——取消无用的操作审查操作是不是高内聚的一个操作应该只完成一项单一的、完整的功能

调整——拆分或合并(3)审查与调整63审查对象的每个操作是否真正有用(3)审查与调整63考虑问题域对象行为是被引发的,还是主动呈现的?(4)认识对象的主动行为操作执行路径的逆向追踪

按消息传递的相反方向追踪,直到发现某个操作不被任何其他对象所请求与参与者直接交互的对象操作

这些对象最有可能成为主动对象64考虑问题域(4)认识对象的主动行为操作执行路径的逆向追踪与参问题:分析阶段为什么要给出操作流程?关于OOA/OOD分工的两种不同观点(5)操作过程描述——可采用流程图或活动图yesno动作陈述框,在框内填写要执行的动作。条件判断框,给出一个判断条件。转接,用于连接各个框,表示它们之间的转接关系。入口/出口标记,指出操作的开始或结束。流程图:活动图:在流程图基础上进行了一些扩展,有更强的描述能力(第9章介绍)65问题:分析阶段为什么要给出操作流程?(5)操作过程描述yes命名:动词或动宾结构定位:需要一定的技巧与实际事物一致例:售货员——售货,商品——售出在一般-特殊结构中的位置——适合类的全部对象实例(6)操作的命名和定位商品售出从主语-谓语-宾语结构看对象操作的设置“售货员销售商品”——操作应该放在哪里?售货员售货«call»66命名:动词或动宾结构(6)操作的命名和定位商品从主语-谓语-7.5接口的概念及用途早期的面向对象方法并没有把接口作为正式的OO概念和系统成分,只是用来解释OO概念“操作是对象(类)对外提供的访问接口”20世纪90年代中后期,接口才作为一种系统成分出现在OOPL中,并且被UML作为一种模型元素UML对接口的定义及解释:“接口(interface)是一种类目(classifier),它表示对一组紧凑的公共特征和职责的声明。一个接口说明了一个合约;实现接口的任何类目的实例必须履行这个合约。”“一个给定的类目可以实现多个接口,而一个接口可以由多个不同的类目来实现。”

677.5接口的概念及用途早期的面向对象方法并没有把接口作为正为什么引入接口的概念售货员商品采购员«call»«call»针对不同的应用场合组织对象的操作售货员商品销售采购员采购把与销售有关的操作组织成销售接口把与采购有关的操作组织成采购接口可替换(例如根据销售策略的变化开发一个新的商品类)接口提供了更灵活的衔接机制68为什么引入接口的概念售货员商品采购员«call»«call»接口(interface)是由一组操作所形成的一个集合,它由一个名字和代表其中每个操作的特征标记构成。特征标记(signature)代表了一个操作,但并不具体地定义操作的实现特征标记::=<操作名>([<参数>:<类型>]{,<参数>:<类型>})[:<返回类型>]«interface»接口名称操作1()……操作n()表示法(详细方式):69接口(interface)«interface»表示法(详细接口与类的关系接口由某些类实现(提供),被另外某些类使用(需要)前者与接口的关系称为实现(realization)后者与接口的关系称为使用(use)«interface»销售查询()售出()售货员商品使用实现同一个接口对实现者而言是供接口(providedinterface)对使用者而言是需接口(requiredinterface)70接口与类的关系«interface»售货员商品使用实现同一个表示法(简略方式):——托球-托座使用者提供者提供者的供接口(托球)使用者的需接口(托座)售货员商品销售例:«interface»销售查询()售出()售货员商品71表示法(简略方式):提供者的供接口(托球)售货员商品销售例:在一个类上可以画出它所有的供接口和需接口类供接口需接口一个接口可以由多个类使用,它也可以由多个类实现类B类D类A类E类C多个类可以共同使用同一个接口正如对象的一个操作可以被多个对象调用多个类都可以分别实现同一个接口这里表示它们可以相互替换72在一个类上可以画出它所有的供接口和需接口类供接口需接口一个接接口与类的区别类既有属性又有操作;接口只是声明了一组操作,没有属性。在一个类中定义了一个操作,就要在这个类中真正地实现它;接口中的操作只是一个声明,不需要在接口中加以实现。类可以创建对象实例;接口则没有任何实例。引入接口概念的好处在接口的使用者和提供者之间建立了一种灵活的衔接机制,有利于对类、构件等软件成分进行灵活的组装和复用。将操作的声明与实现相分离,隔离了接口的使用者和提供者的相互影响。使用者只需关注接口的声明,不必关心它的实现;提供者不必关心哪些类将使用这个接口,只是根据接口的声明中所承诺的功能来实现它,并且可以有多种不同的实现。接口概念对描述构件之间的关系具有更重要的意义——教材第9章将做进一步介绍73接口与类的区别引入接口概念的好处接口概念对描述构件之间的关系接口与多继承的比较接口果真能部分地解决多继承问题吗?«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…………类D…………74接口与多继承的比较«interface»«interface练习:1、在图书借阅系统中,读者可以借阅图书,借阅操作由图书管理员完成,说明借阅操作应放置在哪一个类中?为什么?2、在图书借阅系统中,图书对象的创建操作是否需要在OOA阶段进行定义?为什么?3、用一个实际的例子描述主动对象的UML2标准表示法。4、基于自动存取款机系统需求模型,完成OOA阶段类模型的构建,用UML标准表示法进行描述。(1)从问题域、系统边界、系统责任三个方面初步发现系统对象;(2)对已发现的对象进行审查和筛选;(3)将对象抽象为类;(4)初步确定类中的属性和操作。75练习:1、在图书借阅系统中,读者可以借阅图书,借阅操作由图书对象之间的四种关系1.一般-特殊关系——又称继承关系,反映事物的分类。由这种关系可以形成一般-特殊结构。2.整体-部分关系——即聚合关系。反映事物的构成。由这种关系可以形成整体-部分结构。3.关联关系——对象实例集合(类)上的一个关系,其中的元素提供了被开发系统的应用领域中一组有意义的信息。4.消息关系——对象之间的动态联系,即一个对象在执行其操作时,请求其他对象为它执行某个操作,或者向其他对象传送某些信息。反映了事物之间的行为依赖关系。这些关系形成了类图的关系层第8章 定义对象间的关系76对象之间的四种关系这些关系形成了类图的关系层第8章 定义对象概念——同义词和

近义词继承(inheritance)是描述一般类和特殊类之间关系的最传统、最经典的术语。有时作为动词或形容词出现。一般-特殊(generalization-specialization)含义最准确,而且不容易产生误解,恰切地反映了一般类(概念)和特殊类(概念)之间的相对(二元)关系;也用于描述结构,即一般-特殊结构。缺点是书写和阅读比较累赘。泛化(generalization)取“一般-特殊”的一半,是UML的做法。比较简练,但是只反映了问题的一方面。作为关系的名称尚可,说结构是一个“泛化”则很勉强。分类(classification)接近人类日常的语言习惯,体现了类的层次划分,也作为结构的名称。在许多的场合被作为一种原则。本书主要采用“一般-特殊”这个术语8.1 一般-特殊结构相关概念:一般类、特殊类、继承、多继承、多态语义:“isakindof”77概念——同义词和近义词8.1 一般-特殊结构相关概念:一一般-特殊关系(继承关系)是类之间的一种二元关系——是一种基本的模型元素;由这种关系所形成的结构是一般-特殊结构——是一种复合的模型成分。人员股东职员顾客股东职员例:这是1个一般-特殊结构

包含5个一般特殊关系78一般-特殊关系(继承关系)是类之间的一种二元关系人员股东职员特殊类一般类的特征一般类特殊类的特征只要有这些特征必须有这些特征对象实例集合特征集合理解一般类与特殊类之间的关系定义1:如果类A具有类B的全部属性和全部操作,而且具有自己特有的某些属性或操作,则A叫做B的特殊类,B叫做A的一般类。一般类与特殊类又称父类与子类。定义2:如果类A的全部对象都是类B的对象,而且类B中存在不属于类A的对象,则A是B的特殊类,B是A的一般类。——书中证明,以上两种定义是等价的一般类和特殊类的两个定义79特殊类一般类的特征一般类特殊类的特征只要有这些特征必须有这些表示法

*对继承的属性或操作重新定义×拒绝继承多态性的表示符号一般类特殊类特殊类集中式一般类特殊类特殊类分散式人员股东职员顾客股东职员例:80表示法*对继承的属性或操作重新定义多态性的表示符号如何发现一般-特殊结构(1)学习当前领域的分类学知识(2)按常识考虑事物的分类(3)根据一般类和特殊类的两种定义(4)考察属性与操作的适应范围?公司人员姓名身份证号股份工资············?公司人员姓名身份证号······股东股份············职员工资··················股东姓名身份证号股份············职员姓名身份证号工资············股东股份············职员工资············?公司人员姓名身份证号············81如何发现一般-特殊结构(1)学习当前领域的分类学知识?公司人(5)考虑领域范围内的复用现钞收款机ABCDEFXYZ收款机ABCXY现钞收款机DEFZ领域构件82(5)考虑领域范围内的复用现钞收款机收款机现钞收款机领域构件(1)问题域是否需要这样的分类?(例:书—线装书)(2)系统责任是否需要这样的分类?(例:职员—本市职员)(3)是否符合分类学的常识?(用“isakindof”来衡量)审查与调整(4)是否真正地继承了一些属性或操作?(航标船—船)飞机飞行高度······自动导航······?汽车发动机载重量速度······运输······运输工具发动机载重量速度······飞机飞行高度······自动导航······汽车············运输······83(1)问题域是否需要这样的分类?(例:书—线装书)审查与调整一般-特殊结构的简化(1)取消没有特殊性的特殊类运输工具发动机载重量速度······飞机飞行高度······自动导航······汽车运输······运输工具发动机载重量速度······飞机飞行高度······自动导航······运输······提问:这种简化带来的问题是什么?84一般-特殊结构的简化运输工具飞机汽车运输运输工具飞机(2)增加属性简化一般-特殊结构人员············男人············女人············中国人············美国人············日本人············人员性别国籍··················85(2)增加属性简化一般-特殊结构人员男人女人中国人美国(3)取消用途单一的一般类,减少继承层次一般类存在的理由:*有两个或两个上以上的特殊类*需要用它创建对象实例*有助于软件复用设备型号生产厂······开启关闭雷达安装地点······监控······雷达型号生产厂安装地点······开启关闭监控······电子设备激光打印机传真机通讯设备设备电子设备计算机设备打印机民用通讯设备激光打印机传真机86(3)取消用途单一的一般类,减少继承层次设备雷达雷达电多继承:允许一个特殊类具有一个以上一般类的继承模式多继承特殊类的内部情况在职研究生姓名······学号班级专业······职称专业······在职单位············来自“人员”类来自“研究生”类来自“教职工”类本类中显式定义人员姓名············教职工职称专业············研究生学号班级专业············在职研究生在职单位············例:命名冲突重复继承87多继承:允许一个特殊类具有一个以上一般类的继承模式多继承特殊多态:多态是指同一个命名可具有不同的语义。OO方法中,常指在一般类中定义的属性或操作被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。多边形边数顶点数据绘图XY矩形边数*顶点数据*绘图正多边形*顶点数据*绘图例:88多态:多态是指同一个命名可具有不同的语义。OO方法中,常指在概念:聚合(aggregation),组合(composition)整体-部分(whole-part)整体对象,部分对象语义:“apartof”或“hasa”聚合关系描述了对象实例之间的构成情况,然而它的定义却是在类的抽象层次给出的。——从集合论的观点看聚合关系整体-部分关系(聚合关系)是两个类之间的二元关系,其中一个类的某些对象是另一个类的某些对象的组成部分。整体-部分结构是把若干具有聚合关系的类组织在一起所形成的结构。它是一个以类为结点,以聚合关系为边的连通有向图。8.2整体-部分结构一种基本的模型元素由若干聚合关系形成的复合模型成分89概念:8.2整体-部分结构一种基本的模型元素由若干聚合关系组合(composition)是聚合关系的一种特殊情况,它表明整体对于部分的强拥有关系,即整体与部分之间具有紧密、固定的组成关系。UML把聚合定义为关联的一种特殊情况而组合关系是聚合关系的特殊情况90组合(composition)是聚合关系的一种特殊情况,它表数量数量数量数量整体对象类部分对象类整体对象类部分对象类表示法在连接符两端通过数字或者符号给出关系双方对象实例的数量约束,称为多重性(multiplicity)

确定的整数——给出确定的数量——例如:1,2下界‥上界——给出一个范围——例如:0‥1,1‥4

*——表示多个,数量不确定下界‥*——表示多个,下界确定——例如0‥*,1‥*多重性有以下3种情况:一对一,一对多,多对多照相机1‥*0‥10‥1镜头机身191数量数量数量数量整体对象类部分对象类整体对象类部分对象类表示如何发现整体-部分结构基本策略——考察问题域中各种具有构成关系的事物(1)物理上的整体事物和它的组成部分

例:机器、设备和它的零部件(2)组织机构和它的下级组织及部门

例:公司与子公司、部门(3)团体(组织)与成员

例:公司与职员(4)一种事物在空间上包容其它事物

例:生产车间与机器(5)抽象事物的整体与部分

例:学科与分支学科、法律与法律条款(6)具体事物和它的某个抽象方面

例:人员与身份、履历92如何发现整体-部分结构(1)物理上的整体事物和它的组成部分9审查与筛选(1)是否属于问题域?例:公司职员与家庭(2)是不是系统责任的需要?例:员工与工会、救护车与急救设备(3)部分对象是否有一个以上的属性?例:汽车与车轮(规格)(4)是否有明显的整体-部分关系?例:学生与课程93审查与筛选(1)是否属于问题域?93整体-部分结构的高级应用技巧(1)简化对象的定义○○○△△△□□□□●●▲▲■■飞机有关发动机的属性与操作有关驾驶室的属性与操作111‥41飞机○○○●●发动机△△△▲▲驾驶室□□□□■■94整体-部分结构的高级应用技巧(1)简化对象的定义○飞机有关(2)支持软件复用起重机送料车机床钻床刨床车床电动机0‥110‥110‥11发动机飞机三种情况:

第一种情况是系统中已经定义了某个类,再定义的其他类具有该类的一些特征。第二种情况是系统中定义的几个类都有某些共同的特征。第三种情况是系统中只有一个类,但该类中的某些特征具有某种独立性,具有领域内复用机会。95(2)支持软件复用起重机送料车机床钻床刨床车床电动机0‥11(3)表示数量不定的组成部分订单编号卖方买方总金额成交日期…………订单行商品编号订购数量成交价金额…………1‥*1商品商品编号商品名称单价厂商…………1*一个订单可以包含一项到多达几十项商品提问:能否不要订单行,直接用商品作为订单的部分对象?96(3)表示数量不定的组成部分订单订单行1‥*1商品1*一(4)表示动态变化的对象特征人员营业员会计师经理问题:对象的属性与操作定义在系统运行中动态变化,例如:不理想的解决办法:删除、重建Shlaer/Mellor的子类型迁移“动态对象”不理想的原因:一是各个类的对象有一些共同的、不需要变化的属性,随着旧对象的删除和新对象的建立,需要由系统用户把旧对象中有用的信息重新录入到新对象中,增加了用户的负担。二是让对象反复地从一个类中删除而加入另一个类,将为数据管理带来困难。三是概念上不自然,一个对象仅仅因为一些特征发生了变化,就要让它经历一番死而复生的阴阳轮回,显得太小题大做。97(4)表示动态变化的对象特征人员营业员会计师经理问题:对象的(4)表示动态变化的对象特征问题:对象的属性与操作定义在系统运行中动态变化,例如:会计师身份经理身份营业员身份人员身份1m或人员营业员身份0‥1会计师身份0‥10‥1111解:经理身份思考:自动存取款机系统是否存在这样的问题?98(4)表示动态变化的对象特征问题:对象的属性与操作定义在系统“三友”对问题的描述及解决方法“大多数面向对象的编程语言是静态类型化的,这意味着在创建对象时就限定了对象的类型。但是随着时间的推移对象还可能扮演不同的角色。”例子:候选者,雇员,退休者person«type»candidate«type»employee«type»retiree“对象在其生命期内动态地获得或者丢弃类型”1999年第一版person«dynamic»candidate«dynamic»employee«dynamic»retiree2005年第二版总之都是围绕着继承想主意,没有运用聚合。99“三友”对问题的描述及解决方法person«type»«ty从上述例子得到的启示:整体-部分结构有很强的表达能力运用OO方法的基本概念可以自然而有效地解决许多在其他方法中用扩充概念解决的问题加强对基本概念的运用,不要轻易创造新的扩充概念person0‥10‥10‥1111用聚合概念解决:CandidateRoleEmployeeRoleRetireeRole100从上述例子得到的启示:person0‥10‥10‥1111用用一般-特殊结构两种结构的变通汽车制冷设备冷藏车解释:继承和聚合都是使一类对象获得另一类对象的特征,只是观察问题的角度不同。两种结构同用汽车冷藏车制冷设备冷藏车汽车制冷设备用整体-部分结构101用一般-特殊结构两种结构的变通汽车制冷设备冷藏车解释:两练习:1、对于门这个类来说,有木门、铁门、玻璃门之分,也有电动门、转门、拉门之分,如何建模?2、在在线图书销售系统中,图书包括封面、目录和正文三个部分,封面上有图书的名称、出版社和作者,目录中有章和节的标题,如何建模?3、如果多个类中都存在一些相同的属性和操作,此时可以选择几种建模方案?举例说明。4、基于前述建模结果,完成OOA阶段类之间关系的构建,用UML标准表示法进行描述。102练习:1、对于门这个类来说,有木门、铁门、玻璃门之分,也有电概念:关联(association)是两个或者多个类上的一个关系(即这些类的对象实例集合的笛卡儿积的一个子集合),其中的元素提供了被开发系统的应用领域中一组有意义的信息。二元关联(binaryassociation)n元关联(n-aryassociation)关联的实例——有序对或n元组,又称链(link)关联是这些有序对或n元组的集合关联位于类的抽象层次,链位于对象的抽象层次8.3关联提问:一个n元关联中所涉及的类的数量是否可以小于n?103概念:8.3关联提问:一个n元关联中所涉及的类的数量是否可二元关联的表示法城市**有航线(d)城市之间有航线教师学生1*指导论文教师为学生指导论文例子类A名称类B数量数量角色角色111***多重性的表示一对一:一对多:多对多:数量约束固定数值:例如1数值范围:例如0‥1符号:*表示多个0‥*=*1‥*表示1到多个104二元关联的表示法城市**有航线(d)城市之间有航线教师二元关联的实现(一对一和一对多)编程语言:在程序中用两个类分别实现关联两端的类;以数量约束为“1”的类的对象实例为目标,在关联另一端的类中设置一个指向该目标的指针或者对象标识(源类的属性)。教师1授课课程*主讲教师谁?关系数据库:用两个数据库表分别实现关联两端的类;以数量约束为“1”的类对应的表的元组为目标,在关联另一端的类对应的表中设置一个指向该目标的外键(目标的主键)。教师课程105二元关联的实现(一对一和一对多)编程语言:在程序中用两个类分二元关联的实现(多对多)问题:任何一端的一个对象实例的要和另一端多个对象实例发生关联,而且数量不确定。实现时不知道该设立多少个指针(或者对象标识、外键)才能够用。

课程学生**编程语言:用两个类分别实现关联两端的类,同时用另外一个类来实现它们之间的关联。实现关联的类含有两个属性,分别是指向两端的类的对象实例的指针或者对象标识。

增加一个类关系数据库:用两个数据库表分别实现关联两端的类,同时用另外一个数据库表来实现它们之间的关联。实现关联的数据库表含有两个属性,它们分别是指向两端的表的元组的外键。课程课程-学生学生106二元关联的实现(多对多)问题:任何一端的一个对象实例的要和另运用简单的概念及表示法解决各种复杂的关联问题教师学生1*指导论文(1)带有属性和操作的关联有某些信息需要描述OMT(及UML)的概念扩充关联类(associationclass)

类1类2属性……操作……例子教师学生1*指导论文论文题目答辩时间成绩问题:增加了概念的复杂性,缺乏编程语言支持107运用简单的概念及表示法解决各种复杂的关联问题教师学生1*指导换一种思路考虑问题:两类对象之间的关联带有某些复杂的信息,说明它们之间存在着某种事物(尽管可能是抽象事物)。用普通的对象概念来表示这种事物,简化关联,减少概念,并加强与OOPL的对应。教师学生1*指导论文论文题目答辩时间成绩*论文题目答辩时间成绩……教师学生1指导毕业论文11写作例1108换一种思路考虑问题:教师学生1*指导论文论文题目*论文题目教城市之间有航线城市有航线距离每周班次**1公司个人工作薪水*公司与个人其他例子城市之间存在航线对象城市航线距离每周班次*2公司个人工作薪水公司与个人之间存在工作对象1*11109城市之间有航线城市有航线**1公司个人工作*公司与个复杂关联表示法的转换

mn类A类B关联类属性操作类A类B类C属性操作11mn110复杂关联表示法的转换mn类A类B关联类类A类B类(2)n元关联OMT的三元关联及其表示法问题:编程语言不能直接支持可推广到n元关联,是否要创造更多的符号?多重性表示的困难(详后)项目语言人员增设对象类表示多元关联*项目名承担者语言……项目语言1任务1*人员*1***111(2)n元关联OMT的三元关联及其表示法问题:项目语言人员增在理论上,n元关联是由若干n元组形成的集合,本质上也是一个类——是由每个n元组作为对象实例的类从实现的角度看,用类实现n元关联是最自然的选择例如:用一个数据库表存放n元关联的全部n元组外键1外键2外键3……外键n……表1表2表3表nn个表:类2类n类1类3……n个类:N元关联112在理论上,n元关联是由若干n元组形成的集合,本质上也是一个类在模型中,把n元关联定义为一个类并定义它与原有的各个类之间的关系——都是二元关联类2……类n类1类3n元关联类2……类n类1类3新增类113在模型中,把n元关联定义为一个类类2……类n类1类3n元关联项目语言人员*?*是1还是*?1项目语言任务人员11***1*1项目语言任务人员11***n元关联多重性表示的困难和解决办法114项目语言人员*?*1项目语言任务人员11***例:课程实习中每两名学生在一台设备上合作完成一个题目1)若系统要求记录和查阅哪两名学生是合作者建立学生类到它自身的关联(如同城市之间有航线)是一个二元关联,其中学生类在关联中出现了两次2)如果还要记录每组学生的实习题目和使用的设备建立学生、题目、设备三个类之间的4元关联学生类在这个关联中出现了两次(3)一个类在一个关联中多次出现115例:课程实习中每两名学生在一台设备上合作完成一个题目(3)一111**1题目设备学生学生实习11211**1题目设备学生实习假如该系统的多重性要求是:每两名学生在一台设备上合作完成一个题目;一个题目可以供多组学生实习,可以在不同的设备上完成;一台设备可以供多组学生使用,可以做不同的题目。

题目设备学生学生????题目设备学生**???116111**1题目设备学生学生实习11211**1题关联端点的复杂情况关联端点:关联的连接线与类符号相衔接的点修饰:在端点附近标注符号或者文字,或者画成不同的形状多重性(multiplicity)√

有序(ordered){ordered}限定符(qualifier)详后导航性(navigability)聚合标志(aggregationindicator)√

角色名(rolename)

接口说明(interfacespecifier)角色名:接口说明可变性(changeability){frozen},{addOnly}可见性(visibility)。“+”、“#”或者“-”117关联端点的复杂情况多重性(multiplicity)“限定符是关联的一种属性,它的值划定了跨过一个关联与一个对象相关的对象集合。”用限定符修饰的关联称为受限关联(qualifiedassociation)UML对限定符的解释类A限定符类B*0‥1表示法118“限定符是关联的一种属性,它的值划定了跨过一个关联与一个对象BankaccountNoPerson*0‥1Chessboardrank:Rankfile:FileSquare11Chessboard164Squarerank:intfile:intBankAccountPerson*1*1订单产品订单行Amount:Number0‥1WorkDeskjobID:intReturnedItem*0‥1订单订单行Amount:Number*1产品*1限定符的例子及其简单解决方案WorkDeskjobReturnedItem*1*1119BankaccountNoPerson*0‥1Chessbo关联端点的修饰在UML2的变化(1)取消了接口说明和可变性两种修饰(2)新增两种图形方式的修饰╳:表示不可导航●:表示拥有权(3)增加了花括号内的特性串(propertystring)

{subsets}子集合{redefines}重定义{union}合并{ordered}有序{nonunique}不唯一{sequence},{seq}序列120关联端点的修饰在UML2的变化(1)取消了接口说明和可变性如何建立关联1.根据问题域和系统责任发现所需要的关联

哪些类的对象实例之间存在着对用户业务有意义的关系?·问题域中实际事物之间有哪些值得注意的关系?·这种信息是否需要通过有序对(或者n元组)来体现?·这些信息是否需要在系统中进行保存、管理或维护?·系统是否需要查阅和使用由这种关系所体现的信息?121如何建立关联1212.关联的复杂情况处理·对关联属性和操作的处理

·对n元关联的处理·避免一个类在关联中多次出现

·多对多关联的处理

供货商客户**多

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论