UML类图中符号的含义
UML类图中符号的含义
- 类图中的基本符号由虚线、箭头、实线、空心三角形、空心菱形、实心菱形组成,这些符号的组合构成类图的基本符号
实线+箭头
-
表示关联关系
-
关联关系分类
-
自身关联
表示自身拥有一个自身的引用
-
单向关联
一方拥有另一方的引用,可以调用另一方的公共属性和方法
-
双向关联
双方互相拥有对方的引用,可以调用对方的公共属性和方法
-
-
案例,表示C1具有C2的引用,C1可以调用C2的公共属性和方法
-
实线表示关联关系:实线连接两个类,表示它们之间存在某种关联或关系。关联关系可以是单向或双向的,具体的关联类型可以根据箭头的方向和其他附加符号来确定。
示例代码:
public class Car { private Engine engine; // ... } public class Engine { // ... } ``` 在这个例子中,`Car` 类与 `Engine` 类之间存在关联关系。`Car` 类中有一个名为 `engine` 的私有属性,表示它与 `Engine` 类相关联。
-
箭头表示依赖关系:箭头从一个类指向另一个类,表示一个类依赖于另一个类。依赖关系通常表示一个类在其方法中使用了另一个类作为参数、返回类型或局部变量的类型。
示例代码:
public class Car { private Engine engine; public Car(Engine engine) { this.engine = engine; } public void start() { engine.startEngine(); } } public class Engine { public void startEngine() { // ... } } ``` 在这个例子中,`Car` 类依赖于 `Engine` 类。在 `Car` 类的构造函数和 `start` 方法中,使用了 `Engine` 类作为参数类型和方法调用。这种依赖关系可以用箭头表示,箭头从 `Car` 类指向 `Engine` 类。
需要注意的是,UML 中的实线和箭头的具体含义可以根据上下文和附加符号进行解释和扩展。在不同的 UML 图表和图形元素中,它们可能会有不同的语义。因此,确切的含义应该参考特定的 UML 图表类型或规范。
虚线+箭头
- 表示依赖关系
- 一个类的实现需要另一个类的协助
- 案例,表示C1的实现依赖C2,要想实现C1的全部方法,必须依赖C2的方法或属性才能完成
-
虚线表示依赖关系:虚线箭头从一个类指向另一个类,表示一个类对另一个类的某个特定接口、方法或行为具有依赖关系。
示例代码:
在这个例子中,
Car
类依赖于Logger
接口,通过构造函数参数获得一个Logger
实例。在start
方法中,Car
类使用了Logger
接口的log
方法。虚线箭头从Car
类指向Logger
接口,表示Car
类对Logger
接口的依赖关系。public interface Logger { void log(String message); } public class Car { private Logger logger; public Car(Logger logger) { this.logger = logger; } public void start() { logger.log("Car started"); } } public class ConsoleLogger implements Logger { public void log(String message) { System.out.println("Console Logger: " + message); } }
-
虚线表示关联关系的可选或可替代部分:虚线箭头连接两个类,表示它们之间存在关联或关系,但其中的一个类可以在某些情况下被替代或是可选的。
示例代码:
public class Car { private Engine engine; // ... } public interface Engine { void start(); } public class GasolineEngine implements Engine { public void start() { // Start gasoline engine } } public class ElectricMotor implements Engine { public void start() { // Start electric motor } }
在这个例子中,Car
类与 Engine
接口之间存在关联关系。Car
类中有一个名为 engine
的私有属性,表示它与某种类型的引擎相关联。虚线箭头从 Car
类指向 Engine
接口,表示 Car
类与 Engine
接口的关联关系。在这种情况下,虚线表示 Engine
接口的实现可以是多种可选的引擎类型,如 GasolineEngine
或 ElectricMotor
。
实线+空心三角形
- 表示泛化关系
- 是一种继承关系,表示一般与特殊的关系
- 案例,表示C1继承C2,C2是C1的父类
- 实线加空心三角形表示类的继承关系:实线连接两个类,并且箭头指向父类,表示一个类继承自另一个类。
示例代码:
public class Animal {
public void eat() {
System.out.println("Animal is eating.");
}
}
public class Dog extends Animal {
public void bark() {
System.out.println("Dog is barking.");
}
}
在这个例子中,Dog
类继承自 Animal
类。箭头从 Dog
类指向 Animal
类,表示 Dog
类是从 Animal
类派生出来的。实线加空心三角形表示继承关系,Dog
类是一个特殊的 Animal
类。
注意,空心三角形通常位于基类(父类)一侧,而不是派生类(子类)一侧。
- 实线加空心三角形表示接口的实现关系:实线连接一个类和一个接口,并且箭头指向接口,表示一个类实现了该接口。
示例代码:
public interface Flyable {
void fly();
}
public class Bird implements Flyable {
public void fly() {
System.out.println("Bird is flying.");
}
}
在这个例子中,Bird
类实现了 Flyable
接口。箭头从 Bird
类指向 Flyable
接口,表示 Bird
类实现了 Flyable
接口。实线加空心三角形表示接口的实现关系,Bird
类实现了 Flyable
接口并提供了 fly
方法的具体实现。
需要注意的是,UML 中的实线加空心三角形的具体含义可以根据上下文和附加符号进行解释和扩展。在不同的 UML 图表和图形元素中,它们可能会有不同的语义。因此,确切的含义应该参考特定的 UML 图表类型或规范。
虚线+空心三角形
- 表示实现关系
- 是一种类与接口的关系,表示类实现了一个接口内的所有属性和方法
- 案例,表示C1实现了C2接口
示例代码:
public interface Shape {
void draw();
}
public class Circle implements Shape {
public void draw() {
System.out.println("Drawing a circle.");
}
}
public class Square implements Shape {
public void draw() {
System.out.println("Drawing a square.");
}
}
public class Rectangle implements Shape {
public void draw() {
System.out.println("Drawing a rectangle.");
}
}
在这个例子中,Circle
、Square
和 Rectangle
类都实现了 Shape
接口。虚线箭头从 Shape
接口指向这些类,表示它们实现了 Shape
接口。虚线加空心三角形表示实现关系中的可选或可替代部分,即这些类可以选择性地实现 Shape
接口,或者可能有其他类也实现了 Shape
接口。
需要注意的是,UML 中的虚线加空心三角形的具体含义可以根据上下文和附加符号进行解释和扩展。在不同的 UML 图表和图形元素中,它们可能会有不同的语义。因此,确切的含义应该参考特定的 UML 图表类型或规范。
实线+空心菱形
- 表示聚合关系
- 是一种较弱的“拥有”关系,A拥有B,但B不是A的一部分
- 案例,表示C1聚合C2,但是C2独立于C1存在,C2并不随着C1的创建(销毁)而创建(销毁)
示例代码:
public class Department {
// ...
}
public class Employee {
// ...
}
public class Company {
private Department[] departments;
public Company(Department[] departments) {
this.departments = departments;
}
// ...
}
在这个例子中,Company
类包含了多个 Department
类的实例。实线箭头从 Company
类指向 Department
类,表示 Company
类聚合了多个 Department
类的实例。实线加空心菱形表示聚合关系,即 Company
类包含了多个 Department
对象。
注意,聚合关系表示整体与部分之间的关系,部分可以独立存在。在这个例子中,Department
类可以单独存在,而不依赖于 Company
类的存在。
需要注意的是,UML 中的实线加空心菱形的具体含义可以根据上下文和附加符号进行解释和扩展。在不同的 UML 图表和图形元素中,它们可能会有不同的语义。因此,确切的含义应该参考特定的 UML 图表类型或规范。
实线+实心菱形
- 表示组合关系
- 是部分和整体的关系,并且生命周期相同
- 案例,表示C1包容C2,而且C2不能离开C1和独立存在,C2随着C1的创建(销毁)而创建(销毁)
示例代码:
public class Engine {
// ...
}
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
// ...
}
在这个例子中,Car
类包含了一个 Engine
类的实例,而且该实例与 Car
类的生命周期密切相关。实线箭头从 Car
类指向 Engine
类,表示 Car
类与 Engine
类之间存在组合关系。实线加实心菱形表示组合关系,即 Car
类包含了一个特定的 Engine
对象,并且 Engine
对象的生命周期与 Car
对象的生命周期相关联。
需要注意的是,组合关系表示整体与部分之间的强关联,部分不能独立存在。在这个例子中,Engine
对象必须依附于 Car
对象的存在。
需要注意的是,UML 中的实线加实心菱形的具体含义可以根据上下文和附加符号进行解释和扩展。在不同的 UML 图表和图形元素中,它们可能会有不同的语义。因此,确切的含义应该参考特定的 UML 图表类型或规范。
评论区