6中常见的UML关系即自己的理解

关联--依赖、组合--聚合 联系与区别

继承:空心三角形箭头的实线,子类指向父类。代码中通常有extends关键字。


实现:空心三角形箭头的虚线,实现类指向接口。代码中通常有implements关键字。



关联:通常是类A中需要引用另一个类B的实例作为成员变量,表示类A需要“知道”类B。实线箭头,类A指向类B。


依赖:通常是类A中的方法需要类B的实例作为其参数或者变量,而类A本身并不需要引用类B的实例作为其成员变量。虚线箭头,类A指向类B。


聚合:通常是类A中需要包含另一个类B的实例或实例的集合,表示一种弱的“拥有”关系,即类A包含类B,但类B不是类A的一部分,而是一个独立存在的类。尾部为空心菱形的实线箭头,类A指向类B。(0...*)


合成:通常需要在实例化类A的同时在其构造方法之中实例化类B,使类B作为类A的一部分,表示一个强的“拥有”关系,即类B是类A的一部分,二者共生命周期,具有严格的“整体—部分”关系。尾部为实心菱形的实现箭头,类A指向类B。(1...*)



关联和依赖的区别:

举例:
你和你的心脏之间是composition(组合)关系
你和你买的书之间是aggregation(聚合)关系
你和你的朋友之间是association(关联)关系


依赖是比关联弱的关系,关联代表一种结构化的关系,体现在生成的代码中,以java为例:

若类A单向关联指向类B,则在类A中存在一个属性B b。

若类A依赖类B,则不会有这个属性,类B的实例可能存在于某个方法调用的参数中,或某个方法的局部变量中。

例如代码:

依赖:----存在于某个方法调用的参数中,或某个方法的局部变量中。
Person类与Screwdriver类的依赖关系
[代码表现]

public class Person{    
    /** 拧螺丝 */   
    public void screw(Screwdriver screwdriver){    
        screwdriver.screw();    
    }    
}   
关联:---存在一个属性(成员变量)

公司(Company)和员工(Employee)的关联关系
[代码表现]
public class Company{    
    private Employee employee;    
    public Employee getEmployee(){    
        return employee;    
    }    
    public void setEmployee(Employee employee){    
        this.employee=employee;    
    }    
    //公司运作    
    public void run(){    
        employee.startWorking();    
    }    
}   

聚合: 空心菱形加实线箭头表示

表示C9聚合C10,但是C10可以离开C9而独立存在(独立存在的意思是在某个应用的问题域中这个类的存在有意义。这句话怎么解,请看下面组合里的解释)。
同构性,主体和部分不具有生命期的一致性

组合(也有人称为包容):一般是实心菱形加实线箭头表示
异构性,部分和主体具有生命期上的一致性

表示的是C8被C7包容,而且C8不能离开C7而独立存在。但这是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。在《敏捷开发》中还说到,A组合B,则A需要知道B的生存周期,即可能A负责生成或者释放B,或者A通过某种途径知道B的生成和释放。

关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。

在讨论聚合,关联,组合区别,讨论那么多内部类干什么?

确实,他们的关系按强弱分有

关联<聚合<组合

我看大家主要分岐在聚合和组合上。说白一点,聚合这种关系是被包含的对象的个数是 0..* 而组合是1..*
聚合中的被包含对象可以没有。 而组合至少有一个。聚合是一种拥有的关系,而组合是整体与部分的关系

举一个简单的例子:
一个图书馆可以有十万本书,也可以一本也没有。但空的图书馆还是图书馆。这是聚合

一个车(我们平常能看到的普通的交通工具车)有轮子,有的车是四轮子的,有的车是三轮的,自行车是二轮的,还有独轮车,但车至少要有一个轮子,不然就不是车。这是组合关系。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值