拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

EA 7.5 UML建模实战手册:7类图+环境配置+避坑指南

EA 7.5 UML建模实战手册:7类图+环境配置+避坑指南

简介:本资源是一份完整的UML系统分析与建模实验报告,面向软件工程、计算机科学等相关专业本科生及初学者,聚焦UML核心图示的实践应用与EA工具实操能力培养。报告覆盖从环境熟悉(实验0)到七大核心建模图的系统训练:用例图(含泛化/包含/扩展关系)、类与对象图、序列与协作交互图、状态图、活动图、包图及部署级物理图,每项实验均含目的、环境、操作步骤、结果分析与学习体会,并以网上选课系统等真实案例贯穿始终。资源为单个PDF文件,大小386KB,内容结构清晰,含详细实验指导书、图示范例与考核登记表,便于课堂复盘、课后自学或课程设计参考。目前已有126人下载学习,适合需要掌握UML建模规范、提升系统设计表达能力的学习者快速上手并形成完整建模思维。

1. 这不是一份“交差式”实验报告:它是一套能直接跑通的 UML 建模实战组合包(含 EA 7.5 兼容配置、7 类图完整建模逻辑、3 处易翻车参数校验点)

你手头这份《UML实验报告.pdf》,表面看是某高校计算机系2011–2012学年《系统分析与建模》课程的纸质归档材料,但拆开来看——它根本不是扫描件堆砌的“教学存档”,而是一套可复现、可调试、可迁移的 UML 工程化建模实战手册。它用真实选课系统为载体,从 EA 7.5 环境初始化开始,逐层构建用例图、类图、序列图、状态图、活动图、包图、物理图共7类核心UML图,每张图都附带明确的建模意图、元素约束、关系语义和典型错误反例。更关键的是:所有图均基于同一套业务域(管理员/学生/课程/数据库四元实体)闭环演进,类名、属性、操作、关联方向、多重性标注全部对齐,不是孤立示例,而是带版本控制痕迹的建模流水线。适合三类人立刻上手:刚装完 EA 的新手(按实验0一步步配环境)、准备软考中级UML建模的考生(实验1–7覆盖全部考点图型)、需要快速产出教学级UML案例的讲师(可直接提取图结构+文字说明用于课件)。它不讲抽象语法,只告诉你“在EA里点哪里、输什么、为什么不能输错、输错后日志报哪行”。


2. EA 7.5 环境搭建与模型初始化:不是装完就完事,6大界面组件必须手动验证其交互逻辑

Enterprise Architect 7.5 是这份实验报告的唯一指定工具,虽已停产多年,但因其轻量、稳定、UML 1.4/2.0 双支持,仍是教学场景下最不易被兼容性问题打断建模节奏的选择。本节不罗列下载链接(你搜“Sparx Systems EA 7.5 Legacy Download”即可),重点落在安装后必须完成的5项验证动作——它们直接决定后续所有实验能否正常加载、保存、导出。

2.1 启动与项目向导:必须选择“Standard Project”模板,禁用“Model Wizard”

实验0明确要求“使用目标项目(Project)的向导创建一个项目”。此处极易踩坑:EA 7.5 启动后默认弹出 Model Wizard(带UML 2.0图标),若直接点击“Next”,会生成含预置包结构(如“Use Case View”、“Class View”)的空壳项目。但实验1–7要求从零构建包结构,且需严格按“People→Student/Admin→Course→Database”继承链建模。正确路径是:

File → New Project → 选择 "Standard Project" → 点击 OK → 在弹出对话框中勾选 "Create default model structure" → 点击 Yes

提示:勾选“Create default model structure”后,EA 会自动生成一个空的Model包(根节点),而非预设视图。这是后续所有实验图的唯一合法父容器。若误选 Model Wizard,会导致浏览器(Browser)中出现冗余包节点(如“Use Case View”),且无法删除——因为它是只读模板。

2.2 六大界面组件功能验证:重点测试“浏览器”与“图窗口”的双向同步机制

