UML中继承实现依赖关联聚合组合的联系和区别_线条箭头
uml构件的种类
![uml构件的种类](https://img.taocdn.com/s3/m/f5dac51fdc36a32d7375a417866fb84ae45cc3f2.png)
uml构件的种类UML构件的种类UML(Unified Modeling Language)是一种用于软件开发和系统设计的标准建模语言,它提供了一系列的构件来描述系统的结构、行为和交互。
本文将介绍UML中常用的几种构件的种类和用途。
1. 类(Class)类是UML中最基本的构件之一,用于描述系统中的对象和它们的属性、操作和关系。
类图是用于展示类之间关系的主要图形表示。
在类图中,类以矩形框表示,其中包含类名、属性和操作。
类之间的关系可以通过关联、聚合、组合、继承和实现等线条来表示。
2. 接口(Interface)接口是一种特殊的类,它定义了一组操作和行为,但没有具体的实现。
接口在类图中以斜角矩形框表示,并使用带有虚线箭头的线条与实现该接口的类相连。
通过接口,可以实现类之间的松耦合和多态性。
3. 对象(Object)对象是类的实例,它在系统中扮演着具体的角色。
对象在类图中以带有下划线的矩形框表示,并通过实例化关系与类相连。
对象的属性和操作可以通过类定义的属性和操作进行访问。
4. 用例(Use Case)用例描述了系统功能的行为和交互,它是从用户角度描述系统的功能需求。
用例图是用于展示用例之间关系的主要图形表示。
在用例图中,用例以椭圆形框表示,并使用线条描述用例之间的关系,如包含、扩展、泛化等。
5. 包(Package)包是用于组织和管理系统中类和其他构件的容器。
包可以包含类、接口、用例和其他包,通过包图可以展示系统中构件的层次结构和关系。
包在包图中以文件夹的形式表示,并使用线条连接不同的包。
6. 组件(Component)组件是系统中可独立部署和替换的模块,它封装了一组相关的类和接口。
组件图是用于展示组件之间关系和依赖的主要图形表示。
在组件图中,组件以矩形框表示,并使用线条描述组件之间的关系,如依赖、实现、协作等。
7. 节点(Node)节点表示系统中的物理设备或执行环境,例如服务器、计算机等。
节点图是用于展示节点之间关系和连接的主要图形表示。
UML中的组合关系详解
![UML中的组合关系详解](https://img.taocdn.com/s3/m/e8f5d65f0a1c59eef8c75fbfc77da26924c59644.png)
UML中的组合关系详解UML(Unified Modeling Language)是一种用于软件开发的建模语言,它提供了一套标准的符号和规则,用于描述软件系统的结构、行为和交互。
在UML中,组合关系(Composition)是一种非常重要的关系类型,用于描述类之间的整体与部分的关系。
本文将详细解析UML中的组合关系,包括其定义、特点以及在实际应用中的使用。
一、组合关系的定义组合关系是一种强关联的关系,它表示一个类(整体)由另外一个或多个类(部分)组成。
在组合关系中,整体对象负责管理和控制部分对象的生命周期,部分对象不能独立存在,只能作为整体对象的一部分存在。
组合关系通常用一个实心的菱形箭头表示,箭头指向整体对象。
二、组合关系的特点1. 强关联性:组合关系是一种强关联的关系,整体对象和部分对象之间具有很强的依赖关系。
整体对象的创建、销毁和生命周期管理都会影响到部分对象。
2. 独占性:部分对象只能属于一个整体对象,不能同时属于多个整体对象。
这意味着部分对象的复用性较低,它们的存在完全依赖于整体对象。
3. 寿命一致性:整体对象的生命周期决定了部分对象的生命周期。
当整体对象被销毁时,部分对象也会随之被销毁。
4. 约束性:组合关系还可以定义一些约束条件,限制整体对象和部分对象之间的关系。
例如,可以定义整体对象最多包含多少个部分对象,或者部分对象的类型必须满足某些条件等。
三、组合关系的实际应用组合关系在实际应用中有着广泛的应用场景,下面以一个汽车的例子来说明。
在汽车系统中,汽车是整体对象,而发动机、轮胎、座椅等是部分对象。
汽车由发动机、轮胎、座椅等部分对象组成,整体对象的生命周期决定了部分对象的生命周期。
当汽车被销毁时,发动机、轮胎、座椅等部分对象也会随之被销毁。
另外,组合关系还可以定义一些约束条件。
例如,汽车的座位数量必须大于0且小于等于乘客数量,发动机的类型必须符合汽车的设计要求等。
这些约束条件可以在类图中进行明确的表示,帮助开发人员更好地理解系统的结构和约束。
UML类图关系大全(经典)
![UML类图关系大全(经典)](https://img.taocdn.com/s3/m/dbd35d06e87101f69e31959d.png)
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图中类之间的关系_依赖,泛化,关联,聚合,组合,实现答辩
![UML图中类之间的关系_依赖,泛化,关联,聚合,组合,实现答辩](https://img.taocdn.com/s3/m/73d97c17e2bd960590c6776a.png)
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 模块之间的依赖关系](https://img.taocdn.com/s3/m/181ef95e640e52ea551810a6f524ccbff121cacf.png)
uml 模块之间的依赖关系模块之间的依赖关系是指在软件系统中,各个模块之间相互依赖的关系。
这种依赖关系可以通过UML(统一建模语言)来进行建模和描述。
在UML中,常用的表示依赖关系的符号是带箭头的虚线。
依赖关系是指一个模块在执行过程中需要调用另一个模块的功能或者使用另一个模块的资源。
依赖关系表现为一个模块对另一个模块的使用或者调用。
依赖关系可以是单向的,也可以是双向的。
一个模块对另一个模块的依赖可以是直接的,也可以是间接的。
直接依赖是指一个模块直接调用或者使用另一个模块的功能或者资源。
间接依赖是指一个模块通过其他模块间接地调用或者使用另一个模块的功能或者资源。
在UML中,依赖关系用虚线箭头表示,箭头指向被依赖的模块。
箭头的方向表示依赖的方向,从依赖者指向被依赖者。
依赖关系的建模可以帮助我们理清软件系统中各个模块之间的关系,从而更好地进行系统设计和开发。
下面我们通过几个例子来具体说明模块之间的依赖关系。
考虑一个简单的图书管理系统,其中包含图书馆、图书和读者三个模块。
图书馆模块依赖于图书和读者模块,因为图书馆需要调用图书和读者模块的功能来实现图书的借阅和归还。
图书和读者模块之间没有直接的依赖关系,但它们都依赖于图书馆模块,因为图书和读者的操作都需要通过图书馆来进行。
接下来,考虑一个电商系统,其中包含商品、购物车和订单三个模块。
购物车和订单模块都依赖于商品模块,因为购物车和订单需要使用商品的信息来进行操作。
商品模块不依赖于购物车和订单模块,因为商品可以独立存在。
购物车和订单模块之间没有直接的依赖关系,但它们都依赖于商品模块。
考虑一个学生信息管理系统,其中包含学生、课程和成绩三个模块。
成绩模块依赖于学生和课程模块,因为成绩需要记录学生和课程的信息。
学生和课程模块之间没有直接的依赖关系,但它们都依赖于成绩模块,因为学生和课程的信息都需要通过成绩模块进行管理和记录。
通过上述例子可以看出,模块之间的依赖关系是非常常见和重要的。
UML类图几种关系的总结
![UML类图几种关系的总结](https://img.taocdn.com/s3/m/35f216e7102de2bd960588d7.png)
UML类图几种关系的总结在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)1. 泛化(Generalization)【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。
例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类2. 实现(Realization)【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.【箭头指向】:带三角箭头的虚线,箭头指向接口3. 关联(Association)【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量【箭头及指向】:带普通箭头的实心线,指向被拥有者上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。
但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
下图为自身关联:4. 聚合(Aggregation)【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。
如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量【箭头及指向】:带空心菱形的实心线,菱形指向整体5. 组合(Composition)【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。
如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
uml各种箭头线的区别
![uml各种箭头线的区别](https://img.taocdn.com/s3/m/a4993cc3f71fb7360b4c2e3f5727a5e9856a27c5.png)
uml各种箭头线的区别UML中箭头线有多种类型,它们的主要区别在于它们表示的关系和含义不同。
以下是UML中箭头线的主要类型及其区别:1. 类箭头(Class 流向):表示从一个类流向另一个类的过程。
- 类箭头“->”表示从一个类流向另一个类。
- 服务箭头“->”表示从一个服务流向另一个服务。
- 继承箭头“."表示从一个类继承属性或方法到另一个类。
- 组合箭头“//”表示从一个类或服务组合成一个对象的过程。
2. 连接箭头(Association 流向):表示对象之间或类之间某种交互关系。
- 属性连接箭头“:”表示对象之间的属性关系。
- 方法连接箭头“->”表示对象之间的方法关系。
- 服务连接箭头“!”表示对象之间的服务关系。
- 聚合连接箭头“//”表示对象之间的聚合关系。
3. 聚合箭头(Association 聚合):表示对象之间的某种交互关系,同时也可以表示多个对象之间的聚合关系。
- 聚合箭头“->”表示一个对象引用另一个对象,并传递引用的值。
- 聚合箭头“//”表示多个对象之间的共享值关系。
- 聚合箭头“."”表示一个对象引用多个对象,并传递引用的值。
4. 关系箭头(Relationship 流向):表示对象之间的关系。
- 引用关系箭头“->”表示两个对象之间的引用关系。
- 连接关系箭头“."”表示一个对象之间的连接关系。
- 继承关系箭头“."”表示一个对象继承属性或方法到另一个对象的关系。
- 组合关系箭头“."”表示一个对象组合成另一个对象的关系。
UML箭头线的主要类型包括类箭头、连接箭头、聚合箭头和关系箭头,根据它们表示的关系和含义不同,可以用于不同的场景。
面向对象程序设计中的聚合与组合关系
![面向对象程序设计中的聚合与组合关系](https://img.taocdn.com/s3/m/bcf6d3bef605cc1755270722192e453610665b39.png)
面向对象程序设计中的聚合与组合关系面向对象程序设计(Object-Oriented Programming,OOP)是一种广泛应用的程序设计范式,它以对象作为程序的基本单元,将相关数据和方法封装在一起。
在OOP中,对象之间的关系通常可以分为聚合和组合两类。
本文将对这两种关系进行详细讲解。
一、聚合(Aggregation)聚合是指一个对象包含另一个对象,且被包含对象可以独立存在。
例如,一个图书馆包含多个书籍,但是这些书籍可以独立存在,也可以属于其他图书馆。
在UML类图中,聚合关系通常用空心的菱形箭头表示。
聚合关系的特点是:1. 被聚合对象与聚合对象之间是“整体-部分”的关系。
2. 被聚合对象可以独立存在,即该对象的生命周期不会受到聚合对象的生命周期的影响。
3. 一个聚合对象可以包含多个被聚合对象,但一个被聚合对象只能属于一个聚合对象。
4. 聚合关系通常是动态变化的,即一个对象可以在多个聚合对象之间移动。
例如,下面是一个简单的图书馆类:```javapublic class Library {private String name;private List<Book> books;public Library(String name) { = name;books = new ArrayList<>();}public void addBook(Book book) {books.add(book);}public void removeBook(Book book) {books.remove(book);}}```这个类中包含一个书籍列表,即聚合了多个Book对象。
但是,每个书籍可以独立存在,不受图书馆的限制。
二、组合(Composition)组合是指一个对象包含另一个对象,且被包含对象不能独立存在,它们是“整体-部分”的关系。
例如,一个汽车包含多个轮子,但是一个轮子不能独立存在。
简述类间的组合和聚合关系的区别与联系
![简述类间的组合和聚合关系的区别与联系](https://img.taocdn.com/s3/m/ff5388bded3a87c24028915f804d2b160b4e86c6.png)
简述类间的组合和聚合关系的区别与联系类间的组合和聚合关系是面向对象编程中常用的两种关系。
它们的区别和联系如下:
1. 区别:
组合关系是指两个类之间存在相互依赖的关系,其中一个类依赖于另一个类的属性或方法。
组合关系中的两个类是相互独立的,它们不能独立存在。
而聚合关系则是指两个类之间存在相互包含的关系,其中一个类包含另一个类的属性或对象,它们彼此之间是相互依赖的关系。
聚合关系中的两个类是相互依赖的,它们不能独立存在。
2. 联系:
组合和聚合关系之间存在一定的联系,组合可以看作是一种更紧密的聚合关系。
在组合关系中,两个类之间的依赖关系更加紧密,它们彼此之间相互依赖,互相提供支持。
而聚合关系则更加松散,两个类之间的依赖关系相对较弱,它们只是相互包含,并不提供支持。
3. 应用场景:
组合关系通常用于实现组件之间的交互和依赖关系,例如,在图形用户界面中,按钮可以作为一个组件与其他组件进行组合,以实现特定的功能。
而聚合关系则通常用于实现组件之间的相互依赖关系,例如,在文件系统中,文件夹可以包含文件,文件也可以包含文件夹,它们彼此之间相互依赖,以实现文件系统的正常运转。
4. 关系类型:
在面向对象编程中,通常有三种关系类型,分别是组合关系、聚合关系和关
联关系。
组合关系和聚合关系都是关系类型中比较典型的例子,它们区别在于它们之间的依赖关系更加紧密或松散。
而关联关系则是指两个类之间存在一对一的关系,例如,在人际关系中,一个人可以有一个父亲或一个母亲,但他们之间并不相互依赖,而是一种相互独立的关系。
类与类之间的关系(继承、实现、依赖、关联、聚合、组合)
![类与类之间的关系(继承、实现、依赖、关联、聚合、组合)](https://img.taocdn.com/s3/m/bbec0091dd88d0d233d46a09.png)
唐僧与徒弟是单向关联 徒弟与悟空、悟能、悟净是双向关联
聚合
当对象A被加入到对象B中,成为对象B的组成部分时, 对象B和对象A之间为聚合关系。聚合关系是关联关系的 一种,是强的关联关系。聚合是整体去个体之间的关系。 此时的整体与部分之间是可分离性的它们各自具有自己 的生命周期,部分可以属于多个整体对象,也可以为多 个整体对象共享。
强弱关系为: 组合>聚合>关联>依赖
实例: 当你要渡河时,就必须要调用船类
中的渡河方法。这就是依赖
人
船类 渡河
关联
两个相对独立的对象,当一个对象的实例与另一个对象的特定 实例存在固定关系时,就存在关联。亦是一种强的依赖性。不 存在依赖的偶然性、临时性。是长时性的。而且双方是平等的。 可以是单向的、也可以是双向的。
单向关联
类A认识类B,类A知道类B的存在,类A可以调用类B的方法。 代码表现:类A中有类B的变量或引用。
public class abstract Parents{ public abstract void method();
}
public class Child extends Parents{ public void method(){
} }
属性 方法
接口
接口就是在接口中写出方法,然后在调用接口类 时实现所有接口类中方法。java中通过 interface来表示接口。其一个类可以实现多个 接口,用implement来实现接口,用“,”来 连接多个接口。接口不能够被实例化。
组合也是关联关系的一种它是比聚合更加体现整体与个体之间的关系的整体与个体是不可分的当整体结束时个体就意味着结束个体离开整体时将不能够生存
类与类之间的关系
uml函数调用关系
![uml函数调用关系](https://img.taocdn.com/s3/m/d3c9a6f3d4bbfd0a79563c1ec5da50e2524dd16e.png)
uml函数调用关系
UML函数调用关系指的是在UML类图中,一个函数如何调用其他函数的关系和方式。
在UML类图中,函数之间的调用关系一般用箭头表示,箭头从调用函数指向被调用函数。
通过这种方式,可以清晰地描述函数之间的关系,帮助开发人员更好地理解和设计代码。
在UML类图中,函数的调用关系可以分为以下三种:
1. 组合关系:组合关系是指一个函数调用另一个函数,但是调
用函数的生命周期独立于被调用函数,即调用函数的生命周期并不依赖于被调用函数的生命周期。
在UML类图中,组合关系通常使用实线箭头表示。
2. 聚合关系:聚合关系是一种“部分-整体”的关系,其中一个函数包含另一个函数,并且被包含的函数可以独立于包含函数而存在。
在UML类图中,聚合关系通常使用带空心菱形的实线箭头表示。
3. 继承关系:继承关系是一种面向对象编程中的重要概念,其
中一个函数可以继承另一个函数的属性和方法。
在UML类图中,继承关系通常使用带空心三角形的实线箭头表示。
总之,UML函数调用关系是一个非常重要的概念,它可以帮助开发人员更好地理解和设计代码,从而提高代码的质量和可维护性。
- 1 -。
UML图中各种关系的表示和箭头的指向
![UML图中各种关系的表示和箭头的指向](https://img.taocdn.com/s3/m/717ed7e8856a561252d36f5f.png)
1、依赖关系2、继承关系3、聚合关系4、合成(组合)关系5、关联关系6、接口一、依赖:虚线箭头。
有箭头的那一端为被依赖关系。
代码体现:在一个类中,某个方法的参数为另外一个类(或几个类)的类型。
pblic classA{public int Sales(classB clsB){}REM sales是classA中的一个函数}二、继承:空心三角+实线表示。
有三角的那端为被继承者。
代码体现:一个类在声明的时候后面加“:”和被继承类的类名。
例如:class bird:animal.三、聚合:空心菱形+实线箭头。
箭头那端为被包含的对象。
即对象A可以包含对象B,但是对象B不一定是对象A的一部分。
代码体现:在一个类中有另一个类的对象,而且可以使对象数组。
public class classA{public classB() clsB}四、合成(组合):实心菱形+实线箭头。
箭头那端为被组合的对象。
代码体现:在A类中,初始化时,实例化B类。
它们同时生成。
(如何生成A类?)。
public class classA{private classB clsB{clsB=new classB();}}五、关联:实线箭头。
箭头那端表示被引用的对象。
一个类要知道另一个类。
代码体现:在一个类中,引用到另一个类。
(如何引用类?)例如:class class1{private class2 cls1;}六、接口:空心三角+虚线。
三角那端是定义接口类。
代码体现:定义一个类的时候加“:”和接口名。
在类中重写接口中的方法。
UML之用例图箭头方向2009年10月16日星期五 09:42 P.M.UML之用例图(use case)箭头方向:老是忘记箭头方向,惹笑话。
1、Association,无箭头,Actor连接UseCase即可;2、DirectedAssocition,Actor连接UseCase,箭头由Actor指向UseCase (角色指向用例);3、Generalization,继承,我把它念成“继承于”,当然是箭头由子指向父啦;4、Dependency,我念成“依赖于”,就知道箭头方向了;5、Include,我念成“包含了”,箭头由包含者指向被包含者;6、Extend,我念成“扩展于”或“扩展自”,箭头由扩展出来的“子”指向它的“父”;总结:除了包含方向外,其它都是“小”的指向“大”的,“子”指向“父”,“一般”指向“抽象”。
UML关联和依赖区别
![UML关联和依赖区别](https://img.taocdn.com/s3/m/e0f74357a9956bec0975f46527d3240c8447a175.png)
UML关联和依赖区别UML中UML依赖和UML关联关系的异同1.关联:连接模型元素及链接实例,⽤⼀条实线来表⽰;2.依赖:表⽰⼀个元素以某种⽅式依赖于另⼀个元素,⽤⼀条虚线加箭头来表⽰;3.聚集:表⽰整体与部分的关系,⽤⼀条实线加空⼼菱形来表⽰;4.组成:表⽰整体与部分的有⼀关系,⽤⼀条实线加实⼼菱形来表⽰;(关联,依赖,聚集,组成的异同见后描述)5.泛化(继承):表⽰⼀般与特殊的关系,⽤⼀条实线加空⼼箭头来表⽰;6.实现:表⽰类与接⼝的关系,⽤⼀条虚线加空⼼箭头来表⽰;UML依赖和UML关联的异同:(《Java⾯向对象编程》⼀书,作者:孙卫琴来源:)在建⽴对象模型时,很容易把依赖、关联和聚集关系混淆。
当对象A和对象B之间存在依赖、关联或聚集关系时,对象A都有可能调⽤对象B的⽅法,这是三种关系之间的相同之处,除此之外,它们有着不同的特征。
1.UML依赖关系的特征对于两个相对独⽴的系统,当⼀个系统负责构造另⼀个系统的实例,或者依赖另⼀个系统的服务时,这两个系统之间主要体现为依赖关系,例如⽣产零件的机器和零件,机器负责构造零件对象。
再例如充电电池和充电器,充电电池通过充电器来充电。
再例如⾃⾏车Bicycle和打⽓筒Pump,⾃⾏车通过打⽓筒来充⽓。
图1-39为Bicycle类与Pump类的类框图。
图1-39Bicycle类与Pump类的依赖关系Bicycle类和Pump类之间是依赖关系,在Bicycle类中⽆需定义Pump类型的变量。
Bicycle类的定义如下:publicclassBicycle{/**给轮胎充⽓*/publicvoidexpand(Pumppump){pump.blow();}}在现时⽣活中,通常不会为某⼀辆⾃⾏车配备专门的打⽓筒,⽽是在需要充⽓的时候,从附近某个修车棚⾥借个打⽓筒打⽓。
在程序代码中,表现为Bicycle类的expand()⽅法有个Pump类型的参数。
以下程序代码表⽰某辆⾃⾏车先后到两个修车棚⾥充⽓:myBicycle.expand(pumpFromRepairShed1);//到第⼀个修车棚⾥充⽓myBicycle.expand(pumpFromRepairShed2);//若⼲天后,到第⼆个修车棚⾥充⽓。
关联--依赖、组合--聚合 联系与区别
![关联--依赖、组合--聚合 联系与区别](https://img.taocdn.com/s3/m/9780390c76c66137ee061973.png)
关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。
----------------------------------------------------------------------------------------------------------------------------------
聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。
聚合中的被包含对象可以没有。 而组合至少有一个。聚合是一种拥有的关系,而组合是整体与部分的关系
举一个简单的例子:
一个图书馆可以有十万本书,也可以一本也没有。但空的图书馆还是图书馆。这是聚合
一个车(我们平常能看到的普通的交通工具车)有轮子,有的车是四轮子的,有的车是三轮的,自行车是二轮的,还有独轮车,但车至少要有一个轮子,不然就不是车。这是组合关系。
同构性,主体和部分不具有生命期的一致性
课程组可由多个学生组成,课程组撤消了,学生还活得好好的,这是聚合。
UML中继承实现依赖关联聚合组合的联系与区别_线条箭头
![UML中继承实现依赖关联聚合组合的联系与区别_线条箭头](https://img.taocdn.com/s3/m/9a56f3f79e3143323968932c.png)
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;实现指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;依赖可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;关联他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;聚合聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;组合组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;UML-泛化、关联、聚合、组合、依赖一、泛化关系(generalization)1.说明表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
UML类图中箭头和线条的含义和用法
![UML类图中箭头和线条的含义和用法](https://img.taocdn.com/s3/m/c4bf0e91e43a580216fc700abb68a98271feace2.png)
UML类图中箭头和线条的含义和⽤法UML类图中箭头和线条的含义和⽤法在学习UML过程中,你经常会遇到UML类图关系,这⾥就向⼤家介绍⼀下UML箭头、线条代表的意义,相信通过本⽂的介绍你对UML中箭头、线条的意义有更明确的认识。
AD:本节向⼤家学习⼀下UML箭头、线条代表的意义,UML中关系主要有依赖,聚合,合成,泛化和实现等,下⾯就让我们来看⼀下这些关系如何⽤UML箭头和线条来实现。
UML箭头、线条程序关系后⾯的例⼦将针对某个具体⽬的来独⽴地展⽰各种关系。
虽然语法⽆误,但这些例⼦可进⼀步精炼,在它们的有效范围内包括更多的语义。
依赖(Dependency)实体之间⼀个“使⽤”关系暗⽰⼀个实体的规范发⽣变化后,可能影响依赖于它的其他实例(图D)。
更具体地说,它可转换为对不在实例作⽤域内的⼀个类或对象的任何类型的引⽤。
其中包括⼀个局部变量,对通过⽅法调⽤⽽获得的⼀个对象的引⽤(如下例所⽰),或者对⼀个类的静态⽅法的引⽤(同时不存在那个类的⼀个实例)。
也可利⽤“依赖”来表⽰包和包之间的关系。
由于包中含有类,所以你可根据那些包中的各个类之间的关系,表⽰出包和包的关系。
图D关联(Association)实体之间的⼀个结构化关系表明对象是相互连接的。
UML箭头是可选的,它⽤于指定导航能⼒。
如果没有箭头,暗⽰是⼀种双向的导航能⼒。
在Java 中,关联(图E)转换为⼀个实例作⽤域的变量,就像图E的“Java”区域所展⽰的代码那样。
可为⼀个关联附加其他修饰符。
多重性(Multiplicity)修饰符暗⽰着实例之间的关系。
在⽰范代码中,Employee可以有0个或更多的TimeCard对象。
但是,每个 TimeCard只从属于单独⼀个Employee。
图E聚合(Aggregation)聚合(图F)是关联的⼀种形式,UML箭头代表两个类之间的整体/局部关系。
聚合暗⽰着整体在概念上处于⽐局部更⾼的⼀个级别,⽽关联暗⽰两个类在概念上位于相同的级别。
类图的六种关系
![类图的六种关系](https://img.taocdn.com/s3/m/5327a4f3ac51f01dc281e53a580216fc700a533a.png)
类图的六种关系类图是一种图形表达方式,用于描述类、对象和它们之间的关系。
一般来说,类图有六种关系,分别是继承关系、实现关系、关联关系、聚合关系、依赖关系和泛化关系。
首先,继承关系是指一个类从另一个类继承的关系。
这种关系有两个方面:父类和子类。
父类是被继承的类,也称为基类;子类是从父类继承而来的类,也称为派生类。
子类可以获得父类的特性,并且可以为其添加新的特性。
其次,实现关系表示一个类实现一个接口。
实现关系可以分为两个方面:接口和实现类。
接口是一组公共方法,该接口定义了一系列功能,但没有实现具体功能;而实现类则是实现接口中所有功能的类。
实现关系可以让多个对象共享接口中的定义,从而减少代码的重复编写。
再次,关联关系是指类之间的相互关系。
关联关系有两种形式:一种是单项关联,另一种是双向关联。
单项关联是指一个类将另一个类作为自己的一部分,而另一个类则不会将这个类作为自己的一部分;双向关联则是指两个类彼此拥有对方的实例。
关联关系也可以分为强关联和弱关联。
强关联意味着两个实例中的一个必须存在,而弱关联则表示两个实例间的关联可以不存在。
第四,聚合关系也是一种关联关系,它表示一个对象可以包含多个相关对象,但是这些对象不会因另一个对象的状态改变而改变。
这种关系可以分为三种类型:单点聚合、集合聚合和组合聚合。
单点聚合表示一个类可以包含一个成员,而集合聚合则表示一个类可以包含多个成员;组合聚合则表示一个类可以包含一组元素,这些元素可以是另外一个类或一组其他对象的集合。
第五,依赖关系是一种类与类之间的关系,它表示一个类依赖于另一个类,以完成其功能。
这种关系分为两种类型:强依赖和弱依赖。
强依赖是指一个类必须依赖另一个类,以完成其功能;而弱依赖则是指一个类可以选择依赖另一个类,但不是必须依赖另一个类。
最后,泛化关系是指一个类从另一个类继承而来的关系。
这种关系有两个方面:抽象类和具体类。
抽象类是一种属性和行为的集合,由此可以派生出具体类;而具体类则是从抽象类继承而来的类,它们可以继承抽象类的属性和行为,并且可以添加新的属性和行为。
画出类关系的uml表示法
![画出类关系的uml表示法](https://img.taocdn.com/s3/m/e5e2e521f02d2af90242a8956bec0975f465a41d.png)
画出类关系的uml表示法
UML(统一建模语言)是一种用于表示软件系统的各种类和类之间关系的标准化图形化语言。
在UML中,可以使用类图来表示类之间的关系和结构。
类图是一种静态结构图,用于表示类、接口及它们之间的关系。
类图中,每个类都被表示为一个矩形,其中包含类的名称、属性和方法。
属性和方法可以有不同的可见性,如public、private和protected。
类之间的关系可以表示为连线,如继承、实现、关联、聚合和组合等。
继承关系表示一个类是从另一个类派生而来的。
在类图中,可以使用一个空心三角形的箭头表示继承关系。
实现关系表示一个类实现了一个接口。
在类图中,可以使用一个空心三角形的箭头表示实现关系。
关联关系表示一个类与另一个类有联系。
在类图中,可以使用一条直线表示关联关系。
如果关联关系是双向的,则可以在直线两端添加箭头表示。
聚合关系表示一个类包含了另一个类的实例,但是这些实例可以存在于其他地方。
在类图中,可以使用一个空心菱形表示聚合关系。
组合关系表示一个类包含了另一个类的实例,并且这些实例不能存在于其他地方。
在类图中,可以使用一个实心菱形表示组合关系。
除了以上基本的类关系,UML还支持一些高级的关系,如依赖关系、泛化关系等。
画出类图可以帮助我们更好地理解和设计软件系统,
同时也是软件工程师必须掌握的基本技能之一。
UML中的依赖关系详解
![UML中的依赖关系详解](https://img.taocdn.com/s3/m/327a8fe6a48da0116c175f0e7cd184254b351bc0.png)
UML中的依赖关系详解在软件开发过程中,UML(统一建模语言)是一种常用的工具,用于描述和分析软件系统的结构和行为。
UML中的依赖关系是一种重要的概念,它描述了一个对象或类对另一个对象或类的依赖关系。
本文将详细介绍UML中的依赖关系,包括定义、特点、应用场景以及实际案例。
依赖关系是指一个对象或类使用另一个对象或类的服务或功能。
在UML中,依赖关系用带箭头的虚线表示,箭头指向被依赖的对象或类。
依赖关系是一种弱关系,表示一个对象或类对另一个对象或类的一种使用关系,但不具有持久性。
依赖关系的特点有以下几点。
首先,依赖关系是一种单向关系,表示一个对象或类对另一个对象或类的依赖,但被依赖的对象或类并不依赖于依赖它的对象或类。
其次,依赖关系是一种短暂的关系,表示一个对象或类对另一个对象或类的临时依赖,没有持久性。
最后,依赖关系是一种使用关系,表示一个对象或类使用另一个对象或类的服务或功能。
依赖关系在软件开发中有广泛的应用场景。
首先,依赖关系可以用于描述一个类对另一个类的方法或属性的使用。
例如,一个类可以通过依赖关系使用另一个类的方法来实现某个功能。
其次,依赖关系可以用于描述一个类对外部库或框架的依赖。
例如,一个类可以通过依赖关系使用外部库提供的功能来实现某个功能。
此外,依赖关系还可以用于描述一个类对接口或抽象类的依赖。
例如,一个类可以通过依赖关系使用接口或抽象类定义的方法来实现某个功能。
下面通过一个实际案例来说明依赖关系的应用。
假设我们正在开发一个在线商城系统,其中包括商品管理、订单管理和用户管理等功能。
在这个系统中,订单管理模块依赖于用户管理模块和商品管理模块。
订单管理模块需要使用用户管理模块的用户信息和商品管理模块的商品信息来完成订单的处理。
因此,在UML中,我们可以用依赖关系表示订单管理模块对用户管理模块和商品管理模块的依赖。
在UML图中,我们可以使用依赖关系来描述这种依赖关系。
订单管理模块可以表示为一个类,用户管理模块和商品管理模块也可以表示为类。
UML类图(下):关联、聚合、组合、依赖
![UML类图(下):关联、聚合、组合、依赖](https://img.taocdn.com/s3/m/dcaa2fd4ac51f01dc281e53a580216fc700a5388.png)
UML类图(下):关联、聚合、组合、依赖前⾔上⼀篇⽂章,讲了UML类图中类、继承、实现三种关系及其在UML类图中的画法,本⽂将接着上⽂的内容,继续讲讲对象之间的其他⼏种关系,主要就是关联、聚合、组合、依赖,下⾯开始⽂章的内容。
注意1:⼦类中覆盖了⽗类的abstract⽅法,⽅法名再次出现。
注意2:⽆论哪种关系,箭头指向被依赖⽅。
关联关系关联(Assocition)关系是类与类之间最常见的⼀种关系,它是⼀种结构化的关系,表⽰⼀类对象与另⼀类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学⽣等。
在UML类图中,⽤实线连接有关联关系的对象所对应的类,在Java中通常将⼀个类的对象作为另⼀个类的成员变量。
关联关系分单向关联、双向关联、⾃关联,逐⼀看⼀下。
1、单向关联关系单向关联指的是关联只有⼀个⽅向,⽐如顾客(Customer)拥有地址(Address),其Java实现为:public class Address{}public class Customer{private Address address;}UML的画法为:2、双向关联关系默认情况下的关联都是双向的,⽐如顾客(Customer)购买商品(Product),反之,卖出去的商品总是与某个顾客与之相关联,这就是双向关联。
Java类的写法为:public class Product{private Customer customer;}public class Customer{private Product[] product;}对应的UML类图应当是:3、⾃关联关系⾃关联,指的就是对象中的属性为对象本⾝,这在链表中⾮常常见,单向链表Node中会维护⼀个它的前驱Node,双向链表Node中会维护⼀个它的前驱Node和⼀个它的后继Node。
就以单向链表为例,它的Java写法为:public class Node{private Node nextNode;}对应的UML类图应当是:聚合关系聚合(Aggregation)关系表⽰整体与部分的关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;实现指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;依赖可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;关联他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我与我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;聚合聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,与关联关系是一致的,只能从语义级别来区分;组合组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你与你的大脑;表现在代码层面,与关联关系是一致的,只能从语义级别来区分;对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;UML-泛化、关联、聚合、组合、依赖一、泛化关系(generalization)1.说明表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
一般化的关系是从子类指向父类的,与继承或实现的方法相反。
2.例图3.表现父类父类实例=new 子类();4.举例class Animal{};class Tigger : public Animal{};class Dog : public Animal{};Animal* pAnimal = new Dog;二、关联关系(association)1.说明对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
表示类与类之间的联接,有双向关联与单向关联,双向关联有两个箭头或者没有箭头,单向关联有一个箭头,表示关联的方向。
关联关系以实例变量的形式存在,在每一个关联的端点,还可以有一个基数(multiplicity),表明这一端点的类可以有几个实例。
2.例图3.表现双向关联在代码的表现为双方都拥有对方的一个指针,当然也可以是引用或者是值。
关联关系是使用实例变量来实现。
4.举例//eg.1//单向关联class Person{};class Friend{Person* mpPerson;};//eg.2//双向关联class A;class B{A* pA;};class A{B* pB;};//eg.3//自身关联class C{C* pC;};三、聚合关系(aggregation)1.说明:关联关系的一种,是强的关联关系。
聚合是整体与个体的关系。
聚合关系也是通过实例变量实现的。
例如汽车、发动机、轮胎,一个汽车对象由一个发动机对象,四个轮胎对象组成。
当类之间有整体-部分关系的时候,我们就可以使用组合或者聚合。
2.例图3.表现与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。
关联关系与聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。
4.举例class CPU{};class Memory{};class Computer{CPU* mpCPU;Memory* mpMemory;};四、组合关系(合成关系)(composition)1.说明:合成关系也是关联关系的一种,是比聚合关系更强的关系。
合成关系是不能共享的。
例如人有四肢、头等。
表示类之间整体与部分的关系,组合关系中部分与整体具有统一的生存期。
一旦整体对象不存在,部分对象也将不存在。
部分对象与整体对象之间具有共生死的关系。
2.例图3.表现4.举例//同聚合关系,不过说语义不同class Leg{};class Arm{};class Person{Leg mLeg;Arm mArm;五、依赖关系(Dependency)1.说明:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
与关联关系不同的是,依赖关系是以参数变量的形式传入到依赖类中的,依赖是单向的,要避免双向依赖。
一般来说,不应该存在双向依赖。
依赖是一种弱关联,只要一个类用到另一个类,但是与另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖。
2.例图3.表现依赖关系表现在局部变量,方法的参数,以及对静态方法的调用4.举例class Car{};class House{};class Person{void buy(Car& car){}void buy(House* pHouse){}};六、关系之间的区别1.聚合与组合(1)聚合与组合都是一种结合关系,只是额外具有整体-部分的意涵。
(2)部件的生命周期不同聚合关系中,整件不会拥有部件的生命周期,所以整件删除时,部件不会被删除。
再者,多个整件可以共享同一个部件。
组合关系中,整件拥有部件的生命周期,所以整件删除时,部件一定会跟着删除。
而且,多个整件不可以同时间共享同一个部件。
(3)聚合关系是“has-a”关系,组合关系是“contains-a”关系。
2.关联与聚合(1)表现在代码层面,与关联关系是一致的,只能从语义级别来区分。
(2)关联与聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的。
(3)关联是一种结构化的关系,指一种对象与另一种对象有联系。
(4)关联与聚合是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。
但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。
3.关联与依赖(1)关联关系中,体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我与我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。
(2)依赖关系中,可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。
4.综合比较这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;UML 线条箭头关系后面的例子将针对某个具体目的来独立地展示各种关系。
虽然语法无误,但这些例子可进一步精炼,在它们的有效范围内包括更多的语义。
依赖(Dependency)实体之间一个“使用”关系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例(图D)。
更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。
其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(如下例所示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。
也可利用“依赖”来表示包与包之间的关系。
由于包中含有类,所以你可根据那些包中的各个类之间的关系,表示出包与包的关系。
图D关联(Association)实体之间的一个结构化关系表明对象是相互连接的。
箭头是可选的,它用于指定导航能力。
如果没有箭头,暗示是一种双向的导航能力。
在Java中,关联(图E)转换为一个实例作用域的变量,就像图E的“Java”区域所展示的代码那样。
可为一个关联附加其他修饰符。
多重性(Multiplicity)修饰符暗示着实例之间的关系。
在示范代码中,Employee可以有0个或更多的TimeCard对象。
但是,每个TimeCard只从属于单独一个Employee。
图E聚合(Aggregation)聚合(图F)是关联的一种形式,代表两个类之间的整体/局部关系。
聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。
聚合也转换成Java中的一个实例作用域变量。
关联与聚合的区别纯粹是概念上的,而且严格反映在语义上。
聚合还暗示着实例图中不存在回路。
换言之,只能是一种单向关系。
图F合成(Composition)合成(图G)是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。
合成也是非共享的。
所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。
局部不可与其他整体共享。
但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。
Employee与TimeCard的关系或许更适合表示成“合成”,而不是表示成“关联”。
图G泛化(Generalization)泛化(图H)表示一个更泛化的元素与一个更具体的元素之间的关系。
泛化是用于对继承进行建模的UML 元素。
在Java中,用extends关键字来直接表示这种关系。
图H实现(Realization)实例(图I)关系指定两个实体之间的一个合同。
换言之,一个实体定义一个合同,而另一个实体保证履行该合同。
对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。
图I。