UML 关系探秘:理论与实践双维度剖析

1. 关联关系(Association)

  • 定义:关联关系是一种结构化关系,它描述了对象之间的连接,表明一个对象对另一个对象的依赖。关联可以是单向的,也可以是双向的。
  • 代码示例
java 复制代码
// 学生类
class Student {
    private Teacher teacher;

    public Student(Teacher teacher) {
        this.teacher = teacher;
    }

    public Teacher getTeacher() {
        return teacher;
    }
}

// 教师类
class Teacher {
    // 这里未体现关联,但如果是双向关联,可添加对应的学生引用
}
  • UML 表示:在 UML 图中,关联关系用一条直线表示。直线两端可以有箭头表示方向,如果没有箭头则表示双向关联。可以在直线旁边标注关联的名称和多重性(如 1 对 1、1 对多、多对多等)。例如,一个学生对应一个老师,可标注为 "1 - 1";一个老师可以教多个学生,可标注为 "1 - *"。

2. 聚合关系(Aggregation)

  • 定义:聚合是关联关系的一种特殊形式,它代表整体与部分的关系,部分可以脱离整体而存在。

  • 代码示例

    java 复制代码
    import java.util.ArrayList;
    import java.util.List;
    
    // 图书馆类
    class Library {
        private List<Book> books;
    
        public Library() {
            this.books = new ArrayList<>();
        }
    
        public void addBook(Book book) {
            books.add(book);
        }
    
        public List<Book> getBooks() {
            return books;
        }
    }
    
    // 书籍类
    class Book {
        public Book() {
            // 书籍可以独立于图书馆存在
        }
    }
  • UML 表示:在 UML 图中,聚合关系用一条带空心菱形的直线表示,空心菱形指向整体。例如,图书馆是整体,书籍是部分,空心菱形指向图书馆。

3. 组合关系(Composition)

  • 定义:组合也是整体与部分的关系,但部分不能脱离整体而存在。部分的生命周期与整体的生命周期一致。

  • 代码示例

    java 复制代码
    // 汽车类
    class Car {
        private Engine engine;
    
        public Car() {
            this.engine = new Engine();
        }
    
        public Engine getEngine() {
            return engine;
        }
    }
    
    // 发动机类
    class Engine {
        public Engine() {
            // 发动机不能脱离汽车存在
        }
    }
  • UML 表示:在 UML 图中,组合关系用一条带实心菱形的直线表示,实心菱形指向整体。例如,汽车是整体,发动机是部分,实心菱形指向汽车。

4. 泛化关系(Generalization)

  • 定义:泛化关系也就是继承关系,它表示一个类(子类)继承另一个类(父类)的属性和方法。子类可以扩展父类的功能,也可以重写父类的方法。

  • 代码示例

    java 复制代码
    // 动物类(父类)
    class Animal {
        public void eat() {
            System.out.println("Animal is eating.");
        }
    }
    
    // 狗类(子类)
    class Dog extends Animal {
        @Override
        public void eat() {
            System.out.println("Dog is eating.");
        }
    
        public void bark() {
            System.out.println("Dog is barking.");
        }
    }
  • UML 表示:在 UML 图中,泛化关系用一条带空心三角形的直线表示,空心三角形指向父类。例如,狗类继承自动物类,空心三角形指向动物类。

5. 实现关系(Realization)

  • 定义:实现关系用于接口和实现该接口的类之间。类实现了接口中定义的方法。接口定义了一组抽象的操作,而实现类负责具体的实现。

  • 代码示例

    java 复制代码
    // 可飞行接口
    interface Flyable {
        void fly();
    }
    
    // 鸟类实现可飞行接口
    class Bird implements Flyable {
        @Override
        public void fly() {
            System.out.println("Bird is flying.");
        }
    }
  • UML 表示:在 UML 图中,实现关系用一条带空心三角形的虚线表示,空心三角形指向接口。例如,鸟类实现了可飞行接口,空心三角形指向可飞行接口。

6. 依赖关系(Dependency)

  • 定义:依赖关系表示一个类使用另一个类的服务。通常是一个类的方法使用了另一个类的对象作为参数、局部变量或调用了另一个类的静态方法。

  • 代码示例

    java 复制代码
    // 客户类
    class Customer {
        public void placeOrder(Order order) {
            // 使用Order对象
            System.out.println("Customer places an order: " + order.getOrderNumber());
        }
    }
    
    // 订单类
    class Order {
        private String orderNumber;
    
        public Order(String orderNumber) {
            this.orderNumber = orderNumber;
        }
    
        public String getOrderNumber() {
            return orderNumber;
        }
    }
  • UML 表示:在 UML 图中,依赖关系用一条带箭头的虚线表示,箭头指向被依赖的类。例如,客户类依赖于订单类,箭头指向订单类。

相关推荐
北京理工大学软件工程9 小时前
软件工程-UML
软件工程·uml
编程在手天下我有16 小时前
一文读懂 UML:基础概念与体系框架
uml
光头颜1 天前
UML之扩展用例
uml·ooad·分析与设计
吴八月5 天前
UML用例图-UML Use Case Diagram
uml
敏编程13 天前
Draw.io:你可能不知道的「白嫖级」图表绘制神器
uml·draw.io
kse_music14 天前
UML(统一建模语言)中总共有哪些图
uml·统一建模语言
敲代码的小霖16 天前
UML-MCP-Server -cursor适用
uml·cursor·mcp
huaqianzkh17 天前
学习MDA规范_5.统一建模语言(UML)
系统架构·uml