UML基础与Rose建模教程
第一部分:UML基础理论
第一章:UML简介
1 什么是UML?

- 全称:Unified Modeling Language,统一建模语言。
- 本质:它不是一种编程语言,而是一种图形化、可视化的建模语言,用于描述、可视化、构建和文档化软件密集型系统的制品。
- 核心思想:为软件开发人员提供一个标准、通用的建模方式,以降低沟通成本,提高开发效率和软件质量。
- 形象比喻:如果把软件开发比作建造一栋大楼,那么UML就是这张建筑设计图,它规定了各个房间的功能(类)、房间之间的连接关系(关联)、水电管线如何铺设(依赖)、以及整栋楼的蓝图(架构)。
2 UML的主要作用
- 需求分析:用用例图等模型来清晰描述系统需要为哪些“角色”(Actor)提供什么“功能”(Use Case)。
- 系统设计:用类图、序列图等来设计系统的静态结构和动态行为。
- 沟通桥梁:为项目经理、系统分析师、架构师、程序员、测试人员等所有项目相关人员提供一个统一的沟通平台。
- 文档化:将软件的设计思想、结构和行为以标准化的形式记录下来,便于后续维护和迭代。
3 UML的发展与标准
- UML由Grady Booch、Ivar Jacobson和James Rumbaugh(“三巨头”)在20世纪90年代末合并各自的方法论而创建。
- 目前由对象管理组织负责维护和发布其标准,最新的版本是UML 2.x。
第二章:UML的核心图
UML提供了多种图形,这些图可以分为两大类:结构图和行为图。
1 结构图

