UML--类图

一 、类图概述 

1、类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法

2、类图中的“类”与面向对象语言中的“类”的概念是对应的,是对现实世界中的事物的抽象

二、类图中的事物

从上到下分为三部分,分别是类名、属性和操作。类名是必须有的

※ 类如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等

※ 类如果有操作,则每一个操作也都有一个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等

三 、类图中的关系

类之间的关系解释UML表示

关联关系

关联(Association)

对象之间一种引用关系,比如客户类与订单类之间的关系。这

种关系通常使用类的属性表达。关联又分为一般关联、聚合关联与组合关联。后两种在后面分析。在类图使用带箭头的实线表示,箭头从使用类指向被关联的类。可以是单向和双向。

 

 

聚合(Aggregation) 

表示has-a的关系,是一种不稳定的包含关系。较强于一般关联,有整体与局部的关系,并且没有了整体,局部也可单独存在。如公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司。在类图使用空心的菱形表示,菱形从局部指向整体。

 

 

组合(Composition) 

表示contains-a的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。是一种更强的聚合关系。部分不能脱离整体存在。如公司和部门的关系,没有了公司,部门也不能存在了;调查问卷中问题和选项的关系;订单和订单选项的关系。在类图使用实心的菱形表示,菱形从局部指向整体。

 

 

 

依赖关系

依赖(Dependency)

对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责。在类图使用带箭头的虚线表示,箭头从使用类指向被依赖的类。

 

 

泛化关系

泛化(generalization)

表示is-a的关系,是对象之间耦合度最大的一种关系,子类继承父类的所有细节。直接使用语言中的继承表达。在类图中使用带三角箭头的实线表示,箭头从子类指向父类。

实现关系

实现(Realization)

在类图中就是接口和实现的关系。在类图中使用带三角箭头的虚线表示,箭头从实现类指向接口。

各种关系的强弱顺序:   泛化实现组合聚合关联依赖

四 、举例分析

4.1 依赖

【依赖关系】:是一种使用的关系,所以要尽量不使用双向的互相依赖。

【代码表现】:局部变量、方法的参数或者对静态方法的调用

/**
 * @author ***
 * @version 1.0
 * @date 2021/3/22 13:52
 * <p>
 * 学生类
 * ------------------------依赖关系------------------
 * <p>
 * Student与Phone是关联关系,Phone是类的成员变量,Student与Phone是平等的,不存在包含关系
 * <p>
 * Student与Computer是依赖关系,Computer是局部变量,
 * 持有Computer类的是Student类的一个方法,而不是Student类,这点是最重要的。
 * 基础知识: 成员变量包括实例变量和类变量
 */
public class Student {

    /**
     * 类变量
     */
    private static final boolean flag = true;
    /**
     * 实例变量
     */
    private String studentName;

    private String studentSex;

    private int studentAge;

    private Phone phone;

    public Student() {

    }

    public void getHappiness() {
        phone = new Phone();
    }

    /**
     * 学习上课时候才引入了Computer
     */
    public void study() {
        Computer computer = new Computer();
    }
}
/**
 * @author ***
 * @version 1.0
 * @date 2021/3/22 14:56
 *
 * 电脑类
 */
public class Computer {

    private String computerColor;

    private String memory;

    public void run() {
    }
}
 
 

类图:

4.2 关联

 关联关系】:关联的两个对象之间一般是平等的,关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

 【代码体现】:成员变量

表示类与类之间的连接。它使一个类的可见属性和方法被另一个类使用。关联可以是双向或者单向的。双向的关联箭头是可选的,单向的箭头指向遍历或者查询的方向。在Java中,关联使用实例变量来实现。在关联关系中可以使用附加的基数来说明类之间对应的个数。

 

基数含义
0..1零个或者一个实例
0..n或者n没有限制,任意
1有且只能一个实例
1..n至少有一个实例
/**
 * @author ***
 * @version 1.0
 * @date 2021/3/22 15:08
 *
 *-----------------------关联关系------------------
 * 电话类
 */
public class Phone {
    /**
     * 电话品牌
     */
    private String phoneBrand;

}

类图:

4.3 聚合

【聚合关系】:是整体与部分的关系.如人群和人是整体和部分的关系.聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
/**
 * @author ***
 * @version 1.0
 * @date 2021/3/22 15:00
 * <p>
 * ---------------------聚合关系----------------------
 * 学生和小组是聚合关系,学生离开当前小组,依然可以去其它小组,学生独立存在
 */
public class Group {
    private String groupName;

    private int groupScore;

    private Student student;

    public void getScore() {
        student = new Student();
        this.groupScore += 10;
    }
}

类图:

4.4 组

【组合关系】:是整体与部分的关系,没有公司就不存在部门组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期
【代码体现】:成员变量
/**
 * @author ***
 * @version 1.0
 * @date 2021/3/22 15:06
 *
 * 班级信息类
 * ------------------------组合关系 ------------------------
 * 小组脱离班级不能存在
 */
public class ClassInfo {
    private String className;
    private Group group;

    public void grouping() {
        group = new Group();
    }
}

类图:

4.5 泛化

【泛化关系】:表示is-a的关系,是对象之间耦合度最大的一种关系,子类继承父类的所有细节。直接使用语言中的继承表达。
【代码体现】:继承
/**
 * @author ***
 * @version 1.0
 * @date 2021/3/27 15:50
 */
public class Human {
    private double height;
    private double weight;
}
public class Student extends Human {

   // 省略 同上
}

类图:

4.5 实现

【实现关系】:在类图中就是接口和实现的关系。
【代码体现】:实现
/**
 * @author ***
 * @version 1.0
 * @date 2021/3/27 15:58
 */
public interface Action {
 
    public default boolean exam(int score) {
        /***/
        boolean flag = false;
        if (score >= 60) {
            flag = true;
        }
        return flag;
    }
}
public class Student extends Human implements Action{

  // 省略 同上
}

类图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一棵小白菜#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值