UML类图与对应的代码归类总结【软件工程】

✴️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代码演示:

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-Hf2aqVCP-1715625398699)]

[外链图片转存中…(img-o4oQJd5X-1715625398699)]

[外链图片转存中…(img-xwzOC6b1-1715625398699)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值