了解UML这一篇就够了

UML的历史

面向对象的分析与设计(OOA&OOD)方法的发展在20世纪80年代中出现了一个高潮,UML就是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其做了进一步的发展,并最终统一为大众所接受的标准建模语言。

UML的定义

UML(Unified Modeling Language,统一建模语言),是一种面向对象的建模语言。UML通过建立各种联系,如类与类之间的关系、类/对象怎样相互配合实现系统的行为状态等。来组建整个结构模型。
UML用来描述模型的内容有3种,分别是事物(Things)关系(Relationships)图(Diagrams),而这3种内容又有具体的划分,如图1-1:

图1-1:UML的内容结构

UML中的事物

从图1-1我们可以看到,UML中的事物包括结构事物、行为事物、组织事物和辅助事物(也称注释事物)

结构事物(Structure Things)

  • 类(Class)
    类是具有相同属性、相同方法、相同语义和相同关系的一组对象的集合。
    在UML图中,类使用包括类名、属性和方法的矩形来表示,如下图2-1所示:

    图2-1:类

  • 接口(Interface)
    接口是指类或组件所提供的、可以完成特定功能的一组操作的集合。
    在UML图中,接口通常用一个圆形来表示,如下图2-2所示:

    图2-2: 接口

  • 协作(Collaboration)
    协作定义了交互的操作,表示一些角色和其他元素一起工作,提供一些合作的动作。
    在UML图中,协作通常用一个虚线椭圆来表示,如下图2-3所示:

    图2-3:协作

  • 用例(Use Case)
    用例定义了系统执行的一组操作,对特定的用户产生可以观察的结果。
    在UML图中,用例通常用一个实线椭圆来表示,如下图2-3所示:

    图2-4:用例

  • 活动类(Active Class)
    活动类是指类对象有一个或多个线程或进程的类。活动类和类相似,只是它的对象代表的元素的行为和其他元素同时存在。
    在UML图中,活动类的表示方法和普通类的表示方法相似,也是使用一个矩形,只是最外面的边框使用粗线

  • 组件(Component)
    组件是物理上可替换的,实现了一个或多个接口的系统元素。
    在UML图中,组件的表示方法比较复杂,如图2-5所示:

    图2-5:组件

  • 节点(Node)
    节点是一个物理元素,它在运行时存在,代表一个可计算的资源,比如一台数据库服务器。
    在UML图中,节点使用一个立方体表示,如图2-6所示:

    图2-6:节点

行为事物(Behavior Things)

行为事物也称动作事物,是UML模型中的动态部分,代表时间和空间上的动作。行为事物主要有两种:交互和状态机。它们是UML模型中最基本的两个动态事物元素,通常和其他的结构元素、主要是类、对象连接在一起。

  • 交互(Interaction)
    在UML图中,交互的消息通常画成带箭头的直线,如图3-1所示:
    图3-1:交互
  • 状态机(State Machine)
    状态机是对象的一个或多个状态的集合。在UML图中,状态机通常用一个圆角矩形来表示,如图3-2所示:
    图3-2:状态机

组织事物(Grouping Things)

组织事物也称分组事物,是UML模型中组织的部分,可以把它看作一个个的盒子,每个盒子里面的对象关系相对复杂,而盒子与盒子之间的关系相对简单。组织事物只有一种,称为包(Package)
包是一种有组织地将一系列元素分组的机制。包与组件的最大区别在于,包纯粹是一种概念上的东西,仅仅存在于开发阶段结束之前,而组件是一种物理元素,存在于运行时。在UML图中,包通常表示为一个类似文件夹的符号,如图4-1所示:

图4-1:包

辅助事物(Annotation Things)

辅助事物也称为注释事物,属于这一类的只有注释(Annotation)。
注释就是UML模型的解释部分。在UML图中,一般表示为折起一角的矩形,如图5-1所示:


图5-1:注释

UML中的关系

UML中的关系(Relationships)主要包括4种:关联关系、依赖关系、泛化关系和实现关系。

  • 关联(Association)关系
    关联关系是一种结构化的关系,指一种对象和另一种对象有联系。给定关联的两个类,可以从其中的一个类的对象访问到另一个类的相关对象。
    在UML图中,关联关系用一条实线表示,如图6-1所示:
    图6-1:关联关系

