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 图中,依赖关系用一条带箭头的虚线表示,箭头指向被依赖的类。例如,客户类依赖于订单类,箭头指向订单类。

相关推荐
Minilinux20181 天前
工具使用系列之 PlantUML画UML时序图
uml·plantuml·统一建模语言·sequence·时序图
小湘西1 天前
UML 用例图图中包含和扩展区别
uml·设计规范·设计语言
明洞日记1 天前
【图解软考八股034】深入解析 UML:识别标准建模图示
c++·软件工程·软考·uml·面向对象·架构设计
奋斗的小方5 天前
01 一文读懂UML类图:核心概念与关系详解
java·uml
钝挫力PROGRAMER6 天前
UML构造块中的关系梳理
软件工程·uml
未来之窗软件服务6 天前
计算机等级考试—UML 核心图分类与图标对照表—东方仙盟练气期
uml·计算机软考·仙盟创梦ide·东方仙盟
rolt9 天前
质量需求当成愿景、伪创新的基本盘《软件方法》第2章
产品经理·uml·软件方法
rolt17 天前
利用AI识别损毁程度是愿景吗《软件方法》第2章
产品经理·需求分析·uml
rolt17 天前
[pdf]《软件方法》全流程引领AI-电子书共435页202601更新
产品经理·ddd·架构师·uml·领域驱动设计
:mnong17 天前
跟着《软件需求分析和设计实践指南》成长
学习·需求分析·uml·软件需求