文章目录
UML类图中的关系
前景
在UML类图中,有以下几种关系:
-
关联关系(Association):表示两个类之间的静态关联,描述了对象之间的连接,通常表示为一条带箭头的实线。
-
聚合关系(Aggregation):表示整体与部分之间的关系,部分可以存在独立于整体的情况,用一个空心菱形表示。
-
组合关系(Composition):也表示整体与部分之间的关系,但部分不能脱离整体而独立存在,用一个实心菱形表示。
-
泛化关系(Generalization):表示类与类之间的继承关系,其中子类继承父类的属性和方法,用带空心三角箭头的实线表示。
-
实现关系(Realization):表示类与接口之间的关系,类实现了接口定义的所有方法,用带空心三角箭头的虚线表示。
-
依赖关系(Dependency):表示一个类依赖于另一个类的定义或实现,当一个类的变化可能影响到另一个类时存在依赖关系,用带箭头的虚线表示。
1、关联关系(Association):
描述:关联关系表示两个类之间的连接,通常用于表示一个类对象可以通过某种方式引用另一个类对象的情况。
表示两个类之间的静态关联,描述了对象之间的连接,通常表示为一条带箭头的实线。
在 UML 中,关联关系可以有箭头,也可以没有箭头,具体取决于关联的性质。
-
带箭头的关联:带箭头的关联通常表示关联的方向,箭头指向被关联的类。这种关联表示了两个类之间的单向关系,其中一个类知道另一个类的存在,但反之未必。箭头的方向表明了信息流的方向。
-
不带箭头的关联:不带箭头的关联表示了双向关系,其中两个类相互了解对方的存在,但没有特定的方向。这种关联通常用于表达双向通信或双方都可以访问对方的信息。
在 PlantUML 中,默认情况下,关联关系是不带箭头的。如果你想要使用带箭头的关联关系,可以在类之间使用-->
来表示,箭头的方向由左侧类指向右侧类,示例如下:
class ClassA
class ClassB
ClassA --> ClassB
上述代码表示 ClassA 类与 ClassB 类之间存在带箭头的关联关系,箭头从 ClassA 指向 ClassB。
代码案例
public class Student {
private String name;
private Course course;
// Constructor, getters, and setters
}
public class Course {
private String name;
// Constructor, getters, and setters
}
// 口语表达:
//关联关系就像两个人之间的朋友关系一样,他们之间有一种联系。在编程中,就像一个类中的一个成员变量引用了另一个类的对象一样。比如,一个人(类)有一辆车(类的对象)。
2、聚合关系(Aggregation):
描述:聚合关系表示整体与部分之间的关系,部分可以存在独立于整体的情况。
表示整体与部分之间的关系,部分可以存在独立于整体的情况,用一个空心菱形表示。
代码案例
public class Class {
private List<Student> students;
// Constructor, getters, and setters
}
public class Student {
private String name;
// Constructor, getters, and setters
}
// 口语表达:
// 聚合关系就像一个集体中的成员一样,他们可以独立存在。比如,一个班级(类)有多个学生(类的对象),但学生可以存在于不同的班级中。
3、组合关系(Composition):
描述:组合关系表示整体与部分之间的关系,但部分不能脱离整体而独立存在。
也表示整体与部分之间的关系,但部分不能脱离整体而独立存在,用一个实心菱形表示。
public class Car {
private Engine engine;
private List<Tire> tires;
// Constructor, getters, and setters
}
public class Engine {
// Engine details
}
public class Tire {
// Tire details
}
// 口语表达:
// 组合关系就像一个整体与其组成部分之间的关系,组成部分不能独立存在于整体之外。比如,一个汽车(类)包含引擎(类的对象)和轮胎(类的对象),没有了引擎或者轮胎,汽车就不完整了。
4、泛化关系(Generalization):
描述:泛化关系表示类与类之间的继承关系,子类继承了父类的属性和方法。
表示类与类之间的继承关系,其中子类继承父类的属性和方法,用带空心三角箭头的实线表示。
public class Animal {
public void eat() {
// Eat behavior
}
}
public class Dog extends Animal {
// Dog-specific behavior
}
public class Cat extends Animal {
// Cat-specific behavior
}
// 口语表达:
// 泛化关系就像是一个类与它的子类之间的关系,子类继承了父类的属性和方法。比如,动物(类)可以有狗(子类)和猫(子类),它们都继承了动物的特征和行为。
5、实现关系(Realization):
描述:实现关系表示类与接口之间的关系,类实现了接口定义的所有方法。
表示类与接口之间的关系,类实现了接口定义的所有方法,用带空心三角箭头的虚线表示。
public interface Interface {
void method1();
void method2();
}
public class MyClass implements Interface {
@Override
public void method1() {
// Implementation of method1
}
@Override
public void method2() {
// Implementation of method2
}
}
// 口语表达:
// 实现关系就像是一个类实现了一个接口所定义的行为一样。比如,一个类(类)实现了一个接口(类)定义的方法,就像是承诺了要实现这些方法一样。
6、依赖关系(Dependency):
描述:依赖关系表示一个类依赖于另一个类的定义或实现。
表示一个类依赖于另一个类的定义或实现,当一个类的变化可能影响到另一个类时存在依赖关系,用带箭头的虚线表示。
using System;
// DependencyClass 类依赖于另一个类 UtilClass 的方法
public class DependencyClass
{
public void DoSomething()
{
UtilClass util = new UtilClass();
util.UtilityMethod();
}
}
// UtilClass 类包含一个被 DependencyClass 类使用的方法
public class UtilClass
{
public void UtilityMethod()
{
Console.WriteLine("Utility method executed");
}
}
// 口语表达:
// 依赖关系就像是一个类需要另一个类的帮助才能完成某些任务一样。比如,当一个类的方法中需要另一个类的对象来完成一些工作时,就存在了依赖关系。
7、整合归纳:
在整合归纳中,我将每种关系类型的描述、代码示例和口语表达结合在一起,形成一个连贯的整体。每种关系类型都被单独介绍和解释,以确保清晰和易于理解。
公众号:平平无奇代码猴
也可以搜索:Jackiie_wang 公众号,欢迎大家关注!欢迎催更!留言!
作者:ProMer_Wang
链接:https://blog.csdn.net/qq_43801020/article/details/137443184