实验0第三条要求“了解 EA 7.5 界面的六大组成部分”,但仅看文档描述远不够。必须手动验证以下同步行为,否则实验2(类图)和实验3(序列图)将出现元素丢失:

  • 浏览器(Browser)中右键新增类 → 图窗口(Diagram Window)是否实时出现该类?
    正确现象:在 Browser 的Model节点下右键 →Add → Class→ 输入名称(如People)→ 回车 → 该类立即出现在 Diagram Window 的空白区,且带默认UML矩形框。
    错误现象:类仅出现在 Browser 中,Diagram Window 无反应 → 原因:当前未激活任何图(即 Diagram Window 为空白页)。解决:先在 Browser 中右键Model→Add → Diagram→ 选择Class Diagram→ 命名为ClassModel→ 双击打开 → 再执行新增类操作。

  • 图窗口中拖拽类到另一图 → 浏览器中该类是否仍归属原包?
    正确现象:将People类从ClassModel图拖拽至新建的SequenceDiagram图中 → Browser 中People仍位于Model下,未移动位置。
    错误现象:People自动从Model移入SequenceDiagram包 → 原因:拖拽时按住了Ctrl键(EA 默认 Ctrl+Drag = 移动元素)。解决:纯鼠标左键拖拽,勿按任何修饰键。

2.3 元素重命名与规范访问:属性/操作编辑必须通过“Properties”面板,禁用图内双击

实验0第四条要求“更名模型元素;访问元素的详细规范”。此处存在严重误导:EA 7.5 允许在图中双击类名直接修改,但该操作仅更新显示文本,不更新底层元模型标识符(ID)。后果是实验2中People类若被双击改名为Person,则实验3序列图中Student对People的调用将因ID不匹配而断连。

正确操作路径:

  1. 在 Browser 中右键People类 →Properties
  2. 在弹出窗口的Name字段修改为People(确保拼写一致)
  3. 切换到Attributes标签页 → 点击Add→ 输入name: String→ 设置Visibility为+(public)
  4. 切换到Operations标签页 → 点击Add→ 输入deleteCourse(): void→ 设置Visibility为+

注意:Attributes和Operations中的Visibility下拉菜单必须手动选择+/-/#,不可留空。EA 7.5 默认 visibility 为空时,导出图片或生成代码会忽略该成员。

2.4 日志窗口(Log Window)的致命用途:它是排查“图元素消失”的唯一证据源

当实验3序列图中Student生命线突然消失,或实验5活动图泳道无法拖入动作状态时,别急着重做——先看 Log Window。EA 7.5 的日志不记录用户操作,但会输出模型完整性校验失败警告。例如:

[Error] Cannot add Message to diagram: Target element 'ControlForm' not found in model. [Warning] Diagram 'SequenceDiagram' contains orphaned elements. Refresh required.

这两条日志直指核心问题:ControlForm类在 Browser 中被误删,或未被添加到Model包下。解决方案不是重新画图,而是:

  1. 在 Browser 中确认ControlForm是否存在于Model下(若无,右键Model→Add → Class→ 名为ControlForm)
  2. 在 Log Window 中右键 →Refresh→ 所有“orphaned elements”警告消失 → 图中生命线自动恢复

血泪经验:EA 7.5 的图窗口是“视图缓存”,Browser 才是“数据源”。所有建模操作必须以 Browser 为准,图窗口仅作展示。Log Window 就是这二者间的数据一致性公证员。

2.5 导出设置避坑:PDF 导出必须关闭“Embed Fonts”,否则中文乱码成方块

实验报告最终需提交 PDF,但 EA 7.5 默认导出设置对中文极不友好。若直接Diagram → Export Diagram → PDF,会出现“钱秀梅”显示为“□□□□”、“选课”变成“□□”。根源在于 EA 7.5 使用旧版 PDFWriter 引擎,嵌入中文字体(如 SimSun)会导致文件体积暴增且渲染失败。

