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 {
…
}
聚合(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 {
……
}
表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
组合(Composition)关系也是关联关系的一种特例,体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。
同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。比如你的头和你的嘴巴。
✴️UML图演示:
以上是组合关系的实例,在UML中,组合关系用带实心菱形的直线表示,整体指向部分,实心菱形靠近整体。
✳️Java代码演示:
public class Head {
private Mouth mouth;
public Head() {
mouth = new Mouth(); //实例化成员类
}
……
}
public class Mouth {
……
}
表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
泛化(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关键字。
依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,即一个类的实现需要另一个类的协助。
另外,在大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
✴️UML图演示:
以上是依赖关系的实例,在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
✳️Java代码演示:
public class Driver {
public void drive(Car car)
{
car.move();
}
……
}
public class Car {
public void move() {
…
}
……
}
代码中体现为在Driver类中的drive方法内使用了Car类的对象。
实现(Realization)关系是一种类与接口的关系,表示类是接口所有特征和行为的实现。在这种关系中,类实现了接口,类中的操作实现了接口中声明的操作。
✴️UML图演示:
以上是实现关系的实例,在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示,三角箭头指向接口。
✳️Java代码演示:
public interface Vehicle {
public void move();
}
public class Ship implements Vehicle {
public void move() {
……
}
}
public class Car implements Vehicle {
最后
🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!