现在的位置: 首页 > 综合 > 正文

类图use-a,has-a,contain-a(composition),implements,extends区别

2014年11月03日 ⁄ 综合 ⁄ 共 1050字 ⁄ 字号 评论关闭

一、横向关系: 
1.depedency依赖,use-a
 是类之间的一种很弱的联系
 , use-a ,send-a,parameter-a 关系,常用是将一个类对象作为一个类里面方法的参数。是偶然的,临时的, 对象间是并列关系 调用了一个对象,以利用它的成员。
2.association关联,use-a
 他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、;是固定的、长期的、对象间是并列的、可单向或双向的, 1被关联类对象以类属性的形式出现在关联类中,2也可能是关联 类A引用了一个类型为被关联类B的全局变量。一般不是依赖、聚合和组合的非整体与局部(特别是对类的全局变量引用 )就说关联关系。 
属于关联下的聚合和组合关系(整体与局部关系):
3.aggregation聚合,has-a异步 ,学校与学院,用到了类a,因为要用类a的成员。弱的整体与局部关系,因为有a对象,但是a对象也可以被其他类拥有。他们之间不是生死与共的生命周期,然后是局部对象作为整体类的属性, 局部的对象是可以在外面先创建的,可以被多个整体类调用,毁灭时不一定毁灭它。 A relationship B用实线空菱形箭头表示。
整体类属性,创建时间,其它类调用,毁灭时间。 
4.composition组合,contain-a同步 ,窗口与菜单按钮,包含a,强的整体与局部的关系,拥有了a,且有且仅有它拥有a对象,是生死与共的生命周期,将局部的对象作为整体类的属性,创建时创建,只有被当前类使用,特别是毁灭时毁灭。 A relationship B用实线实心菱形表示。
 整体类属性,创建时间,其它类调用,毁灭时间。 
在C++语言中,从实现的角度讲,聚合可以表示为:
class A {...}
 class B { A* a; .....}  //* a只是引用指针,也就是A对象的创建不在这里。

即类B包含类A的指针;

而组合可表示为:

class A{...}
 class B{ A a; ...}

即类B包含类A的对象。
其关系强弱为dependency<association<aggregation<composition
二、纵向关系: 
5.implements,
 实现接口 虚线实体大箭头表示.
6.extends IS-a 就是继承关系了,当添加了新的方法就是is-like-a,应该首先考虑组合而不是继承,因为组合可以毫不影响引用类,且可以动态的修改新类的成员(来自java编程思想)。泛化: 继承实现方法多态的形式,实线大箭头表示。

抱歉!评论已关闭.