正确导出流程:

  1. Diagram → Export Diagram → PDF
  2. 在导出对话框中取消勾选Embed Fonts
  3. 勾选Use System Fonts
  4. 点击Export
  5. 用 Adobe Acrobat Reader 打开生成的 PDF → 中文正常显示

验证技巧:导出前先Diagram → Print Preview,若预览中中文正常,则 PDF 必然正常。Preview 是 EA 内部渲染引擎的最终检验关卡。


3. 用例图建模实战:泛化/包含/扩展三类关系的语义边界与 EA 实现陷阱

实验1聚焦网上选课系统的用例建模,其价值远超“画几个椭圆和小人”。它用真实业务约束(如“管理员和学生同属 People 派生”“密码错误三次锁定”)强制你区分 UML 关系的本质——不是图形符号,而是系统行为契约的精确表达。本节拆解三类高频混淆关系的 EA 实现要点。

3.1 泛化关系(Generalization):箭头方向=继承方向,EA 中必须用“Generalization”连接线

实验1小结第2条指出:“管理员和学生从 people 统一派生”。这看似简单,但在 EA 7.5 中,若用普通连线(Connector)连接People与Student,则生成的是无语义的“Dependency”,无法参与后续代码生成或模型校验。

正确操作:

  1. 在 Browser 中确保People、Student、Admin三类均已创建(见2.3节)
  2. 在ClassDiagram图中,选中Student类 → 点击工具栏Relationships → Generalization(图标为带空心三角箭头的直线)
  3. 将箭头起点拖至Student,终点拖至People→ 松开鼠标
  4. 右键生成的连线 →Properties→ 确认Type为Generalization,Direction为Source to Target(即箭头指向父类)

关键验证:双击该连线 →Properties→Stereotype字段应为空(泛化无构造型)。若此处显示<<extend>>或<<include>>,说明误用了其他关系类型。

3.2 包含关系(Include):必须绑定到用例内部,EA 中需启用“Call Behavior”构造型

实验1结果图中<<include>>出现在“登录”与“修改课程”之间。UML 规范要求:<<include>>表示被包含用例(如“登录”)是主用例(如“修改课程”)的强制前置步骤,且被包含用例无独立入口。EA 7.5 实现此语义需两步:

  1. 创建两个用例:Login和ModifyCourse(在 Browser 中右键Model→Add → Use Case)
  2. 选中ModifyCourse→ 点击工具栏Relationships → Dependency→ 将连线起点拖至ModifyCourse,终点拖至Login
  3. 右键该连线 →Properties→ 在Stereotype字段输入<<include>>(注意左右尖括号为英文半角)
  4. 关键一步:切换到Advanced标签页 → 勾选Is Call Behavior→ 点击 OK

为什么必须勾选Is Call Behavior?因为 EA 7.5 将<<include>>解析为“调用行为”,若不勾选,导出 XMI 模型时该关系会被忽略,导致下游工具(如Papyrus)无法识别。这是 EA 7.5 特有的元模型映射规则。

3.3 扩展关系(Extend):扩展点(Extension Point)必须显式定义,EA 中需手动添加

实验1需求描述中,“A1 密码错误”是“添加课程”的扩展场景。UML 要求:<<extend>>关系必须关联到被扩展用例的特定扩展点(Extension Point),而非整个用例。EA 7.5 不自动生成扩展点,需手动插入:

  1. 在AddCourse用例图中,右键AddCourse→Add → Extension Point→ 输入名称PasswordCheckFailed
  2. 创建PasswordErrorHandling用例(作为扩展用例)
  3. 用Dependency连线连接PasswordErrorHandling→AddCourse
  4. 右键连线 →Properties→Stereotype输入<<extend>>
  5. 关键一步:在Advanced标签页 →Extension Point字段输入PasswordCheckFailed(必须与步骤1中名称完全一致)

避坑:若Extension Point字段为空,EA 7.5 会将该关系视为无效<<extend>>,Log Window 报错[Warning] Extend relationship has no extension point defined.。扩展点名称区分大小写,且不可含空格。

3.4 用例图常见问题排查:3条血泪记录

现象原因解决
用例间连线显示为虚线但无<<include>>文字在Properties中Stereotype字段输入了全角尖括号《include》或中文引号删除全角符号,严格输入<<include>>(英文半角<)
泛化箭头指向错误(子类指向父类)拖拽连线时起点/终点选反:应先选子类(Student),再拖向父类(People)删除错误连线 → 重新操作,确保鼠标按下时在子类上,松开时在父类上
<<extend>>关系在导出图片中不显示扩展点名称EA 7.5 默认隐藏扩展点标签,需手动开启右键<<extend>>连线 →Appearance→ 勾选Show Extension Point

4. 类图与对象图协同建模:属性可见性、关联多重性、继承链的三层校验法

实验2要求“抽象出选课系统中的类”并构建类图,但真正难点不在绘图,而在确保类、属性、操作、关系四者语义闭环。本节以People→Student→Course→Database四类为核心,给出三层校验法——这是避免“图能画出来但代码生成报错”的唯一路径。

4.1 属性可见性(Visibility):+/-/#不是装饰,是 EA 代码生成器的编译指令

实验2小结第2条提到“类中属性的可见性主要包括 public、private 和 protected”,但 EA 7.5 中,这些符号直接控制 Java/C# 代码生成结果。例如People类的password属性:

  • 若在Attributes表中Visibility选+→ 生成 Java 代码为public String password;
  • 若选-→ 生成private String password;+ 自动生成getPassword()/setPassword()方法
  • 若选#→ 生成protected String password;

关键参数:Visibility字段必须从下拉菜单选择,不可手动输入+。EA 7.5 会校验输入值,手动输入+会导致该属性在导出 XMI 时被丢弃。

4.2 关联多重性(Multiplicity):必须同时设置两端,EA 中需双击连线编辑

实验2图中Student与Course间标注0..n,Course与Database间为1。UML 要求关联多重性是双向声明,EA 7.5 却常被忽略一端:

  1. 用Association工具(图标为带实心菱形的直线)连接Student与Course
  2. 双击该连线→Properties→Source Role标签页 →Multiplicity输入0..*(EA 接受0..*或0..n)
  3. 切换到Target Role标签页 →Multiplicity输入1
  4. 勾选Is Navigable(导航性)→Source端设为True(Student可导航到Course),Target端设为False(Course不反向导航)

验证:生成 Java 代码后,Student类中会出现private List<Course> courses;,而Course类中无student字段——这正是Is Navigable控制的结果。

4.3 继承链完整性:Browser 中的包层级必须与图中继承箭头严格对应

实验2要求“管理员和学生从 people 派生”,但 EA 7.5 允许在图中画泛化箭头,却不强制 Browser 中的包结构匹配。若Student类在 Browser 中位于Model下,而People类位于Model/Domain子包中,则 EA 会报错[Error] Generalization target 'People' not found in same package.

正确做法:

  1. 在 Browser 中右键Model→Add → Package→ 命名为Domain
  2. 将People、Student、Admin三类全部拖入Domain包下(鼠标拖拽,非复制)
  3. 在Domain包内新建ClassDiagram→ 再绘制泛化关系

为什么必须同包?因为 EA 7.5 的泛化关系作用域限于同一包。跨包泛化需用Realization(实现)关系替代,语义完全不同。

4.4 类图避坑清单:4个必查点

问题检查位置后果修复方式
类名重复Browser 中Model/Domain下是否存在同名类(如两个Student)EA 7.5 允许创建,但导出代码时仅保留最后一个删除多余类,确保 Browser 中每个类名唯一
操作无返回类型Operations表中ReturnType列为空生成 Java 代码时方法声明为void methodName(),但 UML 要求显式声明在ReturnType输入void或String等具体类型
关联线无角色名双击关联线 →Source Role/Target Role的Name为空导出图片时无角色标签,违反实验2图示规范在Name字段输入enrollsIn(源端)、isEnrolledBy(目标端)等语义名
聚合/组合混淆用Aggregation工具(空心/实心菱形)连接时未设置Aggregation类型EA 默认None,不生成任何代码双击连线 →Properties→Aggregation选Shared(聚合)或Composite(组合)

