UML关系(泛化,实现,依赖,关联(聚合,组合))
组合,关联,聚合的区别
组合,关联,聚合的区别类间关系在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造⽐单独⼯作更⼤的语义。
在UML类图中,关系⽤类框之间的连线来表⽰,连线上和连线端头处的不同修饰符表⽰不同的关系。
类之间的关系有继承(泛化)、关联、聚合和组合。
(1)继承:指的是⼀个类(称为⼦类)继承另外的⼀个类(称为基类)的功能,并增加它⾃⼰的新功能的能⼒,继承是类与类之间最常见的关系。
类图中继承的表⽰⽅法是从⼦类拉出⼀条闭合的、单键头(或三⾓形)的实线指向基类。
例如,图3.2给出了MFC中CObject类和菜单类CMenu的继承关系。
图3.2 类的继承类的继承在C++中呈现为:class B { } class A : public B{ }(2)关联:指的是模型元素之间的⼀种语义联系,是类之间的⼀种很弱的联系。
关联可以有⽅向,可以是单向关联,也可以是双向关联。
可以给关联加上关联名来描述关联的作⽤。
关联两端的类也可以以某种⾓⾊参与关联,⾓⾊可以具有多重性,表⽰可以有多少个对象参与关联。
可以通过关联类进⼀步描述关联的属性、操作以及其他信息。
关联类通过⼀条虚线与关联连接。
对于关联可以加上⼀些约束,以加强关联的含义。
关联在C++中呈现为:class A{...} class B{ ...} A::Function1(B &b) //或A::Function1(B b) //或A::Function1(B *b)即⼀个类作为另⼀个类⽅法的参数。
(3)聚合:指的是整体与部分的关系。
通常在定义⼀个整体类后,再去分析这个整体类的组成结构。
从⽽找出⼀些组成类,该整体类和组成类之间就形成了聚合关系。
例如⼀个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动⼒攻击潜艇等。
需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。
(4)组合:也表⽰类之间整体和部分的关系,但是组合关系中部分和整体具有统⼀的⽣存期。
类之间的几种关系
类之间的⼏种关系类之间的关联关系UML类图中的关系分为四种:泛化、依赖、关联、实现;关联关系⼜可以细化为聚合和组合。
⼀、泛化(Generalization)泛化是⽗类和⼦类之间的关系,⼦类继承⽗类的所有结构和⾏为。
在⼦类中可以增加新的结构和⾏为,也可以覆写⽗类的⾏为。
⼀般⽤⼀个带空⼼箭头的实线表⽰泛化关系,UML图如下:泛化对应Java中继承关系,即⼦类继承⽗类中出private修饰外的所有东西(变量、⽅法等)。
⽰例代码:public class Animal {}public class Tiger extends Animal {}Tiger继承Animal,因此Tiger与Animal之间是泛化(继承)关系。
这个很好理解。
⼆、依赖(Dependency)依赖关系是⼀种使⽤关系,特定事物的改变有可能会影响到使⽤该事物的事物,反之不成⽴。
在你想显⽰⼀个事物使⽤另⼀个事物时使⽤。
⼀般⽤⼀条指向被依赖事物的虚线表⽰,UML图如下:通常情况下,依赖关系体现在某个类的⽅法使⽤另⼀个类作为参数。
代码⽰例:public class Screwdriver { //螺丝⼑,作为⼈类的⼯具,是⽤来被⼈类使⽤的}public class Person{public void screw(Screwdriver src){ //拧螺丝,需使⽤螺丝⼑}}Person类的screw()⽅法在使⽤时就得传⼊⼀个Screwdriver类型的参数,这样Screwdriver的改变就会影响到Person,因此Person与Screwdriver之间就是依赖关系(Person依赖于Screwdriver)。
三、关联(Association)是⼀种结构关系,说明⼀个事物的对象与另⼀个事物的对象相联系。
给定有关联的两个类,可以从⼀个类的对象得到另⼀个类的对象。
关联有两元关系和多元关系。
两元关系是指⼀种⼀对⼀的关系,多元关系是⼀对多或多对⼀的关系。
软件工程复习题及答案(完整)
一、选择1、文档是软件产品的一部分,没有文档的软件就不称其为软件.对2、在需求分析过程中,分析员要从用户那里解决的最重要的问题是给该软件提供哪些信息。
错3、需求规格说明书在软件开发中具有重要的作用,它也可以作为软件可行性分析的依据。
错4、建立用例模型的步骤包括确定角色、确定用例和绘制用例图。
错5、数据流图建立系统的功能模型,它由数据流、加工和数据存贮组成。
错6、软件配置管理是一组标识、组织和控制修改源程序的活动. 错7、UML是一种直观化、明确化、构建和文档化软件产物的通用语言。
错8、好的测试是用少量的测试用例运行程序,发现被测程序尽可能多的错误。
对9、边界值分析方法是取输入/输出等价类的边界值作为测试用例。
对10、面向对象的分析是面向计算机系统建立软件系统的对象模型.错11、(D)是将系统化的、规范的、可定量的方法应用于软件的开发、运行和维护的过程,它包括方法、工具和过程三个要素。
A 软件过程B 软件测试C 软件生存周期D 软件工程12、ISO9000是由ISO/TC176制定的关于(B)和质量保证的国际标准。
A 质量控制B 质量管理C 质量策划D 质量改进13、CMM提供了一个框架,将软件过程改进的进化步骤组织成5个成熟度等级.除第1级外,每个等级都包含了实现该成熟度等级目标的若干(B).A 关键实践B 关键过程域C 软件过程能力D 软件过程14、在软件开发的各种资源中,(D)是最重要的资源。
A 开发工具B 方法C 硬件环境D 人员15、软件的复杂性是(A),它引起人员通信困难、开发费用超支、开发时间超时等问题。
A 固有的B 人为的C 可消除的D 不可降低的16、在各种不同的软件需求中,(D)描述了用户使用产品必须要完成的任务,可以在用例模型或方案脚本中予以说明。
A 业务需求B 功能需求C 非功能需求D 用户需求17、原型化方法是用户和软件开发人员之间进行的一种交互过程,适用于(A)系统。
A 需求不确定的B 需求确定的C 管理信息D 决策支持18、(A)意味着一个操作在不同的类中可以有不同的实现方式.A 多态性B 多继承C 类的可复用D 信息隐蔽19、时序图反映对象之间发送消息的时间顺序,它与(D)是同构的。
UML类关系图(泛化,实现,依赖,关联(聚合,组合))
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 语⾔中关联关系是使⽤实例变量实现的.关联关系还包括:聚合,组合关系。
UML图中类之间的关系_依赖,泛化,关联,聚合,组合,实现答辩
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现1.2.3.4.5.6.类与类图1 类(Class封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
2 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。
一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。
3 类的属性即类的数据职责,类的操作即类的行为职责一、依赖关系(Dependence依赖关系(Dependence):假设A类的变化引起了B 类的变化,则说名B类依赖于A类。
• 依赖关系(Dependency 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
• 在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
[java] view plaincopyprint?1. public class Driver2. {3. public void drive(Car car4. {5. car.move(;6. }7. ……8. }9. public class Car10. {11. public void move(12. {13. ......14. }15. ……16. }{car.move(;}……}public class Car{public void move({......}……}依赖关系有如下三种情况:1、A类是B类中的(某中方法的)局部变量;2、A类是B类方法当中的一个参数;3、A类向B类发送消息,从而影响B类发生变化;GeneralizationGeneralization A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化)• 泛化关系(Generalization也就是继承关系,也称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。
UML类图几种关系的总结
UML类图几种关系的总结在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)1. 泛化(Generalization)【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。
例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类2. 实现(Realization)【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.【箭头指向】:带三角箭头的虚线,箭头指向接口3. 关联(Association)【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量【箭头及指向】:带普通箭头的实心线,指向被拥有者上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。
但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
下图为自身关联:4. 聚合(Aggregation)【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。
如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量【箭头及指向】:带空心菱形的实心线,菱形指向整体5. 组合(Composition)【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。
如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
C# uml图
C# UML类图UML类图有关联、聚合/组合、依赖、泛化(继承,实现)这样几种关系。
事实上关联、聚合/组合这几种关系很容易搞混。
比如图1.1在PowerDesigner中生成的代码都是一样的。
图1.1而什么时候使用关联,聚合/组合呢?1、关联当Class_A与Class_B有一种关系时使用,比如父子关系。
2、聚合/组合当Class_A与Class_B有包含关系,是has a的情况使用。
具体看如果Class_A 包含Class_B,而Class_A知道Class_B的生命周期,那就用组合;如果有包含关系却不知道生命周期,那就用聚合。
图1.2如图1.2,父亲(Father)让儿子(Son)去做一些事情,这就是关联。
而人(Person)有一个脑袋(Head),人死了,脑袋自然没用了,这就用组合。
电脑(Computer)有条内存,现在电脑坏掉了,但是内存还能用,这就是聚合。
反映成代码就是:1、关联public class Son{public void DoSomething() {}}public class Father{public Son son;public Father(Son son){this.son = son;}public void LetSonTodo() {son.DoSomething();}}2、组合public class Head{public void Think(){}}public class Person{public Head head;public Person(){head = new Head();}public void Think(){head.Think();}}3、聚合public class Memory{}public class Computer{public Memory memory;public Computer(Memory memory) {this.memory = memory;}}在C#中依赖也有特点。
UML类图关系大全
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而独立存在。
但这是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。
UML中关系在visio中的表示
Uml 关系主要有四大类:依赖,关联,泛化,实现。
其中依赖和关联是事物之间语义上的横向关系,泛化和实现是事物之间的纵向关系。
一:依赖Dependency图示:----->定义:关系最为松散的,单向的,暂时产生关系的事物之间使用。
使用图例:在静态图、组件图、部署图中两事物的弱依赖关系用此图示。
二:关联Association图示:此图为visio中画法(在uml静态结构中,拖动复合图例,然后双击此图例,将出现下图,在关联端list中,聚合列都选择无,然后在isNavigable列中选择划箭头的端。
然后点选确定,就出现右侧的关联图例)。
定义:两事物之间的比较密切关系。
实体之间的一个结构化关系表明对象是相互连接的。
箭头是可选的,它用于指定导航能力。
如果没有箭头,暗示是一种双向的导航能力。
关联转换为一个实例作用域的变量。
可为一个关联附加其他修饰符。
多重性(Multiplicity)修饰符暗示着实例之间的关系。
使用图例:在静态图中使用,其他图中也有类似的关联关系,但细化为其他关系。
其中具体细分了两种关系:聚合和组合。
1聚合Aggregation图示:此图为visio中画法(在uml静态结构中,拖动复合图例,然后双击此图例,将出现下图,在关联端list中,在聚合列中在需划箭头端选择共享选项。
然后点选确定,就出现左侧的聚合图例)。
定义:整体和个体之间的关系,个体生命周期的消亡对整体生命周期没有太大的影响。
has a的关系。
聚合是关联的一种形式,代表两个类之间的整体/局部关系。
聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。
聚合也转换成一个实例作用域变量。
关联和聚合的区别纯粹是概念上的,而且严格反映在语义上。
聚合还暗示着实例图中不存在回路。
换言之,只能是一种单向关系。
2组合Composition图示:此图为visio中画法(在uml静态结构中,直接拖动复合图例)定义:整体和个体之间的关系,contains a 的关系。
uml课件第3章
+executive
Command
+ Execute()
OpenCommand
+ Execute()
PasteCommand
+ Execute()
30
(2) OpenCommand和PasteCommand是什么关系? 组合 泛化(类属)
聚合
④ 没关系
(3) 编辑菜单(EditMenu)是一种菜单,下面哪个图较好的描述 了二者之间的关系?
可以用于用例之间的依赖关系的衍型
可以用于为对象间的交互作用建模的衍型 可以应用于状态机上下文中的衍型
(13)<<become>> (14)<<call>> (15)<<copy>> (16)<<send>> (11)<<extend>> (12)<<include>>
(9)<<access>> (10)<<import>>
Customer
Date
4
StarUML是什么?
适合用户的UML工具 StarUML™是支持UML (Unified Modeling Language(统一模
型语言))的建模平台软件。
基于UML1.4版本,提供11种不同类型的图,采纳了UML2.0的
表示法。
通过支持UML轮廓(profile)的概念积极地支持UMD(Model
1第3章uml的关系2uml的关系?依赖dependency关系?类属generalization关系?关联association关系?实现realization关系3依赖关系?如果一个模型元素的变化会影响另一个模型元素这种影响不必是可逆的那么就说在这两个模型元素之间存在依赖关系
软件工程导论试题
一、单项选择题(每小题3分,共10题)1、需求分析的任务不包括(B)。
A.问题分析B.系统设计C.需求描述D.需求评审。
2、当模块中包含复杂的条件组合,只有(A)能够清晰地表达出各种动作之间的对应关系。
A.判定表和判定树B.盒图C.流程图D.关系图3、为适应软件运行环境的变化而修改软件的活动称为(B)。
A.纠错性维护B.适应性维护C.改善性维护D.预防性维护4、下列不属于软件工程方法3要素的是(D)。
A)方法B)工具C)过程D)人员5、软件的发展经历了(D)个发展阶段。
A.一B.二C.三D.四6、下列不属于UML中的动态图的是(B)。
A)状态图B)对象图C)协作图D)活动图7、一个模块的(B)是指能直接调用(控制)该模块的模块数。
A.扇出数B.扇入数C.宽度D.深度8、下列耦合中,模块独立性最好的是(A)。
A)非直接耦合B)数据耦合C)外部耦合D)内容耦合9、CMM提供了一个框架,将软件过程改进的进化步骤组织成5个成熟度等级。
除第1级外,每一级都包含了实现这一级目标的若干关键过程域,每一个关键过程域又包含若干(A)。
A 关键实践B 软件过程性能C 软件过程能力D 软件过程10、UML的扩展机制不包括(C)。
A)构造型B)标记值C)注解D)约束二、填空题(每题2分,共5题)1、任何复杂的程序流程图都只应该由5种基本控制结构组合或嵌套而成,这5中基本结构分别是顺序型、选择型、先判定型循环、后判定型循环、多情况型选择。
2、在进行结构化分析时,对数据流图进行分层应注意父图和子图平衡。
3、UML的基本构造块包含:视图、图和模型元素。
4、自行车类与自行车车轮类之间是聚集关系。
5、在进行软件规模估算时,与代码行度量方式相比,功能点度量的估算结果更客观和合理。
三、判断题(每题2分,共10题)1、目前,软件项目的进度安排比较常用的方法包括程序评估与审查技术(PERT)和关键路径法(CPM)。
(对)2、缺乏处理大型软件项目的经验。
2.3.6 UML基本组成
29
部署图
部署图
显示系统中软件和硬件的物理架构。通常部署图中显示实际的计算机和 设备(用结点表示),以及各个结点之间的关系(还可以显示关系的类型)。
30
小结
UML的组成部分包括:UML基本构造块、UML规则和UML 公共机制。 UML有三种基本构造块,分别是事物、关系和图。 UML事物包括结构事物、行为事物、分组事物、注释事物 四种。
15
注释事物(annotational thing)
注释事物 注释事物是UML模型的解释部分。这些注释事物用来
描述、说明和标注模型的任何元素。有一种主要的注释事
物,称为注解(note)。在图形上,注解用一个右上角是折 角的矩形表示 。
16
2 UML关系
UML的关系
(1)依赖关系 (dependency)
④协作(collaboration) 协作描述合作完成某个特定任务的一组类及其关联的集合, 用于使用情形的实现建模。
在图形上,协作用一个包含名称的虚线椭圆表示。
10
结构事物(structural thing)
⑤用例(use case) 用例是对一组序列动作的描述,系统执行这些动作将对用 例的参与者(actor ,有些书翻译成“角色”)产生可以观察的结
26
顺序图
顺序图
用来反映若干个对象 之间的动态协作关系, 也就是随着时间的流逝, 对象之间是如何交互的 。
27
协作图
协作图
协作图也是一种交互图, 它强调收发消息的对象 的组织结构。因为协作 图和顺序图在结构上是 相同的,所以它们是可 以互相转换的。
28
组件图
组件图
用来反映代码的物理结构。代码的物理结构用代码组件表示。组件可以 是源代码、二进制文件或可执行文件组件。
UML中的依赖关系
UML 中的依赖关系UML 中的五种关系和设计模式中的代码实现.⼜重新听了⼀遍UML 中的关系.感觉⼜是收获很⼤.UML 中的关系有依赖,关联(聚合,组合),泛化(也叫继承),实现现在⼀个⼀个的来实现:⼀:依赖依赖关系图他的意思就是Use a ⽤到的意思,两个类的代码中不体现 看代码(C#)imageimage但是在代码中不体现,怎么反映他们之间的依赖关系呢? 具体的有三种1:water 是公共的类,animal 可以调⽤2:water 是animal 的⼀个⽅法中的变量image3:water 是animal 函数的参数返回值image在看看设计模式中依赖的具体举例1: //策略模式的现⾦收费⼯⼚类依赖正常收费⼦类收费⼦类 2:3: //收费抽象类4: abstract class CashSuper5: {6: public abstract double acceptCash(double money); 7:8: }9: //正常收费⼦类10: class NormalSuper : CashSuper11: {12: public override double acceptCash(double money)13: {14: return money;15: }16: }17: //现⾦收费⼯⼚类18: class CashFactory19: {20: public static CashSuper createCashAccept(string type)21: {22: CashSuper cs = null;23: if (type =="正常收费")24: cs=new NormalSuper() ;25: return cs;26: }27: }转⾃:/lsh6688/article/details/6026542。
UML的类图关系分为:关联、聚合组合、依赖、泛化(继承)
UML的类图关系分为:关联、聚合组合、依赖、泛化(继承)UML的类图关系分为:关联、聚合/组合、依赖、泛化(继承)。
⽽其中关联⼜分为双向关联、单向关联、⾃⾝关联;下⾯就让我们⼀起来看看这些关系究竟是什么,以及它们的区别在哪⾥。
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:};class C10...{};组合(也有⼈称为包容):⼀般是实⼼菱形加实线箭头表⽰,如上图所⽰,表⽰的是C8被C7包容,⽽且C8不能离开C7⽽独⽴存在。
依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系
依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现
关系
依赖关系:表示一个类的变化会影响另一个类,但两个类之间并不存在拥有和共享的关系。
类之间通过参数传递、方法调用等方式产生依赖关系。
关联关系:表示两个类之间的联系,强调的是它们之间的共享。
关联关系可以是单向的或双向的,可以是一对一的、一对多的或多对多的。
聚合关系:表示整体与部分之间的关系,整体对象拥有部分对象,但部分对象不是整体对象的一部分。
聚合关系是一种弱关联关系,两个对象的生命周期可以独立。
组合关系:也表示整体与部分之间的关系,但部分对象是整体对象的一部分,没有它们整体对象就无法存在。
组合关系是一种强关联关系,两个对象的生命周期是相互依赖的。
泛化关系:表示一个类是另一个类的特殊形式,继承关系的表示方式之一。
泛化关系体现了一种继承和特化的关系,子类继承了父类的属性和方法,并可以进行扩展和覆盖。
实现关系:表示一个类实现了一个接口,接口可以定义一组规范,类需要实现这些规范中定义的方法。
实现关系实现了一种接口或协议,在面向对象的编程中强调了一种规范和标准的约定。
类与类之间的关系--泛化,关联,依赖,实现
类与类之间的关系--泛化,关联,依赖,实现类,对象是⾯向对象的基础,类与类之间的关系是⾯向对象不可或缺的⼀部分。
以下将从类的关系定义,UML中的符号表⽰,代码实现三⽅⾯介绍类与类之间的关系。
1、泛化(Generalization):也成为继承关系。
指⼀个类(⼦类或者⼦接⼝)继承另外⼀个类(⽗类或者⽗接⼝)的功能。
并能够添加⾃⼰的功能。
在程序程序中⽤keywordextends明⽩标识,在UML设计中⽤空三⾓和实线表⽰。
从⼦类指向⽗类。
或者⼦接⼝指向⽗接⼝。
如图代码:public class Cat {public Cat(){}public void Eat(){}public void Run(){}public void Walk(){}}⼦类演⽰样例public class WhiteCat extends Cat {public WhiteCat(){}public void Eat(){}public void Run(){}public void Walk(){}}2、实现(Realize)是指⼀个class 实现interface接⼝的功能,⽤keywordimplements标识。
在UML设计中⽤⼀条带空⼼箭头的虚线表⽰,箭头指向接⼝。
如图代码:public interface Iaction {public void drink();public void eat();}public class dog implements Iaction {public dog(){}public void finalize() throws Throwable {}public void drink(){}public void eat(){}}3、依赖(Dependency)是指⼀个类A使⽤到了还有⼀个类B,⽽这样的使⽤关系是具有偶然性、暂时性。
可是类B的变化会影响到类A。
表如今代码层⾯,为类B作为參数被类A在某个⽅法中使⽤。
UML类图各符号含义
UML类图各符号含义类图基本符号可拆分为虚线,箭头,实线,空⼼右三⾓,实⼼右三⾓,空⼼菱形和实⼼菱形。
由这些基本的图形进⾏组合构成了类图的基本符号。
这⾥要注意这⼏个符号的顺序,代表了类与类之间关系的耦合程度。
越向右耦合度越⾼。
其中虚线+箭头是表⽰即依赖的关系依赖关系: 是⼀种使⽤的关系, 即⼀个类的实现需要另⼀个类的协助, 所以要尽量不使⽤双向的互相依赖.指C5可能要⽤到C6的⼀些⽅法,也可以这样说,要完成C5⾥的所有功能,⼀定要有C6的⽅法协助才⾏。
C5依赖于C6的定义,⼀般是在C5类的头⽂件中包含了C6的头⽂件。
ROSE对依赖关系不产⽣属性。
形式上⼀般是A中的某个⽅法把B的对象作为参数使⽤(假设A依赖于B)。
实线+箭头表⽰关联的关系关联关系: 是⼀种拥有的关系, 可以分为双向关联, 单向关联和⾃⾝关联.双向关联是指双⽅都拥有对⽅的引⽤, 都可以调⽤对⽅的公共属性和⽅法.单向关联是指只有某⼀⽅拥有另⼀⽅的引⽤, 这样只有拥有对⽅者可以调⽤对⽅的公共属性和⽅法.⾃⾝关联是指拥有⼀个⾃⾝的引⽤.C3->C4:表⽰相识关系,指C3知道C4,C3可以调⽤C4的公共属性和⽅法。
没有⽣命期的依赖。
⼀般是表⽰为⼀种引⽤。
实线+空⼼右三⾓表⽰的是泛化,即类的继承关系。
如果两个类存在泛化的关系时就使⽤,例如⽗和⼦,动物和⽼虎,植物和花等。
泛化关系: 是⼀种继承关系, 表⽰⼀般与特殊的关系, 它指定了⼦类如何特化⽗类的所有特征和⾏为.实现(Realization)实现关系: 是⼀种类与接⼝的关系, 表⽰类是接⼝所有特征和⾏为的实现泛化和实现的区别就在于⼦类是否继承了⽗类的实现, 如有继承则关系为泛化, 反之为实现.实线+空⼼菱形表⽰的是聚合的关系聚合:表⽰C9聚合C10,但是C10可以离开C9⽽独⽴存在(独⽴存在的意思是在某个应⽤的问题域中这个类的存在有意义。
)实线+实⼼菱形则表⽰组合的关系组合(也有⼈称为包容):⼀般是实⼼菱形加实线箭头表⽰,如上图所⽰,表⽰的是C8被C7包容,⽽且C8不能离开C7⽽独⽴存在。
4-2 UML类目关系
4依赖 定义;依赖是一种使用关系,用于描述一个事物( 定义;依赖是一种使用关系,用于描述一个事物(如类 Window)使用另一事物(如类Event)的信息和服务。 Window)使用另一事物(如类Event)的信息和服务。 Event 3点说明: 点说明: 点说明 在大多数情况里, 在大多数情况里,使用依赖来描述一个类使用另一个的操 作; 如果被使用的类发生变化, 如果被使用的类发生变化,那么另一个类的操作也会受到 影响; 影响; 依赖可用于其它事物之间,例如注解之间和包之间。 依赖可用于其它事物之间,例如注解之间和包之间。
注: 在明确给出关联端点名的情况下, 在明确给出关联端点名的情况下,通常可以不给出该关联 名.但若一个类有多个关联,可使用关联名或端点名来区分 但若一个类有多个关联, 它们.若一个类有多个端点,可使用端点名来区分它们. 它们.若一个类有多个端点,可使用端点名来区分它们. 同一个类可以在其它关联中扮演相同或不同的角色. 同一个类可以在其它关联中扮演相同或不同的角色.
关联的语义表达( 点 关联的语义表达(6点): 关联名(name):关联可以有一个名字,用于描述该关联的“ 关联名(name):关联可以有一个名字,用于描述该关联的“ (name):关联可以有一个名字 涵义” 为了避免该关联涵义上的歧义性, 涵义”,为了避免该关联涵义上的歧义性,可给出其关联方向 涵义上的歧义性 。如上图所示。 如上图所示。 角色(role):当一个类参与一个关联时,有一个特定角色 角色(role) 当一个类参与一个关联时, 。在类的一个关联中,可以显式地命名该角色,如下所示: 在类的一个关联中,可以显式地命名该角色,如下所示:
表示: 表示: 表示组合的 不同方法
Байду номын сангаас
UML试题及答案
一、选择题1•类的结构是()°(E)A.由代码来表示B.由属性和关系来表示C.由操作来表示D.由对象的交互来表示E.选项B和C2•类的行为是()°(A)A.由一组操作决定B.由类的属性决定C.对类的每一个对象唯一的D.由父类决定E.选项A和B3•顺序图反映对象之间发送消息的时间顺序,它与()是同构的。
(C)A.用例图B.类图C.协作图D.状态图4.()定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现。
(A)A.用例图B.类图C.活动图D.状态图5•状态图包括()°(E)A.类的状态B.状态之间的转换C.类执行的动作D.触发类的动作的事件E.所有以上选项6•下列属于状态的组成部分的有(AB)。
A.名称B.转移C.条件D.事件7•下列各种图可用于静态建模的有()°(B)8•下列不属于属性的可见性的是()。
(0A.公有的B.私有的C.私有保护的D.保护的9•下面不属于用况之间关系的是()°(A )A.友元B.扩展C.包含D.泛化10.通常对象有很多属性,下面仅能在对象内部访问的属性可见性限制是 ()O (D )A.公有的(public )B.受保护的(protected )C ・友员(friendly )D.私有的(private )11.在用况之间,会有三种不同的关系,下列不是用况之间关系的是()。
(D )A.包含(include )B.扩展(extend )C.泛化(generalization )D.关联(connect )12•在ATM 自动取款机的工作模型中(用户通过输入正确的用户资料,从银行取钱的过程),下面不是“Actor ”的是()°(D )A.用户B.ATM 取款机C.ATM 取款机管理员D.取款13•下面不是活动图中的基本元素的是()°(D )A.状态、分支B.分叉、汇合C.泳道、对象流D.用况、状态14•在下面的图例中,哪个用来描述活动(activity )(A.状态图 B ・类图C ・序列图 D.活动图)O (A)15.UML中类的有三种,下面哪个不是其中之一()A.实体类B.边界类C.控制类D.主类16•顺序图是强调消息随时间顺序变化的交互图,下面不是用来描述顺序图的组成部分的是()°(E)A.类角色B.生命线C・激活期D.消息E•转换17•关于协作图的描述,下列不正确的是()°(D)A.协作图作为一种交互图,强调的是参加交互的对象的组织;B.在ROSE工具中,协作图可在顺序图的基础上按“F5”键自动生成;C.协作图中有消息流的顺序号;D.协作图是顺序图的一种18•关于包的描述,哪个不正确(E)A.和其他建模元素一样,每个包必须有一个区别于其他包的名字;B.包中可以包含其他元素,比如类、接口、组件、用况等等;C.包的可见性分为:public、protected、private;D.引入(import)使得一个包中的元素可以单向访问另一个包中的元素;E.导出(export)使的一个包中的元素可以单向访问另一个包中的元素;二、名词解释(1)对象:对象是对象类的实例,用于模型化特定的实体。
UML中的泛化和实现关系在软件设计中的应用
UML中的泛化和实现关系在软件设计中的应用软件设计是现代软件开发过程中不可或缺的一环。
在软件设计中,UML(统一建模语言)是一种常用的建模语言,用于描述软件系统的结构和行为。
在UML中,泛化和实现关系是两个重要的概念,它们在软件设计中扮演着关键的角色。
泛化关系是一种继承关系,用于描述类与类之间的一般与特殊的关系。
在泛化关系中,一个类(称为子类或派生类)可以继承另一个类(称为父类或基类)的属性和方法。
这种继承关系使得子类可以重用父类的代码,并且可以添加自己特有的属性和方法。
泛化关系在软件设计中的应用非常广泛。
例如,在一个图书管理系统中,可以定义一个基类Book,然后通过泛化关系创建各种特殊类型的书籍,如小说、教材等。
这样,每个特殊类型的书籍都可以继承基类Book的通用属性和方法,同时可以添加自己特有的属性和方法。
实现关系是一种接口与实现类之间的关系,用于描述类与接口之间的实现关系。
在实现关系中,一个类可以实现一个或多个接口,通过实现接口中定义的方法来完成特定的功能。
实现关系在软件设计中的应用也非常广泛。
例如,在一个电子商务系统中,可以定义一个支付接口,然后通过实现关系创建各种具体的支付方式,如支付宝、微信支付等。
这样,每种支付方式都必须实现支付接口中定义的方法,以便系统可以统一调用。
实现关系使得系统具有良好的扩展性和灵活性,可以方便地添加新的支付方式。
泛化和实现关系在软件设计中的应用不仅仅局限于类与类之间的关系,还可以用于描述其他软件设计元素之间的关系。
例如,在UML中,可以使用泛化关系描述用例之间的一般与特殊关系。
一个通用的用例可以通过泛化关系派生出多个特殊的用例,以满足不同的需求。
同样地,实现关系也可以用于描述组件之间的接口与实现关系,以及节点之间的接口与实现关系。
这些关系的应用使得软件设计更加灵活和可扩展。
除了泛化和实现关系,UML还提供了其他类型的关系,如关联、聚合和组合等。
这些关系可以用于描述不同元素之间的关联和依赖关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
UML关系(泛化,实现,依赖,关联(聚合,组合))
UML的构造快包含3种:
(1) 事物(4种):结构事物,行为事物,分组事物,注释事物
(2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系
(3) 图(10种):用例图,类图,对象图,包图,组件图,部署图,状态图,活动图,序列图,协作图
事物是对模型中最具代表性的成分的抽象;关系把事物结合在一起;图聚集了相关的事物。
关系(4种): UML 中类与类, 类与接口, 接口与接口这间的关系有: 泛化(generalization) 关系, 关联(association)关系( 关联, 聚合, 合成), 依赖(dependency)关系,实现(realization)关系.
●泛化(generalization)关系
是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性。
●实现(realization)关系
指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;
●依赖(dependency)关系
也是类与类之间的连接. 表示一个类依赖于另一个类的定义. 依赖关系总是单向的。
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用。
在java 中. 依赖关系体现为: 局部变量, 方法中的参数, 和对静态方法的调用.
●关联(association)关系
表示类与类之间的联接, 它使一个类知道另一个类的属性和方法.
关联可以使用单箭头表示单向关联, 使用双箭头或不使用箭头表示双向关联, 不建议使用双向关联. 关联有两个端点, 在每个端点可以有一个基数, 表示这个关联的类可以有几个实例.
常见的基数及含义:
0..1:0 或1 个实例.
0..*: 对实例的数目没有限制.
1: 只能有一个实例.
1..*: 至少有一个实例.
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的,表现在代码层面,为被关联类B以类属性的形式出现在关联类A 中,也可能是关联类A引用了一个类型为被关联类B的全局变量;在java 语言中关联关系是使用实例变量实现的.
聚合(aggregation)关系
关联关系的一种特例, 是强的关联关系. 聚合是整体和个体之间的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
聚合关系也是使用实例变量实现的. 从java 语法上是分不出关联和聚合的.
关联关系中两个类是处于相同的层次, 而聚合关系中两不类是处于不平等的层次, 一个表示整体, 一个表示部分.
组合(合成)关系(composition)
也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;合成关系不能共享. 。
表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
组合跟聚合几乎相同,唯一的区别就是“部分”不能脱离“整体”单独存在,就是说,“部分”的生命期不能比“整体”还要长。
总结:
对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖。