在UML中,我们可以用一个被称为“框架”的边界框围绕着UML图形,当然在很多情况下,框架可以省略,也就是不将它描画出来。但是对于某些图形类型而言,框架具有语义意义,在这些图形类型中,图形元素可以放置在框架之内或跨越框架边界以表示不同的含义。因此在这些图形类型中,使用框架是必要的,以便可以表达某些特定的含义。除了这个目的之外,其他情况下是否使用框架通常由建模者自行决定。

当我们决定使用框架时,我们需要为框架设定一个“框架标题”,框架标题是当前图形的名字。

框架标题位于框架的左上角,它书写于一个被砍掉了右下角的矩形而形成的不规则五边形内,如下图所示。



框架标题的命名并不是随意的,而是有其命名规则,它由两个可选部分与一个必选部分组成:[][]

其中可选的kind值应为下列值之一:activity(或act)、class、component(或cmp)、deployment(或dep)、interaction(或sd)、package(或pkg)、state machine(或stm)、use case(或uc)。

自然而然地,我们会认为kind表明了图形的类型。例如,在下图中,它描画了一个actor和两个use case,不出意外的话,你会将它的kind选择为use case(或者uc)。然而,不幸的是,这是错误的。



事实上,由于一组use case通常应当属于一个包(如果你没有意图让这些use case隶属于某个特定的包,那它们将自动隶属于一个被称为“默认包”的包),而描画的这一组use case是在说明“当前包”中有哪些use case,其kind应当是package(或pkg)。所以正确的图形应当如下图所示。



我们可以更进一步地考虑更多的图形所在框架标题kind值的选择设定。通常对于大多数结构图(structure diagram)和用例图(use case diagram)而言,其kind都应当被设定为package(或pkg);而对于行为图(behavior diagram)则一般使用与图形匹配的类型,但它依然有一个令人迷惑的地方需要注意,即所有的交互图(interaction diagram,包含时序图sequence diagram、时序时态图timing diagram、交互总览图interaction overview diagram、通信图communication diagram)框架标题的kind应被设定为sd。

准确选择框架标题的kind值,关键点在于要理解当前框架所包含的图的真正含义是什么。例如上例中“描画了一个actor和两个use case”的图形,它描述的是一组use case及一个actor与它们的关联,所以这个图形并不是用来描述单个use case的,它描述的是“一组在一起”的use case,因此其框架标题kind也就不能是use case(或者uc),相反它应当是容纳这一组use case的“包”,所以其kind应为package(或pkg)。

如果上面的说明还是不能清晰说明框架标题kind如何选择,我们可以看另外一个更明确的例子。

假设当前我们需要用图描绘类Car,这个图将只描绘与类Car的定义相关的内容,也就是类Car的内部信息。类Car可能的一个描绘不完整地图如下:



由于上图的目的就是描述类Car的,图中的所有元素是属于类Car的,因而,上图框架标题的kind应当被设定为class。

假设在另外一张图中,它包含了类Car,如下图所示。图中类Car作为一个元素呈现而不是图的全部内容(在这张图中描绘类Car时,如果类Car已在其他地方单独描画,则可以省略类Car的细节,仅保留类名称Car及类的图形即可)。如果需要,图中还可以有类Car的一个实例或多个实例,或者也可添加其他元素,它们共同被容纳在一个包中,因此这张图的框架标题kind应设定为package(或pkg)。



而行为图的框架kind值之所以一般使用与图形匹配的类型,其原因在于一个行为图所描述的就是当前的“那个”行为,而不是“一组”行为,故其框架标题类型应与当前行为图匹配。

参考文献:

1.《OCUP 2 Certification Guide_ Preparing for the OMG Certified UML 2.5 Professional 2 Foundation Exam》 Michael Jesse Chonoles

2.《OMG Unified Modeling Language (OMG UML) Version 2.5.1》

