首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

UML关系图解

  • 25-04-16 12:20
  • 2299
  • 6484
juejin.cn

UML关系图解:以实例说明

概述

UML(统一建模语言)类图是描述系统中类和接口及其关系的有力工具。本文档通过一个简单的图书馆管理系统示例,解释UML类图中的各种关系符号及其含义。

基本符号

类 (Class)

Book
-String title
-String author
-int year
+getTitle() : String
+setTitle(String) : void

类用矩形表示,分为三个部分:

  • 顶部:类名
  • 中间:属性(字段)
  • 底部:方法(操作)

访问修饰符用符号表示:

  • + 表示 public
  • - 表示 private
  • # 表示 protected
  • ~ 表示 package/default

类之间的关系

1. 继承/泛化 (Inheritance/Generalization)

继承关系用空心三角形箭头表示,指向父类。

LibraryItem
+String id
+String title
+checkOut() : void
+returnItem() : void
Book
+String author
+int pages
DVD
+int duration
+String director

解释:

  • Book 继承自 LibraryItem
  • DVD 继承自 LibraryItem
  • 子类继承父类的所有属性和方法

代码示例:

typescript
代码解读
复制代码
abstract class LibraryItem { id: string; title: string; checkOut(): void { /* ... */ } returnItem(): void { /* ... */ } } class Book extends LibraryItem { author: string; pages: number; } class DVD extends LibraryItem { duration: number; director: string; }

2. 实现 (Implementation)

实现关系用空心三角形+虚线箭头表示,指向接口。

«interface»
Searchable
+search(query: String) : Item[]
Catalog
-items: LibraryItem[]
+addItem(item: LibraryItem) : void

解释:

  • Catalog 实现了 Searchable 接口
  • 实现类必须提供接口中定义的所有方法

代码示例:

typescript
代码解读
复制代码
interface Searchable { search(query: string): LibraryItem[]; } class Catalog implements Searchable { private items: LibraryItem[]; search(query: string): LibraryItem[] { // 实现搜索逻辑 return this.items.filter(item => item.title.includes(query)); } addItem(item: LibraryItem): void { this.items.push(item); } }

3. 关联 (Association)

关联关系用普通箭头表示,表示两个类之间有连接。

User
+String name
+String id
LibraryCard
+String cardNumber
+Date expirationDate

解释:

  • 用户和图书卡之间有关联关系
  • 双向关联:两个类都可以访问对方

代码示例:

typescript
代码解读
复制代码
class User { name: string; id: string; card: LibraryCard; } class LibraryCard { cardNumber: string; expirationDate: Date; owner: User; }

4. 定向关联

关联可以是单向的,用单向箭头表示。

Book
+String title
Author
+String name

解释:

  • 书籍知道它的作者是谁
  • 但作者不一定知道他写了哪些书

代码示例:

typescript
代码解读
复制代码
class Author { name: string; } class Book { title: string; author: Author; // Book引用Author }

5. 聚合 (Aggregation)

聚合关系用空心菱形+箭头表示,表示"整体-部分"关系,但部分可以独立于整体存在。

Library
+String name
+String location
LibraryBranch
+String branchName
+String address

解释:

  • 图书馆包含多个分馆
  • 分馆可以独立存在,即使主图书馆不存在

代码示例:

typescript
代码解读
复制代码
class LibraryBranch { branchName: string; address: string; } class Library { name: string; location: string; branches: LibraryBranch[] = []; addBranch(branch: LibraryBranch): void { this.branches.push(branch); } }

6. 组合 (Composition)

组合关系用实心菱形+箭头表示,表示更强的"整体-部分"关系,部分不能独立于整体存在。

Book
+String title
Chapter
+String title
+int number

解释:

  • 书籍由章节组成
  • 章节不能独立于书籍存在,删除书籍时章节也会被删除

代码示例:

typescript
代码解读
复制代码
class Chapter { title: string; number: number; constructor(title: string, number: number) { this.title = title; this.number = number; } } class Book { title: string; chapters: Chapter[] = []; constructor(title: string) { this.title = title; } addChapter(title: string): void { const number = this.chapters.length + 1; this.chapters.push(new Chapter(title, number)); } }

7. 依赖 (Dependency)

依赖关系用虚线箭头表示,表示一个类使用另一个类。

LibrarySystem
+generateReport() : Report
Report
+String content
+Date generatedDate

解释:

  • 图书馆系统依赖于报告类
  • 图书馆系统使用报告类,但不存储报告对象

代码示例:

typescript
代码解读
复制代码
class Report { content: string; generatedDate: Date = new Date(); } class LibrarySystem { generateReport(): Report { const report = new Report(); report.content = "Library Status Report"; return report; } }

多重性 (Multiplicity)

关系线上的数字表示多重性,指示一个类的实例可以关联到另一个类的多少个实例。

borrows
1
0..*
User
+String name
Book
+String title

常见多重性表示:

  • 1 表示正好一个
  • 0..1 表示零个或一个
  • * 或 0..* 表示零个或多个
  • 1..* 表示一个或多个
  • m..n 表示最少m个、最多n个

完整的示例:图书馆管理系统

下面是一个更完整的图书馆管理系统UML类图示例,展示了各种关系类型。

1
0..*
borrows >
1
0..*
1
*
«abstract»
LibraryItem
+String id
+String title
+boolean isAvailable
+checkOut() : void
+returnItem() : void
Book
+String author
+int pages
+String ISBN
DVD
+int duration
+String director
«interface»
Searchable
+search(query: String) : LibraryItem[]
Library
+String name
+addItem(item: LibraryItem) : void
+removeItem(id: String) : void
LibraryBranch
+String branchName
+String address
User
+String name
+String id
+borrowItem(item: LibraryItem) : void
+returnItem(item: LibraryItem) : void
Librarian
+String employeeId
+processReturn(item: LibraryItem) : void
Catalog
-items: LibraryItem[]
+addItem(item: LibraryItem) : void
ReportGenerator
+generateBorrowingReport() : Report
Report
+String content
+Date generatedDate

小结

UML类图中主要的关系类型及其符号为:

关系符号含义
继承/泛化空心三角形实线箭头 ◁—子类继承父类
实现空心三角形虚线箭头 ◁...类实现接口
关联普通箭头 —>两个类之间有联系
聚合空心菱形+箭头 ◇—整体包含部分,但部分可独立存在
组合实心菱形+箭头 ♦—整体包含部分,部分不可独立存在
依赖虚线箭头 ...>一个类使用另一个类
注:本文转载自juejin.cn的dwztos的文章"https://juejin.cn/post/7492262743699324937"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

143
阅读
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top