描述系统的静态结构,展示了系统的“骨架”。
| 图表名称 | 描述 | 关键元素 |
|---|---|---|
| 用例图 | 从外部用户的角度描述系统的功能需求。 | 参与者、用例、系统边界、关联关系、包含、扩展 |
| 类图 | 描述系统中类的结构,以及类之间的关系(继承、关联、聚合等),这是最核心、最常用的图。 | 类、属性、操作、关系(关联、聚合、组合、泛化、依赖) |
| 对象图 | 类图的一个实例,展示某一时刻系统中对象的状态。 | 对象、链接 |
| 组件图 | 描述系统代码的物理组织结构和依赖关系。 | 组件、接口、依赖关系 |
| 部署图 | 描述系统软件组件到硬件节物的映射,以及硬件节点之间的连接。 | 节点、组件、连接 |
2 行为图
描述系统的动态行为,展示了系统的“血肉”和“灵魂”。
| 图表名称 | 描述 | 关键元素 |
|---|---|---|
| 序列图 | 按照时间顺序展示对象之间如何进行消息交互,以完成一个特定功能。 | 对象、生命线、激活框、消息(同步、异步、返回) |
| 通信图 | (旧称协作图)展示对象及其之间的消息传递,但不强调时间顺序。 | 对象、链接、消息 |
| 状态机图 | 描述一个对象在其生命周期内,所有可能的状态以及状态之间的转换触发条件。 | 状态、转换、事件、动作 |
| 活动图 | 类似于流程图,用于描述从一个活动到另一个活动的控制流,常用于业务流程建模。 | 活动、决策点、分支、泳道、对象流 |
第三章:UML核心概念详解
1 类图中的关系
这是理解UML的重中之重。
-
关联:两个类之间的结构关系,表示“知道”或“使用”。
- 导航性:可以单向或双向。
- 多重性:表示一个类的实例可以与另一个类的多少个实例相关联。
.*(一个或多个),.1(零个或一个)。 - 示例:
Teacher(老师) 和Student(学生) 之间是多对多的关联。
-
聚合:一种特殊的关联关系,表示“has-a”(有一个),是一种“整体-部分”关系,但部分可以独立于整体存在。
- 特点:部分可以属于多个整体。
University(大学) 和Department(院系),院系可以独立于大学存在。
- 特点:部分可以属于多个整体。
-
组合:更强的聚合关系,表示一种“owns-a”(拥有)关系,部分和整体的生命周期绑定。
- 特点:部分只能属于这一个整体,如果整体被销毁,部分也一定会被销毁。
House(房子) 和Room(房间),房间不能脱离房子存在。
- 特点:部分只能属于这一个整体,如果整体被销毁,部分也一定会被销毁。
-
泛化:即继承关系,表示“is-a”(是一个)的关系。
- 特点:子类继承父类的属性和操作,并可以扩展自己的功能。
Dog(狗) 和Animal(动物)。
- 特点:子类继承父类的属性和操作,并可以扩展自己的功能。
-
依赖:两个类之间最弱的关系,表示一个类使用另一个类,但这种关系不是结构性的。
- 特点:通常表现为一个类的操作中使用了另一个类的对象作为参数、局部变量或返回值。
Driver(司机) 依赖Car(汽车),因为司机开车。
- 特点:通常表现为一个类的操作中使用了另一个类的对象作为参数、局部变量或返回值。
2 序列图中的消息
- 同步消息:发送方等待接收方处理完消息后才继续执行,用实心箭头表示。
- 异步消息:发送方发送消息后立即继续执行,不等待接收方响应,用开放箭头表示。
- 返回消息:表示同步消息的返回结果,用虚线开放箭头表示,通常可以省略。
第二部分:Rational Rose建模实践
第四章:Rational Rose简介
1 什么是Rational Rose?
Rational Rose是由IBM Rational公司(原Rational Software)开发的一款UML可视化建模工具,它曾是业界最主流的UML建模工具之一,帮助开发者通过图形化界面创建UML模型,并能自动生成多种编程语言的框架代码(如Java, C++, VB等)。
2 Rose工作界面
启动Rose后,你会看到几个主要窗口:
- 浏览器:左侧的树形结构,是模型的导航中心,包含了所有UML图、类、用例等元素。
- 图窗口:中间的画布区域,用于绘制和编辑UML图。
- 日志窗口:下方的文本窗口,显示操作记录和错误信息。
- 文档窗口:可以用来为模型元素添加详细的文字描述。
第五章:使用Rose进行建模(案例:在线图书商城)
我们将通过一个简单的“在线图书商城”案例,来演示如何使用Rose创建核心的UML图。
案例背景:用户可以在该商城浏览图书、查询图书详情、将图书加入购物车、下单购买。
创建新模型
- 打开Rational Rose。
File->New Model...- 选择一个模板(如
Java),因为我们要生成Java代码。 - 设置模型名称(如
OnlineBookStore)和保存路径。
绘制用例图
目标:明确系统的功能范围和参与者。
- 在浏览器中,右键点击
Use Case View->New->Use Case Diagram。 - 双击新建的图,在图窗口中打开。
- 添加参与者:
- 从工具栏拖动
Actor图标到画布上,命名为顾客。 - 再拖动一个
Actor,命名为管理员。
- 从工具栏拖动
- 添加用例:
- 从工具栏拖动
Use Case图标,创建以下用例:浏览图书、查询图书、查看详情、加入购物车、下单、管理图书、查看订单。
- 从工具栏拖动
- 建立关系:
- 使用
Unidirectional Association工具,连接顾客和浏览图书、查询图书、查看详情、加入购物车、下单。 - 连接
管理员和管理图书、查看订单。
- 使用
- 使用
<<include>>关系:下单必然需要加入购物车。下单包含加入购物车。- 从工具栏选择
Use Case Relationship(带<<include>>标签的箭头),从下单用例拖到加入购物车用例。
- 使用
<<extend>>关系:查询图书可以扩展浏览图书的功能。- 同样使用
Use Case Relationship(带<<extend>>标签的箭头),从查询图书拖到浏览图书。
最终用例图应清晰展示谁是使用者,他们能做什么,以及这些功能之间的包含和扩展关系。
绘制类图
目标:设计系统的静态数据结构。
- 在浏览器中,右键点击
Logical View->New->Class Diagram。 - 识别核心类:根据用例分析,我们可能需要以下类:
Customer(顾客)Book(图书)ShoppingCart(购物车)Order(订单)OrderItem(订单项)Administrator(管理员)
- 创建类并添加属性/操作:
- 从工具栏拖动
Class图标到画布上,创建上述类。 - 双击一个类(如
Book),在弹出的对话框中切换到Attributes标签页,添加属性:bookId: Stringtitle: Stringauthor: Stringprice: double
- 切换到
Operations标签页,添加操作(方法):getBookInfo(): String
- 从工具栏拖动
- 建立类之间的关系:
- 关联:一个
Customer可以有多个ShoppingCart,一个ShoppingCart只属于一个Customer。- 使用
Association工具连接Customer和ShoppingCart。 - 双击连接线,设置导航性(从
ShoppingCart指向Customer)和多重性(Customer端为1,ShoppingCart端为.1)。
- 使用
- 组合:一个
Order包含多个OrderItem,OrderItem不能脱离Order存在。- 使用
Aggregation工具连接Order和OrderItem。 - 双击连接线,在
Role Details中将Aggregation下拉框改为Composition(组合),并设置多重性(Order端为1,OrderItem端为.*)。
- 使用
- 关联:
OrderItem和Book是多对一的关系。- 使用
Association工具连接它们,并设置多重性(OrderItem端为.*,Book端为1)。
- 使用
- 泛化:
Administrator是Customer的一种。- 使用
Generalization(空心三角箭头) 从Administrator指向Customer。
- 使用
- 关联:一个
最终类图将展示系统的数据结构蓝图。
绘制序列图
目标:详细描述“顾客下单”这个用例的动态交互过程。
- 在浏览器中,右键点击
New->Sequence Diagram。 - 确定参与对象:根据“下单”流程,参与的对象有:
Customer、ShoppingCart、Order、Book。 - 放置对象:从浏览器中拖动这些类到序列图的顶部,它们会自动变成对象。
- 绘制生命线:对象下方会自动出现一条垂直的虚线,即生命线。
- 绘制消息交互:
Customer->ShoppingCart:addItem(book: Book)(异步)ShoppingCart->Book:getBookInfo()(同步)Book->ShoppingCart: 返回图书信息 (返回消息,可省略)Customer->Order:createOrder(cart: ShoppingCart)(同步)Order->OrderItem:new(...)(创建对象)Order->OrderItem:setBook(book: Book)Order->OrderItem:setQuantity(quantity: int)Order->Customer: 返回创建成功的订单 (返回消息)
最终序列图将清晰地展示下单过程中,各个对象是如何一步步协作完成任务的。
代码生成与逆向工程
1 从模型生成代码
- 确保你的类图已经设计完成。
- 在浏览器中,右键点击
Logical View->Java->Create New...(或类似选项)。 - Rose会根据你的类图中的类、属性和操作,自动生成一个空的Java项目框架(.java文件)。
- 你可以将这些生成的代码导入到IDE(如Eclipse, IntelliJ IDEA)中,进行后续的详细编码。
2 从代码生成模型(逆向工程)
- 你已经有一个写好的Java项目。
- 在Rose中,
File->Import Model...或Java->Reverse Engineer...。 - 选择你的Java源代码目录。
- Rose会分析代码,并自动在
Logical View中生成对应的类图,这对于理解现有项目结构非常有用。
第三部分:总结与最佳实践
第六章:UML与Rose的最佳实践
- UML是沟通工具,不是画图工具:不要为了画图而画图,UML的目的是为了更好地沟通和理解系统。
- 保持模型简洁:不要试图在一个模型中放入所有细节,根据不同的目的(如需求、设计、实现)创建不同详细程度的模型。
- 选择合适的图:不是每个项目都需要所有UML图,根据项目规模和复杂度,选择最核心的几种图(如用例图、类图、序列图)。
- 模型与代码同步:模型是蓝图,代码是最终的实现,两者应保持同步,使用Rose的代码生成和逆向工程功能可以极大地提高效率。
- 迭代式建模:不要期望一开始就能设计出完美的模型,随着对需求理解的深入和开发的进行,不断迭代和完善你的UML模型。
第七章:进阶学习资源
- 书籍:
- 《UML用户指南》:UML三巨头所著,经典入门。
- 《UML精粹》:薄而精悍,快速掌握UML核心。
- 工具:
- Eclipse with Papyrus:开源的UML建模插件,功能强大,是Rose的现代替代品。
- StarUML:轻量级、跨平台的UML工具,界面友好。
- Visual Paradigm:功能全面的商业UML套件。
- 在线资源:
- IBM Developer:有大量关于Rose和UML的教程。
- CSDN/博客园:搜索“UML教程”、“Rose教程”,有大量中文实践案例。
希望这份详尽的教程能帮助你顺利入门UML和Rational Rose!