UML之图框架标题类型之谬的更多相关文章

  1. (转)uml各类图

    原文:http://www.cnblogs.com/way-peng/archive/2012/06/11/2544932.html 一.UML是什么?UML有什么用? 二.UML的历史 三.UML的 ...

  2. 练习UML类图中的类的表示

    第一部分:UML类图(class diagram) 类图用来展现一组类.类的特性以及其类相互之间的关系,一个类图由一组类以及它们之间的关系构成,类图用来对系统的领域概念以及静态结构进行建模. 在软件模 ...

  3. 从零开始单排学设计模式「UML类图」定级赛

    阅读本文大概需要 3.5 分钟. 本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了, ...

  4. UML 序列图详解

    现在是二月,而且到如今你或许已经读到.或听到人们谈论UML 2.0 —— 包括若干进步的 UML 的新规范,所做的变化.考虑到新规范的重要性,我们也正在修改这个文章系列的基础,把我们的注意力从 OMG ...

  5. 23种经典设计模式UML类图汇总

    在这里23种经典设计模式UML类图汇总       创建型模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基 ...

  6. uml各类图

    原文:http://www.cnblogs.com/way-peng/archive/2012/06/11/2544932.html 一.UML是什么?UML有什么用? 二.UML的历史 三.UML的 ...

  7. 设计模式学习(二):面向对象设计原则与UML类图

    一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...

  8. 【软件设计】UML类图怎么看

    前言 无论使用哪种语言,都离不开面向过程与面向对象两个流派,而类图是面向对象程序设计中至关重要的一种软件表达形式,如何看懂类图,并设计好的软件架构,是我们作为软件工程师必不可少的技能之一. 今天小黑把 ...

  9. Java 大黑话讲解设计模式 -- UML类图

    目录 1.啥是UML类图? 2.UML类图有啥用? 3.正式理解UML类图 4.使用idea画第一个UML类图 5.类之间的关系图[必须牢记] 6.类之间的关系 6.1.依赖 6.2.泛化 6.3.实 ...

  10. 设计模式学习笔记(详细) - 七大原则、UML类图、23种设计模式

    目录 设计模式七大原则 UML类图 设计模式分类 单例模式 工厂设计模式 简单工厂模式 工厂方法模式(使用抽象类,多个is-a) 抽象工厂模式(使用接口,多个like-a) 原型模式 建造者模式 适配 ...

随机推荐

  1. Springboot --- 使用国内的 AI 大模型 对话

    实在是不知道标题写什么了 可以在评论区给个建议哈哈哈哈 先用这个作为标题吧 尝试使用 国内给出的 AI 大模型做出一个 可以和 AI 对话的 网站出来 使用 智普AI 只能 在控制台中输出 对应的信息 ...

  2. 4:Exchange安装后的任务

    4:Exchange安装后的任务 安装后的任务: 第一:证书的申请安装,分配服务略 注意项:如果是通配符证书,不能直接分配pop的服务              第二:虚拟目录的配置  Exchang ...

  3. 云原生爱好者周刊:在浏览器中运行 Linux 系统 | 2022-10-10

    Confluent 官网已经放出了<Kafka 权威指南第二版:大规模实时数据和流处理>,相比于第一版新增了以下内容: Kafka 管理客户端概述: API 更新到最新的 Apache K ...

  4. Nuxt.js 应用中的 build:done 事件钩子详解

    title: Nuxt.js 应用中的 build:done 事件钩子详解 date: 2024/10/21 updated: 2024/10/21 author: cmdragon excerpt: ...

  5. 使用 VSCode 远程连接的 SSH 权限问题及解决方案

    在使用 VSCode 远程 SSH 连接时,可能会遇到文件权限问题导致连接失败的情况.本文将详细记录如何为 SSH 配置文件(config)和私钥文件(id_rsa)正确设置权限,从而解决 VSCod ...

  6. RAC环境中某数据文件(非system表空间)创建在本地,不停机迁移到ASM磁盘中

    Datafiles are mistakenly built into the local file system for processing in the RAC environment The ...

  7. 蚂蚁图团队GraphRAG支持社区摘要——Token相比微软直降50%

    今年5月份,我们在DB-GPT v0.5.6版本发布了蚂蚁首个开源GraphRAG框架,支持了多种知识库索引底座,并在文章<Vector | Graph:蚂蚁首个开源GraphRAG框架设计解读 ...

  8. .NET使用Moq开源模拟库简化单元测试

    前言 今天大姚给大家推荐一个.NET开源.流行.使用简单的.NET模拟库:Moq. Moq类库介绍 Moq是一个.NET开源.流行.使用简单的 .NET 模拟库,充分利用了.NET 的 Linq 表达 ...

  9. 一个.NET开源、轻量级的运行耗时统计库 - MethodTimer

    前言 在.NET开发中,为了准确统计对应方法的执行时间,我们最常用的方式是手动使用 Stopwatch 来显式编写计时逻辑,但是假如你需要大量的使用 Stopwatch 来进行耗时统计的话不利于保持代 ...

  10. 用Java实现samza转换成flink

    将Apache Samza作业迁移到Apache Flink作业是一个复杂的任务,因为这两个流处理框架有不同的API和架构.然而,我们可以将Samza作业的核心逻辑迁移到Flink,并尽量保持功能一致 ...