UML类图中的关系

 UML类图中的关系分为四种:泛化、依赖、关联、实现;关联关系又可以细化为聚合和组合。

1. 泛化(Generalization)

    泛化是父类和子类之间的关系,子类继承父类的所有结构和行为。在子类中可以增加新的结构和行为,也可以覆写父类的行为。

 

2. 依赖(Dependency)

    类A依赖于类B指A可能要用到B的一些方法模型元素,也可以这样说,要完成A里的所有功能,一定要有B的模型元素协助,这样才能正确实现使用者的功能(包括调用、参数、实例化、发送)。A依赖于B的定义,一般是在A类的头文件中包含了B的头文件。

 

3. 关联(Association)

    关联是一种结构化的关系,指一种对象和另一种对象有固定不变的静态联系。系统会将这种关系保存到数据库中。关联有两元关系和多元关系。两元关系是指一种一对一的关系,多元关系是一对多或多对一的关系。一般用实线连接有关联的同一个类或不同的两个类。当你想要表示结构化关系时使用关联。

 

3.1 聚合(Aggregation)

    聚合是一种特殊的关联。它描述了“has a”关系,表示整体对象拥有部分对象(Whole-Part)。

    聚合是较强的关联关系,强调的是整体与部分之间的关系。需要注意的是:整体灭亡了,部分是可以存活的。

 

3.2 组合(Composition)

    组合是聚合的一种形式,它具有更强的拥有关系,强调整体与部分的生命周期是一致的。整体负责部分的生命周期的管理。Part对象只能链接一个Whole对象,如果整体被销毁,部分也必须跟着一起被销毁,如果所有者被复制,部分也必须一起被复制。

 

4. 实现(Realization)

    实现关系指定两个实体之间的一个合约。换言之,一个实体定义一个合约 ,而另一个实体保证履行该合约。比如说接口的实现。

泛化和实现的不同之处在于,泛化是种继承关系,是is a的关系;实现是遵守相同行为规范,是has a的关系。就类似于抽象类和接口的区别,好比猫和狗都能继承动物,因为它们就是(is a)动物,而狗和车可以实现一个行为接口,里面有(has a)个方法是“叫()”但狗和车没有任何关系。

 

那依赖和聚合\组合、关联等有什么不同呢?

关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。这种关系是非常明显的,在问题领域中通过分析直接就能得出。

依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。例如我和锤子,我和锤子本来是没关系的,但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。

组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。例如树叶是树的一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。

上述的几种关系(关联、聚合/组合、依赖)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,但在逻辑上他们就有以上的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值