原文: http://blog.163.com/haizai219@126/blog/static/4441255520099274507758/
在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的关系。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。
1)继承(泛化)
1.1)图释
1.2)java代码
public abstract class Shape { public class Polygon extends Shape { public class Rectangle extends Polygon { |
public interface Interface1 {} public interface Interface2 extends Interface1 { } |
2)关联(单向关联,双向关联)
依赖和关联区别:
依赖是比关联弱的关系,关联代表一种结构化的关系,体现在生成的代码中,以java为例:
关联有双向与单向之分,类A与类B双向关联可以是A与B相互可以作为对方的一个attribute,单向的话,就指其中一个类作为另一个类中的 attribute;依赖就只有单向的,不存在attribute的问题,例如类A依赖类B,表示在类A中有三种类B的使用方法:一是类B是全局的,二是类B在类A中实例化,三是类B作为参数被传递。
关联是一种结构关系,表现为一个对象能够获得另一个对象的实例引用并调用它的服务(即使用它);依赖是一种使用关系,表现为一个对象仅仅是调用了另一个对象的服务。
2.1)
public class ClassA { public class ClassB { |
2.2)
public class ClassC { public class ClassD { |
2.3)
public class ClassE { public class ClassF { |
2.4)
public class ClassG { public class ClassH { |
3)聚合
聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类包含的类。从而找出一些包含类,该整体类和包含类之间就形成了聚合关系。
public class Computer<T extends Brand> { public class Monitor { public class Host { public class keyboard { public class Mouse { |
4)组合
组合:也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。
public class LightSensor { public class Monitor{ |
聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。