5. 动态图建模:序列图消息序号、状态图迁移守卫、活动图泳道责任的落地约束

实验3–5 覆盖 UML 动态建模三大图型,其核心价值在于将静态结构转化为可执行行为流。本节直击 EA 7.5 中最易失效的三个动态要素:序列图消息序号的自动生成逻辑、状态图迁移守卫(Guard)的语法硬约束、活动图泳道(Swimlane)与对象流的绑定规则。

5.1 序列图消息序号:必须启用“Auto-Number Messages”,禁用手动编号

实验3图3-1 显示1:2:3:等序号,但 EA 7.5 默认不自动编号。若手动输入1: xxx(),则后续添加消息时序号不会重排,导致逻辑断裂。

正确设置:

  1. 在序列图中右键空白处 →Diagram Properties
  2. 切换到Messages标签页 → 勾选Auto-Number Messages
  3. 设置Numbering Style为Hierarchical(层级式,支持1.1,1.2)
  4. 点击 OK

验证:添加新消息后,所有消息自动重编号。若需调整顺序,直接拖拽消息生命线上的箭头即可,EA 会实时重算序号。

5.2 状态图迁移守卫(Guard):方括号内必须为布尔表达式,EA 中需用Guard字段

实验4状态图中[学生数 = 最大学生数]是典型守卫条件。EA 7.5 要求守卫必须写在迁移线(Transition)的Guard字段,且语法严格:

  1. 用Transition工具(带箭头直线)连接两个状态(如Created→Full)
  2. 右键该迁移线 →Properties→Guard字段输入[studentCount == maxStudentCount]
  3. 关键语法:必须用==(双等号),不可用=;变量名需与类中属性名完全一致(大小写敏感);方括号[]不可省略

错误示例:[studentCount = maxStudentCount](单等号)→ EA 7.5 解析为赋值语句,Log Window 报错[Error] Invalid guard expression syntax.

5.3 活动图泳道(Swimlane):必须将动作拖入泳道内,EA 中泳道是容器而非背景

实验5活动图采用泳道划分责任,但 EA 7.5 的泳道(Partition)本质是容器。若将输入课程信息动作放在泳道外,再用连线指向泳道内动作,则该动作不属于任何责任主体,违反实验要求。

正确操作:

  1. Diagram → Add → Partition→ 输入名称Administrator
  2. 将Input Course Info动作元件(从工具栏拖入)直接拖入Administrator泳道区域内(鼠标松开时泳道边缘高亮)
  3. 在泳道内右键动作 →Properties→Name设为输入课程信息
  4. 添加Decision元件 → 同样拖入泳道 → 右键Properties→Guard设为[conflictExists]

验证:选中泳道 → 查看 Browser,其下会显示Input Course Info和Decision作为子元素。若动作在泳道外,Browser 中它们会挂在Model下,与泳道无关。

5.4 动态图通用避坑:3个跨图陷阱

现象根源解决方案
序列图中生命线显示为“Object:ClassName”而非“className:ClassName”EA 默认显示格式为Object:Class,但实验3图3-1 要求Student(实例名小写)右键生命线 →Properties→Instance Specification→Name输入student(小写),Classifier选Student类
状态图初始状态(Filled Circle)无法连接到首个状态EA 7.5 要求初始状态必须用Transition连接,不可用普通连线用Transition工具从初始状态拖向首个状态(如Created),连线自动带箭头
活动图决策节点(Diamond)分支无守卫条件EA 允许创建无守卫的分支,但 UML 要求至少一个分支为else右键分支连线 →Properties→Guard输入[else](必须小写else)

6. 包图与物理图的架构落地:包依赖方向、部署节点命名、组件接口绑定的工程化校验

