面向对象程学设计部分课件类图.ppt_第1页
面向对象程学设计部分课件类图.ppt_第2页
面向对象程学设计部分课件类图.ppt_第3页
面向对象程学设计部分课件类图.ppt_第4页
面向对象程学设计部分课件类图.ppt_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

第4章 对系统的结构建模(类图),4.1.1 概念与表示法 对象是具有明确语义边界并封装了状态和行为的实体,由一组属性和作用在这组属性上的一组操作构成,是构成系统的一个基本单位,它用于描述客观事物。 类是对一组具有相同属性和操作的一组对象的抽象描述。 类为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分。 一个类的所有对象具有相同的属性,是指所有对象的属性的个数、名称、数据类型都相同,各个对象的属性值则可以互不相同,并且随着程序的执行而变化。至于操作,对于一个类的所有对象都是一样的,即所有的对象共同使用它们的类定义中给出的操作。 由一个类生成的一个对象可以扮演不同的角色*。 当一个对象扮演一个具体角色时,它展现给世界一个外观,与对象交互的客户根据对象在某时所扮演的角色而期望一定的行为*。 一个类的一个角色是在特定的语境下该类的对象所呈现的行为。,4.1 对象与类,类 名,普通类,表示法:在模型中用类符号来表示一个类, 它代表属于该类的全部对象实例。,最上面的那个名称栏包含类名; 中间的分栏包含属性列表; 最下面的分栏包含操作列表。 每个属性和操作各占一行,,对象,在使用用况图完成捕获与描述需求后,已经对问题域和系统责任进行了分析,把用户的的需求落实到了各个用况之中。 由于用况模型仅描述了系统内外的交互情况,从其中识别出来的对象与类肯定是不够全面的。 在识别对象与类时,问题域和系统责任仍是工作的基础。因为二者从不同的角度告诉分析员应该设立哪些对象。,412 识别对象与类,5,1、研究问题域 考虑问题域,侧重于客观存在的事物与系统中对象的映射。 可以启发分析员发现对象的因素包括:人员、组织机构、物品、设备、事件(如索赔、上访、交易)、表格、日志、报告和结构等。 其中的结构可能是多种多样的,例如,在概念类别上,汽车之上有车辆,之下可细分为客车和轿车,左右有摩托车和拖拉机,之内有发动机。它还可作成车队的一个成分。,2考虑系统边界 1) 把一些人员和设备看作问题域范畴以内的事物,系统中的对象是对它们的抽象描述。侧重于以系统中的对象模拟现实中的人和设备。 2) 对系统边界之外与系统进行交互的参与者,系统中需要设立相应的对象处理系统与这些实际的人和设备的交互,侧重于以系统中的对象处理现实中的人和设备与系统的交互。 3) 在系统中设立一个对象,处理与外系统的接口。,人员,设备,外系统,从不同的角度考虑人员和设备,3考虑系统责任 对照系统责任所要求的每一项功能,查看是否可以由现有的对象完成这些功能。如果发现某些功能在现有的任何对象中都不能提供,则可启发我们发现问题域中某些遗漏的对象。 如果已经建立了用况模型,考虑执行下列的附加步骤: 使用用况产生场景。 使用场景寻找已错过的类。 4.名词技术 从名词到对象或类通常有一对一的映射。运用名词、代词和名词短语识别对象和类(寻找“现实世界”的对象和类)。 用单个的专有名词或代词(Jim、他、她、雇员号5、我的工作站、我的家)以及直接引用的名词(第六个参赛者、第一百万次购买)识别对象。用复数名词(人们、顾客们、开发商们、用户们)以及普通名词(人、顾客、雇员、工作站)来识别类。,413 审查与筛选,(1)舍弃无用的对象 通过属性判断: 是否通过属性记录了某些有用的信息*? 通过操作判断: 是否通过操作提供了某些有用的功能* ? 二者都不是无用 通常,对象应该具有多个属性和操作。也存在对象没有属性仅提供操作,或有属性无操作的情况。,9,(2)对象的精简 只有一个属性的对象,只有一个操作的对象,班级 ,班主任 姓名,1,1,班级 班主任姓名 ,输出设备 ,格式转换器 文件格式转换,输出设备 文件格式转换 ,(3)对职责过多的类进行分解 (4)与实现条件有关的对象,推迟到OOD考虑 系统责任所要求的某些功能例如系统安装、配置、信息备份、浏览可能无法从问题域中找到相应的对象来提供这些功能,可在设计阶段考虑专门为它们增加一些对象,既把它们推迟到设计阶段考虑。 系统责任要求的某些功能可能与实现环境有关,也推迟到设计阶段考虑。例如:与图形用户界面(GUI)系统、数据管理系统、硬件和操作系统有关的对象。,(5)名词技术 在问题域中名词不总是类或对象。筛选名词列表,识别超出系统范围的事物。 通常用几个不同的名词或名词短语描述同样的事(概念或思想)。必须选定一个词,而将可替代的词排除。例如,“工作地点”和“办公室”在几乎所有的问题域中可能是相同的概念。 问题域中的某些事物实际上是另一种事物的附属品和一定意义上的抽象。例如,工作证对职员、车辆执照对车辆、图书索引卡片对图书都是这样的关系。 有些时候,用相同的名词捕获两个不同的概念;这就必须产生一个新词(补充对象),以确保每一个词捕获一个概念或“事物”。 如果用不同的词汇描述在不同的语义领域中的同一实际事物(即捕获不同的概念),就需要把这样的概念作为不同的对象。,414 抽象出类,1对象分类 先使用问题域知识从对象中识别出类,然后依据对象和类的定义,使用概括来寻找两个或多个共享相同特征的对象,概括这些共同的方面来形成类。 2、对类进行调整 (1)类的属性或操作不适合该类的全部对象 例:“汽车”类的“乘客限量”属性,不适合于吊车、铲车。 问题:分类不够详细 进一步划分特殊类 (2)属性及操作相同的类* 经过抽象,差别很大的事物可能只保留相同的特征 考虑能否合并为一个类,如计算机与吸尘器 (3)属性及操作相似的类* 考虑能否提升出一个一般类*,或形成整体部分结构。 例:轿车、货车,抽象出汽车;机床与鼓风机用电机做成分. (4)同一事物的重复描述 例:“职员”和“工作证” 取消其中一个,415认识对象的主动行为并识别主动对象,主动对象是具有主动行为的对象,在设计阶段是拥有线程或进程并能够启动控制活动的对象。主动类是其实例为主动对象的类。 识别主动对象的策略: (1)考虑问题域 哪些对象需呈现主动行为*?-按定义 (2)考虑系统责任 根据系统责任观察系统功能的构成层次,重点考虑完成最外层功能的对象是否应定义为主动对象。 (3)考虑系统边界 哪些对象与参与者交互? 如果一个交互是由参与者发起的,第一个处理该交互的对象是主动对象 (4)进行操作执行路线的逆向追踪。,在分析阶段不能完全确定主动对象,active 类 名,类 名,主动类,主动对象,类 名,主动类的线框是粗黑的,或在主动类名之前要加一个主动性标记 active; 在尚未确定是不是主动对象之前,暂时用普通对象的类符号表示。,416 类的命名 适合该类及其特殊类的全部对象实例* 汽车加摩托车-机动车;还有马车-车辆 反映个体而不是群体* 书-书籍;船-船舶* 使用名词,或带有定语的名词 ,避免无意义的符号 如线装书 考虑使用适当种类的语言文字对类命名。 在中国:可用中、英文双重命名*,417 建立类图的对象层 用类符号表示每个对象类 填写类描述模板 若发现新的属性与操作、关系,可以随时加到类符号中。,属性是用来描述对象静态特征的一个数据项 注意:属性是与问题高度相关的*。 从技术观点上,属性是一些变量(数据项或状态信息),包含它的每一个对象(实例)都具有自己的值。 按照面向对象方法的封装原则,一个对象的属性和操作是紧密结合的,对象的属性只能由这个对象的操作存取。 可见性 属性名:类型 =初始值 可见性分为+(公有的)、#(受保护的)或 -(私有的)、 (包,只有在同一包中声明的类能够使用这一属性)。 在对象/类中,必须给每一个属性一个唯一的名字。 属性的类型可以是常见的基本数据类型,也可以是自己定义的类型。,4.2 定义属性与操作,421 定义属性,通过在类范围属性名和类型表达式画下划线的方式,表示类范围的属性,否则属性是实例范围的。,类 名,普通类,属性1 属性n,操作1 操作m,OO方法中有“实例属性”和“类属性”的概念之分。上面谈到的只是实例属性。 类属性是描述类的所有对象共同特征的一个数据项,对于任何对象实例,它的属性值都是相同的。 C+中冠以static的成员变量是类属性,这样的属性对一个类的全部对象实例只是一份共同的数据空间,所以对任何对象而言,该属性的值总是相同的。 实例属性和类属性各有不同的用途*。,识别属性*,按常识这个对象应该有哪些属性? 在当前的问题域中,对象应该有哪些属性? 根据系统责任,这个对象应具有哪些属性*? 如信用卡的使用 建立这个对象是为了保存和管理哪些信息? 对象为了完成其功能,需要增设哪些属性? 对象是否需要通过专设的属性区别其状态*? 如设备 用什么属性表示聚合和关联?-不建议 可利用需求文档中的形容词或所有格短语*。 若一个属性的结构较为复杂(即不仅仅是一些简单的数字或文本),可考虑把其作为对象。,筛选 * 是否体现了以系统责任为目标的抽象;例:书的重量* ? 是否描述对象本身的特征;例:课程电话号码* ? 一个属性所对应的一个事物性质的粒度要适当。 例如人的通信地址,包括国家、省、城市、街道、门牌号码等内容,但这些内容在通信地址这个概念上是不可分的。在定义“人员”对象的属性时,应该使用一个属性“通信地址”,而不应把有关通信地址的各项内容拆散开用多个属性来描述。 若一个对象与另一个对象有关系,其属性必须捕获该对象的性质,而不是关系或关系中的其他对象的性质; 如属性必须是整个实体的特征,而不是其成分的特征* 是否可通过继承得到? 可以从其它属性直接导出的属性*; 与实现有关的因素,推迟到OOD考虑(规范化、对象标识、性能问题),属性的命名和定位 命名:原则与类的命名相同 定位:针对所描述的对象,适合全部对象实例。,属性的详细说明 把每个属性都填写到相应的类符号中去,并在相应的类描述模板中进行详细说明。,21,对象行为分类 (1)系统行为 例:创建、删除、复制、转存 (2)对象自身的行为算法简单的操作 例:读、写属性值 (3)对象自身的行为算法复杂的操作 计算或监控,4.2.2 操作,操作是类的对象被要求执行的服务。 可见性 操作名(参数列表):返回类型 可见性的取值为+(公有的)、#(受保护的) 、-(私有的)或(包) 。 内部操作和外部操作, 特征标记 类范围操作(静态操作)是用来创造实例或者操纵静态属性的操作。 例如C+中的前面冠以static的成员函数,就是类范围操作 表示法 类范围的操作用带下划线的名字和类型表达式串表示。实例范围操作是默认的,对其不用标记。,概念与表示法,如果想要在OOA阶段记录方法的详细文字描述或算法,则把它们放在类描述模板中,如有必要也可放在注释中。该项工作应该在OOD阶段完成。 识别操作 诸如创建(创建并初始化一个新对象)、连接(将一个对象与另一个对象连接)、访问(得到或设置属性值)、断开连接(将一个对象与另一个对象的连接断开)和删除一个对象之类的操作都属于在算法上是简单的操作,在OOA不予以考虑。 在OOA中,只对识别那些必须由对象提供的、在算法上复杂的业务操作(如要进行某些计算或监控操作 )感兴趣。,(1)考虑系统责任 有哪些功能要求在本对象提供*? (2)考虑问题域 对象在问题域对应的事物有哪些行为* ? (3)分析对象状态 在每种状态下对象可能发生什么行为?对象状态的转换,是由哪些操作引起的?-状态图讲述 (4)追踪操作的执行路线 模拟操作的执行,并在整个系统中跟踪* 。 (5)用动词识别操作 (6)查看每一个属性,因为要用对象的操作来对其进行操纵,定义操作的策略与启发,25,审查对象的每个操作 是否真正有用 是否直接提供系统责任所要求的某项功能? 或者 响应其它操作的请求,间接地完成某种功能的某些局部操作? 调整取消无用的操作 是不是高内聚的 一个操作应该只完成一项单一的、相对完整的功能* 调整拆分 或 合并,审查与调整,命名:动词或动宾结构 定位: 与实际事物一致 例:售货员售货*,商品售出* 在泛化中的位置 适合类的全部对象实例,操作的命名和定位,描述操作 把每个对象的操作都填写到相应的类符号中。 在类描述模板中,写出: 说明操作的职责 操作原型(消息的格式) 消息发送(指出在这个操作执行时,需要请求哪些别的对象操作,即接收消息的对象类名以及执行这个消息的操作名) 约束条件:如果该操作的执行有前置条件、后置条件,以及执行时间的要求等其它需要说明的事项,则在这里加以说明。 实现操作的方法(文字、活动图或流程图)。,28,类(及其对象)之间的四种关系,分类关系、继承泛化(一般-特殊) generalization(generalization-specialization) 构成关系聚合(整体-部分) aggregation(whole-part) 静态联系关联(实例连接) association(instance connection) 使用关系(行为依赖)依赖 Dependency 这些关系形成了类图的关系层*,4.3 定义关系,1、概念 一般类、特殊类、继承、多继承、多态、泛化、 “is a kind of ”,泛化是较特殊的类和较一般的类之间的直接关系(继承关系),其中较一般的类具有较特殊的类的共同性质,较特殊的类继承较一般的类的性质,且还具有自己的性质,或额外的关联,较特殊的类的对象是较一般的类的对象的子集。,431 泛化,31,如果类A具有类B的全部属性和全部操作,而且具有自己特有的某些属性或操作,则A叫做B的特殊类,B叫做A的一般类。,另一定义:如果类A的全部对象都是类B的对象,而且类B中存在不属于类A的对象,则A是B的特殊类,B是A的一般类。 可以证明,以上两种定义是等价的,性质:后代将具有祖先的所有的关联。,33,把在一个类中没有实现的操作(即没有提供方法),称为抽象操作。抽象操作映射到C+,称作纯虚操作。 含有抽象操作的类是不能直接实例化的,在UML中把这种类叫做抽象类。抽象类的作用是为了让其子类继承它的属性和操作等。,继承进一步地可分为单继承和多继承。,2、表示法,人员,股东,职员,顾客,股东职员,例:,抽象操作带有标记“abstract”,或者把操作的特征标记写成斜体来表示它是抽象的。,35,3、识别继承(泛化),(1)学习当前领域的分类学知识 (2)按常识考虑事物的分类 (3)利用泛化的定义(右图) (4)考察类的属性与操作(左图) (5)看两个类的对象之间是否有“是一个”关系。,?,公司人员,姓名 身份证号 股份 工资 ,?,公司人员,姓名 身份证号 ,股东,股份 ,职员,工资 ,股东,姓名 身份证号 股份 ,职员,姓名 身份证号 工资 ,公司人员,姓名 身份证号 ,股东,股份 ,职员,工资 ,?,36,(6)考虑领域范围内的复用,37,(1)问题域是否需要这样的分类?(例:书善本书*) (2)系统责任是否需要这样的分类?(例:职员本市职员) (3)是否符合分类学的常识?(用“is a kind of ”去套),4、审查与调整,(4)是否构成了继承关系?(确实继承了一些属性或操作, 如航标船与一般的船)。,38,一般-特殊结构的简化 (1)取消没有特殊性的特殊类,运输工具 发动机 载重量 速度 ,飞机 飞行高度 自动导航 ,汽车,运输 ,运输工具 发动机 载重量 速度 ,飞机 飞行高度 自动导航 ,运输 ,一、从一般类划分出太多的特殊类,使系统中类的设置太多,增加了系统的复杂性; 二、建立过深的继承层次,增加了系统的理解难度和处理开销。,39,(2)增加属性简化一般特殊结构,人员 ,男 人 ,女 人 ,中国人 ,美国人 ,日本人 ,40,(3)取消用途单一的一般类,减少继承层次,设 备 型号 生产厂 开启 关闭,雷 达 安装地点 监控 ,雷达 型号 生产厂 安装地点 开启 关闭 监控 ,一般类存在的理由: 有两个或两个以上的特殊类 需要用它创建对象实例 有助于软件复用,电子设备,激光打印机,传真机,通讯设备,设备,电子设备,计算机设备,打印机,民用通讯设备,激光打印机,传真机,41,5、调整对象层和特征层 定义泛化的活动,将使分析员对系统中的对象类及其特征有更深入的认识。在很多情况下,随着泛化的建立,需要对类图的对象层和特征层作某些修改,包括增加、删除、合并或分开某些类,以及增、删某些属性与操作或把它们移到其它类。,对象之间的静态联系是指,最终可通过对象属性来表示的一个对象对另一个对象的联系。 对象之间的动态联系是指,对象之间在行为(操作)上的依赖关系。 用关联* (association)表示类之间的静态联系。 用链* (link)表示类对象之间的静态联系。,432 关联,1、概念与表示法 1)链 链是对象间的语义连接,是对象引用的元组(列表)。在最常见的情况下,它是一对对象引用。它是关联的一个实例。 这样的连接使得对象之间在某段时间内保持联系。 把二元链表示为两个实例之间的路径。可以把一个实例与它自身之间的链表示为一个具有单一实例的环*。 如果有关联名,就应该在它的下面画线表示链名。 在链的各端可以表示角色名。 多重性不能显示在链上,因为链是实例后面讲 在面向对象建模中,所有的链都被认为是双向的,当然也可以是单向的。一旦在两个对象之间建立了链,每一个对象都可以请求另一个对象的操作。 对象之间有多个链是合法的*。,2)关联 如果类的对象之间通过属性有连接关系,那么这些类之间的语义关系就是关联。 两个类之间可以有多个关联 把二元关联表示成连接两个类符号的实线路径(两个端点可以连接到相同的类,但是端点是不同的)。 关联名可以在路径附近表示出来。 路径可以由一条或者多条连接线段组成。 对精确地捕获自关联来讲,角色名是必要的。,教 师,学 生,0*,1,指导论文,教师为学生指导论文,城市,0*,0*,有航线,城市之间有航线,例子,指导论文,3)多重性 多重性是非负整数开集的一个子集。 另一端上的多重性是指,对于本端的一个对象,需要另一端对象的个数。 把多重性规约表示成由用逗号分开的整数间隔序列组成的字符串,间隔代表整数的范围(可能无限),其格式为: 下限上限 其中的下限和上限都是文字整型值,说明从下限到上限的整数闭区间。此外星号(*)可以用于上限,表明不限制上限。 如果多重性规约由单个的(*)构成,那么它就表明了无穷的非负正整数的范围,也即它等价于0*。,例子 01 1 0* * 1* 16 13,710,15,19*,48,表示法说明,类 1,类 2,多重性1 多重性2,连接名称,一对一的连接:,1,1,一对多的连接:,多对多的连接:,多重性的表示示例,A,B,有多少A的对象与B的一个对象相关,有多少B 的对象与A的一个对象相关,?,?,给定类A的一个对象a: a 可以恰好与类B的一个对象关联 a 可以最多与类B的一个对象关联 a 可以与类B的一个或多个对象关联 a 可以与类B的零个或多个对象关联,成绩单,1,1,学生,有一个,系,1,1*,教授,工作,系,01,1,教授,系主任,课程,0*,0*,学生,选修,0*,0*,课程,预修,系,01,1,教授,系主任,name title ssn,deptname deptNo chairmanName,系,01,1,教授,系主任,name title ssn,deptname deptNo,商品 序列号,商品规格 描述 价格 通用产品编号,1 描述 *,减少数据冗余,减少存储空间,4)关联角色 在关联的每一个端点上有一个角色。每一个角色具有一个名字,用来描述其类被其他的类看作是什么:把它称为角色名。 当需要强调一个类在一个关联的确切含义时,使用关联角色名。 替代的方法是,使用类的角色名,但要注意改变该类不要对其他类(如第3个类)产生影响。 如果使用角色名,就可以省略关联名。,拥有者,张三,管理者 1,下属 *,雇员,侯六,李四,王五,管理者,管理者,管理者,下属,下属,下属,5) 关联类 (association class) 具有关联和类的特征的建模元素。关联类既可以被看作是具有类的性质的关联,也可以被看作为具有关联性质的类。 如果在具有关联关系的类中,存在着一个属性放在哪个类中都不合适的情况,就考虑使用关联类。 例如,考虑一个人的薪水。通常将属性建模在Person类中。然而,它实际上是类Person和Company之间的雇佣关系的一个属性。例如,一个人为两个不同雇主工作。 把关联类表示成一个用虚线连接到关联路径的类符号。 关联路径和关联类符号表示同一基础模型元素。名字可以放置在路径上或类符号中。,55,0*,1,指导论文,教师,学生,有某些信息需要描述(题目、时间、成绩),把带有属性和操作的关联表示为关联类,电影明星安东尼霍普金斯在电影中扮演理查德M 尼克松。,6)N元关联 N元关联是三个或三个以上类之间的一个关联。 可以规约N元关联的多重性,但与二元关联的多重性相比,并不那样明显。在一个角色上的多重性,当该N元关联中的其它N-1个值被确定时,表示该关联潜在的实例元组的数目。 通过一个大的菱形(指的是比在路径上的终端符大)表示一个N元关联,这个菱形有很多与各参与的类相连接路径。关联的名字(如果有的话)显示在菱形附近。同二元关联一样,角色修饰可以显示在每一个路径上。 可以用虚线把关联类符号与菱形连接起来,表示具有属性、操作或关联的N元关联。,59,60,7)限定符,在使用关联时,一种常见的用法是查找。给定关联一端类中的一个对象,按照另一端类的对象的特点,查找其中的对象或对象集时,就需要使用限定关联。 例如,通常产品订单由若干定单行和一些其它描述信息组成, 使用限定关联描述产品订单、订单行以及它们之间的关系。,定单,产品,定单行 amount:Number ,01,定单,定单行 amount:Number ,*,61,(8)导航性 导航只是陈述了一个类对另一个类的知识。不可导航的走向未必意味着从关联的一端永远不能得到另一端的对象,。 例如,在下图中,通过其他的关联(涉及到其他类,此图未显示)仍然能够发现与对象Password 相关联的User。描述一个关联是可导航的,是说给定关联一端的对象就能够容易并直接地得到另一端的对象,通常这是因为源对象存储了对目标对象的一些引用信息。,2 建立关联 (1)认识对象之间的静态联系 考虑问题域和系统责任哪些类的对象之间的关系需要在系统中表达(P117)。 (2)认识关联的属性与操作 对于考虑中的每一种关联,进一步分析它是否应该带有某些属性和操作。就是说,是否含有一些仅凭一个简单的关联不能充分表达的信息(P117) 。 (3)分析并表示关联的多重性 从连接线的每一端,看本端的一个对象可能与另一端的几个对象发生连接,把结果标注到连接线的另一端。 (4)对多对多的关联的处理?,63,供货商,客户,0*,1*,供需合同 卖方 买方 .,1,1,处理:,供货商,0*,1*,例题: 如何实现多对多的关联?,64,例题,系统管理员,0*,计算机,服务器,客户机,用 户,01,1*,1,操作,使用,65,01,01,婚姻,导师,指导,0*,0*,66,导师,指导,0*,导师,指导,0*,0*,0*,0*,0*,导师,指导,0*,0*,指导,3 对象层、特征层的增补及关联说明 在建立关联的过程中可能增加一些新的对象类,要把这些新增的类补充到类图的对象层中,并建立它们的类描述模板。 一种说法:对于每一个关联,可在它某一端所连接的对象类中增加相应的属性;在这个类的描述模板中,给出这个属性的详细说明。不建议!,习题 1、用关联类为公司和雇员之间的薪水关系建模。 2、为人们之间的婚姻关系建模。,公司,雇员,1*,1*,雇主,职工,工作,公司工龄 薪水,人,01,01,婚姻,性别,聚合又称整体-部分结构,用于描述系统中各类对象之间的组成关系,通过它可以看出某个类的对象,以另外一些类的对象作为其组成部分。 1、概念与表示法 聚合(aggregation)是关联的一种特殊形式,表示整体和部分之间的“整体部分”关系。 聚集 (aggregate)是聚合关系中作为“整体”的类,而把作为“部分”的类称为 成分或部分。 类与类之间的聚合关系指的是,一个类的对象实例,以另一个类的对象实例作为其组成部分, 是种“a part of”或“has a” ;也可理解为,一个类定义引用另一个类定义。 组合是聚合的一种形式,其部分和整体之间具有很强的“属于”关系,整体类的对象管理部分类的对象, 决定部分类的对象何时属于它,何时不属于它。部分可以先于整体消亡。 这种聚集末端的多重性不能超过1。 组合对象是组合类的实例。,433 聚合,71,C: 整体类中的属性用部分类作为基类型,为组合; JAVA: 整体类中的属性用部分类作为基类型,为聚合。对于C+中的属性为指针(基类型为一个类)也是如此。,聚合的性质 1)结构性质 部分必须与它们所构建的整体有某些结构上或功能上的关系。 2)数学性质 a非对称性 如果对象A是对象B的一部分,那么对象B就不能是对象A的一部分。 b传递性 如果对象A是对象B的一部分,对象B是对象C的一部分,那么对象A是对象C的一部分*。,73,整体对象类,部分对象类,1*,1*,连接符:,表示法,汽 车,发动机,车 轮,1,4,6,01,01,例子:,多重性: 一对一 一对多 多对多,多重性表示: 固定的数目或范围例如:1 或 13 不定的数目或范围例如: * 或 0*,构成,聚合上一般不标名称。 异同?,1,1 *,1*,1,2 识别聚合,(1)物理上的整体事物和它的组成部分 例:机器、设备和它的零部件 (2)组织机构和它的下级组织及部门 例:公司与子公司、部门 (3)团体(组织)与成员 例:公司与职员 (4)一种事物在空间上包容其它事物 例:生产车间与机器 (5)抽象事物的整体与部分 例:学科与分支学科、法律与法律条款 (6)具体事物和它的某个抽象方面 例:人员与身份、履历 (7)在材料上的组成关系 例如,面包由面粉、糖和酵母组成,汽车是由钢、塑料和玻璃组成。,3 、审查与筛选,(1)是否属于问题域? 例:公司职员与家庭* (2)是不是系统责任的需要

温馨提示

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

评论

0/150

提交评论