另外, 关联可以有方向,表示该关联在某方向被使用
只在一个方向上存在的关联,称作单向关联(Unidirectional Association);
在两个方向上都存在的关联,称作双向关联(Bidirectional Association)

  • 依赖(Dependency)关系
    对于两个对象X、Y,如果对象X发生变化,可能会引起对另一个对象Y的变化,则称Y依赖于X。在UML图中,依赖关系用一条带有箭头的虚线来表示,如图6-2所示:

    图6-2:依赖关系

  • 泛化(Generalization)关系
    UML中的泛化关系定义了一般元素和特殊元素之间的分类关系,与和C++及Java中的继承关系有些类似。在UML图中,泛化关系用一条带有空心箭头的实线来表示,如图6-3所示:

    图6-3:泛化关系

  • 实现(Realization)关系
    实现关系将一种模型元素(如类)与另一种模型元素(如接口)连接起来,其中接口只是行为的说明而不是结构或者实现。真正的实现由前一个模型元素来完成。在UML图中,实现关系一般用一条带有空心箭头的虚线来表示,如图6-4所示:

    图6-4:实现关系

以上讲述了UML中的4种关系,除了需要注意各种关系的区别与联系以外,还要了解对关系的修饰。最常见的,对关系可以做两种修饰。

  1. 命名,即可以为关系取名,如图7-1所示:


    图7-1:关系命名
  2. 数字,可以表示不同对应情况的关系,比如一对多、多对一、一对一和多对多等,如图7-2所示:


    图7-2:关系数字

UML中的图

UML中的各种图是UML模型的重要组成部分,这里将概述一下组成UML的几种图。

  • 用例图(Use Case Diagram)
    用例图展现了一组用例、参与者以及它们间的关系。可以用用例图描述系统的静态使用情况。在对系统行为组织和建模方面,用例图是相当重要的。用例图的例子如图8-1所示:
    图8-1:用例图举例

注释

  1. 小人形状的用户和ATM是参与者;
  2. 椭圆形状的插入卡、输入密码、打印票据、验证密码及出款是用例;
  • 类图(Class Diagram)
    类图展示了一组类、接口和协作及它们间的关系,在建模中所建立的最常见的图就是类图。用类图说明系统的静态设计视图,包含主动类的类图——专注于系统的静态进程视图。系统可有多个类图,单个类图仅表达了系统的一个方面。一般在高层给出类的主要职责,在低层给出类的属性和操作。类图的例子如图8-2所示:
    图8-2:类图举例

注释

  1. 图中反映了5个类之间的关联关系;
  2. 人民币账户类和美元账户类从账户类继承;
  3. 账户与ATM相关联;
  4. 用户与两种账户类相关联;
  • 对象图(Object Diagram)
    对象图展示了一组对象及它们间的关系。用对象图说明类图中所反应的事物实例的数据结构和静态快照。对象图表达了系统的静态设计视图或静态过程视图,除了现实和原型方面的因素外,它与类图作用是相同的。

  • 组件图(Component Diagram)
    组件图,又称构件图,它由组件、接口和组件之间的联系构成。其中的组件可以是源码、二进制码或可执行程序。组件图表示系统中的不同物理部件及其联系,它表达的是系统代码本身的结构。组件图的例子如图8-3所示:

    图8-3:组件图举例

注释
图中有3个组件,组件1与组件3和组件2存在着依赖关系。

  • 配置图(Deployment Diagram)
    配置图展现了对运行时处理节点以及其中组件的配置。它描述系统硬件的物理拓扑结构(包括网络布局和组件在网络上的位置),以及在此结构上执行的软件(即运行时软组件在节点中的分布情况)。用配置图说明系统结构的静态配置视图,即说明分布、交付和安装的物理系统。配置图的例子如图8-4所示:
    图8-4:配置图举例

注释
图中有3个处理机和22上设备,相互之间是关联的关系。

  • 时序图(Sequence Diagram)
    时序图显示多个对象之间的动态协作,重点是显示对象之间发送消息的时间顺序。时序图也显示对象之间的交互,即在系统执行时,某个指定时间点将发生的事情。时序图的一个用途是表示用例的行为顺序,当执行一个用例行为时,时序图中的每一条消息对应了一个类的操作或状态机中引起转换的触发事件。用时序图说明系统的动态视图,例子如下图8-4所示:

    图8-4:时序图举例

  • 协作图(Collaboration Diagram)
    协作图在对一次交互中有意义的对象和对象间的连接建模,它强调收发消息对象的组织结构,按组织结构对控制流建模。除了显示消息的交互之外,还显示对象以及它们之间的关系。

  • 状态图(Statechart Diagram)
    状态图展示了一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态间的转移。一个状态图描述了一个状态机,用状态图说明系统的动态视图。状态图对于接口、类或协作的行为建模尤为重要,可用它描述用例实例的生命周期。其例子如图8-6所示:

    图8-6:状态图举例

  • 活动图(Activity Diagram)
    活动图是状态图的一个变体,显示了系统中从一个活动到另一个活动的流程。活动图显示了一些活动,强调的是对象之间的流程控制,例子如图8-7所示:

    图8-7:活动图举例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容