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

关联,依赖,泛化(又称继承分为扩展或包含),实现,聚合(共享),复合(组合)

2012年11月18日 ⁄ 综合 ⁄ 共 1440字 ⁄ 字号 评论关闭

从关联—依赖—泛化实现聚合—复合是一层比一层对两个类之间的关系描述紧密。

1.关联

一般是指两个类之间有相对松散关系,若双方都知道对方则可用实线[双向箭头]连接,或只其中一方知道则用实线加单向箭头从隐藏方指向暴露方,但某个类是否存在并不影响另一个类的存在与否.

如客户与车子(通过买,租用或其它方式联系在一起); 

2.依赖(Dependency)

实体之间一个“使用”关系暗示一个实体的发生变化后,可能影响依赖于它的其他实例。 更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(如下例所 示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用“依赖”来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的 各个类之间的关系,表示出包和包的关系

这里BA的关系只是一种依赖(Dependency)关系,这种关系表明,如果类A被修改,那么类B会受到影响。

o_Dependency.gif

图表 5依赖

3.泛化(Generalization

表示一个更泛化的元素和一个更具体的元素之间的关系现实世界中一般与特殊关系就是最好的表现

o_Generalization.gif

图表 1泛化

在上图中,空心的三角表示继承关系(类继承),在UML的术语中,这种关系被称为泛化(Generalization)。Person()是基类,Teacher(教师)Student(学生)Guest(来宾)是子类。

若在逻辑上BA的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性。

例如,教师是人,Teacher Person的“一种”(a kind of )。那么类Teacher可以从类Person派生(继承)。

如果A是基类,BA的派生类,那么B将继承A的数据和函数。

如果类A和类B毫不相关,不可以为了使B的功能更多些而让B继承A的功能和属性。

若在逻辑上BA的“一种”(a kind of ),则允许B继承A的功能和属性。

4.实现(composition

指定两个实体之间的一个合约。换言之,一个实体定义一个合,而另一个实体保证履行该合

5.聚合(aggregation

代表两个类之间的整体/局部关系是一种相对松散的关系,聚合类B不需要对被聚合的类A负责。

o_aggregation.gif

图表 3共享

上面图中,有一个菱形(空心)表示聚合(aggregation)(聚合类型为共享),聚合的意义表示has-a关系。

6.组合(composition

代表两个类之间的整体/局部关系但是一种绝对构成的关系,局部不能为其它整体所共享,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

若在逻辑上AB的“一部分”(a part of),则不允许BA派生,而是要用A和其它东西组合出B

例如,眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类EyeNoseMouthEar组合而成,不是派生(继承)而成。

o_composition.gif

图表 4复合

这幅图与上面的唯一区别是菱形为实心的,它代表了一种更为坚固的关系——组合(composition)(聚合类型为复合)。组合表示的关系也是has-a,不过在这里,A的生命期受B控制。即A会随着B的创建而创建,随B的消亡而消亡。

【上篇】
【下篇】

抱歉!评论已关闭.