类与类之间的6中关系及UML表示方法
继承:类与类或者接口与接口之间的父子关系
代码及类图表示:
class Person{
}
class Student extends Person{
}
(实线+实心箭头)
例如:Person类和Student类
实现: 一个类实现一个或者多个接口的方法
代码及类图表示:
interface List{
}
class AbstractList implements List{
}
interface A{
}
interface B{
}
class C implements A,B{
}
(虚线+空心箭头)
例如:List接口和AbstractList类
关联:分为单项,双向,可以作为成员变量
代码及类图表示:
(单向箭头)
例如:”一个登录界面类LoginFrom中包含一个JButton类的注册按钮loginButton
class JButton{
}
class LoginButton{
private JButton loginButton;
...
}
依赖:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例时,或者依赖另一个对象的服务时,称为依赖关系,可以作为方法参数
代码及类图表示:
(虚线单向箭头)
例如:驾驶员开车,在Driver类的driver()方法中将Car类型的对象car作为一个参数传递,以便在driver()方法中能够调用car的move()方法,且驾驶员的driver()方法依赖车的move()方法,因此类Driver依赖类Car
class Driver{
public void driver(Car car){
car.move();
}
}
class Car{
public void move(){
}
}
聚合:整体和个体的关系,可以作为成员变量。成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。
代码及类图表示:
(空心菱形)
例如:汽车发动机(Engine)是汽车(Car)的组成部分,但是发动机可以独立存在
class Engine{
}
class Car{
private Engine engine;
public Car(Engine engine){
this.engine=engine;
}
public void setEngine(Engine engine){
this.engine=engine;
}
}
组合:整体和部分的关系,整体负责部分的生命周期,之间是共生共死的关系,且部分单独存在是没有任何意义的,可以作为成员变量
代码及类图表示:
(实心菱形)
例如:人的头(Hand)和嘴巴(Mouth),嘴巴是有的组成部分之一,而且头没了,则嘴巴也就没了
class Mouth{
}
class Head{
private Mouth month;
public Head(){
mouth=new Mouth();
}
}