本文提供了UML序列图的概述,解释了其符号表示,强项和在动态系统交互建模中的局限性。并通过详细案例展示了它们的实际应用,该案例研究为医院管理系统中的医生与病人检查流程,包括相应的类图和伪代码示例。
统一建模语言(UML)序列图在软件工程(SE)中被广泛用于建模系统内对象之间的动态交互过程。它们展示了对象之间交互过程中消息的顺序(IBM,2021)。本文简要介绍了UML序列图,并给出一个示例,包含相关的序列图、伪代码和类图,这些内容展示了医院管理系统中医生与患者检查互动的工作流程。
UML 序列图简介
UML 序列图“通常基于 UML 类图,并主要用于展示对象(类)之间交互的顺序”(Ricciardi, 2025, p. 1)。它们提供了在特定时间段内类(对象)之间交互的动态图示。在 SE 中,这些图通常在问题空间中,从用户的角度分析和建模系统行为(Unhelkar, 2018)。在解决方案空间中,它们用于更详细地展示系统内部的交互,例如展示查询消息的顺序、方法调用、方法内的参数消息,以及返回这些方法的值。该图使用一套符号系统,包括参与者(类)、生命线(时间线)、表示消息或方法调用的箭头、表示方法执行的激活条,以及可选的注释来表示条件、循环或返回值。这些元素共同工作以展示系统内部交互的流程。元素垂直排列以展示交互的顺序,以水平方式排列来显示对象之间的交互方向。下图(图 1)展示了 UML 序列图的主要元素。
图1
UML序列图元素
说明: 该图展示了UML序列图中可找到的元素及其可能的交互。摘自Ricciardi(2025)的《UML序列图指南:符号、优势与局限》。
需要注意的是,类和对象的名字通常用下划线标出,并且可以用小人图标来表示外部参与者,内部参与者则可以被包含在一个矩形框内,或用不同的圆形形状或图标来表示特定的类型(例如边界、控制和实体)。在UML中,“类型(stereotype)表示对现有建模元素的一种变体,具有相同的形式但不同的意图”(Agile Modeling,2023,p.1)。通常,类型(stereotype)使用尖括号(<< >>)包围的关键字来表示;例如,序列图中的特定类型如圆形形状所示,分别是<<边界>>、<<控制>>和<<实体>>。下表,表1,提供了图1中表示元素的详细说明,包括序列图中使用的图标类型。
表 1
UML序列图符号说明如下
注:该表列出了在 UML 时序图中可以找到的符号元素。摘自 Ricciardi (2025) 的《UML 时序图指南:符号、优势与局限》。
序列图既有优势也有劣势,它们非常适合展示不同参与者或类之间在一段时间内的交互,从而建模系统的动态行为。它们能帮助识别类图中缺失的元素,并可用于文档编写(Ricciardi, 2025)。另一方面,它们难以表示并行过程或复杂的条件流程。尤其是在表示并行交互时,序列图的动态和顺序特性使得很难描绘系统中的并发事件。此外,尝试在单一图中用框架(或片段)展示多个并发和复杂的条件流程,会使得图表变得混乱,最终可能需要生成多个额外的序列图。详见表2,了解序列图的主要优缺点。总之,UML序列图展示系统中对象动态交互非常有用,它们有利也有弊。本文的下一节将探讨医院管理系统UML序列图,将包括相关的伪代码和UML类图。
表2
UML序列图的优缺点
注: 该表如下说明了UML序列图的优点和缺点。
医院管理系统(HMS)是一款数字应用程序,帮助医院高效地管理日常运营(《医学史》,2024)。它是一个平台,连接和管理医院内所有部门,包括医疗、财务、患者和行政部门。由于使用单一的序列图来说明HMS内部所有交互几乎是不可能的,因此本部分通过一个序列图来展示医生和患者在预约期间如何与HMS进行互动。换句话说,序列图展示的是医生和患者在HMS中可能进行的问诊流程,说明了医生和患者在预约时可能如何与HMS界面互动。
图2
医生与患者检查HMS类图第二版
注释: 此 UML 类图,版本 2,说明了医院管理系统 (HMS) 中的医生和患者的检查系统。使用 Lucidchart 应用程序制作。
如前文所述,顺序图通常基于UML类图。图2展示的是用于建模HMS中医生与患者检查系统静态结构的类图。在敏捷Scrum方法中,这个类图的第二个版本(版本2),连同相关的伪代码和顺序图,表明在设计阶段,医生和患者的检查功能根据前一版本顺序图中捕获的使用场景进行了相应的细化或修改。以下是与该功能相关的伪代码。
代码示例1
HMS医生-患者检查系统的伪代码版本2
注:伪代码是HMS医生-患者检查系统的接口和类的代码描述。完整的代码可在GitHub上找到:HMS医生-患者检查系统伪代码
HMS 医生-患者检查系统的伪代码注释将患者类标记为外部实体,因为这些类实例化后的对象开始与系统交互时,会创建DoctorSysInterface和PatientSysInterface对象,从而允许它们与HSM进行交互。请注意,PatientSysInterface类继承自HospitalSysManager类。这些关系在类图中通过聚合和继承关系表示,正是这些关系使医生和患者能够与HMS医生-患者检查系统进行交互,如下序列图所示。
《图3》
医生-患者HMS检查流程图版本2
注:此 UML 序列图,版本 2,展示了医生与患者在 HMS 系统中的检查互动过程。使用 Lucidchart 制作。
医生-患者检查系统HMS版本-2序列图是一个设计层面(解决方案空间)的UML序列图,它描述了外部角色、医生和患者与医生-患者检查系统HMS之间的交互。交互流程从方法examine(Patient patient)
表示的找到的消息开始,在这种情况下,找到的消息是指系统外部生成的消息。同样,docApp(Doctor doctor)
消息从患者的角度启动流程。请注意,这种交互可以通过并行框架在图中表示,创建图中的交互部分。然而,这样做并非必要,因为它会复杂化图,而不会显著增加对交互理解的价值。
此外,该图展示了以接口形式存在的边界,即“patInterface : PatientSysInterface”,“docInterface : DoctorSysInterface”,以及“diagnosisManager : DiagnosisManagerInterface”,这些边界展示了外部参与者自身(医生和病人)与HMS核心系统(“HospitalSysManager : aHospitalSysManager”)以及与日程管理(“ScheduleManagerInterface : scheduleManager”)之间的抽象层次。外部参与者也使用这些边界作为与系统交互的接口。该图还展示了组合片段;例如,循环框架“isSymptomDiagnosisDrugProcedure[0] = true”包含选项框架“isSymptomDiagnosisDrugProcedure[0] = true”,后者进一步包含另一个选项框架“isSymptomDiagnosisDrugProcedure[1] = true”。
此外,序列图很好地展示了内部和外部角色、对象、时间线、控制点、消息、自我消息、返回消息、异步消息、对象的销毁、步骤以及注释,有效地描绘了HMS中医生和患者之间的检查过程中的动态互动。
总结
UML 时序图对于展示系统内对象之间的动态交互十分有用。时序图有助于识别缺失元素,细化对象交互,并表示对象销毁。然而,它们在表示并行性、复杂条件逻辑或整个系统时效果较差,无法在单一图表中表现。本文还探讨了 UML 时序图在建模系统动态行为方面的实用性,以医院管理系统中的医生与患者会诊场景为例。提供了详细的时序图、类图和伪代码,展示了这些不同的工具如何在设计阶段有效表示复杂交互并完善系统需求。如文中提供的示例所示,在软件工程中,它们对于设计、分析和记录系统内的交互至关重要。
参考资料:
敏捷建模网站。 (2023). UML 标记:图示风格指南文章。 敏捷建模(AM)方法 — 有效的建模和文档策略方法。https://agilemodeling.com/style/stereotype.htm
IBM (2021年3月5日,). 序列图。Rational软件建模器。IBM官方文档。https://www.ibm.com/docs/en/rsm/7.5.0?topic=uml-sequence-diagrams
Ricciardi, A. (2025年1月27日). UML 时序图指南:符号、优点和局限性. Level Up Coding — Medium。https://www.alexomegapy.com/post/a-guide-to-uml-sequence-diagrams-notation-strengths-and-limitations
医院管理 (2024, 十一月 1). 医院管理系统(HMS)是什么,HMS有哪些好处? 智能医学史。 https://smartmedhx.ai/trends/what-is-a-hospital-management-system/
Unhelkar, B. (2018). 第十二章 — 使用序列图进行交互建模. 软件工程与UML. CRC Press, ISBN 9781138297432
原文于2025年1月31日在https://www.alexomegapy.com发表。