UML常用的几种关系的总结

最近在看博客,里面涉及到很多的类图,流程图,虽然说以前学过UML相关的课程,但毕竟过了这么久了,对这几种概念早已模糊不清了,所以索性借着这次看博客的时间,把这几种概念再重新梳理总结一遍,以备再次查看之用。


一、泛化(Generalization)

泛化,是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为。在Java中此类关系通过关键字extends明确标识。

例如:猫是动物的一种, 它既有猫的特性也有动物的共性。

箭头指向带三角箭头的实线,箭头指向父类
这里写图片描述

二、实现(Realization)

实现,是一种类与接口的关系, 表示类是接口所有特征和行为的实现.在Java中此类关系通过关键字implements明确标识。

例如:哺乳动物中蝙蝠(对象)会飞(接口),而一般的哺乳动物都不会飞。

箭头指向带三角箭头的虚线,箭头指向接口

这里写图片描述

三、组合(Composition)

组合关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它是整体与部分的关系,但部分不能离开整体而单独存在

例如:公司和部门是整体和部分的关系,没有公司就不存在部门。

箭头指向带实心菱形的实线,菱形指向整体

这里写图片描述

public class Company
{
    private Department mDepartment;
    public Company()
    {
        mDepartment = new Department();
    }
    ......
}

public class Department
{
    ......
}

四、聚合(Aggregation)

聚合也是关联关系的一种特例,它体现的是一种has-a的关系,这种关系比依赖强,也是一种整体和部分的关系,但整体与部分是可以分开的,它们拥有各自的生命周期

例如:如车与轮胎、公司与员工的关系等。

箭头指向带空心菱形的实心线,菱形指向整体

这里写图片描述

public class Car
{
    private Engine mTyre;
    public Car(Tyre tyre)
    {
        this.mTyre = tyre;
    }
}

public void setTyre(Tyre tyre)  
{  
    this.mTyre = tyre;  
}

public class Tyre
{
    ......
}

五、关联(Association)

关联类与类或类与接口之间语义级别的一种强依赖关系,它使一个类知道另一个类的属性和方法这种关系一般是长期的,而且双方的关系一般是平等的、关联可以是单向的或者双向的双向关联有两个箭头或没有箭头,单向关联有一个箭头

例如:老师与学生,我和我的朋友,一名学生需要上多门课程等。

箭头指向带普通箭头(或实心三角形箭头)的实心线,指向被关联元素

这里写图片描述

public class Teacher
{
     private List<Student> mStudentList;
}

public class Student
{  
    ......
}

代码中的体现主要是成员变量的关系,为被关联类Student以类属性的形式出现在关联类Teacher中,当然也可能是关联类引用了一个类型为被关联类的全局变量。

六、依赖(Dependency)

依赖是一种使用关系,即一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A类,它是一种单向关系。

例如:人与车就是一种依赖关系。

箭头指向带箭头的虚线,指向被依赖元素

这里写图片描述

public class Person
{
    void buy(Car car)
   {
       ......
    }
}
public class Car 
{
    ......
}

依赖在代码中的体现主要是局部变量、方法的参数或者对静态方法的调用。描述的是对象之间的调用关系,这一点与关联不同(关联描述的是对象之间的结构关系),一般来说要尽量避免双向依赖


总结

几种关系之间的强弱顺序为:

泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值