“学习面向对象设计的最佳方式不是死记硬背模式——而是通过扮演角色。”
在本文中,我们将逐步介绍一种使用CRC卡的逐步介绍(类-职责-协作)方法,通过一个现实世界中适合初学者的例子:一个图书馆图书借阅系统无论你是刚刚开始软件设计之旅,还是在带领团队工作坊,CRC卡都提供了一种简单、强大且协作性强的方式来建模面向对象系统。
🎯 什么是CRC卡?
CRC卡是一种轻量级的、物理的(或数字的)建模技术,用于面向对象设计。每张卡片代表一个类,并包含三个关键要素:
| 字段 | 描述 |
|---|---|
| 类 | 类的名称(例如,图书) |
| 职责 | 该类所知道或所做的 |
| 协作对象 | 该类需要协作的其他类 |
它们在以下方面尤其有效:头脑风暴, 设计,以及验证在开发早期——在编写任何代码之前——确定类结构。
📚 案例研究:图书馆图书借阅系统
让我们设想一个小型公共图书馆,会员可以:
-
按书名搜索书籍
-
借阅可用的书籍(最多到限制数量)
-
用完后归还书籍
系统必须记录:
-
哪些书籍被借出
-
由谁借出
-
何时到期
我们将使用CRC卡片方法来逐步发现并优化该系统中的类。
✅ 第一步:找出候选类(头脑风暴名词)
首先阅读场景并提取出名词——这些是潜在的类。
从描述中,我们识别出:
-
图书馆
-
会员(或读者)
-
书籍
-
借阅(或借用)
-
到期日(可能太小)
-
借书证(可能是会员的一部分)
我们进行筛选,只保留最有意义的类:
✅ 会员, 书籍, 借阅
⚠️ 注意:一开始不必担心所有类都完全正确——这就是CRC卡片的妙处。你将在角色扮演中发现遗漏的类!
✏️ 第2步:创建初始的CRC卡片
现在,我们为每个类分配职责和合作者到每个类。
📘 类:图书
| 职责 | 合作者 |
|---|---|
| 知道其标题 | — |
| 知道其作者 | — |
| 知道其ISBN | — |
| 知道它是否当前可借 | 借阅 |
| 被借出 | 借阅 |
| 被归还 | 借阅 |
💬 图书并不“知道”是谁借走了它——它只知道是否有一笔有效的借阅记录。
👤 类:成员
| 职责 | 合作者 |
|---|---|
| 知道姓名 | — |
| 知道会员ID | — |
| 知道当前借阅的书籍数量 | 借阅 |
| 借一本书(如果允许) | 书籍,借阅 |
| 归还一本书 | 书籍,借阅 |
| 检查是否达到借阅上限 | 借阅 |
💬 会员自行管理其借阅行为,并通过借阅类检查限制。
📅 类:借阅
| 职责 | 合作者 |
|---|---|
| 记录借了哪本书 | 书籍 |
| 记录是哪位会员借的 | 会员 |
| 记录借阅日期 | — |
| 计算到期日期 | — |
| 知道是否逾期 | — |
| 标记为已归还 | 图书 |
💬 Loan 类保存了会员与图书之间的关系,包括时间细节。
🎭 第3步:角色扮演情景——“借一本书”
现在进入有趣的部分:角色扮演将情景当作卡片是真实物品一样来演绎。
📖 情景:柯蒂斯想借阅《代码整洁之道》,这本书目前可借。
让我们一步步来分析:
-
会员(柯蒂斯)说:“我想借《代码整洁之道》。”
→ 首先检查:“我目前借的书少于3本吗?”
→ 询问借阅: “我有多少个有效的借阅记录?” -
借阅回应:“你有1个有效的借阅记录 → 你可以借阅。”
-
会员查找图书:“《代码整洁之道》在哪里?”
→ 询问图书: “你有空吗?” -
图书 检查: “我有没有未归还的在借贷款?”
→ 询问 贷款: “有没有我的在借贷款?” -
贷款 回复: “没有——你有空!”
-
会员 创建一个新的 贷款 对象:
-
关联到这个 图书 和 会员
-
设置借阅日期 = 今天
-
计算到期日期 = 今天 + 14天
-
-
图书 已更新: “现在我有一笔在借贷款 → 我不再有空了。”
✅ 结果: 借阅过程感觉自然、分布且逻辑清晰。
🔄 第4步:另一种情景——“归还图书”
📖 情景:柯蒂斯归还 “代码整洁之道”
-
成员(柯蒂斯)说:“我想归还《代码整洁之道》。”
-
成员找到了匹配的借阅(可能是通过查询借阅用书和成员信息进行查询)。
-
借阅标记自己为已归还.
-
借阅告诉书: “你现在又可以借阅了。”
✅ 整洁、清晰且一致——没有类在承担其职责之外的工作。
🔍 第5步:优化并添加缺失的类
角色扮演后,我们注意到一个缺口:
❓ 谁通过书名找到这本书?
目前,成员正在询问书直接——但是书不知道如何搜索!
我们需要一个中央协调员.
➕ 新类:图书馆
| 职责 | 合作者 |
|---|---|
| 向馆藏中添加一本新书 | 书 |
| 按书名查找书籍 | 书 |
| 注册新成员 | 成员 |
| 处理借书请求 | 成员,书,借阅 |
| 处理还书 | 成员,书,借阅 |
| 了解所有当前的借阅 | 借阅 |
💬 图书馆充当中央枢纽——它了解所有的书、所有的成员以及所有的借阅。
✨ 更新流程:“通过图书馆借书”
-
成员 → 图书馆: “查找书名为‘代码整洁之道’的书籍。”
-
图书馆 搜索其藏书并返回 书籍 (或
空如果未找到)。 -
会员 现在知道该书存在 → 询问 图书馆: “我可以借这本书吗?”
-
图书馆 检查:
-
这本书可用吗?(通过
Book.isAvailable()) -
该会员是否在借阅限额内?(通过
Loan.countActiveLoans(member))
-
-
如果可以 → 图书馆 创建一个新的 借阅记录 并更新两者 书籍 和 借阅记录.
-
书籍 变得不可用; 借阅 跟踪这种关系。
✅ 现在流程就说得通了 ——这个 图书馆 负责发现和协调。
🧩 最终CRC卡片总结(初学者简化版)
| 类 | 关键职责 | 关键合作者 |
|---|---|---|
| 图书馆 | 管理书籍、成员和借阅;处理借阅/归还 | 书籍、成员、借阅 |
| 成员 | 了解个人信息;发起借阅/归还 | 图书馆、借阅 |
| 书籍 | 存储元数据;跟踪可用性 | 图书馆、借阅 |
| 借阅 | 跟踪借阅历史;计算到期日期;管理归还状态 | 成员、书籍、图书馆 |
✅ 设计原则:每个类都有 一个明确的目的,且职责是 cohesive and well-distributed.
🌟 为什么CRC卡片如此有效(初学者要点)
| 优势 | 解释 |
|---|---|
| 基于职责的设计 | 迫使你思考:“这个类知道或能做什么?”而不仅仅是存储数据。 |
| 自然发现缺失的类 | 角色扮演揭示了漏洞(比如缺失的图书馆)——无需猜测。 |
| 通过角色扮演获得即时反馈 | 如果某个流程感觉别扭,你就知道职责分配错了位置。 |
| 低仪式感且协作性强 | 无需复杂工具——只需索引卡、便利贴或白板。非常适合团队使用。 |
| 连接需求与代码 | 将用户故事转化为真实的类交互。 |
🛠️ 首次CRC会议的快速技巧
-
使用实体卡片(3×5索引卡或便利贴)——更具参与感。
-
每张卡片一个类——保持简单。
-
字迹要大且清晰——其他人应能轻松阅读。
-
大声进行角色扮演——像传递真实物品一样传递卡片。
-
从3到6个核心场景开始(例如:借阅、归还、搜索)。
-
不要追求完美—— 目标是迭代,而不是最终设计。在过程中不断优化。
-
使用简单且与领域相关的名称—— 避免使用技术术语。如果团队同意,使用“成员”代替“赞助者”。
-
邀请每个人参与—— 即使非程序员也能帮助发现缺失的责任。
-
之后绘制一个简单的类图—— 以可视化关系并确认一致性。
-
保持趣味性—— 将其视为游戏。团队参与度越高,结果越好。
🔄 自己动手试试:接下来可以探索的领域
掌握图书系统后,尝试将CRC卡片应用到其他适合初学者的领域:
☕ 咖啡店订单系统
-
类:
顾客,订单,菜单项,咖啡师,收银机 -
场景:下单 → 添加饮品 → 应用折扣 → 支付 → 打印收据
🪙 自动售货机
-
类:
自动售货机,商品,硬币,出货机,找零计算器 -
场景:投入硬币 → 选择商品 → 出货产品 → 返回找零
🎮 知识问答游戏
-
类:
问答,问题,玩家,得分追踪器,游戏会话 -
场景:开始问答 → 回答问题 → 检查正确性 → 显示最终得分
🚗 停车场
-
类:
停车场,汽车,停车位,停车票,闸门 -
场景:进入车库 → 停车 → 离开 → 支付费用 → 获取票据
这些系统都建立在相同的原则之上:
-
识别名词 → 分配职责 → 角色扮演 → 优化 → 重复。
📌 最后思考:CRC卡片不仅仅是技巧——更是一种思维方式
CRC卡片真正强大的地方不在于卡片本身——而在于它们所激发的 对话 它们所引发的对话。
当你写下一张卡片并说, “谁来做这个?” 或者 “它需要和谁沟通?”,你已经在以面向对象设计者的思维方式进行思考了。
🔥 专业提示:在冲刺规划、技术探索甚至面试中使用CRC卡片,以展示你的设计思维。
它们不仅仅是开发人员的工具——它们适用于 任何人 参与软件开发的任何人:产品经理、设计师、测试人员和学生。
📎 想了解更多?
👉 下载可打印的CRC卡片模板 (PDF或数字版),用于你下一次的工作坊。
👉 尝试一次实时的CRC会议 与队友一起进行——分配角色:“你是会员”,“你是书籍”,等等。
👉 分享你的成果 ——在社交媒体上发布你的卡片,并加上#CRC卡片或#面向对象设计之旅标签。
🏁 结论
这 图书馆图书借阅系统是CRC卡片示例中最经典和最有效之一——并非因为它复杂,而是因为它简单、易于理解且富有启发性.
只需遵循五个步骤——头脑风暴、卡片创建、角色扮演、优化和迭代——你就可以:
-
自然地发现类
-
清晰地分配职责
-
及早发现设计缺陷
-
作为团队构建共享的思维模型
而且最重要的是?你不需要是资深开发人员也能做到。
你只需要好奇心、几张卡片,以及愿意尝试的意愿。
🚀 如何通过可视化原型的AI驱动CRC工具简化设计流程
创建有效的CRC(类-职责-合作者)卡片是面向对象设计的基石——但通常耗时较长,尤其是在早期头脑风暴或团队工作坊期间。这就是可视化原型的AI驱动CRC卡片生成器将这一体验从繁琐转变为变革性。


