UML类图

UML类图最常用的6类间关系,分别是关联关系依赖关系组合关系聚合关系泛化关系接口与实现关系。那这六种类间关系我们到底该如何理解,如何画图,我们废话不多说,直接开始讲解。

Ⅰ、关联关系

关联关系是类与类之间最常用的一种关系,那该如何判断什么是关联关系?一句话解释就是:全局变量就是关联关系

代码

package org.association;

/**
 * @author LOVEYOU
 */
public class ClassA {
    private ClassB classB;
}
package org.association;

/**
 * @author LOVEYOU
 */
public class ClassB {
}

 类图

UML类图_第1张图片

类图用的是PlantUML,实现代码如下(可忽略)

@startuml
skinparam classAttributeIconSize 0
ClassA --> ClassB: contains

class ClassA {
    - classB: ClassB
}

class ClassB {
}
@enduml

Ⅱ、依赖关系

依赖关系是一种使用关系,那该如何判断什么是依赖关系?一句话解释就是:局部变量就是依赖关系

代码

package org.association;

/**
 * @author LOVEYOU
 */
public class ClassA {
    public void CallB(ClassB classB) {
        classB.classBMethod();
    }
}
package org.association;

/**
 * @author LOVEYOU
 */
public class ClassB {
    public void bMethod() {
        System.out.println("我是ClassB的方法");
    }
}

 类图

UML类图_第2张图片   

类图用的是PlantUML,实现代码如下(可忽略)

@startuml
skinparam classAttributeIconSize 0
ClassA ..> ClassB

class ClassA {
    + callBMethod(ClassB classB): void
}

class ClassB {
    + bMethod(): void
}
@enduml

 Ⅲ、组合关系

组合关系实质上是关联关系的一种,组合关系最显著的特征就是“同生共死”,如何理解?一句话解释就是:一旦整体对象不存在,那么部分对象也将不存在

代码

package org.association;

/**
 * @author LOVEYOU
 */
public class ClassA {
    private ClassB classB;
    private ClassC classC;
    public void ClassA() {
        classB = new ClassB();
        classC = new ClassC();
    }
}
package org.association;

/**
 * @author LOVEYOU
 */
public class ClassC {
}

 类图

UML类图_第3张图片

类图用的是PlantUML,实现代码如下(可忽略)

@startuml
skinparam classAttributeIconSize 0
ClassA *--> ClassB: has
ClassA *--> ClassC: has

class ClassA {
    -classB: ClassB
    -classC: ClassC
    +ClassA()
}

class ClassB {
}

class ClassC {
}
@enduml

Ⅳ、聚合关系

聚合关系也是关联关系的一种,那么该如何判别聚合关系呢?一句话解释就是:聚合关系既是关联关系又是依赖关系。

代码

package org.association;

/**
 * @author LOVEYOU
 */
public class ClassA {
    private ClassB classB;

    public ClassA(ClassB classB) {
        this.classB = classB;
    }

    public void setClassB(ClassB classB) {
        this.classB = classB;
    }
}
package org.association;

/**
 * @author LOVEYOU
 */
public class ClassB {
}

 类图

UML类图_第4张图片

类图用的是PlantUML,实现代码如下(可忽略)

@startuml
skinparam classAttributeIconSize 0
ClassA o--> ClassB: contains

class ClassA {
    - classB: ClassB
    + ClassA(ClassB classB)
    + setClassB(ClassB classB): void
}

class ClassB {
}
@enduml

Ⅴ、泛化关系

泛化关系也就是继承关系。一句话解释就是:Java中看到“extends”关键字就是泛化关系。

代码

package org.association;

/**
 * @author LOVEYOU
 */
public class ClassA {

    public String name;
    public int age;

    public void aMethod() {
        System.out.println("A方法");
    }
}
package org.association;

/**
 * @author LOVEYOU
 */
public class ClassB extends ClassA{
    private int BPhoneNumber;

    public void bMethod() {
        System.out.println("B方法");
    }
}
package org.association;

/**
 * @author LOVEYOU
 */
public class ClassC extends ClassA{
    private int CPhoneNumber;

    public void cMethod() {
        System.out.println("C方法");
    }
}

 类图

UML类图_第5张图片

类图用的是PlantUML,实现代码如下(可忽略)

@startuml
skinparam classAttributeIconSize 0
ClassA <|-- ClassB
ClassA <|-- ClassC

class ClassA {
    + name: String
    + age: int
    + aMethod(): void
}

class ClassB {
    - BPhoneNumber: int
    + bMethod(): void
}

class ClassC {
    - CPhoneNumber: int
    + cMethod(): void
}
@enduml

 Ⅵ、接口与实现关系

在这种关系中,类实现了接口。一句话解释就是:Java中看到“implements”关键字就是实现关系。

代码

package org.association;

/**
 * @author LOVEYOU
 */
public interface ClassA {
    /**
     * done
     */
    void done();
}
package org.association;

/**
 * @author LOVEYOU
 */
public class ClassB implements ClassA{
    @Override
    public void done() {

    }
}
package org.association;

/**
 * @author LOVEYOU
 */
public class ClassC implements ClassA{
    @Override
    public void done() {

    }
}

类图

UML类图_第6张图片

类图用的是PlantUML,实现代码如下(可忽略)

@startuml
skinparam classAttributeIconSize 0

ClassA <|.. ClassB
ClassA <|.. ClassC

interface ClassA {
    + done(): void
}

class ClassB{
    + done(): void
}

class ClassC {
    + done(): void
}
@enduml

 总结

① 关联、依赖、组合、聚合、泛化、实现如下图所示

UML类图_第7张图片

类图用的是PlantUML,实现代码如下(可忽略)

@startuml
skinparam classAttributeIconSize 0
ClassA <-- ClassB : 关联
ClassA <.. ClassB : 依赖
ClassA *-- ClassB : 组合
ClassA o-- ClassB : 聚合
ClassA <|-- ClassB: 泛化
ClassA <|.. ClassB: 实现
@enduml

 ② 关系判别方法

        Ⅰ、全局变量就是关联关系

        Ⅱ、局部变量就是依赖关系

        Ⅲ、“同生共死”就是组合关系

        Ⅳ、关联关系+依赖关系=聚合关系

        Ⅴ、Java中看到“extends”关键字就是泛化关系

        Ⅵ、Java中看到“implements”关键字就是实现关系

( PlantUML 操作可以在官网查看手册,网址是:https://plantuml.com/zh/,有兴趣的小伙伴可以去看看 )

你可能感兴趣的:(Java基础,uml,java)