【java】UML类图与常见类关系图

【java】UML类图与常见类关系

由于吕大爷十分在意类关系的绘制,但是我又没有学明白这个东西,就打算自己整理一下。又由于某人说百香果果茶不好喝,我直接is-a sb泛化关系警告!!!

感谢上述两人对本博客的动力赞助,感觉很好,下次不需要了。

一、UML图

UML图属于结构图,常被用于描述一个系统的静态结构。在一个UML中通常包含类的UM图、接口的UML图、泛化关系的UML图、关联关系的UML图、依赖关系的UML图和实现关系的UML图。

在类的UML图中,使用一个长方形描述一个类的主要构成,将长方形垂直的分为3层。

(1)顶部第一层是名字层,字体为,表明是具体类;字体为,表明是抽象类

(2)第二层是变量层,也称为属性层,列出类的成员变量及类型,格式是**“变量名字:类型”**,根据需要可以只列出重要变量的名称

(3)第三层是方法层,也称为操作层,列出类中的方法,格式是“方法名字:类型”,根据需要可只列出重要的方法

二、常见的类关系

强弱顺序:

泛化=实现>组合>聚合>关联>依赖

1.泛化关系

关系描述:表示is-a关系,子类继承父类

标识:带三角箭头的实线

指向:由子类指向父类

图示:image-20211024200956391

代码:

public class zyz extends sb{
}
2.实现关系

关系描述:表示接口和实现关系

标识:带三角箭头的虚线

箭头指向:实现类指向接口

图示:image-20211024203749713

代码:

interface studyEnglish{
    void read();
    void write();
}
public class zyz implements studyEnglish{
    public void read(){
        System.out.println("zyz很爱读英语");
    }
    public void write(){
        System.out.println("zyz很爱写英语");
    }
    public static void main(String[] args){
        zyz.read();
        zyz.write();
    }
}

笑死,发现自己连接口是什么也不太清楚,那我们就开个小差,学学接口是啥??

首先,很特别的是接口只有方法的特征,没有方法的实现,也就是说括号里面啥都没有,原来接口是个胸无点墨的纸老虎,但也恰因如此,这些方法可以在不同的地方被不同的类实现,在各个类中自由穿梭,随意塑造成我们需要的样子。

其次,接口里面的全部都是全局变量和公共的抽象方法,即默认属性是public static final,这也是为了解决java无法多继承的一种手段,但在实际中更多的作用是制定标准。

再然后,规定了要实现接口,就必须要实现接口中的规定实现所有方法,例如上述例子中的read()和write()这两个方法,这样才能承认这个类实现了这个接口。

需要注意点:

1.不能直接实例化一个接口,因为接口中的方法都是抽象的,没有方法体,那就需要我们使用接口类型引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。

接口的声明已省略
class YouPan implements USB{
    public void read(){
        System.out.println("U盘正在通过USB功能读取数据");
    }
    public void write(){
        System.out.println("U盘正在通过USB功能写入数据");
    }
}
class JianPan implements USB{
    public void read(){
        System.out.println("键盘正在通过USB功能读取数据");
    }
    public void write(){
        System.out.println("键盘正在通过USB功能写入数据");
    }
}
public class Main{
    public static void main(String[] args){
   
    }

2.一个类可以接多个接口,一个接口可以继承于另一个接口,或者更多接口,即可以多继承

3.接口也可用来实现解耦

4.并不是所有接口内部都有方法,比如Seriallizable接口,其作用是使得对象能够“序列化”,但其中却没有任何内容,故这个接口只是一个标识,用来标志一个类具有序列化的功能。

3.依赖关系

关系描述:类之间关系最弱的一种关联方式,表示use a。代码中一般指有局部变量、函数参数、返回值建立的对于其他对象的调用关系。

标识:带箭头的虚线

图示:

image-20211025211426158

箭头指向:使用类指向被依赖类

代码实现:

public zyz abstract class zyz{
    public void Grow(){
        Air air = new Air();
        Water water = new Water();
    }
    public Water Drink(Water water){
        
    }
}
public class Air{
}
public class Water{
}

依赖关系的实现:

如果Air、Water类是全局的,则zyz可以调用他们

Air、Water类是zyz类里的方法中的局部变量

Air、Water类作为zyz类中的方法的参数或者返回值

4.关联关系

关系描述:表示对象之间的一种引用关系,比如客户类与订单之间的关系。这种关系通常使用类的属性表达。关联分为一般关联、聚合关联与组合关联。一般关联又可分为单项关联和双向关联

标识:带箭头的实线

图示:

image-20211025213037665

代码实现:

class zyz{
    private course c;
    
}
class course{
}

如果实例化zyz类的对象,那么同时会有一个course类的对象被实例化,简言之,course作为zyz的属性存在

5.聚合关系

关系描述:表示has a的关系,是一种不稳定的包含关系,较强于一般关联,有整体与局部的关系,并且没有了整体,局部也可单独存在。如公司和员工的关系,公司包含员工,但公司没有,员工依然还在,只不过可能换一个工作罢了。

标识:带空心菱形的实线

图示:

image-20211025214617981

箭头指向:菱形指向整体,箭头指向个体

代码实现:

public class zyzGroup{
    public List<zyz> zyzs;
    public zyzGroup (List<zyz> zyzs){
        this.zyzs=zyzs;
    }
}
6.组合关系

关系描述:表示contain a的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期,是一种更强的聚合关系,部分不能脱离整体存在,如公司和部门的关系,没有了公司,部门也不能存在了,还有人和大脑等等。

标识:带实心菱形箭头

图示:image-20211025215517019

箭头指向:菱形指向整体,箭头指向个体

代码实现:

class zyz{
    private brain b = new brain();
}
class brain{
}  

组合类的构造函数中包含一个类的实例化,表明zyz类在事例化之前,一定要先实例化brain类,这两个类紧密耦合在一起。

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值