无需从零开始——列出类、猜测职责、绘制合作者关系——可视化原型的AI会完成大部分工作智能地,为你提供一个智能且结构化的基础以继续构建。以下是它如何为CRC设计流程的每一步注入强大动力:
✅ 1. 通过自然语言输入实现即时头脑风暴
不再有空白卡片,也无需就“类应该是什么”展开无休止的争论
只需用简单的英语描述你的系统——例如:
“我正在构建一个图书馆系统,会员可以借书、还书,并按书名搜索。每本书都有书名、作者和ISBN。每人最多可借3本书。”
可视化原型的AI会立即分析你的输入并提出建议:
-
候选类:
成员,书,借阅,图书馆 -
职责: 例如,“检查书籍是否可借”, “计算到期日期”
-
协作对象: 例如,
书与……协作借阅,成员与……对话图书馆
👉 结果: 几秒钟内,您就拥有了一个完整填充的初始CRC卡片图——无需猜测,无需浪费时间。
✅ 2. 符合现实世界设计原则的智能建议
与那些随意生成随机类名的通用AI工具不同,Visual Paradigm的AI理解面向对象设计模式以及以职责为导向的思维.
例如,当您提到“借阅”时,AI会:
-
建议一个
借阅类(不仅仅是借入或交易) -
分配有意义的责任,例如“记录借出日期”, “标记为已归还”
-
建议正确的合作者:
书籍,成员,以及图书馆
这不仅仅是自动化——而是AI引导的设计智慧它帮助初学者学习最佳实践,同时让专家节省时间。
✅ 3. 从草图到专业模型的无缝过渡
AI不仅仅生成一个粗略草图。它创建一个完全可编辑的原生 Visual Paradigm 图表——这意味着您可以:
-
拖放卡片以重新组织布局
-
实时编辑责任和合作者
-
添加图标、颜色或注释以提高清晰度
-
将卡片链接到用例、需求或代码
💡 小贴士: 使用 “通过AI优化” 功能来提问:
“根据借阅规则,建议改进Member类的责任。”
AI将重新建议更准确或更完整的操作——例如 “检查是否达到借阅上限” —— 帮助你避免常见的设计缺陷。
✅ 4. 角色扮演模拟内置功能(没错,真的有!)
最强大的功能之一?Visual Paradigm允许你 直接在图表中模拟场景.
生成CRC卡片后,你可以:
-
点击一个场景(例如 “借一本书”)
-
使用AI逐步演示流程
-
查看哪些类进行交互,按什么顺序,以及触发了哪些责任
这使得抽象的卡片变成 生动的设计故事,从而轻松发现:
-
责任分配不当
-
缺失的类(例如
Library) -
断裂的协作链
🔍 示例: AI会标记: “Member类正在尝试查找一本书——但没有类处理搜索。建议添加一个Library类。”
→ 即时洞察。无需猜测。
✅ 5. 可追溯性与完整开发工作流程的集成
Visual Paradigm的AI CRC工具真正的强大之处不仅在于创建图表——更在于将它们与实际开发连接起来.
一旦你的CRC图表被完善:
-
生成UML类图一键完成
-
导出代码骨架(Java、C#、Python等)
-
链接到需求或用户故事在你的项目中
-
与团队成员共享通过实时协作
这意味着你的CRC卡片不仅仅是头脑风暴的产物——它们是你实际软件设计的起点.
✅ 6. 非常适合团队、工作坊和学习
无论你是:
-
一名学生首次学习面向对象编程
-
一名团队负责人正在开展设计冲刺
-
一名开发者 原型设计新功能
Visual Paradigm 的 AI CRC 工具可根据您的需求进行调整:
-
在 使用它VP Desktop 用于深度编辑和集成
-
在 尝试使用VP Online 以实现快速协作
-
使用 AI 聊天界面 来提出类似的问题:
“Loan 类应该知道什么?”
“谁应该负责图书可用性检查?”
这就像随身携带一位资深设计师——随时准备帮助您清晰思考、合理分配职责,并避免设计反模式。
🎯 总结:为什么 Visual Paradigm 的 AI CRC 工具是变革性的
| 功能 | 优势 |
|---|---|
| 自然语言输入 | 从一个故事开始——获得设计方案 |
| 智能且上下文感知的建议 | 避免常见的设计错误 |
| 完全可编辑的原生图表 | 优化、组织并完善 |
| 场景模拟与角色扮演 | 编码前测试逻辑 |
| 与代码和需求的可追溯性 | 设计 → 实现一体化流程 |
| 团队协作与共享 | 实时协作 |
📌 最后思考
“好的设计不在于速度——而在于清晰。Visual Paradigm 的 AI CRC 工具让你两者兼得。”
与其花数小时争论“谁该做什么”,不如把时间用在 思考, 优化,以及 验证 你的设计——充满信心。
使用 Visual Paradigm,你不仅仅是用 AI 绘制图表。
你正在用 AI 来 更好地思考.
👉 准备好体验 CRC 设计的未来了吗?
立即开始免费试用 Visual Paradigm 今天,将你的下一个想法迅速转化为智能、专业、AI 辅助的 CRC 卡片图——只需几分钟。
🌟 不再有空白卡片,不再凭猜测。只有清晰、强大的设计——由 AI 驱动。
✅ 现在轮到你了:拿几张便利贴,选一个简单的系统(比如咖啡店或自动售货机),尝试使用 CRC 方法。
📌 记住:好的设计不在于写出完美的代码——而在于提出正确的问题。
而使用 CRC 卡片,你已经开始了提问。
📌 额外赠送:可打印的 CRC 卡片模板(文本版)
┌────────────────────┐
│ [类名称] │
├────────────────────┤
│ 职责: │
│ - │
│ - │
│ - │
├────────────────────┤
│ 合作者: │
│ - │
│ - │
└────────────────────┘
将此打印在 3×5 英寸的卡片上,或在 Miro、Figma 或 Google 幻灯片等数字工具中使用。
📚 下一步?
想要完整演示一下 咖啡店订单系统 使用相同的CRC风格吗?
👉 只需说一声——我将一步步发送下一个案例研究,包含卡片、情景和角色扮演!
设计愉快! 🎮🧩💻
- 如何在Visual Paradigm中绘制CRC卡片: 本逐步指南提供了使用软件专用绘图工具创建CRC卡片的说明。
- 理解Visual Paradigm中的CRC卡片图: 一个概述,解释了这些图如何用于建模面向对象系统及其交互。
- 如何在Visual Paradigm中创建CRC卡片图: 一个在社区圈中找到的详细教程,涵盖CRC图的创建与自定义。
- Visual Paradigm中CRC图的入门: 一份全面指南,专注于利用CRC图进行面向对象设计和更广泛的系统建模。
- 从类图生成CRC卡片: 这个社区讨论探讨了如何利用现有的类图,通过逆向工程自动生成卡片的方法。
- 同步CRC卡片与类图: 一份技术资源,讨论双向建模,以确保卡片与类模型之间的设计一致性。
- CRC卡片图入门(PDF指南): 一份可下载的技术资源,解释了CRC卡片在系统分析中的核心概念和应用。
- 建立CRC卡片与类图之间的关联: 本文强调了在不同建模层级之间保持可追溯性和关联性的技术。
- Visual Paradigm图库中的CRC卡片模板: 一个资源,包含可下载的模板,旨在支持早期面向对象设计。
- 在图之间移动CRC卡片: 一份指南,详细说明了在不同图之间转移卡片的同时保持数据一致性的方法。













