UML里类之间的几种关系

UML类图:类图时锻炼OOA(OO analysis)和OOD(OO design)思想的重要工具,有助于OOA、OOD思想的提升。
重点:理解类图中类与类之间的关系的关系以及这种关系在代码中的实现形式。
类与类之间存在泛化,关联,依赖,和聚合四种关系
类与类之间的关系根据强度依次:
依赖关系——关联关系——聚合关系——泛化关系
依赖——使用关系
关联——结构关系
泛化——分类关系
一、依赖关系
UML表示:虚线+箭头
描述: 类A要完成某个功能必须引用类B,则类A依赖类B。Person 和 Computer之间是没有关系的,但是由于偶尔的需要,Person需要使用Computer,这时Person就依赖于Computer。 表示类之间的 使用关系
依赖关系是五种关系中耦合最小的一种关系
依赖关系的三种表现形式:Computer类是public,Person类可以调用它;
Coumputer类是Person类中某个方法的局部变量,则Person类可以调用它;
Computer类被Person类的一个方法所持有,声明周期随着方法执行结束而结束

二、关联关系
UML表示:实现+箭头
描述:关联关系是指两个事物之间存在连接。关联关系有单向关联( 只有单向关系需要加箭头)、双向关联、自身关联、多维关联等等。表示类之间的关系比依赖要强。 表示类之间的 结构关系
特点:
单向关联
双向关联
自身关联
多维关联
关联和依赖的区别(重点)
pulbic class User{
private Order order; //这是作为User的属性可以长期保存下来的
Order order = new Order();//而这是User暂时引用order对象,一旦释放,将不再存在
}
从类的属性是否增加的角度看
发生依赖关系的两个类都 不会增加属性。这是说,另一个类的属性在该类中只是临时性的使用,并不会长时间保存这种关系。这就是某个类中创建另一个类的对象和把另一个类作为成员变量的区别在于
发生关联关系的两个类,其中的 一个类成为另一类的属性,而属性是一种更为紧密的耦合,更 为长久的持有关系。
从关系的生命周期看
依赖关系仅当类的方法被调用时而产生,伴随着方法的结束而结束
关联关系是仅当类实例化的时候即产生,当类销毁的时候,关系结束。相比依赖将,关联关系的生存期更长。
场景使用分析:(加深理解和记忆)
关联名称:关联可以有一个名称,用来描述关系的性质。(关联的名称不是必需的)
学习——学生在大学 学习, 源对象:学生;目标对象:大学
雇用——公司 雇用员工, 源对象:公司;目标对象:员工
角色:角色就是关联关系中一个类对另一个类所表现的职责
学习这个关联关系中,学生时学习者,大学是教学者
雇用这个关联关系中,员工是被剥削者,公司是资本家
多重性:是一种约束,关联的多重性是指由多少对象可以参与该关联
一个学校可以有1个或多个学生,一个学生可以在0或多个学校中学习
订单和商品,订单中包括商品, 订单知道商品的存在,但是商品并不知道订单的存在

订单和客户,订单属于客户,客户用于一些特定的订单( 双方都知道彼此的存在)。
公司雇用员工,同时需要安排员工到哪个部门
——聚合关系
聚合就是一个整体与部分的关系。"XX是XX的一部分",能这样表达的就一种聚合关系。
聚合关系分的再细一点就可以分成聚集关系和组合关系
聚集关系,球队、队长、队员,假如这个队长既是足球队的队长,同时也是篮球队的队长,一个人分属两个不同的球队。球队和队长之间没有我离不了你,你离不了我的情况。
组合关系,组合说的而是部分与整体密不可分,是必不可少的一部分。一个人的脑袋不可能既属于你又属于别人,身体也一样。而身体和脑袋又是密不可分的。

三、泛化关系
UML表示:空心三角形+实线(子类指向父类)
描述:泛化关系定义了 一般元素和特殊元素之间的 分类关系。在java中的体现是,类与类的继承关系,类与接口的实现关系。 | 泛化可划分为 普通泛化和受限泛化,普通泛化就是没有给泛化添加约束,受限泛化就是给泛化关系添加约束条件,预定义的约束有4种:多重、不相交、完全和不完全,这些约束都是语义约束。
特点: 1.允许使用一般元素的地方都可以使用特殊元素的一个实例来代替(这就是java的多态);
2. 泛化关系只使用在类型上,而不是实例上。如一个类可以继承另一个类,但是一个对象不能继承另一个对象;
继承——类与类之间的泛化
继承,是说导出类可以覆盖或者完全继承基类的方法,也可以添加新的方法,扩充导出类的功能。
而继承这种关系的核心是: 子类如何特化父类的特征和行为
接口——类与接口之间的泛化
四、实现关系
UML表示:空心三角箭头+虚线
描述:实现是规格说明及其实现之间的关系,它将 一种模型元素与另一种模型元素连接起来,比如类和接口。接口与实现该接口的类之间。
和实现关系息息相关的一种关系是多态
泛化关系和实现关系的区别:
泛化关系将同一语义层上的元素连接起来,通常在同一模型内。
实现关系则将不同语义层内的元素连接起来,通常建立在不同该类型内。

你可能感兴趣的:(UML)