关联关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系。它体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友。这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的,关联可以是单向、双向的。表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。

在UML类图中,用实线连接有关联的对象所对应的类,在使用Java、C#和C++等编程语言实现关联关系时,通常将一个类的对象作为另一个类的属性。

1.双向关联

默认情况下,关联是双向的,双向的关联可以有两个箭头或者没有箭头。

2.单向关联

类的关联关系也可以是单向的,单向关联用带箭头的实线表示。

单向关联和双向关联的UML示例图如下所示:

【说明】:上图中,Teacher与Student是双向关联,Teacher有多名Student,Student也可能有多名Teacher(两个类连线下面的*表示多对多的关系)。但Student与Course间的关系为单向关联,一名Student可能有多门Course,课程是个抽象的东西,因此不拥有Student。

单向关联和双向关联的示例代码如下(Teacher、Student类的定义):

class Course
{ } class Teacher
{
var student: Student?;
} class Student
{
var teacher: Teacher?;
var course: Course?;
}

3.自关联

在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。比如我们在数据结构中描述树结构,会建一个节点Node类,Node类有一个指针父节点也是Node类型。

10.关联(Association)的更多相关文章

  1. mybatis 一对一关联 association 返回空值

    mybatis 一对一关联 association 返回空值 最近学习spring mvc + mybatis开发,看的书是<Spring MVC+Mybatis开发 从入门到精通>,在学 ...

  2. UML的关联(Association), 聚合(Aggregation), 组合(Composition)区别

    转载:http://blog.csdn.net/ocean181/article/details/6117369 UML的关联(Association), 聚合(Aggregation), 组合(Co ...

  3. NHibernte教程(10)--关联查询

    本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...

  4. c++ primer 10 关联容器

    关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,顺序容器则通过元素在容器中的位置顺序存储和访问元素 关联容器类型 map 关联数组:元素通过键来存储和读取 set 大小可变的 ...

  5. C++ Primer 随笔 Chapter 10 关联容器

    1.关联容器的类型:map(键-值对的集合,可理解为关联数组), set(单纯的键的集合), multimap(一个键对应多个值,键唯一), multiset(相同键可以是多个). 2.pair类型提 ...

  6. UML中关联(Association)和依赖(Dependency)的区别

    原文转自:http://blog.csdn.net/metasearch/article/details/2334853 在UMLCHINA精华区,看到了一些关联和依赖的讨论,似乎越讲越糊涂.我想谈一 ...

  7. 面向对象的类关系及其C++实现

    在面向对象的程序设计中,类之间有6中关系,分别是继承, 组合, 聚合,关联, 依赖,实现,如果使用C语言实现,上面的这些关系通过"结构体包含结构体.结构体包含结构体指针以及函数指针等语法实现 ...

  8. Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别

    在C++中,类与类之间的关系大概有四种,分别为继承,关联,聚合,和组合.其中继承我们大家应该都比较熟悉,因为是C++的三大特性继承Inheritance,封装Encapsulation,和多态Poly ...

  9. 关联,聚合和组合(复合)--Association, Aggregation and Composition

    概要 Association, Aggregation and Composition are terms that represent relationships among objects. Th ...

随机推荐

  1. ubuntu下安装Matlab

    (注:本文部分内容转自互联网) 一. 安装程序Step 1:下载matlab的安装文件至主目录下,讲matlab文件重命名为Mathworks.Matlab.R2012a.Unix.isoStep 2 ...

  2. JNDI绑定数据库

    经过3个多小时的努力,配置JNDI数据源(主要是通过DBCP连接池)终于搞定- 还是Tomcat官方的说明好,不过全是英文的,大概还看得懂. 百度上那么花花绿绿的太多了,一个也没成功!... 本例使用 ...

  3. JVM——类的加载过程

    附一张图方便理解,一个类的执行过程 类的加载过程,简明的来说 类装饰器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件.在Java中,类装载器把一个类装入JVM中,要经过以下步骤: 装载:查 ...

  4. python-socket.error[10054]:对象的复制

    1.socket.error[10054],对方强制关闭了连接 在用socket.recvfrom时,若事先没有bind时, 先使用socket.sendto,socket.recvfrom 有时会出 ...

  5. appdata文件夹有什么用途?C盘appdata可以删除吗?

    在内存紧张的时候,我们都会选择删除一些无关紧要的大文件来释放内存,有不少网友发现在系统C盘下有一个appdata文件夹,而且体积挺大的,不知道能不能删除,针对此问题,本文就为大家介绍appdata文件 ...

  6. windows 不能在本地计算机启动apache2 的解决方法(不是修改端口)

    使用命令行运行apache目录下的httpd程序,它会提示哪里出错了,修改即可 D:\Program Files (x86)\Apache2.\bin\httpd

  7. Javascript中的Keycode值列表

    关于如何得到一个键在Javascript中的Keycode值,可以参考: <body onkeypress=alert(event.keyCode)>请按任意键,你将得到该键的键值! ke ...

  8. cppunit使用详解

    cppunit使用详解 第一步:如何安装 (我的运行环境: fc7 Linux, gcc4)    cppunit 的安装是相当标准的linux的安装过程    a. 下载cppunit的源文件    ...

  9. [转] C#中的Dictionary的使用

    txw1958 的 原文 说明    必须包含名空间System.Collection.Generic     Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)     键 ...

  10. YII Framework学习教程-YII的安全

    web应用的安全问题是很重要的,在“黑客”盛行的年代,你的网站可能明天都遭受着攻击,为了从某种程度上防止被攻击,YII提供了防止攻击的几种解决方案.当然这里讲的安全是片面的,但是值得一看. 官方提供的 ...