类与类之间的关系及代码表现
面向对象中类和类的关系
![面向对象中类和类的关系](https://img.taocdn.com/s3/m/f29b1c5eac02de80d4d8d15abe23482fb4da02b1.png)
⾯向对象中类和类的关系在⾯向对象⽅法中,我们在确定了类及类的属性和⽅法后。
不可避免的要研究类和类之间的关系,正是这些关系将整个事情串联起来。
使彼此之间有了联系,就像现实⽣活中,⼈与⼈交往中存在着不同的关系。
了解这些关系,对于我们开发系统百利⽽⽆⼀害,能够让我们轻松、⾼效的⼯作,相同像我们在⽇常⽣活中处理好⼈与⼈之间的关系。
会给我们带来巨⼤的优点。
那么我们就来认识⼀下。
⾯向对象中类与类之间有那些关系。
类和类之间的关系⼤概能够分为⼀下⼏种类型:泛化关系(Generalization)、实现关系(realization)、依赖关系(Dependency)、关联关系(Association)(关联、聚合(Aggregation)、组合(Composition))。
泛化关系和实现关系体现的是⼀种类和类、或者类和接⼝间的关系。
不存在引⽤,归结为纵向关系。
依赖关系和关联关系体现的是类和类、类与接⼝间的引⽤。
归结为横向关系。
⼀、泛化关系泛化关系是⼀个类(⼦类、⼦接⼝)继承另外的⼀个类(⽗类、⽗接⼝)的功能,⽽且能够有⾃⼰的新功能。
也既是我们所说的继承关系。
在java中通过extends来标识。
在UML中⽤⼀条带空⼼箭头的实现表⽰,从⼦类指向⽗类,或者⼦接⼝指向⽗接⼝。
代码例如以下:Class _A{}Class _B extends _A{}Public class Test{Public static void main(String args[]){_A a = new _B();}}⼆、实现关系实现关系指的是class类实现interface接⼝(能够使多个接⼝)。
在java中⽤implements标识,在UML中⽤⼀条带空⼼三⾓箭头的虚线标识,从类指向实现的接⼝。
代码例如以下:Interface A{}Class B implements A{}Public class Test{Public static void main( String args[] ){B b = new B();}}说明:以上泛化和实现为⼀对,两者都⽤空⼼三⾓形。
UML课后习题答案
![UML课后习题答案](https://img.taocdn.com/s3/m/8f812bdbdaef5ef7ba0d3cbf.png)
第一章(1)统一建模语言UML是绘制软件蓝图的标准工具语言,可以对软件系统产品进行说明、可视化、构造和编制文档。
(2)UML在实际软件项目中,可以用于构造各种类型系统的业务模型和软件模型。
(3)软件的开发模式有瀑布模型、喷泉模型、基于构件的开发模型和XP方法。
(4)面向对象程序的三大要素是多态、封装和继承。
(抽象)(5)瀑布模型的缺点是缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。
第二章(1) 在UML中,静态视图包含有两种视图,分别是类图和对象图。
(2) 规格说明,修饰,拓展划分是UML常用的通用机制。
(3) 够造型,标记型,约束是UML常用的扩展机制。
(4) 用例视图描述了系统的参与者与系统进行交互的功能,是参与者所能观察和使用到的系统功能的模型图。
(5) 状态图是通过对象的各种状态来建立模型来描述对象的随时间变化的动态行为,并且它是独立的对象为中心进行描述。
第三章(1)Rational Rose默认支持的目标语言主要包括 Java、Visual Basic等。
(C++,C#)(2) 部署视图显示的是系统的实际部署情况,它是为了便于理解系统如何在一组处理解节点上的物理分布,而在分析和设计中使用的架构视图。
(3)使用Rational Rose 生成代码的步骤包括选择待转换的目标模型、检查Java语言的语法错误、设置代码生成属性、生成代码。
(4)在用例视图中包括了系统中的所有参与者、用例和用例图,必要时还可以在其中添加顺序图、协作图、活动图和类图等。
(5) 构件视图用来描述系统中的各个实现模块以及它们之间的依赖关系包含模型代码库、执行文件、运行库和其他构件等信息。
第四章(1)对象图的目的在于描述系统中参与交互的各个对象在同一时刻是如何运行的。
(2)链是两个或多个对象之间的独立连接,是关联的实例。
(3)在UML的图形表示中,类是由名字、属性和方法三个部分组成的。
(4)依赖关系使用一个从客户指南提供者的虚箭头来进行表示。
软件工程智慧树知到答案章节测试2023年山东财经大学
![软件工程智慧树知到答案章节测试2023年山东财经大学](https://img.taocdn.com/s3/m/357db315cdbff121dd36a32d7375a417876fc15d.png)
第一章测试1.软件没有相应的文档,且最终不能满足用户要求是软件危机的一种表现。
()A:错B:对答案:B2.软件本身的不可见性和复杂性随规模的增加呈指数上升是产生软件危机的主要原因。
()A:错B:对答案:A3.开发软件就是写程序。
()A:错B:对答案:A4.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称()。
A:软件危机B:软件工程C:软件产生D:软件周期答案:A5.以下对软件工程描述正确地是()。
A:结合最好的技术方法。
B:经济地开发出高质量的软件并有效地维护它。
C:一门工程学科。
D:采用经过时间考验而证明正确的管理技术。
答案:ABCD6.软件生命周期中所花费费用最多的阶段是()。
A:需求分析。
B:软件总体设计。
C:软件实现。
D:软件维护。
答案:D7.软件是()。
A:计算机系统。
B:处理对象和处理规则的描述。
C:程序。
D:程序、数据及其文档的集合。
答案:D8.同螺旋模型相比,原型模型主要缺少()。
A:客户评估B:制定计划C:风险分析D:实施工程答案:C9.在软件生存周期模型中,不适应变化需求的软件开发模型是()。
A:原型模型B:瀑布模型C:螺旋模型D:增量模型答案:B10.针对高质量软件的生产的软件过程模型()。
A:RUP模型B:基于构件的模型C:净室模型D:增量模型答案:C第二章测试1.可行性研究的技术可行性是指现有技术是否可行。
()A:对B:错答案:A2.可行性研究的成本效益分析是从经济方面讨论是否可行。
()A:对B:错答案:A3.可行性分析研究的目的是()。
A:功能内聚B:项目值得开发否C:开发项目D:争取项目答案:B4.描绘物理系统的传统工具是()。
A:程序流程图B:系统流程图C:数据流程图D:软件结构图答案:B5.数据字典的基本功能是()。
A:数据维护。
B:数据通信。
C:数据定义。
D:数据库设计。
答案:C6.使用数据流图对工资系统进行需求分析建模,外部实体是()。
A:工资单B:工资系统代码C:工资数据库维护D:接受工资单的银行答案:D7.数据流图的作用包括()。
2014上半年软考【标准答案及解析】
![2014上半年软考【标准答案及解析】](https://img.taocdn.com/s3/m/142ee7593c1ec5da50e27031.png)
2014年上半年软件设计师考试上午真题(标准参考答案)参考答案:不保证正确。
1.D 2、3、C2^(k-1)≥n+k4、D5、B6、A解析:内存按字节编址,单位为byte,存储器容量按位编址,单位为bit,注意相关的单位换算根据公式:(最高地址-最低地址+1)/单片存储器容量可得注意16进制的换算(400FFFFFH-40000000H+1)*8bit/256K*8bit = (FFFFFH+1)/256K =(100000H)/(256*1024) =(1*16^5)/(256*2^10)=2^20/2^18 =2^2=47.Sniffer,中文可以翻译为嗅探器,是一种基于被动侦听原理的网络分析方式。
使用这种技术方式,可以监视网络的状态、数据流动情况以及网络上传输的信息。
木马是病毒的一种,同时木马程序又有许多种不同的种类,那是受不同的人、不同时期开发来区别的,如BackOrifice(BO)、BackOrifice2000、Netspy、Picture、Netbus、Asylum、冰河等等这些都属于木马病毒种类.木马程序就是一个网络上的Client/Server的概念。
以下简单介绍一些木马程序的功能:1)远程监控: 可以控制对方的鼠标、键盘和监视对方屏幕。
2)记录密码3)取得电脑主机的信息资料: 如果你在电脑用户账户填上真名的话,对方就可能知道你的姓名了。
4)远程控制5)发送信息8、D 9、B 10、D 11、C12、B表示媒体就是信息的表示方法。
国际电话电报咨询委员会CCITT(Consultative Committee on International Telephone and Telegraph,国际电信联盟ITU的一个分会)把媒体分成5类。
表示媒体(representation Medium)是其中之一,它指传输感觉媒体的中介媒体,即用于数据交换的编码。
如图像编码(JPEG、MPEG等)、文本编码(ASCII码、GB2312等)和声音编码等。
UML类关系图(泛化,实现,依赖,关联(聚合,组合))
![UML类关系图(泛化,实现,依赖,关联(聚合,组合))](https://img.taocdn.com/s3/m/c94ef8e90342a8956bec0975f46527d3240ca625.png)
UML类关系图(泛化,实现,依赖,关联(聚合,组合))UML的构造快包含3种:(1) 事物(4种):结构事物,⾏为事物,分组事物,注释事物(2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系(3) 图(10种):⽤例图,类图,对象图,包图,组件图,部署图,状态图,活动图,序列图,协作图事物是对模型中最具代表性的成分的抽象;关系把事物结合在⼀起;图聚集了相关的事物。
(2) 关系(4种)UML 中类与类, 类与接⼝, 接⼝与接⼝这间的关系有: 泛化(generalization) 关系, 关联(association)关系( 关联, 聚合, 合成), 依赖(dependency)关系,实现(realization)关系.泛化(generalization)关系是⼀个类(称为⼦类、⼦接⼝)继承另外的⼀个类(称为⽗类、⽗接⼝)的功能,并可以增加它⾃⼰的新功能的能⼒,继承是类与类或者接⼝与接⼝之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时⼀般没有争议性。
实现(realization)关系指的是⼀个class类实现interface接⼝(可以是多个)的功能;实现是类与接⼝之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时⼀般没有争议性;依赖(dependency)关系: 也是类与类之间的连接. 表⽰⼀个类依赖于另⼀个类的定义. 依赖关系总是单向的。
可以简单的理解,就是⼀个类A 使⽤到了另⼀个类B,⽽这种使⽤关系是具有偶然性的、、临时性的、⾮常弱的,但是B类的变化会影响到A;⽐如某⼈要过河,需要借⽤⼀条船,此时⼈与船之间的关系就是依赖;表现在代码层⾯,为类B作为参数被类A在某个method⽅法中使⽤。
(A use B)在java 中. 依赖关系体现为: 局部变量, ⽅法中的参数, 和对静态⽅法的调⽤.关联(association)关系:表⽰类与类之间的联接, 它使⼀个类知道另⼀个类的属性和⽅法.关联可以使⽤单箭头表⽰单向关联, 使⽤双箭头或不使⽤箭头表⽰双向关联, 不建议使⽤双向关联. 关联有两个端点, 在每个端点可以有⼀个基数, 表⽰这个关联的类可以有⼏个实例.常见的基数及含义:0..1:0 或1 个实例.0..*: 对实例的数⽬没有限制.1: 只能有⼀个实例.1..*: ⾄少有⼀个实例.他体现的是两个类、或者类与接⼝之间语义级别的⼀种强依赖关系,⽐如我和我的朋友;这种关系⽐依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,⼀般是长期性的,⽽且双⽅的关系⼀般是平等的,表现在代码层⾯,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引⽤了⼀个类型为被关联类B的全局变量;在java 语⾔中关联关系是使⽤实例变量实现的.关联关系还包括:聚合,组合关系。
软件工程练习题
![软件工程练习题](https://img.taocdn.com/s3/m/252043a0804d2b160a4ec00d.png)
《软件工程》练习题一、判断题1.螺旋模型是在瀑布模型和增量模型的基础上增加了风险分析活动。
(对)2.数据字典是对数据流图中的数据流,加工、数据存储、数据的源和终点进行详细定义。
(错)3.JAVA语言编译器是一个CASE工具.(对)。
4.软件是指用程序设计语言(如PASCAL ,C,VISUAL BASIC 等)编写的程序,软件开发实际上就是编写程序代码。
(错)5.软件模块之间的耦合性越弱越好。
(对)6.数据库设计说明书是一个软件配置项(对)7.在面向对象的软件开发方法中,每个类都存在其相应的对象,类是对象的实例,对象是生成类的模板.(错)8.过程描述语言可以用于描述软件的系统结构。
(错)9.如果通过软件测试没有发现错误,则说明软件是正确的.(错)10.快速原型模型可以有效地适应用户需求的动态变化。
(对)11.模块化,信息隐藏,抽象和逐步求精的软件设计原则有助于得到高内聚,低耦合度的软件产品。
(对)12.集成测试主要由用户来完成。
(错)13.确认测试计划应该在可行性研究阶段制定(错)14.白盒测试无需考虑模块内部的执行过程和程序结构,只要了解模块的功能即可.(错)15.软件概要设计包括软件系统结构设计以及数据结构和数据库设计。
(对)16.用例常被用在项目的需求分析阶段,对项目的测试计划和用户指南也有用处。
(对)二、单选题1.瀑布模型的关键不足在于(2)(1)过于简单(2)不能适应需求的动态变更(3)过于灵活(4)各个阶段需要进行评审2.在面向对象软件开发方法中,类与类之间主要有以下结构关系(1)(1)关联和泛化(2)继承和一般(3)聚集和消息传递(4)继承和方法调用3.以下哪一项不是软件危机的表现形式(3)(1)成本高(2)生产率低(3)技术发展快(4)质量得不到保证4.以下哪一项不是面向对象的特征(4)(1)多态性(2)继承性(3)封装性(4)过程调用5.面向对象模型主要由以下哪些模型组成(1)(1)对象模型、动态模型、功能模型(2)对象模型、数据模型、功能模型(3)数据模型、动态模型、功能模型(4)对象模型、动态模型、数据模型6.软件可行性研究一般不考虑(4)(1)是否有足够的人员和相关的技术来支持系统开发(2)是否有足够的工具和相关的技术来支持系统开发(3)待开发软件是否有市场、经济上是否合算(4)待开发的软件是否会有质量问题7.软件维护的副作用主要有以下哪几种(3)(1)编码副作用、数据副作用、测试副作用(2)编码副作用、数据副作用、调试副作用(3)编码副作用、数据副作用、文档副作用(4)编码副作用、文档副作用、测试副作用8.软件项目计划一般不包括以下哪项内容(4)(1)培训计划(2)人员安排(3)进度安排(4)软件开发标准的选择和制定9.以下哪一项不属于面向对象的软件开发方法(3)(1)coad方法(2)booch方法(3)jackson方法(4)omt方法10.以下哪种测试方法不属于白盒测试技术(2)(1)基本路径测试(2)边界值分析测试(3)循环覆盖测试(4)逻辑覆盖测试11.需求规格说明书的作用不应该包括(D)。
(完整版)软件工程 第五章 面向对象的需求分析
![(完整版)软件工程 第五章 面向对象的需求分析](https://img.taocdn.com/s3/m/5b338639af45b307e8719771.png)
第五章面向对象的需求分析面向对象的需求分析方法的核心是利用面向对象的概念和方法为软件需求建造模型。
它包含面向对象风格的图形语言机制和用于指导需求分析的面向对象方法学。
面向对象的思想最初起源于 20世纪 60年代中期的仿真程序设计语言Simula67。
20世纪80年代初出现的Smalltalk 语言及其程序设计环境对面向对象技术的推广应用起到了显著的促进作用。
20世纪90年代中后期诞生并迅速成熟的UML(Unified Modeling Language,统一建模语言)是面向对象技术发展的一个重要里程碑。
UML 统一了面向对象建模的基本概念、术语和表示方法,不仅为面向对象的软件开发过程提供了丰富的表达手段,而且也为软件开发人员提供了互相交流、分享经验的共用语言。
本章首先介绍面向对象的主要概念和思想。
在概述了UML的全貌之后,以“家庭保安系统”为实例,介绍与需求分析相关的部分 UML语言机制以及基于UML的面向对象的需求分析方法和过程。
第一节面向对象的概念与思想一、面向对象的概念关于“面向对象”,有许多不同的看法。
Coad和 Yourdon给出了一个定义:“面向对象 = 对象 + 类 + 继承 + 消息通信”。
如果一个软件系统是使用这样4个概念设计和实现的,则认为这个软件系统是面向对象的。
一个面向对象的程序的每一成分应是对象,计算是通过新的对象的建立和对象之间的消息通信来执行的。
1.对象(object)一般意义来讲,对象是现实世界中存在的一个事物。
可以是物理的,如一个家具或桌子,如图 5-1-1所示,可以是概念上的,如一个开发项目。
对象是构成现实世界的一个独立的单位,具有自己的静态特征(用数据描述)和动态特征(行为或具有的功能)。
例如:人的特征:姓名、性别、年龄等,行为:衣、食、住、行等。
图 5-1-1 对象的定义(1)对象、属性、操作、消息定义对象可以定义为系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和一组对属性进行操作的服务组成。
UML类图关系大全
![UML类图关系大全](https://img.taocdn.com/s3/m/6bdd968171fe910ef12df8bc.png)
1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。
在 GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。
对象引用本身就是有向的,更适合表达我们所讨论的那种关系。
所以这种关系在设计的时候比较少用到,关联一般都是有向的。
使用ROSE 生成的代码是这样的:class C1...{public:C2* theC2;};class C2...{public:C1* theC1;};双向关联在代码的表现为双方都拥有对方的一个指针,当然也可以是引用或者是值。
单向关联:C3->C4:表示相识关系,指C3知道C4,C3可以调用C4的公共属性和方法。
没有生命期的依赖。
一般是表示为一种引用。
生成代码如下:class C3...{public:C4* theC4;};class C4...{};单向关联的代码就表现为C3有C4的指针,而C4对C3一无所知。
自身关联(反身关联):自己引用自己,带着一个自己的引用。
代码如下:class C14...{public:C14* theC14;};就是在自己的内部有着一个自身的引用。
2、聚合/组合当类之间有整体-部分关系的时候,我们就可以使用组合或者聚合。
聚合:表示C9聚合C10,但是C10可以离开C9而独立存在(独立存在的意思是在某个应用的问题域中这个类的存在有意义。
这句话怎么解,请看下面组合里的解释)。
代码如下:class C9...{public:C10 theC10;};class C10...{};组合(也有人称为包容):一般是实心菱形加实线箭头表示,如上图所示,表示的是C8被C7包容,而且C8不能离开C7而独立存在。
但这是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。
2009软件工程试题
![2009软件工程试题](https://img.taocdn.com/s3/m/70360bed172ded630b1cb6fd.png)
1.在某系统中,存在如下的业务陈述:①一个客户提交0个或多个订单;②一个订单由一个且仅由一个客户提交。
系统中存在两个类:“客户”类和“订单”类。
对应每个“订单”类的实例,存在【 B 】“客户”类的实例;对应每个“客户”类的实例,存在0个或多个“客户”类的实例。
A)0个B)1个C)1个或多个D)0个或多个2.一般地,可以将软件开发的生命周期划分为问题定义、可行性分析、【 C 】、总体设计、详细设计、编码和单元测试、综合测试和维护8个阶段。
A)项目论证B)初始调查C)需求分析与定义D)问题分析3.下列关于软件开发瀑布模型的说法中,正确的是【 A 】: A)必须等前一阶段的工作完成之后,才能开始后一阶段的工作。
B)前一阶段的输出文档对后一阶段影响不大。
C)可以先完成软件的编码工作再补充相关文档。
D)以上说法都不对。
4.下列叙述中,与提高软件可移植性相关的是【 D 】:A)选择时间效率高的算法 B)尽可能减少注释 C)选择空间效率高的算法 D)尽量用高级语言编写系统中对效率要求不高的部分5.在信息系统分析阶段,对数据流图的改进,包括检查数据流图的正确性和提高数据流图的易理解性,下面说法不正确的是【 A 】。
A)数据流图中,输入数据与输出数据必须匹配B)数据流图的父图和子图必须平衡C)任何一个数据流至少有一端是处理框D)数据流图中适当的命名,可以提高易理解性6.【 A 】是导致软件缺陷的最大原因。
A)需求规格说明书B)设计方案C)编写代码D)测试计划7.从事物的组成部件及每个部件的属性、功能来认识事物。
这种方法被称为【 A 】的方法。
A)面向对象B)面向数据C)面向过程D)面向属性8.在软件项目管理中可以使用各种图形工具来辅助决策,下面对Gantt 图的描述中,不正确的是【 C 】。
A)Gantt图表现了各个活动的持续时间B)Gantt图表现了各个活动的起始时 C Gantt图反映了各个活动之间依赖关系D)Gantt图表现了完成各个活动的进度9.下列选项中,【 C 】不属于结构化分析方法所使用的工具。
【StarUML】类图
![【StarUML】类图](https://img.taocdn.com/s3/m/ddc475e7f71fb7360b4c2e3f5727a5e9856a2744.png)
【StarUML】类图类图是可视化地表现类的属性和⽅法,以及类与类之间的关系。
1、类a、类普通实体类,它有对应的属性和⽅法:双击类名,会弹出⼀些控制按钮:右边区域,各个图标的含义依次是:增加类的属性、增加类的操作(⽅法)、添加模板类类型参数、添加reception、添加⼦类、添加⽗类、添加已有的接⼝、添加需要的接⼝、添加关联、添加聚合、添加组合、添加端⼝、添加部件。
(1) 添加属性(2) 修改属性的属性属性的属性设置:stereotype:属性描述,类图上的表现是会在属性名的前⾯加上<<>>,中间插⼊属性描述;isstatic:表明该属性是否是静态属性,如果勾选了,属性下⾯会出现下划线;isleaf:表明该属性是否是叶⼦属性,通俗理解是否是final属性,勾选之后,类图不会发⽣变化;type:表明属性的类型,int、long等等,如果填写,会在属性名后⾯出现“:类型名”;multiplicity:这个代表该类实例与其他类实例连接时所需要的数量范围,是⼀个可编辑的下拉框,可以是具体数字,也可以是⼀个区间,⽐如0..1代表着是0到1个,* 代表着⽆数个。
如果填写,会在属性后⾯增加“[]”,中间插⼊填写的值:isReadOnly:代表该字段是否是只读字段,⼀般表⽰属性在对象创建的时候赋值,后续不再改变的变量,填写之后,会在图上增加{ReadOnly};isOrdered:说明属性是可排序的,和multiplicity联⽤,代表着与其他实例连接时,该属性已排序,在图中表现为{ordered};isUnique:说明属性是互斥性,和multiplicity联⽤,代表着与其他实例连接时,属性对象不会重复,在途中表现为{unique};defaultValue:默认值isDerived:代表该属性值是否是由⾃⼰运算出来,或者是由外界来设置,⼀般在编码中表现为⼀个setXXX⽅法,暴露给外⾯,让外⾯的对象设置该属性;在类图中的表现为“/”,放在属性名前⾯;aggregation:代表属性和类的关系,有三个选择:所代表的意思:shared 代表着这个属性对于类来说可有可⽆,属性值为NULL,对象也属于正常对象;composite 代表着这个属性值⼀定得存在,就像飞机(类)和机翼(属性),飞机离不开机翼,如果没有机翼,飞机就不能飞了,就不叫飞机了,顶多在地上跑,⼀辆⼤号的汽车⽽已。
关联--依赖、组合--聚合 联系与区别
![关联--依赖、组合--聚合 联系与区别](https://img.taocdn.com/s3/m/9780390c76c66137ee061973.png)
关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。
----------------------------------------------------------------------------------------------------------------------------------
聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。
聚合中的被包含对象可以没有。 而组合至少有一个。聚合是一种拥有的关系,而组合是整体与部分的关系
举一个简单的例子:
一个图书馆可以有十万本书,也可以一本也没有。但空的图书馆还是图书馆。这是聚合
一个车(我们平常能看到的普通的交通工具车)有轮子,有的车是四轮子的,有的车是三轮的,自行车是二轮的,还有独轮车,但车至少要有一个轮子,不然就不是车。这是组合关系。
同构性,主体和部分不具有生命期的一致性
课程组可由多个学生组成,课程组撤消了,学生还活得好好的,这是聚合。
类图中常用的六种关系
![类图中常用的六种关系](https://img.taocdn.com/s3/m/f5aeaccc6037ee06eff9aef8941ea76e58fa4afa.png)
类图中常⽤的六种关系⼀、⾸先来罗列⼀下这六种关系都有什么 1.泛化(Generalization) 2. 实现(Realization) 3. 关联(Association) 4. 聚合(Aggregation) 5. 组合/合成(Composition) 6. 依赖(Dependency)各种关系的强弱顺序:泛化 = 实现 > 组合/合成 > 聚合 > 关联 > 依赖有些版本将泛化和实现统称为⼀般化关系⼆、详细说⼀下这六种关系 1.泛化(Generalization) 【泛化关系】:是⼀种继承关系,表现在类与类的继承关系;接⼝与接⼝的继承关系。
驾驶员继承⼈类 【代码体现】:extends 【箭头指向】:带三⾓箭头的实线,箭头指向⽗类或者⽗接⼝ 2. 实现(Realization) 【实现关系】:是实现类对接⼝实现的体现。
鸟实现飞⾏的接⼝ 【代码体现】:implements 【箭头指向】:带三⾓箭头的虚线线,箭头指向接⼝ 3. 关联(Association) 【关联关系】:是类与类之间的链接,它使⼀个类知道另⼀个类的属性和⽅法。
关联可以是双向的,也可以是单向的。
鸟栖息在某⽚森林 【代码体现】:成员变量 【箭头指向】:带普通箭头的实线,双向的关联可以有两个箭头或者没有箭头,单向的只有⼀个箭头,表⽰关联的⽅向。
4. 聚合(Aggregation) 【聚合关系】:是关联关系的⼀种,是强的关联关系。
聚合是整体和部分之间的关系,且部分可以离开整体单独存活。
关联和聚合从Java语法上分辨不出,要考虑逻辑关系,如果不确定,可设置为关联关系。
下⾯,飞机和驾驶员都属于航空公司的⼀部分 【代码体现】:成员变量 【箭头指向】:带空⼼菱形的实线,菱形指向整体。
5. 组合/合成(Composition) 【合成关系】:是关联关系的⼀种,是⽐聚合强的关系。
他要求普遍的聚合关系中代表整体的对象负责部分的对象的⽣命周期,合成关系不能共享。
UML类图说明
![UML类图说明](https://img.taocdn.com/s3/m/b23e6111fd4ffe4733687e21af45b307e871f935.png)
UML类图说明1:⽰例这是⼀个使⽤UML表⽰的类图的结构,通过箭头,菱形,实线以及虚线来代表⼀些类之间的关系,后⾯将按照上⾯的例⼦⼀⼀介绍说明。
上图中,abstract 车是⼀个抽象类。
⼩汽车和⾃⾏车是继承了车的抽象类,实现了抽象类的⼀些抽象⽅法,他们之间是实现关系。
SUV继承⼩汽车,SUV和⼩汽车之间是泛化关系!轮胎,发动机和⼩汽车之间是组合关系。
学⽣和班级之间是聚会关系。
学⽣和⾝份证之间是关联关系。
学⽣和⾃⾏车之间是依赖关系。
2:具体分析2.1:泛化关系上⾯UML图中,SUV和⼩汽车之间是⼀种泛化关系,SUV is a ⼩汽车,泛化关系⽤⼀种带有空⼼的箭头来表⽰。
在代码中表现的⽅式就是继承⾮抽象类的⽅式。
2.2:实现关系上⾯UML图中,⼩汽车,⾃⾏车与抽象类车,之间是⼀种实现关系。
重要的是要继承抽象类,或者实现接⼝这种关系是实现关系,在UML类图中使⽤虚线带箭头。
在代码中表现的⽅式就是继承抽象类。
2.3:聚合关系上⾯UML图中,学⽣和班级之间是⼀种聚合关系,表⽰班级有学⽣聚合⽽来,采⽤实线空⼼菱形箭头表⽰。
与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在;例如,班级撤销了,学⽣不会消失,他们依然存在。
2.4:组合关系上⾯UML图中,轮胎,发动机和⼩汽车之间是⼀种组合关系,采⽤实线实⼼菱形箭头表⽰。
与聚合关系不同的是,整体和部分是强依赖的,即使整体不存在了,组合部分也不存在;例如,⼩汽车没有,⾃然轮胎和发动起,也不会存在了。
2.5:关联关系上⾯UML图中,学⽣和⾝份证是⼀种关联关系。
关联关系是⽤⼀条直线表⽰的;它描述不同类的对象之间的结构关系;它是⼀种静态关系,通常与运⾏状态⽆关,⼀般由常识等因素决定的;它⼀般⽤来定义对象之间静态的、天然的结构;所以,关联关系是⼀种“强关联”的关系;⽐如,乘车⼈和车票之间就是⼀种关联关系;学⽣和学校就是⼀种关联关系;2.6:依赖关系上⾯UML图中,学⽣和⾃⾏车之间是⼀种依赖关系。
2024年软考-高级软考-系统分析师考试历年真题常考点试题3带答案
![2024年软考-高级软考-系统分析师考试历年真题常考点试题3带答案](https://img.taocdn.com/s3/m/e629748fb8f3f90f76c66137ee06eff9aef849d2.png)
2024年软考-高级软考-系统分析师考试历年真题常考点试题带答案(图片大小可任意调节)第1卷一.单选题(共20题)1.原型化方法是用户和软件开发人员之间进行的一种交互过程,它从用户界面的开发入手,首先形成系统界面原型,用户( )并提出意见。
A.改进用户界面的设计B.阅读文档资料C.模拟用户界面的运行D.运行用户界面原型2.由用户开发应用系统可以解决的主要问题是( )。
A. 提高应用系统效率B.系统开发直接反映用户需求C.增强系统的可靠性D.降低开发成本3.系统设计阶段的主要成果是( )。
A.用户的决策方针B.用户的分析方案C.系统设计说明书D.系统总体设计方案4.一般子系统的划分是在系统( )阶段,根据对系统的功能 /数据分析的结果提出的。
A.需求分析B.逻辑阶段C.总体设计D.详细设计5.软件工程的主要目标是( )。
A.软件需求B.软件设计C.风险分析D.软件实现6.用户开发应用系统的主要手段是( ) 。
A.生命周期法B. 原型法C.第四代语言D.面向对象方法7.在绘绘数据流时,应遵循父图与子图平衡的原则,所谓平衡是指( )。
A.父图和子图都不昨改变数据流的性质B.子图不改变父图数据流的一致性C.父图的输入 /输出数据流与子图的输入 / 输出数据流一致D.子图的输出数据流完全由父图的输入数据流确定8.数据字典是数据流图中所有元素的定义的集合,一般由以下四类条目组成( )。
A. 数据说明条目、控制流条目、加工条目、数据存储条目B.数据流条目、数据项条目、文件条目、加工条目C. 数据源条目、数据流条目、数据处理条目、数据文件条目D.数据流条目、数据文件条目、数据池条目、加工条目9.在用户需求分析中,开发人员要从用户那里解决的最重要的问题是( )。
A.要让软件做什么B.要给软件提供哪些信息C.要求软件工作效率怎样D.要让软件具有何种结构10.SA 法的主要描述手段有( )。
A.系统流程图和模块图B.DFD 图、数据词典、加工说明C.软件结构图、加工说明D.功能结构图、加工说明11.继承机制的作用是( )。
Python设计模式-UML-类图(ClassDiagram)
![Python设计模式-UML-类图(ClassDiagram)](https://img.taocdn.com/s3/m/86963ffa6394dd88d0d233d4b14e852458fb3906.png)
Python设计模式-UML-类图(ClassDiagram)简介类图是⾯向对象分析和设计的核⼼,⽤来描述系统各个模块中类与类之间、接⼝与接⼝之间、类与接⼝之间的关系,以及每个类的属性、操作等特性,⼀般在详细设计过程中实施。
类图本⾝就是现实世界的抽象,是对系统中各种概念进⾏建模,并描绘出它们之间的关系,所以类图关注的对象就是元素及元素之间的关系。
类图建模步骤 - 抽象出类实体 - 识别出类的主要属性 - 画出类之间的关系 - 对各个类进⾏分析、梳理、设计类图的元素类图中包含以下⼏种模型元素:类、接⼝、关系、协作、注释、约束、包。
类 在UML的图形表⽰中,类的表⽰法是⼀个矩形,有三格组成,分别是类名、类属性、类操作。
抽象类中的类名及抽象⽅法都⽤斜体表⽰。
- 类名:⾸字母⼤写 - 类属性:格式为可见性属性名:类型 =默认值,如-name: String 可见性包括四种: + public - private # protected * package 属性名:单字属性名⼩写;多字属性名出第⼀个单词外其余单词的⾸字母⼤写 - 类操作:格式为可见性操作名(参数):返回值类型,如+getName(): String接⼝ 在UML的图形表⽰中,接⼝的表⽰法是分为两种:圆形表⽰法和构造型表⽰法。
接⼝由两栏组成,第⼀栏顶端是接⼝名称,第⼆栏是接⼝⽅法。
接⼝⽆属性只包含操作,且没有对外可见的关联。
- 圆形表⽰法 - 构造型表⽰法关系类图中类与类之间有泛化、依赖、关联、聚合、组合关系;接⼝与接⼝之间有继承关系;类与接⼝之间有实现关系。
这些关系本⾝就是类图中的元素,⽤不同的连线表⽰。
- 泛化关系 - 依赖关系 - 关联关系 - 聚合关系 - 组合关系 - 实现关系 类图中的关系较为复杂,以下分别详述。
协作 协作是指⼀些类、接⼝、关系等元素提供的交互⾏为,能够协助其他元素执⾏活动、实现功能的辅助类。
注释 对某些类和接⼝进⾏注释。
医学信息的分类与编码
![医学信息的分类与编码](https://img.taocdn.com/s3/m/0c4b3dcb7cd184254a353524.png)
一、信息分类
?步骤 ?首先,收集某一领域的概念集,领域指就诊原因、诊断、 医疗步骤。 ?如《国际疾病分类法》即对疾病的分类。 ?然后,概念根据隶属关系被有序化 ? 肺炎为一种肺部疾病: ?肺炎:相对狭窄的概念, ?肺部疾病:相对宽泛的概念。
二、信息编码
代码的功能
1.标识:代码是鉴别编码对象的唯一标志。
2.分类:当按编码对象的属性或特征(如科别、 专科等)分类并分别赋予不同的代码时,代码又 可以作为区分编码对象类别的标志。
3.排序:当按编码对象发现(产生)的时间、 所占有的空间或其他方面的顺序关系分类,并分 别赋予不同的代码时,代码又可以作为区别编码 对象排序的标志。伯仲叔季,孟。
当某一个上位类类目划分成若干个下位类类 目时,应选择一个划分标准。
同位类类目之间不交叉、不重复,并只对应 于一个上位类。
分类要依次进行,不应有空层或加层。
一、信息分类
基本方法
线分类法
优点: 层次性好,能较好地反映类目之间的逻辑关系。 使用方便,既符合手工处理信息的习惯,又便
于电子计算机处理信息。 缺点:
规范性:在一个信息分类编码标准中,代码的类型、 代码的结构以及代码的编写格式必须统一。
二、信息编码 代码的种类
无含义代码
代码
顺序码
无序码
有含义代码
系列顺序码
数值化 字母顺序码
层次码
特征 组合码
复合码
二、信息编码
代码的种类
1.无含义代码:即无实质含义的代码。此种代码只
作为编码对象的唯一标识,只起代替编码对象名称的作 用,而不能提供有关编码对象的其他任何信息。
UML类图符号各种关系说明以及举例
![UML类图符号各种关系说明以及举例](https://img.taocdn.com/s3/m/0c5aa327ec630b1c59eef8c75fbfc77da26997ed.png)
UML类图符号各种关系说明以及举例UML中描述对象和类之间相互关系的⽅式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。
依赖(Dependency):元素A的变化会影响元素B,但反之不成⽴,那么B和A的关系是依赖关系,B依赖A;类属关系和实现关系在语义上讲也是依赖关系,但由于其有更特殊的⽤途,所以被单独描述。
uml中⽤带箭头的虚线表⽰Dependency关系,箭头指向被依赖元素。
泛化(Generalization):通常所说的继承(特殊个体 is kind of ⼀般个体)关系,不必多解释了。
uml中⽤带空⼼箭头的实线线表⽰Generalization关系,箭头指向⼀般个体。
实现(Realize):元素A定义⼀个约定,元素B实现这个约定,则B和A的关系是Realize,B realize A。
这个关系最常⽤于接⼝。
uml 中⽤空⼼箭头和虚线表⽰Realize关系,箭头指向定义约定的元素。
关联(Association):元素间的结构化关系,是⼀种弱关系,被关联的元素间通常可以被独⽴的考虑。
uml中⽤实线表⽰Association 关系,箭头指向被依赖元素。
聚合(Aggregation):关联关系的⼀种特例,表⽰部分和整体(整体 has a 部分)的关系。
uml中⽤带空⼼菱形头的实线表⽰Aggregation关系,菱形头指向整体。
组合(Composition):组合是聚合关系的变种,表⽰元素间更强的组合关系。
如果是组合关系,如果整体被破坏则个体⼀定会被破坏,⽽聚合的个体则可能是被多个整体所共享的,不⼀定会随着某个整体的破坏⽽被破坏。
uml中⽤带实⼼菱形头的实线表⽰Composition关系,菱形头指向整体。
1.1.1 依赖(Dependency):虚线箭头表⽰1、依赖关系也是类与类之间的联结2、依赖总是单向的。
UML各种图总结-精华
![UML各种图总结-精华](https://img.taocdn.com/s3/m/c541ebdea0116c175f0e48eb.png)
UML各种图总结-精华UML(UnifiedModelingLanguage)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
下面将对UML的九种图+包图的基本概念进行介绍以及各个图的使用场景。
一、基本概念如下图所示,UML图分为用例视图、设计视图、进程视图、实现视图和拓扑视图,又可以静动分为静态视图和动态视图。
静态图分为:用例图,类图,对象图,包图,构件图,部署图。
动态图分为:状态图,活动图,协作图,序列图。
1、用例图(UseCaseDiagrams):用例图主要回答了两个问题:1、是谁用软件。
2、软件的功能。
从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。
2、类图(ClassDiagrams):用户根据用例图抽象成类,描述类的内部结构和类与类之间的关系,是一种静态结构图。
在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
各种关系的强弱顺序:泛化=实现>组合>聚合>关联>依赖2.1.泛化【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何继承父类的所有特征和行为。
例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
2.2.实现【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现。
2.3.关联【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量2.4.聚合【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。
软件工程复习题主观题
![软件工程复习题主观题](https://img.taocdn.com/s3/m/c54fcd4b90c69ec3d4bb7545.png)
复习题名词解释(每题3分)1.数据字典精确地、严格地定义了每个与系统相关的数据元素,并以字典式顺序将它们组织起来,使得用户和分析员对所有的输入、输出、存储成分和中间计算有共同的理解。
2.面向对象分析分为两个过程:论域分析(建立大致的系统实现环境)和应用分析(根据特定的应用需求进行论域分析),目的是定义所有与待解决问题相关的类(包括类的操作和属性、类与类之间的关系以及它们的表现行为)。
需完成的任务:a软件工程师和用户必须充分沟通,以了解基本用户的需求。
b必须标识类(即定义类的属性和操作)。
c必须定义类的层次。
d应表达对象与对象之间的关系(对象连接)e必须模型化对象的行为f反复做以上步骤直至模型建成。
3.程序效率指程序的执行速度以及程序占用的存储空间4.软件生存期软件与其他事物一样,有孕育、诞生、成长、成熟、衰亡的生存过程,这就是软件的生存周期。
它主要分为6个阶段,即软件项目计划、软件需求分析和定义、软件设计、程序编码、软件测试以及运行和维护。
5.原型化方法原型化方法特别适用于需求不确定性较高的软件系统的开发。
它的运作思想是根据用户给出的基本需求,通过快速实现构造出一个小型的可执行的模型,这就是用户界面原型。
让用户在计算机上实际运行原型,然后修改。
6.软件质量与软件产品满足规定的和隐含的需求的能力有关的特性或特性的全体。
或“所有描述计算机软件优秀程度的特性的组合。
7.螺旋模型对于复杂的大型软件,开发一个原型往往达不到要求。
螺旋模型将瀑布模型与演化模型结合起来,并且添加两种模型均忽略的风险分析。
螺旋模型沿着螺线旋转,分4个方面的活动:制定计划、风险分析、实施工程、客户评估。
沿螺旋线自内向外每旋转一圈,便开发出一个更为完善的、新的软件版本。
8.单元测试集中对用源代码实现的每个程序单元进行测试,检查各个模块是否正确地实现了规定的功能。
9.软件质量同610.对象对象可以定义为系统中用来描述客观事物的一个实体,它是构成系统的一个基本单元,由一组属性和一组对属性进行操作的服务组成。
简述类的依赖关系
![简述类的依赖关系](https://img.taocdn.com/s3/m/fcdc9b844128915f804d2b160b4e767f5bcf807d.png)
简述类的依赖关系摘要:一、引言二、类与依赖关系概述1.类的定义2.依赖关系的定义3.类与依赖关系的关系三、类之间的依赖关系类型1.泛化关系2.实现关系3.关联关系四、依赖关系的应用1.代码组织与模块化2.代码复用与扩展3.面向对象设计原则的实践五、实例分析1.实例一:简单工厂模式2.实例二:单例模式3.实例三:观察者模式六、结论正文:一、引言在软件开发过程中,类与类之间的依赖关系是面向对象编程的核心概念之一。
理解类与依赖关系有助于我们更好地组织代码,实现代码的模块化、复用和扩展。
本文将详细介绍类与依赖关系的相关概念,以及如何在实际开发中运用依赖关系提升代码质量。
二、类与依赖关系概述1.类的定义类是一种抽象的数据类型,用于描述具有相同属性和行为的一类对象。
类定义了对象的属性和方法,以及对象之间的交互方式。
2.依赖关系的定义依赖关系是指一个类(或对象)需要另一个类(或对象)来实现其功能或完成其任务。
在面向对象编程中,依赖关系表现为一个类依赖于另一个类。
3.类与依赖关系的关系类与依赖关系密切相关。
类的划分和组合反映了现实世界中对象之间的依赖关系。
通过识别和刻画类之间的依赖关系,我们可以更好地反映现实世界中的问题域。
三、类之间的依赖关系类型1.泛化关系泛化关系是指一个类(子类)继承另一个类(父类)的属性和方法。
子类可以扩展或重写父类的属性和方法。
2.实现关系实现关系是指一个类(接口)定义了一组方法,另一个类(实现类)实现了这组方法。
实现类可以看作依赖于接口。
3.关联关系关联关系是指两个类之间存在某种联系,如一对一、一对多或多对多关系。
这种关系反映了类之间的依赖关系。
四、依赖关系的应用1.代码组织与模块化依赖关系有助于我们将代码组织成模块化的结构。
通过识别类之间的依赖关系,我们可以将相关功能组织在一起,降低模块间的耦合度。
2.代码复用与扩展依赖关系使我们能够实现代码的复用和扩展。
继承、实现和关联关系都可以实现代码的复用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。
类与类之间存在以下关系:
(1)泛化(Generalization)
(2)关联(Association)
(3)依赖(Dependency)
(4)聚合(Aggregation)
UML图与应用代码例子:
1.泛化(Generalization)
[泛化]
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
一般化的关系是从子类指向父类的,与继承或实现的方法相反。
[具体表现]
父类父类实例=new 子类()
[UML图](图1.1)
图1.1Animal类与Tiger类,Dog类的泛化关系
[代码表现]
1.class Animal{}
2.class Tiger extends Animal{}
3.public class Test
4.{
5.public void test()
6.{
7.Animal a=new Tiger();
8.}
9.}
2.依赖(Dependency)
[依赖]
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
[具体表现]
依赖关系表现在局部变量,方法的参数,以及对静态方法的调用
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作
[UML表现](图1.2)
图1.2 Person类与Screwdriver类的依赖关系
[代码表现]
1.public class Person{
2./** 拧螺丝*/
3.public void screw(Screwdriver screwdriver){
4.screwdriver.screw();
5.}
6.}
3.关联(Association)
[关联]
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
[具体表现]
关联关系是使用实例变量来实现
[现实例子]
比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司
[UML图] (图1.3)
图1.3 公司和员工的关联关系
[代码表现]
1.public class Company{
2.private Employee employee;
3.public Employee getEmployee(){
4.return employee;
5.}
6.public void setEmployee(Employee employee){
7.this.employee=employee;
8.}
9.//公司运作
10.public void run(){
11.employee.startWorking();
12.}
13.}
(4)聚合(Aggregation)
[聚合]
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。
聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。
[具体表现]
与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。
关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。
[关联与聚合的区别]
(1)关联关系所涉及的两个对象是处在同一个层次上的。
比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。
比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。
部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。
比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)拆了下来。
[UML图](图1.4)
图1.3 电脑和组件的聚合关系
[代码表现]
1.public class Computer{
2.private CPU cpu;
3.public CPU getCPU(){
4.return cpu;
5.}
6.public void setCPU(CPU cpu){
7.this.cpu=cpu;
8.}
9.//开启电脑
10.public void start(){
11.//cpu运作
12.cpu.run();
13.}
14.}。