IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> UML类图与对应的代码归类总结【软件工程】 -> 正文阅读

[Java知识库]UML类图与对应的代码归类总结【软件工程】

I.总述和预备知识

常见的UML类图一共包含六种关系:关联(Association)、聚合(Aggregation)、组合(Composition)、泛化(Generalization)、依赖(Dependency)、实现(Realization)。

【预备知识】关于类图的一般UML图示形式,做简单的概括介绍:

在UML类图中,类使用包含类名、属性(field) 和方法(method)带有分割线的矩形来表示,比如下图表示一个员工类,它包含name、age和email三个属性,以及modifyInfo()方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rPDGP1cO-1640926985803)(C:\Users\大瞎蘸酱\AppData\Roaming\Typora\typora-user-images\image-20211231104745048.png)]

这其中,属性和方法前分符号代表了这些属性和方法的可见性。UML类图中表示可见性的符号有三种:

+:表示public

-: 表示private

#:表示protected(friendly也归入这类)

另外,对类名、属性和方法的命名也有要求

?类名:类名中每一个单词的首字母均大写 (Employee)

?属性和方法名:属性名和方法名的命名按照驼峰命名法,名称中的第一个单词全部小写,之后每个单词仅首字母大写(modifyInfo)

最后,上面的这个UML的实例用Java代码表示为:

public class Employee {
    private String name;
    private int age;
    private String email;
	
    public void modifyInfo() {
        ......
    }
}

下面从类图的六种关系逐一进行介绍。


II.关联(Association)关系

关联(Association)关系体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如用户和用户的地址。

这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的。

表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。


1??单向关联

??UML图演示:

在这里插入图片描述
以上是单向关联的实例,需要类Customer知道类Address,而不需要类Address知道类Customer,那么就是单向关联。在UML类图中,用实线连接有关联关系的对象所对应的类,并通过有无箭头、箭头的单双向区分不同的关联关系。

??Java代码演示:

public class Customer {
    private Address address;
    ……
}

public class Address {
    ……
}

这里就是上述的:表现在代码层面为被关联类Address以类属性的形式出现在关联类Cusomer中


2??双向关联

??UML图演示:

在这里插入图片描述
以上是双向关联的实例,类Customer需要知道类Product,而类Product也需要知道类Cusomer,那么这两个类就应该是双向关联的。

??Java代码演示:

public class Customer {
    private Product[] products;
    ……
}

public class Product{
    private Customer customer;
    ……
}

3??自关联

??UML图演示:

在这里插入图片描述
以上是自关联的实例,自关联体现为类的属性类型为类本身,如链表、树结构。

??Java代码演示:

public class Node {
    private Node subNode;
    ……
} 

4??多重性关联

??UML图演示:

在这里插入图片描述
以上是多重性关联的实例。多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示

【补充】多重性与UML表示方式的对应关系:

UML表示方式多重性
1…1表示另一个类的一个对象只与该类的一个对象有关系
0…*表示另一个类的一个对象只与该类的零个或多个对象有关系
1…*表示另一个类的一个对象只与该类的一个或多个对象有关系
0…1表示另一个类的一个对象没有或只与该类的一个对象有关系
m…n表示另一个类的一个对象与该类最少m,最多n个对象有关系

??Java代码演示:

public class Form {
    private Button[] buttons; //定义一个集合对象
    ……
} 

public class Button {}

III.聚合(Aggregation)关系

聚合(Aggregation)关系是关联关系的一种特例,体现的是整体与部分、拥有的关系,即has-a的关系。

此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如计算机与CPU、车和引擎的关系等。

??UML图演示:

在这里插入图片描述
以上是聚合关系的实例。在UML中,聚合关系用带空心菱形的直线表示 ,整体指向部分,空心菱形靠近整体

??Java代码演示:

public class Car {
    private Engine engine;
    public Car(Engine engine) {    //构造注入
        this.engine = engine;
    }
    
    public void setEngine(Engine engine) {    //设值注入
        this.engine = engine;
    }
    ……
}

public class Engine {
    ……
}

表现在代码层面,和关联关系是一致的,只能从语义级别来区分。


IV.组合(Composition)关系

组合(Composition)关系也是关联关系的一种特例,体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合

同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。比如你的头和你的嘴巴。

??UML图演示:

在这里插入图片描述
以上是组合关系的实例,在UML中,组合关系用带实心菱形的直线表示,整体指向部分,实心菱形靠近整体。

??Java代码演示:

public class Head {
    private Mouth mouth;
    public Head() {
        mouth = new Mouth();  //实例化成员类
    }
    ……
}

public class Mouth {
    ……
}

表现在代码层面,和关联关系是一致的,只能从语义级别来区分。


V.泛化(Generalization)关系

泛化(Generalization)关系是一种继承关系,用于描述父类与子类之间的关系,父类又称为基类或超类,子类又称为派生类是一种继承关系。

它表示一般与特殊的关系,指定了子类如何特化父类的所有特征和行为。例如:学生和老师是人类的一种,即有学生、老师的特性也有人类的共性。

??UML图演示:

在这里插入图片描述
以上是泛化关系的实例,在UML中,泛化关系用带空心三角形的直线来表示,箭头指向父类。

??Java代码演示:

//父类
public class Person {
    protected String name;
    protected int age;
    public void move()  {
        ……
    }
    public void say() {
        ……
    }
}

//子类
public class Student extends Person  {
    private String studentNo;
    public void study()  {
        ……
    }
}

在代码实现时,使用面向对象的继承机制来实现泛化关系,在Java语言中使用extends关键字。


VI.依赖(Dependency)关系

依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,即一个类的实现需要另一个类的协助。

另外,在大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。

??UML图演示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5LAfcupn-1640926985811)(C:\Users\大瞎蘸酱\AppData\Roaming\Typora\typora-user-images\image-20211231111958658.png)]
以上是依赖关系的实例,在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。

??Java代码演示:

public class Driver {
    public void drive(Car car)
    {
        car.move();
    }
    ……
}

public class Car {
    public void move() {
        ......
    }
    ……
}

代码中体现为在Driver类中的drive方法内使用了Car类的对象。


VII.实现(Realization)关系

实现(Realization)关系是一种类与接口的关系,表示类是接口所有特征和行为的实现。在这种关系中,类实现了接口,类中的操作实现了接口中声明的操作。

??UML图演示:

在这里插入图片描述
以上是实现关系的实例,在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示,三角箭头指向接口。

??Java代码演示:

public interface Vehicle {
    public void move();
}

public class Ship implements Vehicle {
    public void move() {
        ……
    }
}

public class Car implements Vehicle {
    public void move() {
        ……
    }
}

代码中,Java使用关键字interface定义接口类,并用关键字implements定义实现。


VIII.UML画法总结

类之间的关系UML画法
关联关系实线连接,有无箭头表明单双向。
聚合关系空心菱形直线表示 ,整体指向部分,空心菱形靠近整体。
组合关系实心菱形直线表示,整体指向部分,实心菱形靠近整体。
泛化关系空心三角形直线表示,箭头指向父类。
依赖关系箭头虚线表示,由依赖的一方指向被依赖的一方。
实现关系空心三角形虚线表示,三角箭头指向接口。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:44:53  更:2022-01-01 13:46:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:38:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码