UML类中的6种关系

乎语百科 297 0

最近现看Java设计模式,但是越看越不明白,一直搞不明白类与类之前的关系有哪些,通过几天的学习与整理通过代码实现的UML画图的方式理解类之间的相互关系。

一、类与类6大关系:

泛化(generalization)、实现(realization)、关联(association)、聚合(aggregation)、组合(compostion)、依赖(dependency)

二、类图的表示方法

public class Persion {
    private String name;/*私有属性-*/
    protected int age;/*保护的属性#*/
    public static String school;/*公有静态属性+*/

    public Persion(String name, int age, String schoole) {
        this.name = name;
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public void setAage(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }

    /**
     * 静态方法
     * @param school
     */
    public static void setSchool(String school) {
        Persion.school = school;
    }
    public static String getSchool() {
        return school;
    }
}

通过类图表示类:-表示私有属性,+表示公有,#表示protected,下划线表示static静态

三、类与类之间的关系(以下通过代码和类图来说明)

1.泛化(继承)generalization: 实线+三角箭头

public class ZhangSan {
    private String idCard;

    public ZhangSan(String idCard) {
        this.idCard = idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }
    public String getIdCard() {
        return idCard;
    }
}

Zhangsan类继承Person类,Person是Zhangsan的泛化,表示关系用实线的三角箭头关联

2. 实现realization: 虚线 + 三角箭头

public interface Human {
    public void eat();
}
public class Man implements Human{
    public void eat() {
        System.out.println("man eat foot");
    }
}

Man实现Human接口,实现和泛化是比较简单的两种类与类之间的关系

3. 关联association:实线 + 箭头

public class ZhangSan {
    private String idCard;
    public Study study;

    public ZhangSan(String idCard) {
        this.idCard = idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }
    public String getIdCard() {
        return idCard;
    }

    public Study getStudy() {
        return study;
    }
    public void setStudy(Study study) {
        this.study = study;
    }
}
public class Study {
    public void studyEnglish() {
        System.out.println("study English");
    }
    public void studyChinese() {
        System.out.println("study Chinese");
    }
}

Zhangsan中有一个study属性,该属性是Study类的一个实例,Zhangsan类和Study类之间的关系为关联关系

4. 聚合aggregation:空菱形 + 实线

public class Car {
    public Wheel wheel;
    public Engine engine;

    public void setWheel(Wheel wheel) {
        this.wheel = wheel;
    }
    public Wheel getWheel() {
        return wheel;
    }

    public void setEngine(Engine engine) {
        this.engine = engine;
    }
    public Engine getEngine() {
        return engine;
    }
}

public class Wheel {

}

public class Engine {

}

聚合表示的是整体和部分的关系,但是这种整体和部分的关系是可以拆分的且部分的内容是可以单独存在的,这种关系的代码实现类似于多个关联。

5. 组合compostion 实菱形 + 实线

public class Persion {
    public Head head;
    public Leg leg;
    public void setHead(Head head) {
        this.head = head;
    }
    public Head getHead() {
        return head;
    }

    public void setLeg(Leg leg) {
        this.leg = leg;
    }
    public Leg getLeg() {
        return leg;
    }
}

public class Head {

}

public class Leg {

}

Head类和Leg类是Person类的一部分,但是这部分不可以脱离Person单独存在,Person中的head、leg是Head、Leg类的两个例,代码实现上和聚合一样

6. 依赖dependency:虚线 + 箭头

public class Persion {
    ......public void callUp(Phone phone) {
        phone.call();
    }
}

public class Phone {
    public void call() {
        System.out.println("call some one");
    }
}

Person中新加一个callUp方法用来实现打电话功能,但是这个功能需要调用Phone类中的call方法,因此通过把phone实例通过参数传递到Person的callUp方法中,这种关系为依赖关系

标签:

留言评论

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~