详见http://www.cnblogs.com/xrq730/p/5527115.html
属性的表示方式为:【可见性】【属性名称】:【类型】={缺省值,可选}
方法的表示方式为:【可见性】【方法名称】(【参数名称:参数类型】):【返回类型】
可见性都是一样的,"-"表示private、"+"表示public、"#"表示protected。
。在UML中,继承关系用带空心三角形的 实线 来表示。在UML中,抽象类无论类名还是抽象方法名和返回值,都以斜体的方式表示,因为这也是一种继承关系,所以子类与父类通过带空心三角形的实线来联系。
在接口名上应当有<<interface>>表示这是一个接口,即使没有属性也要空一行,
表示实现接口关系时应当使用带空心三角形的虚线来表示
关联:用实线连接(你有一个朋友)
关联(Assocition)关系是类与类之间最常见的一种关系,它是一种结构化的关系,表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等。在UML类图中,用实线连接有关联关系的对象所对应的类,例如A类拥有B类的实例,则为关联A->B。
自关联,指的就是对象中的属性为对象本身,这在链表中非常常见,单向链表Node中会维护一个它的前驱Node,双向链表Node中会维护一个它的前驱Node和一个它的后继Node。就以单向链表为例,它的Java写法为自己指向自己。
聚合:用带空心菱形的直线(你借的一本书,即书是你的,但离开你别人也能读)
聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,成员对象是整体的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示,如汽车(Car)与引擎(Engine)、轮胎(Wheel)、车灯(Light),即我拥有你的实例,且你是我组成的一部分,但你脱离我依然单独存在,成员对象通常以构造方法、Setter方法的方式注入到整体对象之中。
public class Car { private Engine engine; private Light light; private Wheel wheel; public Car(Engine engine, Light light, Wheel wheel) { super(); this.engine = engine; this.light = light; this.wheel = wheel; } public void drive() { } }
组合:用带实心菱形的直线(你和你的心脏)
组合(Composition)关系也表示的是一种整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也不存在,整体对象和成员对象之间具有同生共死的关系。在UML中组合关系用带实心菱形的直线表示。通常在整体类的构造方法中直接实例化成员类,这是因为组合关系的整体和部分是共生关系,如果通过外部注入,那么即使整体不存在,那么部分还是存在的,这就相当于变成了一种聚合关系了。
public class Head { private Mouth mouth; private Nose nose; public Head() { mouth = new Mouth();//直接实例化 nose = new Nose(); } public void shake() { } }
依赖:用带箭头的虚线
依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,大多数情况下依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
比如,驾驶员(Driver)开车,Driver类的drive()方法将车(Car)的对象作为一个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此也可以说Driver依赖Car,即你被我使用则我依赖你。
public class Driver { public void drive(Car car) { car.move(); } }
关联关系、聚合关系、组合关系之间的区别
从上文可以看出,关联关系、聚合关系和组合关系三者之间比较相似,本文的最后就来总结一下这三者之间的区别。
关联和聚合的区别主要在于语义上:关联的两个对象之间一般是平等的,聚合则一般是不平等的。
聚合和组合的区别则在语义和实现上都有差别:组合的两个对象之间生命周期有很大的关联,被组合的对象在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁,一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象;聚合则不一样,被聚合的对象可以属于多个聚合对象。
再举例子来说:
- 你和你的朋友属于关联关系,因为你和你的朋友之间的关系是平等的,关联关系只是表示一下两个对象之间的一种简单的联系而已,就像我有一个朋友
- 你和你借的书属于聚合关系,第一是因为书可以独立存在,第二是因为书不仅仅属于你,也可以属于别人,只是暂时你拥有
- 你和你的心脏属于组合关系,因为你的心脏只是属于你的,不能脱离与你而存在