软件工程-面向对象-类图

本文梳理了面向对象类图的结构、六大类间关系(依赖、关联、泛化、实现、聚合、组合),并给出装饰器模式的核心结构与代码示例,方便快速掌握面向对象建模与设计模式考点。


📌 UML类图与面向对象关系速览

1. 类图基础

类图是描述软件系统结构的静态建模方法,核心是展示类的结构与类间关系。

  • 结构三部分:类名(必填)、属性、操作
  • 可见性符号
    • +:public(公共)
    • -:private(私有)
    • #:protected(受保护)
  • 属性格式可见性 属性名 : 类型 [= 默认值]
  • 操作格式可见性 操作名(参数列表) : 返回值类型

2. 类间关系详解

关系类型 核心定义 代码表现 示例
依赖(Dependency) 临时使用关系,类A使用类B的服务,生命周期短暂 方法参数、局部变量、返回值类型 People 类的 eat(Food food) 方法
关联(Association) 长期、平等的强依赖,语义级关系 类B作为类A的成员变量 Customer 包含 Address address
泛化(Generalization) 继承关系,父类与子类的“一般-特殊”关系 extends 关键字 Student extends Person
实现(Realization) 类与接口的关系,类实现接口声明的操作 implements 关键字 Car implements Vehicle
聚合(Aggregation) 强关联的“整体-部分”,部分可脱离整体存在 成员变量 + 构造/setter注入 Car 包含 Engine engine,引擎可单独存在
组合(Composition) 更强的“整体-部分”,部分与整体生命周期绑定 成员变量在构造器中直接实例化 Head 包含 Mouth mouth,头销毁则嘴也销毁

3. 设计模式示例(装饰器模式)

  • 核心思想:在不修改原有类的前提下,动态给对象添加新功能。
  • 结构
    • Component:抽象组件,定义核心操作
    • ConcreteComponent:具体组件,实现核心功能
    • Decorator:装饰器抽象类,继承 Component 并持有组件引用
    • ConcreteDecorator:具体装饰器,给组件添加额外功能
  • 代码结构
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public abstract class Component {
    public abstract void Operation();
    }
    public class ConcreteComponent extends Component {
    public void Operation() { /* 核心功能 */ }
    }
    public abstract class Decorator extends Component {
    protected Component component;
    public Decorator(Component component) {
    this.component = component;
    }
    }
    public class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Component component) {
    super(component);
    }
    public void Operation() {
    /* 额外功能 */
    component.Operation();
    /* 额外功能 */
    }
    }

💡 记忆技巧

  • 依赖 vs 关联:依赖是“临时用一下”,关联是“长期持有”
  • 聚合 vs 组合:聚合是“可拆分”,组合是“不可拆分,同生共死”
  • 泛化 vs 实现:泛化是类继承类,实现是类实现接口