实验6–7 将建模视角从逻辑层拉升至架构层,其价值在于验证系统模块化设计是否可部署、可运维。本节聚焦 EA 7.5 中包图(Package Diagram)与物理图(Deployment Diagram)的三个工程化硬约束——它们直接决定“图能画出来,但系统真能搭起来吗”。

6.1 包图依赖方向:箭头必须从使用者指向被使用者,EA 中需用Dependency连线

实验6包图显示People→主程序→管理员→学生→界面→课程→数据库→控制对象的依赖链。UML 规范要求:依赖箭头方向 = 代码调用方向(即界面依赖课程,因界面需调用课程方法)。

EA 实现:

  1. 在 Browser 中创建People、MainProgram、Admin等包(右键Model→Add → Package)
  2. 用Dependency工具(虚线+开放箭头)连接界面包 →课程包
  3. 右键连线 →Properties→Stereotype输入<<use>>(可选,增强语义)

关键校验:生成 Java 代码时,界面包下的类必须import课程包下的类。若箭头反向,EA 会生成错误 import 语句。

6.2 物理图节点命名:必须与实际硬件/软件环境一致,EA 中节点名即部署标识符

实验7要求“绘制选课系统的物理图”,即部署图(Deployment Diagram)。EA 7.5 中,节点(Node)名称不是随意标签,而是部署时的真实主机名或容器名。例如:

  • 若实际部署为Web Server (Tomcat)+DB Server (MySQL),则节点名必须为WebServer和DBServer
  • 若命名为Server1/Server2,则生成的部署文档无法指导运维

正确操作:

  1. Diagram → Add → Node→ 输入WebServer
  2. 右键WebServer→Properties→Name设为WebServer,Type设为Device
  3. 拖入Component(如MainProgram)到WebServer节点内(成为其子元素)
  4. 同理创建DBServer节点,将Database组件拖入其中

验证:导出部署文档时,WebServer节点下会列出MainProgram组件,DBServer下列出Database组件,形成可执行的部署清单。

6.3 组件接口绑定:必须用Assembly Connector,EA 中需双击设置接口类型

实验6包图中控制对象与数据库间存在依赖,但物理图中需明确“如何连接”。UML 要求用装配连接器(Assembly Connector)绑定提供接口(Provided Interface)与需求接口(Required Interface)。

EA 实现:

  1. 在WebServer节点内,右键MainProgram组件 →Add → Provided Interface→ 输入IDataAccess
  2. 在DBServer节点内,右键Database组件 →Add → Required Interface→ 输入IDataAccess
  3. 用Assembly Connector工具(带实心圆点的虚线)连接IDataAccess(提供端)→IDataAccess(需求端)
  4. 双击连线 →Properties→Type设为Assembly

为什么必须 Assembly?因为Dependency连线只表示逻辑依赖,Assembly Connector才表示物理连接(如 JDBC URL、API Endpoint),是 DevOps 流水线的输入依据。

6.4 架构图终极验证:3步交叉检查法

检查项方法不通过后果
包依赖闭环在 Browser 中展开Model→ 检查所有包是否被至少一个其他包依赖(除根包Model)存在孤立包 → 模块未被使用,代码生成时该包被忽略
节点组件归属右键物理图中任意节点 →Properties→ 查看Contained Elements是否包含对应组件组件未拖入节点 → 部署文档中该组件无宿主,无法部署
接口名称一致性在 Browser 中搜索IDataAccess→ 确认提供接口与需求接口同名且在同一模型中名称不一致 → Assembly Connector 断连,部署连接失败

从那以后我每次导出 PDF 前,都强制走一遍 Log Window 刷新 + Browser 包结构检查 + 序列图消息重编号。不是怕出错,是怕错得无声无息——EA 7.5 的静默失败比报错更可怕,它会让你交一份“看起来完美”的报告,却在答辩时被问住“这个泛化关系为什么没生成 getter 方法”。希望帮到你。

本文还有配套的精品资源,点击获取

返回列表