面向对象软件工程实践指南 达问题的某一方面很重要,但又无法通过标准建模元素被完整地表达。这时,可以使用标注 对这些建模元素进行附加说明,例如在使用序列图来描述一组对象间的交互时,其中的消息 的语义、语法无法在消息的名字字串内完整地表达时,可以用标注的方法进行直观的说明。 在UML中,标注被定义为UML中的一个图形表示,它用来描述对一个或一组UML 建模元素的约束或注释。标注可以作用于任何UML建模元素(如:类、对象、关系、消息 等),用于对此建模元素的各方面的特性作补充说明、表示设计分析过程中产生的假设和决 定等。标注的内容对被标注的建模元素没有任何语义上的影响,它只起到增强模型的可读性 的作用。 3.4UML建模规则 UML的模型图不是UML成员的简单堆砌,而是按特定的规则有机地组合而成,从而 构成一个完备的UML模型图。一个完备的UML模型图(well-formed UML diagram)在语 义上是一致的。 UML建模规则包括: ● 名字:任何一个UML成员都必须包含一个名字 ● 作用域:UML成员所定义的内容起作用的上下文环境 ● 可见性:UML成员能被其它成员引用的方式 ● 完整性:UML成员之间互相联接的合法性和一致性。 ● 运行属性:UML成员在运行时的特性。 完备的UML模型必须对以上的内容给出完整的解释,当用于软件系统的建造时,UML 模型必须是完备的,但是当模型在不同的视图中出现时,出于不同的交流侧重点,其表达可 以是不完备的。 UML有两套建模机制:静态建模机制和动态建模机制。静态建模机制包括用例图、类 图、包图、对象图、组件图和部署图等:动态建模机制包含状态图、活动图、序列图、通信 图、交互概览图和时间图等。 3.5静态建模机制模型图 3.5.1用例图(Use Case Diagram) 用例用以捕获系统功能需求,代表了从用户角度出发的应用系统的功能。用例图是用 例的可视化表示。用例图主要包含参与者、用例和它们之间的关系。 参与者中的角色(Actor),可以是人也可以是事物。若用例执行的动作由参与者引起, 则这个参与者称为主参与者,放在用例的左侧:若参与者帮助用例完成动作,则这个参与者 称为次参与者,通常放在用例的右侧。用例是用户与计算机的一次交互。参与者通过关联与 用例发生作用,关联用一条线段表示。 27
面向对象软件工程实践指南 27 达问题的某一方面很重要,但又无法通过标准建模元素被完整地表达。这时,可以使用标注 对这些建模元素进行附加说明,例如在使用序列图来描述一组对象间的交互时,其中的消息 的语义、语法无法在消息的名字字串内完整地表达时,可以用标注的方法进行直观的说明。 在 UML 中, 标注被定义为 UML 中的一个图形表示,它用来描述对一个或一组 UML 建模元素的约束或注释。标注可以作用于任何 UML 建模元素(如:类、对象、关系、消息 等),用于对此建模元素的各方面的特性作补充说明、表示设计分析过程中产生的假设和决 定等。标注的内容对被标注的建模元素没有任何语义上的影响,它只起到增强模型的可读性 的作用。 3.4 UML 建模规则 UML 的模型图不是 UML 成员的简单堆砌,而是按特定的规则有机地组合而成,从而 构成一个完备的 UML 模型图。一个完备的 UML 模型图(well-formed UML diagram)在语 义上是一致的。 UML 建模规则包括: 名字:任何一个 UML 成员都必须包含一个名字 作用域:UML 成员所定义的内容起作用的上下文环境 可见性:UML 成员能被其它成员引用的方式 完整性:UML 成员之间互相联接的合法性和一致性。 运行属性:UML 成员在运行时的特性。 完备的 UML 模型必须对以上的内容给出完整的解释, 当用于软件系统的建造时,UML 模型必须是完备的, 但是当模型在不同的视图中出现时, 出于不同的交流侧重点, 其表达可 以是不完备的。 UML 有两套建模机制:静态建模机制和动态建模机制。静态建模机制包括用例图、类 图、包图、对象图、组件图和部署图等;动态建模机制包含状态图、活动图、序列图、通信 图、交互概览图和时间图等。 3.5 静态建模机制模型图 3.5.1 用例图 (Use Case Diagram) 用例用以捕获系统功能需求,代表了从用户角度出发的应用系统的功能。用例图是用 例的可视化表示。用例图主要包含参与者、用例和它们之间的关系。 参与者中的角色(Actor),可以是人也可以是事物。若用例执行的动作由参与者引起, 则这个参与者称为主参与者,放在用例的左侧;若参与者帮助用例完成动作,则这个参与者 称为次参与者,通常放在用例的右侧。用例是用户与计算机的一次交互。参与者通过关联与 用例发生作用,关联用一条线段表示
面向对象软件工程实践指南 用例之间的关系用带有箭头的虚线表示,有扩展、包含两种依赖关系以及泛化关系。 以统为例,系统的用例图如图3-1所示。中间的椭圆形代表了系统的用例,它们之间存在包 含关系。Applicant和Admin是引发用例执行的主参与者,NotificationSystem和 AcademicInformationSystem是辅助用例完成的次参与者。 吴 图3-1教室预订系统用例图 3.5.2类图(Class Diagram) 类图描述系统中的对象类型以及存在于它们之间的各种静态关系。类图也展示类的性 质和操作,以及应用于对象连接方式的约束。性质(property)代表类的结构特性,有两种 表示:属性和关联。属性(attribute)把性质描述成为类方框中的一行文本。关联(association) 是一根两个类之间的实线,方向从源类到目标类,关联的名称以及多重性放在关联的目标端。 图3-2给出了教室预订系统中的类图的部分片段。 ClassRoom 0* 0.1 Applicant userlD int Student Teacher Staf仟 图3-2教室预订系统的类图片段 28
面向对象软件工程实践指南 28 用例之间的关系用带有箭头的虚线表示,有扩展、包含两种依赖关系以及泛化关系。 以统为例,系统的用例图如图 3-1 所示。中间的椭圆形代表了系统的用例,它们之间存在包 含 关 系 。 Applicant 和 Admin 是 引 发 用 例 执 行 的 主 参 与 者 , NotificationSystem 和 AcademicInformationSystem 是辅助用例完成的次参与者。 <<extend>> <<include>> <<include>> <<include>> <<include>> <<include>> <<include>> Applicant Admin NotificationSystem AcademicInformationSystem SubmitApplication CloseConnection SubmitNewApplication SubmitChangedApplication WithdrawApplication Login CheckAvailability ProcessApplication RejectApplication ApproveApplication ArrangeClassroom图3-1 教室预订系统用例图 3.5.2 类图 (Class Diagram) 类图描述系统中的对象类型以及存在于它们之间的各种静态关系。类图也展示类的性 质和操作,以及应用于对象连接方式的约束。性质(property)代表类的结构特性,有两种 表示:属性和关联。属性(attribute)把性质描述成为类方框中的一行文本。关联(association) 是一根两个类之间的实线,方向从源类到目标类,关联的名称以及多重性放在关联的目标端。 图 3-2 给出了教室预订系统中的类图的部分片段。 0..1 0..* Applicant - userID : int Student Teacher Staff ClassRoom 图 3-2 教室预订系统的类图片段
面向对象软件工程实践指南 3.5.3包图(Package Diagram) 包是一种分组结构,最常见的用法是组织类。包图的主要元素是包、它们的可见性和 它们的依赖关系。在UML2.0中,包的表示法为左上角带有标签的文件夹,使用双冒号来 表示所属包的名称。图3-3为包图的示例。 NotificationSystem AcademiclnformationSystem 图3-3包图示意图 3.5.4对象图(Object Diagram) 对象图用来说明系统中某一时刻存在的对象以及对象之间的关系。对象图是某时间点 上的对象在系统中的快照。由于对象图展示的是实例而不是类,也被称作实例图。与类图相 似,对象图的表示与类图相似,不同的是对象名称下面带有下划线,每个名称的形式一般为 “实例名:类名”,两个部分都可选,若只包含类名,则必须包含冒号。图3-4展示了对象 图的例子。 Jimi:Applicant 401:ClassRoom 图3-4对象图示意图 3.5.5组件图(Component Diagram) 组件图描述了组件以及组件之间的协作。组件是代表代码、二进制的物理模块。在 UML2.0中组件的名称和分类器矩形框右上角显示的组件图标。 在软件开发过程中,我们可以用组件图来表达架构的逻辑分层和划分方式。图3-5展 示了教室预订系统的组件图。 29
面向对象软件工程实践指南 29 3.5.3 包图 (Package Diagram) 包是一种分组结构,最常见的用法是组织类。包图的主要元素是包、它们的可见性和 它们的依赖关系。在 UML 2.0 中,包的表示法为左上角带有标签的文件夹,使用双冒号来 表示所属包的名称。图 3-3 为包图的示例。 NotificationSystem AcademicInformationSystem ClassRoomBookingSystem 图 3-3 包图示意图 3.5.4 对象图 (Object Diagram) 对象图用来说明系统中某一时刻存在的对象以及对象之间的关系。对象图是某时间点 上的对象在系统中的快照。由于对象图展示的是实例而不是类,也被称作实例图。与类图相 似,对象图的表示与类图相似,不同的是对象名称下面带有下划线,每个名称的形式一般为 “实例名:类名”,两个部分都可选,若只包含类名,则必须包含冒号。图 3-4 展示了对象 图的例子。 Jimi:Applicant 401:ClassRoom 图 3-4 对象图示意图 3.5.5 组件图 (Component Diagram) 组件图描述了组件以及组件之间的协作。组件是代表代码、二进制的物理模块。在 UML2.0 中组件的名称和分类器矩形框右上角显示的组件图标。 在软件开发过程中,我们可以用组件图来表达架构的逻辑分层和划分方式。图 3-5 展 示了教室预订系统的组件图
面向对象软件工程实践指南 brower show_form.exe▣ pdate_data.exe☐ database ort I server fetch info.exe receive_info.exe 图3-5组件图示意图 3.5.6部署图(Deployment Diagram) 部署图用于描述系统硬件的物理拓扑结构以及在此结构上运行的软件。部署图包含三 个基本元素:制品(Artifact)、节点Node)和它们之间的连接(Association)。 (1)制品 制品是软件中的具体文件,这些文件可以是可执行的(比如.exe文件、DLL或JAR文 件),或数据文件、配置文件、HTML文档等。制品用类方框来表示。 (2)节点 节点是一种计算资源,通常包含存储和处理能力。制品部署在节点上执行。节点可以包 含其他节点,以表示它的复杂的执行能力。节点分为两种类型:设备和执行环境。设备是提 供计算能力的硬件,例如计算机或者路由器等。执行环境是软件,用于部署特定的执行工件, 如Database,执行环境通常以设备作为宿主。 (3)连接 节点之间的连接表示系统之间进行交互的通信路径,连接上可以指明网络协议。图3-6 是教室预订系统的部署图,包含了节点,节点实例以及它们之间的连接。 《evrg Dell PowerEdge R710 《client workstation》 OS Red Hat Enterprise Linux 6} GenericPC/PAD 《JsP/Servlet container》 Apache Tomcat 7 HTTPS 《browser》 WebBrowser webclassroom.war SQL 《server》 Dell PowerEdge R410 OS=Red Hat Enterprise Linux 6) 图3-6教室预订系统部署图 30
面向对象软件工程实践指南 30 :brower show_form.exe update_data.exe Port_1 :server fetch_info.exe receive_info.exe Port_1 Port_2 :database co c show_form.exe update_data.exe fetch_info.exe receive_info.exe 图 3-5 组件图示意图 3.5.6 部署图 (Deployment Diagram) 部署图用于描述系统硬件的物理拓扑结构以及在此结构上运行的软件。部署图包含三 个基本元素:制品(Artifact)、节点(Node)和它们之间的连接(Association)。 (1) 制品 制品是软件中的具体文件,这些文件可以是可执行的(比如.exe 文件、DLL 或 JAR 文 件),或数据文件、配置文件、HTML 文档等。制品用类方框来表示。 (2)节点 节点是一种计算资源,通常包含存储和处理能力。制品部署在节点上执行。节点可以包 含其他节点,以表示它的复杂的执行能力。节点分为两种类型:设备和执行环境。设备是提 供计算能力的硬件,例如计算机或者路由器等。执行环境是软件,用于部署特定的执行工件, 如 Database,执行环境通常以设备作为宿主。 (3)连接 节点之间的连接表示系统之间进行交互的通信路径,连接上可以指明网络协议。图 3-6 是教室预订系统的部署图,包含了节点,节点实例以及它们之间的连接。 图 3-6 教室预订系统部署图
面向对象软件工程实践指南 3.6动态建模机制模型图 3.6.1状态图(Statechart Diagram) 状态是对对象属性值的一种抽象,各个对象之间的相互作用引起了一系列的状态变化。 状态图是通过对象的生命周期建立来刻画对象随着时间变化的状态行为。状态图是由表示状 态的节点和表示状态之间转换的带箭头的直线组成,表现从一个状态到另一个状态的控制流。 状态图的组成包含状态、转换、初始状态、终止状态以及判定。 状态由一个圆角矩形表示。初始状态是一个实心的圆,一个状态图只能包含一个初始 状态,终止状态是用套有实心圆的空心圆表示,一个状态图可以包含多个终止状态。状态图 中的判定用空心菱形表示。如图3-7中教室的状态图的例子。 /acceptApplication,arrangeClassroom /acceptApplication,arrangeClassroom unoccupiec /finishOccupation,arrangeClassroom /finishOccupation,arrangeClassroom finishOccupation,arrangeClassroom fullyOccupied /acceptApplication,acceptClassroom partiallyOccupied /rejectApplication,arrangeClassroom acceptApplication,rejectApp sroom,finishOccupation 图3-7教室的状态图 3.6.2活动图(Activity Diagram) 活动是某事件正在进行的状态。将各种活动以及它们之间的转换用图形表示,就构成 了活动图。活动图是描述过程逻辑、业务流程和工作流的技术,能够对系统的行为建模。活 动图是状态图的一种特殊形式,描述了从活动到活动的控制流。与状态图类似,活动图也包 含起点、终点和判定。 活动图的图形表示中,条件行为用分支与合并表达(空心菱形),并发控制流用分叉与 汇合表达(加粗的水平线)。图3-8表示了教室预订系统中的一个活动图。 3.6.3顺序图(Sequence Diagram) 顺序图是一种强调时间顺序的交互图(interaction diagram),其展示用例内部的许多对 象以及这些对象之间传递的消息。其中对象沿横轴方向排列,消息沿纵轴方向排列。如图 3-9所示的教室预订系统的顺序图。顺序图中的对象生命线是一条垂直的虚线,表示对象在 一段时间内存在。由于顺序图中大多数对象都存在于整个交互过程中,因此对象全部排在图 的顶部,生命线从图的顶部画到图的底部。每个对象下方有一个矩形条,表示对象的控制焦 点。 31
面向对象软件工程实践指南 31 3.6 动态建模机制模型图 3.6.1 状态图 (Statechart Diagram) 状态是对对象属性值的一种抽象,各个对象之间的相互作用引起了一系列的状态变化。 状态图是通过对象的生命周期建立来刻画对象随着时间变化的状态行为。状态图是由表示状 态的节点和表示状态之间转换的带箭头的直线组成,表现从一个状态到另一个状态的控制流。 状态图的组成包含状态、转换、初始状态、终止状态以及判定。 状态由一个圆角矩形表示。初始状态是一个实心的圆,一个状态图只能包含一个初始 状态,终止状态是用套有实心圆的空心圆表示,一个状态图可以包含多个终止状态。状态图 中的判定用空心菱形表示。如图 3-7 中教室的状态图的例子。 图 3-7 教室的状态图 3.6.2 活动图 (Activity Diagram) 活动是某事件正在进行的状态。将各种活动以及它们之间的转换用图形表示,就构成 了活动图。活动图是描述过程逻辑、业务流程和工作流的技术,能够对系统的行为建模。活 动图是状态图的一种特殊形式,描述了从活动到活动的控制流。与状态图类似,活动图也包 含起点、终点和判定。 活动图的图形表示中,条件行为用分支与合并表达(空心菱形),并发控制流用分叉与 汇合表达(加粗的水平线)。图 3-8 表示了教室预订系统中的一个活动图。 3.6.3 顺序图 (Sequence Diagram) 顺序图是一种强调时间顺序的交互图(interaction diagram),其展示用例内部的许多对 象以及这些对象之间传递的消息。其中对象沿横轴方向排列,消息沿纵轴方向排列。如图 3-9 所示的教室预订系统的顺序图。顺序图中的对象生命线是一条垂直的虚线,表示对象在 一段时间内存在。由于顺序图中大多数对象都存在于整个交互过程中,因此对象全部排在图 的顶部,生命线从图的顶部画到图的底部。每个对象下方有一个矩形条,表示对象的控制焦 点