下面我们来看一下,大千世界中客观的事物之间的关系 有哪些类型,我们可以划分为这四种类型
那么,第一种,称为关联,我们来看一下,它是表达的什么含义
关联是类目之间的一种结构关系啊,就是一组具有相同 结构,相同语义的量。
UML 对于关联的这样一个概念,我认为的是 比较弱的。
因为如果对于初学,面向对象的这个
关系的同学,可能会稍微有一点不是特别完全意义上能理解 所以后面我会给建议。
关联因为作为一个统,统称的这样的一种结构关系啊
就是说,我们可以在建立面向对象之间的关系的时候,先去看,这种关联相当于它是不是
可以放到这个后面的特殊的关联去表达 否则的话,如果没有的话,采用的通用的关联关系来表示啊
那么大家来看,这个人和公式之间 有了一个 Work for
的这样的一个关联关系 所以有同学说,哎,关联,那这里面不是一种行为上的依赖关系吗?
所以关联这种关系,它讲了一个说,它们静态 动态的这样的一种关系,不是强调的行为上的这样的一种 交互的这个关系。
但是这种静态的关系,有的时候可能会表现出来的是,行为上的这样一个特点。
比如说 这个关系,关联关系,表达了人为公司工作的这样的一个关联关系
那这里面,如果一个关联是连接了两个类目,那称为二元关联,否则是 多元的关联。
大家看一下,这个是两个类啊,Person 和 Company,那 在这里面的 Works for
呢,是一个关联的名字啊 同时相当于有的时候,我需要来给出关联的方向。
比如说 Works for 到底是谁为谁来工作呢?
对吧?人是为公司来工作的,所以这里面是,给出来了 这个关联的名字,关联的方向,同时用一个
线段来表示了这样的一个关联的图形的表示 所以这也是关联。
有的时候呢,我也可以给出来 关联的两端,我不通过给出关联的这样的一个方向,我通过给出
关联每端的这样的一个对象,相当于它体现的这样的一个角色,叫关联端名 就表达出来了两者之间的这样的一个关联的的方向。
比如说这个 Person 对吧? employee 是一个被雇佣者,对吧?Company
是一个 employer 它是一个雇佣者,所以就表明了这样的一个谁为谁工作的这样的一个关系
那么关联里面还有一个多重性的表示,就是 类中的对象可能参与一个关联的数目,这个称为关联的角色的这样一个
多重性,比如说大家可以看到,这里面是人员,对吧? 这里呢,相当于是拥有了计算机啊,那这个里的关系是指,就
是说人,不同的人拥有计算机的这样的一个 紧密的这样的一个关联关系。
比如说我们这个 这个 p1 这个人,相当于他拥有计算机 c3,p1 这个人同时还有,拥有计算机
c4 那我通过对这样的一个,对象的这样的一个,链儿的这样的一个啊,就是
高度地抽象呢,我就可以看到说,哦,原来在这里面,他们 两者之间具有这样的一个拥有关系。
也就是人拥有计算机的这样一个拥有关系 那旁边呢,相当于给出了多重性,那这里面大家看,也就说
这个人呢,相当于,可能没有计算机,也可能有什么?两台计算机对吧?
那么在这里面呢,计算机呢将来,可能将来不被任何人所拥有,也可能 会被一个人将来所拥有,所以这样的一个关系就表达出来了。
上面的 整个的这个角色之间的,他们之间的这样的一个多重性
那么在 UML 里面,把关联的多重性呢,表达为就是,关联
对于关联另一端的类的每个对象,本端的类可能有多少个对象与它相对应啊,或者是叫出现 那对于这个
Person 和 Company 之间的这样一个多重性的表示,我们来看一下啊
什么含义呢?也就说,对于每个公司对象而言,可以雇佣一到多个人啊
那么对于一个人呢,相当于它可以相当于就是,属于这个相当于 0 到多个公司。
但在这里面,这个 * 实际上很多情况下指的是 0 到 * 的这样一个概念啊 这个多重性的表示,我希望大家不要写反了。
因为有的同学 在面向对象的分析中,给出类图里面,给出了关联的这样一个多重性
但是有的时候,他的写法是相反的,所以注意,注意多重性的这样的一个表述啊 是有它具体的内涵。
那还有一点,就是 聚合关系,聚合关系是一种特殊形式的关联
它指的是一种整体部分的这样的一种结构关系 大家看,这个 Company 对吧?它是一个整体对象类。
那 么相当于,这个它可能会有多个部门,而且也就是说 对于一个
Company 而言,将来它有 多个部门相当于对象来组成啊。
那么对于一个部门而言,将来它只能属于一个这个
公司,所以这里面具有一种整体部分的这样的结构关系的 这样的关联关系,称为聚合。
它绝不是跟关联相对应的,它是关联下面的特殊的一种关联关系
那在这里面,大家一定要注意,也就是在建模的时候,你要来看说
是否把一事物标志为一个部分类,还是把它标志为一个类的这样一个属性
是要来看,这个整体类和部分类,两者在概念上是不是同一等级啊 如果是同一等级,它们之间是属于一个聚合关系。
否则那个 部分类可能是作为整体类的一个组成部分啊 就是作为一个属性来体现。
那么还有一个就是说 讲到了聚合,那么组合呢,是特殊的一类聚合关系,也就说
把整体类的这样一个实例和部分类的实例之间,具有相同生命周期的这样一个特点的 对象的这样的一种关系,称为组合。
所以就像上次课老师介绍的说,对吧? 人和人脑,对吧?这就是一种组合关系,因为它们具有
同样的生命周期,因为脑死亡是作为判断人死亡的这样的一个 目前来说,一个国际上比较流行的这样的一个标准。
所以这里面大家可以看到的,就是说 组合,它里面强调的部分和整体之间的属于关系
具有一致的生存期,另一点,组合的末端,也就是指向整体类的 那个整体对象的话,它的多重性不能超过
1,也就是说它的 对于,对吧?就是说一个整体对象现在它会包含多个部分,但
对于多个部分对象,它只能属于一个什么?整体对象,要体现这样的一个特点
那还有就是,在一个组合中,就是由一个链所产生的对象所构成的元祖呢?
必须都属于同一个整体类的对象,所以在这个划分上你要看,有没有一些相应的这个
就概念上的这样的一个歧义的地方。
还有一个就是说,这个 在一个组合里面,有的时候啊
可能包含一些类和关联,这个时候呢,把它们归类为关联 类,这个后面我们会来介绍到,关联类和关联之间的区别是什么
这是组合的三种表示法啊,就是说,大家看第一种
只有当存在到整体对象类和部分对象类之间,它们生命周期一致的情况下
才可以用第一种啊,就是将部分类的名字,写到整体类的属性栏中
这是表明两者之间这样一个紧密的这样一个 结构关系。
那么第二个是用实心的菱形线段来表示 这个组合这种关系。
那么实心菱形是一定要放在 整体类的那一边。
还有一种大家可以看,就是把部分对象 类啊,相当于放到这个整体类的一个栏目中
大家看,但是它实际上代表的是类,两者之间表明了一种整体结构关系 那么大家也可以看到,这个
2 1 1 实际上它表明了什么?多重性的这样一个表示啊
那么对于再回到关联里面,关联里面我们 讲到了说,关联它具有特殊的一类的关系,是作为 聚合关系。
聚合里面,如果整体和部分对象类生命周期一致,那么称为组合关系
那么,到关联的一个普通的表示上面,就是说还有一个限定符的含义,比如说这个,acc- ount
它是什么含义呢?就一个限定符是一个关联的属性或属性表
这些属性的值将对关联相关的对象集做了一个划分
比如说这个,银行里的账户对吧?就说是 对应着人。
那这里面的含义就是说 上面有一个账户,表明在一个银行中,一个账户对应一个用户
或者没有对应的人员,也就是说是一个空的这样一个账户 那个
chessboard 相当于是一个啊,这个
象棋的这样的一个棋盘,那么相当于那个跟 Square 之间的这样一个关
通过限定符来去限定的啊 那么关联类,我希望大家能有一个了解就可以。
关联类呢,它实际上是 既是可以把它看做类,同时也可以把它看做关联的这样一种特殊形式的 这样一些关联啊。
那它的什么含义呢?也就是大家可以看,这儿有一个 Job 对吧?Job
这是一个关联 那么它表明了这个公司和人员之间的这样的一个
雇佣关系,那但在雇佣里面除了这样的一些信息,它还有一些复杂的信息,比如说有一些工资啊 包括可能还有,还有这个
Job 的一些,具体的一些,一些比如 说开始结束时间啊,这样一些信息,那通过这个关联无法表达出来
于是呢,我对这样一个关联,进行建立了一个什么?关联类,那也就是把 它的一些信息,相当于进行进一步地给它细化。
所以这个 Job 这个关联,就作为一个类名 它里面的其他的一些信息作为属性啊