软考中级习题与解答——UML中主要关系

1. 泛化关系(Generalization)- 继承

图示:

空心三角形箭头 + 实线,箭头从子类指向父类

例子:

// 父类
class Animal {
    void eat() { }
}

// 子类  
class Dog extends Animal {
    void bark() { }
}

class Cat extends Animal {
    void meow() { }
}

类图表示:

    Dog      Cat
      ↘     ↙
      Animal

(箭头:Dog → Animal,Cat → Animal,空心三角形)

特点:

  • 表示"is-a"关系

  • 子类继承父类的属性和方法

  • 代码中通过extends关键字实现


2. 实现关系(Realization)- 接口实现

图示:

空心三角形箭头 + 虚线,箭头从实现类指向接口

例子:

interface Flyable {
    void fly();
}

class Bird implements Flyable {
    public void fly() {
        System.out.println("鸟儿飞翔");
    }
}

class Airplane implements Flyable {
    public void fly() {
        System.out.println("飞机飞行");
    }
}

类图表示:

    Bird     Airplane
      ↘     ↙
    ─ ─ ─ Flyable ─ ─ ─

(箭头:Bird → Flyable,Airplane → Flyable,虚线+空心三角形)


3. 关联关系(Association)- 使用关系

图示:

普通实线箭头,箭头指向被关联的类

例子:

class Teacher {
    private Student[] students;
}

class Student {
    private Teacher teacher;
}

类图表示:

Teacher ─────→ Student

变种:双向关联

Teacher ───── Student

(无箭头,或双箭头)


4. 聚合关系(Aggregation)- 弱拥有

图示:

空心菱形箭头 + 实线,菱形在整体一端

例子:

class Classroom {
    private List<Student> students;
    // 教室和学生是聚合关系
    // 教室销毁,学生仍然存在
}

类图表示:

Classroom ◇──── Student

(空心菱形在Classroom端)

特点:

  • 表示"has-a"关系

  • 部分可以脱离整体存在

  • 生命周期不绑定


5. 组合关系(Composition)- 强拥有

图示:

实心菱形箭头 + 实线,菱形在整体一端

例子:

class House {
    private Room livingRoom;
    private Room bedroom;
    // 房屋和房间是组合关系
    // 房屋销毁,房间也不存在了
}

class Room {
    // 房间不能脱离房屋独立存在
}

类图表示:

House ◆──── Room

(实心菱形在House端)

特点:

  • 强关联关系

  • 部分不能脱离整体存在

  • 生命周期完全绑定


6. 依赖关系(Dependency)- 临时使用

图示:

虚线箭头,箭头指向被依赖的类

例子:

class Person {
    // 依赖关系:临时使用,不是持久关联
    void travel(Transportation vehicle) {
        vehicle.move();
    }
}

class Transportation {
    void move() { }
}

类图表示:

Person - - - - → Transportation

(虚线箭头)


7. 包含关系(Include)- 用例间的包含

图示:

虚线箭头 + include,箭头从基础用例指向被包含的用例

例子:

// 在用例层面,不是代码层面
// 基础用例:网上购物
// 被包含用例:用户登录、支付确认

特点:

  • 基础用例必须执行被包含的用例

  • 被包含用例是基础用例的必要组成部分

  • 箭头方向:基础用例 → 被包含用例

  • 用虚线(依赖关系的变种)

8. 扩展关系(Extend)- 用例间的扩展

图示:

虚线箭头 + extend,箭头从扩展用例指向基础用例

特点:

可选性

  • 扩展用例是可选的,不是必须执行的

  • 基础用例可以独立存在,不需要扩展用例

条件触发

  • 扩展关系通常有扩展点触发条件

  • 只有在特定条件下才会执行扩展用例

箭头方向

  • 箭头从扩展用例指向基础用例

  • 表示扩展用例"扩展"了基础用例的功能


总结对比表

关系类型图示代码表现生命周期强度应用场景
泛化
(继承)
空心三角+实线
子类→父类
extends-最强类继承,is-a关系
实现
(接口)
空心三角+虚线
实现类→接口
implements-接口实现
组合
(强拥有)
实心菱形+实线
整体→部分
成员变量
(new创建)
绑定强关联,部分不能独立存在
聚合
(弱拥有)
空心菱形+实线
整体→部分
成员变量
(外部传入)
不绑定弱关联,部分可独立存在
关联
(使用)
实线箭头
源→目标
成员变量不绑定类间持久关联
依赖
(临时)
虚线箭头
源→目标
参数/局部变量/
静态方法调用
临时临时性使用
包含
(用例)
虚线+include
基础→被包含
--用例必须执行的关系
扩展
(用例)
虚线+extend
扩展→基础
--用例可选执行的关系
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值