java学习中的UML类图

目录

百度百科对类图的定义 

从一个简单的Person类开始

生成Person的类图

类与类之间的关系

泛化关系

实现关系

依赖关系

关联关系

聚合关系

组合关系

完整的类图如下

附录1: smartuml

附录2: powerdesigner


百度百科对类图的定义 

类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。
它既用于应用程序的系统分类的一般概念建模,也用于详细建模,将模型转换成编程代码。类图也可用于数据建模。

在java学习中,类图大致就是描述自己的类中属性和方法, 自己类与其他类的关系, 用一些通用的规则,方便读者看到时能够理解

从一个简单的Person类开始

使用到的工具是idea2020

public class Person {
    private  String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

生成Person的类图

在idea中找到  FIle->Settings -> Tools -> Diagrams

一般情况下,只需要关注成员变量,方法,构造器,所以选中

然后打开Person类, 使用快捷键ctrl + alt +u 可以快速生成类图

当然,使用IDEA生成的类图,可能与书籍上的有所差异,

使用smartUML生成类图,操作步骤见 附录: smartuml

这就是常见的uml类图

 

其中,属性的规范

可见性 名称:类型 [ = 默认值 ]

这里的可见性,对应java的 public(+), private(-), protected(#) 

名称就是属性的name

类型就是属性对应的数据类型

如果有默认值也可以加上

方法的规范

可见性 名称(参数列表) [ : 返回类型]

方法的可见性与属性一致, 

名称就是方法名

参数列表,如果有多个,使用逗号隔开

类与类之间的关系

在UML类图中类与类之间存在多种关系,如泛化(Generalization)关系,实现(Realization)关系,依赖(Dependence)关系,关联(Association)关系,聚合(Aggregation)关系, 组合(Composition)关系。

泛化关系

泛化关系也就是Java中的继承,类和类,接口和接口都可以是继承关系,父类又称作基类或超类,子类又称作派生类,类继承父类后可以实现父类的所以功能,并能拥有父类没有的功能。在UML中,泛化关系可以用带空心三角形的直线来表示;

public class Student extends Person{
    private String classroom;

    public void setClassroom(String classroom) {
        this.classroom = classroom;
    }

    public String getClassroom() {
        return classroom;
    }
}

使用smartUML生成类图

实现关系

Animal

public interface Animal {
    void say();
}

更新Person


public class Person implements Animal{
    ...

    @Override
    public void say() {
        System.out.println("我是Person");
    }
}

Pig也是Animal

public class Pig implements Animal {
    @Override
    public void say() {
        System.out.println("我是 Pig");
    }
}

Student也say

public class Student extends Person{
    private String classroom;

    public void setClassroom(String classroom) {
        this.classroom = classroom;
    }

    public String getClassroom() {
        return classroom;
    }

    @Override
    public void say() {
        System.out.println("我是student");
    }
}

生成类图  interface中的say()方法, smartUML默认的可见性是package, 使用~表示

 

依赖关系

依赖关系是类与类之间最弱的关系,依赖可以简单的理解一个类使用了另一个类,这种使用关系具有临时性特征,但是一个类又会由于另一个类的改变而受到影响,在UML中一栏用带箭头的虚线表示依赖. A类中有B类型的局部变量,就说A类依赖于B类。

Student eat Pig

 pig200斤

public class Pig implements Animal {
    @Override
    public void say() {
        System.out.println("我是 Pig");
    }


    public int getWeight() {
        return 200;
    }
}

 

public class Student extends Person{
    private String classroom;

    public void setClassroom(String classroom) {
        this.classroom = classroom;
    }

    public String getClassroom() {
        return classroom;
    }

    @Override
    public void say() {
        System.out.println("我是student");
    }
    public int eat(Pig pig) {
        return pig.getWeight();
    }
}

自动生成的类图中没有依赖关系,需要手动添加 

使用powerdesigner生成类图会比smartUML更加方便快捷

但是自动生成的没有依赖关系(可能是我对工具的使用不够熟练), 手动添加依赖关系

关联关系

关联关系表示一个类和另一类有联系,例如每个学生都有一个地址,就形成了一对一的关联关系

关联关系是一种包含关系,在UML中用一个带箭头的实线表示,箭头指向被包含类。在上图中你可能会发现在线上有1 ..1,这个是说明包含关系的。在UML类中有如下几种。

1..1 表示另一个类的一个对象只与该类的一个对象有关系

0..* 表示另一个类的一个对象与该类的零个或多个对象有关系

1..* 表示另一个类的一个对象与该类的一个或多个对象有关系

0..1 表示另一个类的一个对象没有或只与该类的一个对象有关系

* 任意多个对象关联

 

public class Student extends Person{
    private String classroom;
    private Address address;
    public void setClassroom(String classroom) {
        this.classroom = classroom;
    }

    public String getClassroom() {
        return classroom;
    }

    @Override
    public void say() {
        System.out.println("我是student, Address");
    }
    public int eat(Pig pig) {
        return pig.getWeight();
    }
}

 

在Address中也包含一个Student

public class Address {
    private String city;
    private String country;
    private Student student;
    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

 

如果一个Address有多个Student

public class Address {
    private String city;
    private String country;
    private Student [] student;
    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

 

聚合关系

聚合关系是表示整体与部分的关系,但是部分可以脱离整体而存在。例如有一个Group, 里面有多个Student。在UML类中聚合关系用带空心菱形的直线表示。 空心菱形表示聚合,指向one端。

public class Group {
    private String name;
    private Student [] students;
    public Group() {
        this.students = new Student[10];
    }

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

    public String getName() {
        return name;
    }

}

组合关系

组合关系也是一种部分和整体的关系,但是部分存活周期受到整体的影响,若整体不存在则部分也将不存在。此时部分需在整体的构造方法中创建。在UML类中,组合关系用带实心菱形的直线表示。例如学生拥有学生证,学生退学之后,学生证也失效

public class Student extends Person{
    private String classroom;
    private Address address;
    private StudentCard studentCard;
    public Student() {
        studentCard = new StudentCard();
        studentCard.setId(12345678);
    }
    ...
}
public class StudentCard {
    private  int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

 

使用powerdesigner自动生成之后,需要手动改变下关系的类型

 

完整的类图如下

 

 

 

附录1: smartuml

下载安装 smartuml 4.0

安装nodejs

安装asar

npm install -g asar

找到文件路径

win10 路径 C:\Program Files\StarUML\resources

解压app.asar

修改 app\src\engine\license-manager.js

checkLicenseValidity

重新打包执行,即可跳过激活

注意: 必须以管理员身份打开cmd,否则会提示权限不足

安装java代码的支持

 

安装完成之后重启

 

找到源文件所在的文件夹, 双击Overview,即可出现,

然后点击类图中的Person框, 完善类图

 

附录2: powerdesigner

安装及破解文件地址:

使用时,直接 File -> new model 

确定之后,选择language , 找到Reverse Engineer Java 

 

点击add, 将要生成类图的类添加进来, powerdesign只能生成同一个文件夹下的java类图

点击确定,即可

 然后找到对应的model下面的文件,即可看到已自动生成的类图

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hero_孙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值